[Ngôn ngữ lập trình C++ ] Hướng dẫn giải các bài tập cơ bản

Bài tập lập trình C++ có lời giải

Bài tập lập trình C++ có lời giải

LAB 1. ĐỆ QUY

Một hàm được gọi là đệ quy khi bên trong hàm có hàm gọi lại chính nó hoặc có biểu thức đệ quy.

1. Tìm các số Fibonaci. Biết dãy số Fibonaci {1,1, 2, 3, 5, 8, 13, 21,...} được xây dựng như sau: U0=1, U1=1,Uk=Uk-1+Uk-2 với mọi k=2,3,4,… 

a. Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n (không sử dụng để quy).

b. Viết chương trình xuất ra màn hình số Fibonaci ở vị trí thứ n (sử dụng để quy).

c. Viết chương trình nhập vào số nguyên n và xuất ra n số fibonaci đầu tiên.

  • 
    void Fibona_KoDeQuy() {
    	int vitri, u0 = 1, u1 = 1, uk;
    	printf("\nNhap vi tri so Fibona ma ban muon tim: ");
    	scanf("%d", &vitri);
        
    	for (int i = 1; i < vitri; i++) {
    		uk = u0 + u1;
    		u0 = u1;
    		u1 = uk;
    	}
    	printf("Tai vi tri thu k = %d\nCo so Fibona tuong ung la: %d ", vitri, uk);
    }
    
  • Bài tập Finonaci có lời giải
  • 
    int Fibona_DeQuy(int vitri){
    	if (vitri == 0)
    		return 1;
    	if (vitri == 1)
    		return 1;
            
    	return Fibona_DeQuy(vitri - 1) + Fibona_DeQuy(vitri - 2);
    }
    void main(){
    	//Fibona_KoDeQuy();
    	int vitri, Fibona;
    	printf("\nNhap vi tri so Fibona ma ban muon tim: ");
    	scanf("%d", &vitri);
        
    	for (int i = 0; i <= vitri; i++)
    		Fibona = Fibona_DeQuy(i);
            
    	printf("Tai vi tri thu k = %d\nCo so Fibona tuong ung la: %d ", vitri, Fibona);
    	_getch();
    }
    
  • Bài tập Finonaci có lời giải
  • 
    int Fibona_DeQuy(int vitri){
    	if (vitri == 0)
        	return 1;
    	if (vitri == 1)
        	return 1;
            
    	return Fibona_DeQuy(vitri - 1) + Fibona_DeQuy(vitri - 2);
    }
    void main(){
    	//Fibona_KoDeQuy();
        int sophantu;
        
        printf("\nNhap so phan tu: ");
        scanf("%d", &sophantu);
        printf("Co so Fibona tuong ung la: \n");
        
        for (int i = 0; i <= sophantu; i++)
        	printf("%d  ", Fibona_DeQuy(i));
            
    	_getch();
    }
  • Bài tập Finonaci có lời giải

2. Viết chương trình sử dụng đệ quy để tính giai thừa của một số nguyên dương a. Biết:

$$a!=\begin{Bmatrix} 1, & a=0\\ a*(a-1)!, & a>0 \end{Bmatrix}$$

  • 
    int Giaithua(int a){
    	if (a == 0)
        	return 1;
    	else
    		return (a *Giaithua(a - 1));
    }
    
  • sử dụng đệ quy để tính giai thừa của một số nguyên dương a


3. Viết chương trình thực hiện công việc sau:

Nhập vào hai số nguyên n và k. Tính tổ hợp chập k của n theo công thức sau:

$$C(n,k)= \frac{n!}{(k!*(n-k)!)}$$

  • 
    int Tinh_ToHop(int n, int k){
    	int c;
    	int x = Giaithua(n);
    	int y = Giaithua(k);
    	int z = Giaithua(n - k);
        
    	c = x / (y*z);
        
    	return c;
    }
    
  • Tính tổ hợp bằng C++


4. Viết chương trình tính tổng các số chẵn từ 1 đến n.

  • 
    int tong_chan(int n){
    	if (n == 0)
    		return 0;
    	else{
    		if (n % 2 == 0)
    			return tong_chan(n - 2) + n;
    		else
    			return tong_chan(n - 1);
    	}
    }
    
  • Tính tổng chẳn từ 1 đến n trong c++


5. Viết chương trình xuất giá trị của phần tử thứ n có hạng đầu là a và công sai là r.

Cấp số cộng là một dãy số (hữu hạn hay vô hạn). Trong đó , kể từ số hạng thứ hai , mỗi số hạng đều là tổng của số hạng đứng ngay trước nó với một số không đổi gọi là công sai. Gọi r là công sai , ta có: $$U_{n} = U_{1} + (n - 1) * r$$

  • 
    int CapSoCong(int n, int a, int r){
    	if (n == 1)
    		return a;
    	return (r + CapSoCong(n - 1, a, r));
    }
    void main(){
    	int n, a, r, giatri;
        
    	printf("Nhap so hang dau a= ");
    	scanf("%d", &a);
        
    	printf("Nhap cong sai r= ");
    	scanf("%d", &r);
        
    	printf("Nhap vi tri phan tu thu n= ");
    	scanf("%d", &n);
        
    	for (int i = 1; i <= n; i++)
    		giatri = CapSoCong(i, a, r);
            
    	printf("\nGia tri cua phan tu thu %d la: %d", n, giatri);
    	_getch();
    }
    
  • Tính cấp số cộng bằng C++

