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:
1 2 3 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;
}