Bài tập C++ có lời giải/Hàm

Bài 1: Tìm ước chung lớn nhất của 2 số a, b.

#include "iostream"
using namespace std;

int ucln(int, int);
int ucln(int x, int y){
	if (x < y){
		x = x + y;
		y = x - y;
		x = x - y;
	}
	while (y != 0){
		int m = x%y;
		x = y;
		y = m;
	}
	return x;
}

int main()
{
	int a, b;
	cin >> a >> b;
	cout << ucln(a, b);
}

Bài 2: Tìm bội chung nhỏ nhất của 2 số a, b.

#include "iostream"
using namespace std;

int UCLN(int, int);
int UCLN(int x, int y) {
	if (x < y) {
		x = x + y;
		y = x - y;
		x = x - y;
	}
	while (y != 0) {
		int m = x%y;
		x = y;
		y = m;
	}
	return x;
}

int BCNN(int, int);
int BCNN(int x, int y)
{
	int a = (x*y) / UCLN(x, y);
	return a;
}

int main()
{
	int a, b;
	cin >> a >> b;
	cout << BCNN(a, b) << endl;
}

Bài 3: Tìm các số chính phương và nguyên tố trong mảng.

  • Dòng 1: Nhập vào N là số lượng phần tử của mảng
  • Dòng 2: Nhập N số nguyên (mỗi số cách 1 khoảng trắng)

VD:

Input
Output
4
1 2 3 4
1 4
2 3
#include <iostream>
#include <math.h>
using namespace std ;

int main() {
    
    int sl , day , T ;
    int K[100] ;
    
    cin >> sl ;
    for (int i = 0 ; i < sl ; i++) {
        cin >> day ;
        K[i] = day ;
    }
    
    // so CP
    for (int i = 0 ; i < sl ; i++) {
        T = sqrt(K[i]) ;
        if (T*T == K[i])
            cout << K[i] ;
    }
    cout << endl ;
    
    // so NT
    for (int i = 0 ; i < sl ; i++) {
        
        bool flag = true ;
        if (K[i] < 2) 
            flag = false ;
        
        for (int j = 2 ; j <= sqrt(K[i]) ; j++) {
            if (K[i] % j == 0) {
                flag = false ;
                break;
            }
        }
        
        if(flag==true) cout << K[i] ;   
    }
}

Bài 4: Viết chương trình tính giai thừa (sử dụng hàm).

#include<iostream>
#include<math.h>
using namespace std;

long tinhGiaiThua(int n) {

    long giaithua = 1;
    if (n==0 || n==1) {
        return giaithua;
    }
    else {
        for (int i=2; i<=n; i++) {
            giaithua = giaithua*i;
        }
        return giaithua;
    }
}

int main() {
    int n; 
    cout << "Nhap mot so nguyen: ";
    cin >> n; 
    cout << n << "! = " << tinhGiaiThua(n);   
}

Bài 5: Sử dụng khái niệm nạp chồng hàm, viết chương trình tính diện tích hình tròn, hình tam giác, hình chữ nhật tùy theo lựa chọn người dùng.

#include<iostream>
#include<math.h>
#define pi 3.14
using namespace std;

void popup() {
    cout << "Ban muon tinh dien tich hinh gi?" << endl;
    cout << "1. Hinh tron" << endl;
    cout << "2. Hinh chu nhat" << endl;
    cout << "3. Hinh tam giac" << endl;
}

class fn {
    public:
        void dientich(int);  //hinh tron
        void dientich(int, int);  //hinh chu nhat
        void dientich(float , int, int);  //hinh tam giac
};
 
void fn::dientich(int a) {
      cout<<"Dien tich hinh tron la: " << pi*a*a;
}

void fn::dientich(int a, int b) {
      cout<<"Dien tich hinh chu nhat la: " << a*b;
}

void fn::dientich(float t,int a,int b) {
      cout<<"Dien tich hinh tam giac la: " << t*a*b;
}

int main() {
    
    popup();
    int luachon; 
    int a, b, r; 
    fn obj;
    cout << "\nNhap lua chon cua ban (1-3): "; 
    cin >> luachon; 
        
    switch (luachon) { 
        case 1:
            cout<<"Nhap ban kinh duong tron: ";
            cin>>r;
            obj.dientich(r);
            break;
        case 2:
            cout<<"Nhap chieu dai va chieu rong cua hinh chu nhat: ";
            cin>>a>>b;
            obj.dientich(a,b);
            break;
        case 3:
            cout<<"Nhap do dai duong cao va canh day cua hinh tam giac: ";
            cin>>a>>b;
            obj.dientich(0.5,a,b);
        default:
            cout << "Khong hop le"; 
    }  
}

Bài 6: Sử dụng khái niệm truyền mảng tới hàm, viết chương trình tính giá trị trung bình của các số nguyên nhập từ bàn phím.

#include<iostream>
#include<math.h>
using namespace std;

double avg(int arr[], int size) {
    int tong = 0;
    double tb;
    for(int i=0; i<size; i++)
        tong+=arr[i];
    tb = (double)tong/size;
    return(tb);
}

int main() {
    int n;
    cout << "Nhap so gia tri: ";
    int arr[n];
    cin >> n;
    for(int i=0; i<n; i++) {
        cout << "Gia tri " << i+1 <<": ";
        cin >> arr[i];
   }

cout << "Gia tri trung binh la " << avg(arr,n) << endl;
}