LAB 2: MẢNG VÀ CON TRỎ

Mảng là một tập hợp tuần tự các phần tử của cùng một kiểu dữ liệu và các phần tử được lưu trữ trong một dãy ô nhớ liền nhau.

Trong lập trình C, mảng và con trỏ luôn có mối quan hệ liên kết với nhau. Tuy nhiên, giữa chúng vẫn có sự khác biệt. Cụ thể, một biến con trỏ có các địa chỉ cũng như giá trị khác nhau, trong khi mảng là cố định.

Mảng nhiều chiều:

Nhập 2 số nguyên dương m, n. Viết chương trình tính tổng và tích các số trong mảng số thực a[m][n].

  • 
    void NhapMang(int a[10][10], int sodong, int socot){
    	int tam;
    	for (int i = 0; i < sodong; i++)
    		for (int j = 0; j< socot; j++)
            {
    			printf("Nhap phan tu cho a[%d][%d] = ", i,j);
    			scanf("%d", &tam);
    			a[i][j] = tam;
    		}
    }
    
    void XuatMang(int a[10][10], int sodong, int soccot){
    	for (int i = 0; i < sodong; i++)
        {
    		for (int j = 0; j < soccot; j++)
    			printf("%3d", a[i][j]);
    		printf("\n");
    	}
    }
    
    void TongMang(int a[10][10], int sodong, int socot){
    	int tong = 0;
    	for (int i = 0; i < sodong; i++)
    		for (int j = 0; j < socot;j++)
    			tong += a[i][j];
    	printf("Tong cac phan tu co trong mang la: %d", tong);
    }
    
    void TichMang(int a[10][10], int sodong, int socot){
    	int tich = 1;
    	for (int i = 0; i < sodong; i++)
    		for (int j = 0; j < socot; j++)
    			tich *=a[i][j];
    	printf("\nTich cac phan tu co trong mang la: %d", tich);
    }
  • Viết chương trình c++ tính mảng nhiều chiều

Con trỏ:

1. Viết chương trình thực hiện các công việc sau:

a. Đếm số nguyên âm trong 1 chuỗi nhập từ bàn phím.

b. Đảo chuỗi kí tự vừa nhập.

  • 
    // Câu a
    void Dem_NguyenAm(char *chuoi){
    	int dem =0;
    	int dodai = strlen(chuoi); //hàm trả về độ dài của chuỗi
        
    	for (int i = 0; i < dodai; i++)
    	{
    		if (chuoi[i] == 'a' || chuoi[i] == 'o' || chuoi[i] == 'u' || chuoi[i] == 'e' || chuoi[i] == 'i')
    			dem++;
    	}
    	printf("Chuoi co so nguyen am la: %d", dem);
    }
    
    // Câu b
    void Dao_Chuoi (char *chuoi)
    {
    	int dodai, i, j;
    	char s;
    	dodai = strlen(chuoi) - 1;
        
    	for (i = 0, j = strlen(chuoi) - 1; i < j; i++, j--)
    	{
    		s = chuoi[i];
    		chuoi[i] = chuoi[j];
    		chuoi[j] = s;
    	}
    }
    
    void main(){
    	char s[30];
    	printf("Nhap vao chuoi ky tu: ");
    	fflush(stdin);
    	gets(s);
    	Dem_NguyenAm(s);
    	Dao_Chuoi(s);
    	printf("\n%s", s);
    	_getch();
    }
    
  • Viết chương trình đếm số nguyên âm và đảo chuỗi


2. Viết chương trình nhập xuất mảng có n phần tử và in ra tổng các số chia hết cho 5 trong mảng.

  • 
    void NhapMang(int *a, int n){
    	for (int i = 0; i < n; i++)
        {
    		printf("Nhap a[%d]: ", (i + 1));
    		scanf("%d", &a[i]);
    	}
    }
    
    void XuatMang(int *a, int n){
    	printf("Mang vua nhap la: \n");
        
    	for (int i = 0; i < n; i++)
    		printf("%4d",a[i]);
    }
    
    void Tong_ChiaHet5(int *a, int n){
    	int tong = 0;
    	for (int i = 0; i < n; i++)
    	{
    		if (a[i]%5 == 0)
    		tong += a[i];
    	}
    	printf("\nTong cac so chia het cho 5 la: %d", tong);
    }
    
    void main(){
    	int *a, n = 1;
    	a = (int*)malloc(n * sizeof(int)); // hoặc  a =  new int[n];
    	printf("Nhap so phan tu: ");
    	scanf("%d", &n);
    	NhapMang(a, n);
    	XuatMang(a, n);
    	Tong_ChiaHet5(a, n);
    	_getch();
    }
    
  • Viết chương trình tính mảng bằng con trỏ

Nhận xét

Lưu trữ

Biểu mẫu liên hệ

Gửi