Bên cạnh các bài tập Python, Java, Quản Trị Mạng cũng tổng hợp cho các bạn một số bài tập C++ cơ bản để luyện tập thêm trong quá trình học ngôn ngữ lập trình C++.
Danh mục bài tập C++ này được chia thành 9 phần, mỗi phần có từ 3 đến 5 bài, với cấp độ khó tăng dần. Ban đầu bạn sẽ “khởi động” với những bài tập C++ hết sức cơ bản, như mô phỏng phép nhân tay, in số tiền, kiểm tra một bộ 3 số xem có phải là cạnh của một tam giác không, tính chu vi, diện tích tam giác đó.
Dần dần sẽ là những bài khó hơn như tạo và quản lý danh sách sinh viên, tài liệu, in hoặc thực hiện các công việc khác theo yêu cầu cùa đề bài. Thậm chí là vẽ cả đồ thị của hàm lượng giác.
Danh mục bài tập C++
- Bài tập C++ số 1
- Câu 1: Mô phỏng phép nhân tay
- Câu 2: Nhập số tiền, in số tờ, mệnh giá
- Câu 3: Đổi số sang số La Mã
- Câu 4: In cách đọc số
- Câu 5: Giải phương trình bậc hai
- Bài tập C++ số 2
- Câu 1: Kiểm tra 3 số có phải cạnh tam giác không, nếu có là loại tam giác nào, tính chu vi, diện tích
- Câu 2: Tính số năm cần gửi tiết kiệm
- Câu 3: In số PI tính được với sai số cho trước
Bài tập C++ số 1
Câu 1: Mô phỏng phép nhân tay
Lập trình in ra màn hình mô phỏng phép nhân tay 2 số nguyên dương có 3 chữ số nhập từ bàn phím. Ví dụ với 2 số nhập vào là 763 và 589 thì phải in ra màn hình như sau:
Code mẫu:
#include<stdio.h>
#include<conio.h>
void main()
{int a,b;char dv,chuc,tram;
clrscr();
printf("Nhap so bi nhan co 3 chu so a="); scanf("%d",&a);
printf("Nhap so nhan co 3 chu so b="); scanf("%d",&b);
dv=b%10; chuc=b%100/10; tram=b/100;
printf("\nMo phong phep nhan tay\n\n");
printf("%20d\n",a);
printf("%15c%5d\n",'x',b);
printf("%20s\n","-------");
printf("%20d\n",a*dv);
printf("%19d\n",a*chuc);
printf("%18d\n",a*tram);
printf("%20s\n","-------");
printf("%20ld\n",long(a)*b);
getch();
}
Câu 2: Nhập số tiền, in số tờ, mệnh giá
Một người cần rút một số tiền T từ ngân hàng và muốn tổng số tờ ít nhất. Cho biết có các loại tiền mệnh giá 100, 20, 5 và 1. Nhập từ bàn phím số tiền T và in ra số tờ mỗi loại mệnh giá và tổng số tờ nhận được.
Code mẫu:
#include <stdio.h>
#include <conio.h>
void main()
{int t,t100,t20,t5;
clrscr();
printf("Nhap so tien t=");scanf("%d",&t);
t100=t/100;t-=100*t100; t20=t/20;t-=20*t20; t5=t/5;t-=5*t5;
printf("So to cac loai menh gia la :\n");
printf("Loai 100 : %d to\n",t100);
printf("Loai 20 : %d to\n",t20);
printf("Loai 5 : %d to\n",t5);
printf("Loai 1 : %d to\n",t);
printf("Tong so to cac loai la : %d\n",t+t5+t20+t100);
getch();
}
Câu 3: Đổi số sang số La Mã
Hãy lập trình nhập 1 số nguyên dương nhỏ hơn 1000 và đổi sang số La mã tương ứng, in kết quả ra màn hình.
Code mẫu:
#include<conio.h>
#include<iostream.h>
void main()
{int n,dv,ch,tr;
clrscr();
cout<<"Nhap so nguyen duong <1000 :\n"; cin>>n;
cout<<"So "<<n<<" doi sang so La ma la :\n";
tr=n/100;n=n%100; ch=n/10;dv=n%10;
switch (tr)
{case 1:cout<<"C";break;
case 2:cout<<"CC";break;
case 3:cout<<"CCC";break;
case 4:cout<<"CD";break;
case 5:cout<<"D";break;
case 6:cout<<"DC";break;
case 7:cout<<"DCC";break;
case 8:cout<<"DCCC";break;
case 9:cout<<"CM";
}
switch (ch)
{case 1:cout<<"X";break;
case 2:cout<<"XX";break;
case 3:cout<<"XXX";break;
case 4:cout<<"XL";break;
case 5:cout<<"L";break;
case 6:cout<<"LX";break;
case 7:cout<<"LXX";break;
case 8:cout<<"LXXX";break;
case 9:cout<<"XC";
}
switch (dv)
{case 1:cout<<"I";break;
case 2:cout<<"II";break;
case 3:cout<<"III";break;
case 4:cout<<"IV";break;
case 5:cout<<"V";break;
case 6:cout<<"VI";break;
case 7:cout<<"VII";break;
case 8:cout<<"VIII";break;
case 9:cout<<"IX";
}
getch();
}
Câu 4: In cách đọc số
In ra màn hình cách đọc một số nguyên dương nhỏ hơn 1000000. Ví dụ số 726503 đọc là: bảy mươi hai vạn sáu ngàn năm trăm linh ba.
Code mẫu:
#include<iostream.h>
#include<conio.h>
void main()
{ char doc[9][5]={"mot","hai","ba","bon","nam","sau","bay","tam","chin"};
int van,ngan,tram,chuc,donvi,chv,dv;
long so;
clrscr();
cout<<"Nhap so nguyen duong <1000000 can doc = ";cin>>so;
cout<<"Cach doc so "<<so<<" la:\n";
van=so/10000; ngan=so/1000%10; tram=so/100%10; chuc=so/10%10; donvi=so%10;
if(van)
{chv=van/10; dv=van%10;
if(chv==1)cout<<"muoi ";
else if(chv>1)cout<<doc[chv-1]<<" muoi ";
if(dv)cout<<doc[dv-1];
cout<<" van ";
}
if((ngan==0)&&van)cout<<" khong ngan ";
else if(ngan)cout<<doc[ngan-1]<<" ngan ";
if((tram==0)&&(van||ngan))cout<<" khong tram ";
else if(tram)cout<<doc[tram-1]<<" tram ";
if((chuc==0)&&donvi&&(van||ngan||tram))cout<<"le ";
else if(chuc==1)cout<<" muoi ";
else cout<<doc[chuc-1]<<" muoi ";
if(donvi)cout<<doc[donvi-1];
getch();
}
Câu 5: Giải phương trình bậc hai
Lập trình giải phương trình ax2 + bx + c = 0, các hệ số thực a, b, c nhập từ bàn phím.
Code mẫu:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{float a,b,c,d;
clrscr();
printf("Nhap cac he so a, b, c : "); scanf("%f%f%f",&a,&b,&c);
if (a
{d=b*b-4*a*c;
if (d<0) printf("Vo nghiem !");
if (d==0) printf("Nghiem kep x=%4.2f",-0.5*b/a);
if (d>0)
{printf("Hai nghiem phan biet :\n");
printf("x1=%4.2f",0.5*(-b-sqrt(d))/a);
printf(" x2=%4.2f",0.5*(-b+sqrt(d))/a);
}
}else if (b) printf("Mot nghiem x=%4.2f",-c/b);
else if (c) printf("Vo nghiem !");
else printf("Vo so nghiem !");
getch();
}
Bài tập C++ số 2
Câu 1: Kiểm tra 3 số có phải cạnh tam giác không, nếu có là loại tam giác nào, tính chu vi, diện tích
Nhập 3 số thực a, b, c và kiểm tra 3 số đó có phải là 3 cạnh của 1 tam giác không? Nếu là 3 cạnh tam giác thì cho biết là tam giác nào trong các loại tam giác sau: đều, vuông cân, vuông, cân, thường và tính chu vi, diện tích của tam giác đó. In kết quả ra màn hình.
Code mẫu:
#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{float a,b,c,p,s;
int deu,vuong,can;
clrscr();
printf("Nhap cac so thuc a, b, c : "); scanf("%f%f%f",&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{printf("La ba canh mot tam giac ");
deu=(a==b)&&(b==c);
vuong=(a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a);
can=(a==b)||(a==c)||(b==c);
if(deu)printf(" deu\n");
else if(vuong&&can)printf(" vuong can\n");
else if(vuong)printf(" vuong\n");
else if(can)printf(" can\n");
else printf(" thuong\n");
p=(a+b+c)/2;
printf("Chu vi = %4.2f, Dien tich = %4.2f",2*p,sqrt(p*(p-a)*(p-b)*(p-c)));
}else printf("Khong phai la ba canh mot tam giac\n");
getch();
}
Câu 2: Tính số năm cần gửi tiết kiệm
Một người cần có một số tiền T, tích lũy bằng cách gửi tiết kiệm số tiền ban đầu là S với lãi suất có kỳ hạn theo năm là P% theo phương thức lũy tiến (lãi của mỗi năm được cộng vào với tiền gốc). Hãy nhập vào các số thực T, S, P và xác định số năm cần gửi tiết kiệm.
Code mẫu:
#include <stdio.h>
#include <conio.h>
void main()
{ float s,t,p; int n;
clrscr();
printf("Nhap so tien ban dau : "); scanf("%f",&s);
printf("Nhap so tien can co : "); scanf("%f",&t);
printf("Nhap lai suat %% nam : "); scanf("%f",&p);
for (p=0.01*p,n=0;s<t;s+=s*p,n++);
printf("So nam can gui tiet kiem = %d\n",n);
printf("Sau %d nam gui tiet kiem, so tien co la : %4.2f",n,s);
getch();
}
Câu 3: In số PI tính được với sai số cho trước
Lập trình tính số PI với sai số eps cho trước nhập từ bàn phím. Biết rằng số PI tính theo công thức: PI = 4 – 4/3 + 4/5 – 4/7 +… tính tổng các số hạng có giá trị không nhỏ hơn eps. In ra số PI tính được và số PI của Turbo C++ với 10 chữ số thập phân để so sánh.
Code mẫu:
#include<stdio.h>
#include<conio.h>
#include<math.h>;//chua hang so pi la M_PI
void main()
{float pi,t,n,eps,dau;
clrscr();
printf("Nhap sai so eps=");scanf("%f",&eps);
pi=0;t=4;n=dau=1;
do
{pi+=dau*t; n=n+2;
dau=-dau; t=4/n;
}while (t>=eps);
printf("\nSo PI tinh duoc voi sai so %12.10f, PI=%12.10f\n",eps,pi);
printf("\nSo PI cua Turbo C++, PI=%12.10f\n",M_PI);
getch();
}
Câu 4: Tìm và in số hoàn hảo
Tìm và in ra màn hình tất cả các số hoàn hảo không vượt quá số n cho trước nhập từ bàn phím. Số hoàn hảo là số bằng tổng các ước số của nó không kể ước số là chính số đó. Ví dụ số 6 là số hoàn hảo vì 6=1+2+3.
Code mẫu:
#include <stdio.h>
#include<conio.h>
void main()
{ int n,i,j,s,ts;
clrscr();
printf("Nhap n="); scanf("%d",&n);
printf("Cac so hoan hao khong vuot qua %d la :",n);
for (ts=0,i=2; i<=n; i++)
{ s=1;
for(j=2;j<=i/2;j++)
if(i%j==0)s+=j;
if(s==i)
{ ts++;
printf("\n %d = 1", i);
for(j=2;j<=i/2;j++) if(i%j==0)printf(" + %d",j);
}
}
if(ts)printf("\nCo tat ca %d so hoan hao",ts);
else printf("\nKhong co so hoan hao nao");
getch();
}
Câu 5: Tìm và in các số nguyên tố nhỏ hơn n
Tìm và in ra màn hình tất cả các số nguyên tố không vượt quá số n cho trước nhập từ bàn phím. Số nguyên tố là số chỉ có ước số là 1 và chính số đó.
Code mẫu:
#include<stdio.h>
#include<conio.h>
void main()
{ int n,i,j,d;
clrscr();
printf("Nhap gia tri N : "); scanf("%d", &n);
printf("Cac so nguyen to khong vuot qua %d la :\n",n);
for (d=0,i=2;i<=n;i++)
{for (j=2;j<=i/2; j++)
if(i%j==0)break;
if (j==i/2+1)
{d++;
printf(" %d",i);
}
}
printf("\nTong so co %d so nguyen to",d);
getch();
}
Bài tập C++ số 3
Câu 1: Kiểm tra số chính phương
Viết 1 hàm kiểm tra 1 số có là chính phương hay không (số chính phương là số bằng bình phương của một số nguyên nào đó); một hàm kiểm tra 1 số có phải là số Pitago hay không (số Pitago là số chính phương và bằng tổng 2 số chính phương khác). Trong hàm main nhập số nguyên dương và sử dụng các hàm trên kiểm tra có là số chính phương? số Pitago?
Code mẫu:
#include<stdio.h>
#include<conio.h>
#include<math.h>
int socp(int);
int soptg(int);
void main()
{ clrscr();
int n;
printf("Nhap so nguyen duong n="); scanf("%d",&n);
if(socp(n))printf("\n%d la so chinh phuong",n);
else printf("\n%d khong phai so chinh phuong",n);
if(soptg(n))printf("\n%d la so Pitago",n);
else printf("\n%d khong phai so Pitago",n);
getch();
}
int socp(int n)
{int t=sqrt(n);
if(n==t*t)return 1;
else return 0;
}
int soptg(int n)
{int i;
if(!socp(n))return 0;
else
{for(i=1;i<n;i++)
if(socp(i)&&socp(n-i))break;
if(i<n)return 1;
else return 0;
}
}
Câu 2: Giải bất phương trình bậc nhất
Lập trình giải bất phương trình ax+b>0 theo yêu cầu: Viết 1 hàm nhập các hệ số a, b; một hàm giải bất phương trình. Hàm main sử dụng các hàm đã viết và có thể chạy nhiều lần giải các bất phương trình khác nhau.
Code mẫu:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void nhap(float &,float &);
void giaibpt(float,float);
void main()
{float a,b;
char c;
do
{clrscr();
nhap(a,b);
giaibpt(a,b);
fflush(stdin);
cout<<"\nTiep tuc ? (c/k):"; cin>>c;
}while ((c=='c')||(c=='C'));
}
void nhap(float &a, float &b)
{cout<<"Nhap cac he so a, b :"; cin>>a>>b;
}
void giaibpt(float a, float b)
{if(a>0)cout<<"Nghiem x>"<<-b/a;
else if(a<0)cout<<"Nghiem x<"<<-b/a;
else if(b>0) cout<<"Vo so nghiem";
else cout<<"Vo nghiem";
}
Câu 3: Viết hàm đệ quy tìm ước chung lớn nhất
Viết hàm đệ quy tìm ước số chung lớn nhất của 2 số tự nhiên; một hàm tìm bội số chung nhỏ nhất của 2 số tự nhiên. Hàm main sử dụng các hàm đã viết và có thể chạy nhiều lần để tìm ước số chung lớn nhất và bội số chung nhỏ nhất của các cặp số nguyên dương khác nhau. Yêu cầu kiểm tra dữ liệu nhập vào phải là các số nguyên dương.
Code mẫu:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
int usc(int,int);
int bsc(int,int);
void main()
{int a,b,d,p;
char c;
do
{clrscr();
do
{cout<<"Nhap 2 so nguyen duong a, b : "; cin>>a>>b;
}while((a<=0)||(b<=0));
d=usc(a,b);
p=bsc(a,b);
cout<<"USCLN("<<a<<","<<b<<")="<<d;
cout<<"\nBSCNN("<<a<<","<<b<<")="<<p;
fflush(stdin);
cout<<"\nTiep tuc ? (c/k):"; cin>>c;
}while ((c=='c')||(c=='C'));
}
int usc(int a, int b)
{if(a*b==0)return a+b;
else if(a>b)return usc(a-b,b);
else return usc(a,b-a);
}
int bsc(int a, int b)
{return a*b/usc(a,b);
}
Câu 4: Tính giai thừa cách của số nguyên dương n
Viết hàm đệ quy tính giai thừa cách của số nguyên dương n. Hàm main sử dụng hàm này và có thể chạy nhiều lần để tính cho nhiều số n khác nhau nhập từ bàn phím. Yêu cầu kiểm tra dữ liệu nhập vào phải là số nguyên dương. Công thức tính giai thừa cách của n: n!=1.3…n nếu n lẻ và n!=2.4…n nếu n chẵn.
Code mẫu:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
long gtc(long);
void main()
{long n;
char c;
do
{clrscr();
do
{cout<<"Nhap so nguyen duong n : "; cin>>n;
}while (n<1);
cout<<n<<"!!="<<gtc(n);
fflush(stdin);
cout<<"\nTiep tuc ? (c/k):"; cin>>c;
}while ((c=='c')||(c=='C'));
}
long gtc(long n)
{if((n==0)||(n==1))return 1;
else return n*gtc(n-2);
}
Câu 5: Viết hàm đệ quy giải bài toán tháp Hà Nội
Viết hàm đệ quy giải bài toán tháp Hà Nội: Cần chuyển n tầng tháp từ vị trí A sang vị trí B dùng vị trí C làm trung gian. Yêu cầu: Mỗi lần chỉ chuyển 1 tầng, chỉ được dùng các vị trí A, B, C để đặt các tầng tháp, không được đặt tầng lớn lên trên tầng nhỏ. Hàm main sử dụng hàm này và có thể chạy nhiều lần để tính cho nhiều số n khác nhau nhập từ bàn phím.
Code mẫu:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
int d;
void chuyen(int,char,char,char);
void main()
{int n;
char c;
do
{clrscr();
d=0;
do
{cout<<"Nhap so tang thap (<10), n="; cin>>n;
}while ((n<1)||(n>9));
chuyen(n,'A','B','C');
cout<<"\nTong so lan chuyen="<<d;
fflush(stdin);
cout<<"\nTiep tuc ? (c/k):"; cin>>c;
}while ((c=='c')||(c=='C'));
}
void chuyen(int n,char a,char b,char c)
{if(n==1)cout<<"\nLan chuyen "<<++d<<" : Tu "<<a<<" sang "<<b;
else
{chuyen(n-1,a,c,b);
chuyen(1,a,b,c);
chuyen(n-1,c,b,a);
}
}
Bài tập C++ số 4
Câu 1: In các phần tử của mảng theo yêu cầu
Nhập mảng n số thực, tìm và in ra phần tử nhỏ nhất, lớn nhất, tính và in ra trung bình cộng của các phần tử trong mảng. In ra các phần tử nhỏ hơn, lớn hơn trung bình cộng.
Code mẫu:
#include<conio.h>
#include<iostream.h>
#define max 100
void main()
{int i,j,n;
float a[max],tbc,pmax,pmin;
clrscr();
cout<<"Nhap so phan tu n<"<<max<<", n= "; cin>>n;
cout<<"Nhap cac phan tu cua mang :\n";
for (i=0;i<n;i++)
{cout<<"A["<<i+1<<"]="; cin>>a[i];
}
pmax=pmin=tbc=a[0];
for(i=1;i<n;i++)
{tbc+=a[i];
if(pmax<a[i])pmax=a[i];
if(pmin>a[i])pmin=a[i];
}
tbc=tbc/n;
cout<<"\nPhan tu max="<<pmax;
cout<<"\nPhan tu min="<<pmin;
cout<<"\nGia tri TBC="<<tbc;
cout<<"\nCac phan tu < TBC:\n";
for (i=0;i<n;i++)if(a[i]<tbc) cout<<a[i]<<" ";
cout<<"\nCac phan tu > TBC:\n";
for (i=0;i<n;i++)if(a[i]>tbc) cout<<a[i]<<" ";
}
Câu 2: Nhập, sắp xếp, in mảng
Viết một hàm nhập mảng, một hàm sắp xếp mảng, một hàm in các phần tử của mảng ra màn hình. Hàm main sử dụng các hàm này để nhập mảng n phần tử, in ra mảng trước và sau khi sắp xếp.
Code mẫu:
#include<conio.h>
#include<iostream.h>
#define max 100
void nhap(int[],int);
void sapxep(int[],int);
void xuat(int[],int);
void main()
{int a[max],n;
clrscr();
cout<<"Nhap so phan tu n<"<<max<<", n= "; cin>>n;
nhap(a,n);
cout<<"Mang truoc khi sap xep :\n";
xuat(a,n);
sapxep(a,n);
cout<<"\nMang sau khi sap xep :\n";
xuat(a,n);
}
void nhap(int a[],int n)
{int i;
cout<<"Nhap cac phan tu cua mang :\n";
for (i=0;i<n;i++)
{cout<<"A["<<i+1<<"]=";
cin>>a[i];
}
}
void xuat(int a[],int n)
{int i,j;
for (i=0;i<n;i++) cout<<a[i]<<" ";
}
void sapxep(int a[],int n)
{int i,j,tg;
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (a[i]>a[j])
{tg=a[i]; a[i]=a[j]; a[j]=tg;
}
}
Câu 3: Nhập, in mảng, đếm đoạn theo các tiêu chí
Viết một hàm nhập mảng, một hàm in các phần tử của mảng ra màn hình, một hàm đếm số các đoạn tăng, một hàm tìm đoạn tăng dài nhất trong mảng. Hàm main sử dụng các hàm này để nhập mảng n phần tử, in mảng, in số đoạn tăng và đoạn tăng dài nhất trong mảng.
Code mẫu:
#include<conio.h>
#include<iostream.h>
#define max 100
void nhap(int[],int);
void xuat(int[],int);
int sodoantang(int[],int);
void timdoantangmax(int[],int,int &,int &);
void main()
{int a[max],i,d,c,n;
clrscr();
cout<<"Nhap so phan tu n<"<<max<<", n= "; cin>>n;
nhap(a,n);
cout<<"Mang da nhap:\n";
xuat(a,n);
cout<<"\nSo doan tang :"<<sodoantang(a,n)<<endl;
timdoantangmax(a,n,d,c);
cout<<"\nDoan tang dai nhat la : ";
for(i=d;i<=c;i++)cout<<a[i]<<" ";
}
void nhap(int a[],int n)
{int i;
cout<<"Nhap cac phan tu cua mang :\n";
for (i=0;i<n;i++)
{cout<<"A["<<i+1<<"]=";
cin>>a[i];
}
}
void xuat(int a[],int n)
{int i;
for (i=0;i<n;i++) cout<<a[i]<<" ";
}
int sodoantang(int a[],int n)
{int i,d;
if(n>0)d=1;
else d=0;
for(i=0;i<n-1;i++)
if(a[i+1]<a[i])d++;
return d;
}
void timdoantangmax(int a[],int n,int &d,int &c)
{int t,p;
p=0;d=c=0;
do
{t=p;
for(p=t;(p<n-1)&&(a[p]<=a[p+1]);p++);
if(p-t>c-d)
{d=t; c=p;
}
if(p<n-1)p++;
}while(p<n-1);
}
Câu 4: Nhập, in, tính tích 2 ma trận
Viết một hàm nhập các phần tử của ma trận 2 chiều, một hàm in ma trận theo hàng cột, một hàm nhân 2 ma trận. Hàm main sử dụng các hàm này để nhập ma trận A kích thước MxN và ma trận B kích thước NxP. In ra ma trận A, B và ma trận C là tích 2 ma trận A và B.
Code mẫu:
#include<conio.h>
#include<iostream.h>
int a[10][10],b[10][10],c[10][10];
void nhap(char,int,int);
void xuat(char,int,int);
void nhan(int,int,int);
void main()
{int m,n,p;
clrscr();
cout<<"Nhap kich thuoc mang a: so hang, so cot <10, so hang m="; cin>>m;
cout<<"so cot n="; cin>>n;
cout<<"Nhap kich thuoc mang b: so hang = so cot mang a la "<<n<<", so cot <10, so cot p=";
cin>>p;
cout<<"Nhap mang a :\n";
nhap('a',m,n);
cout<<"Nhap mang b :\n";
nhap('b',n,p);
cout<<"\nMang A :\n";
xuat('a',m,n);
cout<<"\n\nMang B :\n";
xuat('b',n,p);
nhan(m,n,p);
cout<<"\n\nMang C=AxB:\n";
xuat('c',m,p);
}
void nhap(char k,int p,int q)
{int i,j,t;
for (i=0;i<p;i++)
{cout<<"Nhap cac phan tu hang thu "<<i+1<<":\n";
for (j=0;j<q;j++)
{cout<<k<<"["<<i+1<<","<<j+1<<"]=";
cin>>t;
switch(k)
{case 'a':a[i][j]=t;break;
case 'b':b[i][j]=t;
}
}
}
}
void xuat(char k,int p,int q)
{int i,j;
for (i=0;i<p;i++)
{cout<<endl;
for (j=0;j<q;j++)
{cout<<" ";
switch(k)
{case 'a':cout<<a[i][j];break;
case 'b':cout<<b[i][j];break;
case 'c':cout<<c[i][j];
}
}
}
}
void nhan(int m,int n,int p)
{int i,j,k,s;
for (i=0;i<m;i++)
for (j=0;j<p;j++)
{for (k=s=0;k<n;k++) s+=a[i][k]*b[k][j];
c[i][j]=s;
}
}
Câu 5: Nhập, in ma trận vuông, tính định thức
Viết một hàm nhập các phần tử của ma trận vuông cấp n, một hàm in ma trận theo cấu trúc hàng cột, một hàm tính định thức ma trận cấp n. Hàm main sử dụng các hàm này để nhập ma trận vuông cấp n, in ra ma trận, tính và in ra định thức của ma trận đó.
Code mẫu:
#include<conio.h>
#include<iostream.h>
float a[10][10];
int n;
void nhap();
void xuat();
void doicot(int,int);
void truhang(int,int);
float dinhthuc();
void main()
{clrscr();
cout<<"Nhap kich thuoc ma tran vuong a: so hang = so cot <10, n="; cin>>n;
cout<<"Nhap ma tran a :\n";
nhap();
cout<<"\nMa tran A :\n";
xuat();
cout<<"\n\nDinh thuc ma tran A :"<<dinhthuc();
}
void nhap()
{int i,j,t;
for (i=0;i<n;i++)
{cout<<"Nhap cac phan tu hang thu "<<i+1<<":\n";
for (j=0;j<n;j++)
{cout<<"A["<<i+1<<","<<j+1<<"]="; cin>>t; a[i][j]=t;
}
}
}
void xuat()
{int i,j;
for (i=0;i<n;i++)
{cout<<endl;
for (j=0;j<n;j++)
{cout<<" "; cout<<a[i][j];
}
}
}
void doicot(int k,int t)
{int i;float p;
for(i=0;i<n;i++)
{p=a[i][k];
a[i][k]=a[i][t];
a[i][t]=p;
}
}
void truhang(int h,int r)
{int i;float x;
x=-a[h][h]/a[r][h];
for(i=h;i<n;i++) a[r][i]=a[h][i]+x*a[r][i];
}
float dinhthuc()
{ int i,j; float d=1;
for (i=0;i<n-1;i++)
{ if(a[i][i]==0)
{ for(j=i+1;(j<n)&&(a[i][j]==0);j++);
if(j<n)
{ doicot(i,j); d=-d;
}
else d=0;
}
if(d==0)break;
for(j=i+1;j<n;j++)
if(a[j][i])truhang(i,j);
}
if(d) for(i=0;i<n;i++)d=d*a[i][i];
return d;
}
Hy vọng những bài tập này sẽ hữu ích với các bạn. Chúc các bạn học tốt!
16 Th3 2021
18 Th3 2021
17 Th3 2021
18 Th3 2021
16 Th3 2021
17 Th3 2021