thư việniostream.h
công dụng khi co nhập suất dũ liệu(nói chung cú có cin or cout bạn cứ sử dụng hàm này,thừa còn hơn thiếu), 
thư viện conio.hcông dụng nếu bạn sử dung lệnh xóa màn hình clrscr (có lạc rang sẽ có rượu ) 
và lệnh dừng màn hình getch() , gotoxy(x, y)(trong chương trình đặt con trỏ màn hình tại vị trí cột x dòng y 
để đảm bảo dòng chữ luôn luôn hiện ra tại đúng một vị trí trên màn hình.) và 1 số công dụng nữa bạn tự 
nghiên cứu nhé! 
thư viện iomanip.h dùng để Định dạng thông tin cần in ra màn hình 
ví dụ các lệnh như :endl tương đương với \n (xuống dòng) 
setw(n): Bình thường các giá trị được in ra bởi lệnh cout << sẽ thẳng theo lề trái với độ rộng phụ thuộc vào 
độ rộng của giá trị đó. Phương thức này qui định độ rộng dành để in ra các giá trị là n cột màn hình. Nếu n 
lớn hơn độ dài thực của giá trị, giá trị sẽ in ra theo lề phải, để trống phần thừa (dấu cách) ở trước. 
setprecision(n): Chỉ định số chữ số của phần thập phân in ra là n. Số sẽ được làm tròn trước khi in ra 
setiosflags(ios::showpoint): Phương thức setprecision chỉ có tác dụng trên một dòng in. Để cố định các giá trị 
đã đặt cho mọi dòng in (cho đến khi đặt lại giá trị mới) ta sử dụng phương thức 
setiosflags(ios::showpoint)(và 1 số định dạng nữa bạn tự tìm hiểu) 
thư viện stdio.h để sử dụng các hàm printf() và scanf() chỉ cần thiết với các bạn thích chơi trội lập trình theo 
kiểu cũ 
              
                                            
                                
            
 
            
                 13 trang
13 trang | 
Chia sẻ: oanh_nt | Lượt xem: 1785 | Lượt tải: 1 
              
            Nội dung tài liệu 40 bài tập C, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Sưu tầm bởi boy_dt3; nguồn trathai.vn 
thư viện iostream.h 
công dụng khi co nhập suất dũ liệu(nói chung cú có cin or cout bạn cứ sử dụng hàm này,thừa còn hơn thiếu), 
thư viện conio.h công dụng nếu bạn sử dung lệnh xóa màn hình clrscr (có lạc rang sẽ có rượu ) 
và lệnh dừng màn hình getch() , gotoxy(x, y)(trong chương trình đặt con trỏ màn hình tại vị trí cột x dòng y 
để đảm bảo dòng chữ luôn luôn hiện ra tại đúng một vị trí trên màn hình.) và 1 số công dụng nữa bạn tự 
nghiên cứu nhé! 
thư viện iomanip.h dùng để Định dạng thông tin cần in ra màn hình 
ví dụ các lệnh như :endl tương đương với \n (xuống dòng) 
setw(n): Bình thường các giá trị được in ra bởi lệnh cout << sẽ thẳng theo lề trái với độ rộng phụ thuộc vào 
độ rộng của giá trị đó. Phương thức này qui định độ rộng dành để in ra các giá trị là n cột màn hình. Nếu n 
lớn hơn độ dài thực của giá trị, giá trị sẽ in ra theo lề phải, để trống phần thừa (dấu cách) ở trước. 
setprecision(n): Chỉ định số chữ số của phần thập phân in ra là n. Số sẽ được làm tròn trước khi in ra 
setiosflags(ios::showpoint): Phương thức setprecision chỉ có tác dụng trên một dòng in. Để cố định các giá trị 
đã đặt cho mọi dòng in (cho đến khi đặt lại giá trị mới) ta sử dụng phương thức 
setiosflags(ios::showpoint)(và 1 số định dạng nữa bạn tự tìm hiểu) 
thư viện stdio.h để sử dụng các hàm printf() và scanf() chỉ cần thiết với các bạn thích chơi trội lập trình theo 
kiểu cũ 
thư viên math.h 
1. Các hàm số học 
abs(x), labs(x), fabs(x) : trả lại giá trị tuyệt đối của một số nguyên, số nguyên dài và số thực. 
pow(x, y) : hàm mũ, trả lại giá trị x lũy thừa y (xy). 
exp(x) : hàm mũ, trả lại giá trị e mũ x (ex). 
log(x), log10(x) : trả lại lôgarit cơ số e và lôgarit thập phân của x (lnx, logx) . 
sqrt(x) : trả lại căn bậc 2 của x. 
atof(s_number) : trả lại số thực ứng với số viết dưới dạng xâu kí tự s_number. 
2. Các hàm lượng giác 
sin(x), cos(x), tan(x) : trả lại các giá trị sinx, cosx, tgx. 
thư viến string.h sử lí sâu chuỗi ký tự 
thư viện doc.h sử dụng 
khi có hàm delay(n)(Để dòng chữ chạy không quá nhanh chương trình sử dụng hàm trễ tạm dừng trong n 
phần nghìn giây)(và 1 só công dụng nữa tớ cũng chưa bít hỏi thử madifo xem!! 
Đáp án Bài 2. Một người gửi tiết kiệm a đồng với lãi suất s% một tháng (tính lãi hàng tháng). Việt 
một chương trình tính và in ra màn hình hai cột song song, cột thứ nhất là số tháng đã gửi, cột thứ 
hai tổng số tiền (cả vốn và lãi) ứng với số tháng ở cột thứ nhất cho một khoảng thời gian từ 1 đến 
t tháng, với a, s, t được nhập từ bàn phím. 
#include 
#include 
void main(){ 
 float a, s, kq; 
 int t; 
 cout>a; 
 cout>s; 
 cout>t; 
 kq = a; 
 cout<<"+---+-----------------+"<<endl 
 <<"| T | Tien von va lai |"<<endl 
 <<"+---+-----------------+"<<endl; 
 for(int i=1; i<=t; i++){ 
 kq *= (1+s/100); 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 cout<<"|"<<setw(2)<<i<<" |" 
 <<setw(17)<<setprecision(2)<<setiosflags(ios::showpoint | ios::fixed) 
 <<kq 
 <<"|"<<endl; 
 } 
 cout<<"+---+-----------------+"<<endl; 
} 
khi nhập lãi xuất, nếu lãi xuất là 0,7 % / tháng thì hãy nhập 0.7 (chứ không phải nhập là 0.007) 
khi đó sau mỗi tháng tiền lãi và vốn sẽ = tiền tháng trước + tiền tháng trước x lãi suất 
đó chính là công thức trên: kq *= (1 + s/100) 
Bài 3. Một người gửi tiết kiệm à đồng với lãi suất là s% một tháng trong kỳ hạn 6 tháng (6 tháng 
tính lãi một lần). Viết chương trình tính và in ra màn hình hai cột song song, cột thứ nhất là số 
tháng đã gửi, cột thứ hai là tổng tiền (cả vốn và lãi) ứng với số tháng ở cột thứ nhất cho một 
khoảng thời gian từ 6 tháng đến t tháng, với a, s, và t được nhập từ bàn phím. (Biết rằng nếu lĩnh 
không chắn kỳ nào thì không được tính lãi kỳ ấy). 
#include 
#include 
void main(){ 
 float a, s, kq; 
 int t; 
 cout>a; 
 cout>s; 
 cout>t; 
 kq = a; 
 cout<<"+---+-----------------+"<<endl 
 <<"| t | Tien von va lai |"<<endl 
 <<"+---+-----------------+"<<endl; 
 for(int i=1; i<=t; i++){ 
 if(i%6==0) 
 for(int k=0;k<6;k++)kq *= (1+s/100); 
 cout<<"|"<<setw(2)<<i<<" |" 
 <<setw(17)<<setprecision(2)<<setiosflags(ios::showpoint | ios::fixed) 
 <<kq 
 <<"|"<<endl; 
 } 
 cout<<"+---+-----------------+"<<endl; 
} 
Đáp án Bài 4. Cho x là một số thực, hãy xây dựng hàm tính và in ra màn hình hai cột song song, 
cột thứ nhất là giá trị của đối số, cột thứ hai là giá trị của hàm f ứng với đối số ở cột thứ nhất: 
Sau đó, viết một chương trình nhạp từ bán phím một mảng gồm n số thực, và gọi hàm đã lập được 
ở trên với đối số là các số vừa nhập. 
#include 
#include 
#include 
const float PI=4.1415; 
//Ham nhap mang cac so thuc 
void nhapMang(float *a,char *name, int n){ 
 for (int i=0; i<n;i++) 
 { 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 cout<<name<<"["<<i+1<<"]="; 
 cin>>a[i]; 
 } 
} 
//Ham tinh gia tri cua ham F theo cong thuc 
//Neu X<=0 thi F(x)=0 
//Neu 0<X<=2 thi F(x)=x*x-x 
//Neu x>2 thi F(X)=(x*x-sin(x*x*PI)) 
float f(float x) 
{ 
 if (x<=0) 
 return 0; 
 else 
 if (x<=2) 
 return float(pow(x,2)-x); 
 else 
 return float(pow(x,2)-sin(pow(x,2)*PI)); 
} 
//Than ham main 
void main(){ 
 float a[10], x; 
 int n; 
 cout>n; 
 //Goi ham nhap mang 
 nhapMang(a,"a",n); 
 //Dinh dang hien thi so thuc 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 //In gia tri cua mang tuong ung voi gia tri ham F(X) 
 //Hien thi hai cot song song 
 cout<<"+-----------+-----------------+"<<endl 
 <<"| X | F(X) |"<<endl 
 <<"+-----------+-----------------+"<<endl; 
 for(int i=0; i<n; i++) 
 { 
 cout<<"|"<<setw(10)<<a[i]<<" |"; 
 cout<<setw(17)<<f(a[i])<<"|"<<endl; 
 } 
 cout<<"+----------+------------------+"<<endl; 
} 
Bài 5. Viết chương trình tính và in ra màn hình số tiền điện tháng 10/99 của n khách hàng theo 
các chỉ số trên đồng hồ điện của tháng 9 và của tháng 10 được nhập vào từ bàn phím (phải kiểm 
tra để đảm bảo rằng chỉ số của tháng sau phải lớn hơn chỉ số của các tháng trước). 
Biết rằng: 50 số đầu tiền giá 500 đồng/số, 100 số tiếp theo giá 800 đồng/số, 100 số tiếp theo nữa 
giá 1000 đồng/số, 100 số tiếp theo nữa giá 1200 đồng/số, và từ số thứ 351 trở đi giá 1500 
đồng/số. 
Sửa đầu bài 1 tý cho đơn giản: nhập số lượng điện tiêu thụ, tính số tiền phải trả theo đơn giá trên 
(chưa có thuế VAT), VAT =10% 
/*đơn giá: 
từ số: đơn giá 
0-50: 500 
51-150: 800 
151-250: 1000 
251-351: 1200 
351 - ...: 1500 */ 
#include 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
#include 
void main(){ 
 int n; 
 float t=0; 
 cout<<"nhap luong dien tieu thu: "; 
 cin>>n; 
 if(n>350)t+=(n-=350)*1500.0; 
 if(n>250)t+=(n-=250)*1200.0; 
 if(n>150)t+=(n-=150)*1000.0; 
 if(n> 50)t+=(n-= 50)* 800.0; 
 if(n> 0)t+=(n )* 500.0; 
 cout<<"tien dien: " 
 <<setprecision(0) 
 <<setiosflags(ios::fixed) 
 <<(t*1.1); 
} 
Giờ nếu nhập 2 chỉ số thì trừ nó đi cho nhau thì sẽ ra lượng điện tiêu thụ 
động tác kiểm tra số sau lớn hơn số trước thiết nghĩ rất đơn giản, để các bạn sv tự làm 
Khi học đến phần mảng, chúng ta sẽ nhập số người tương ứng là số phần tử của mảng, sau đó vận dụng bài 
này để tính tiền điện cho từng người (từng giá trị trong mảng) 
chú ý: t là số tiền phải trả, t*1.1 là số tiền đã có thuế 10% 
Bài 7. Viết chương trình giải phương trình bậc hai ax2+bx+c=0 với a, b, c bất kỳ được nhập vào từ 
bàn phím. In ra màn hình phương trình bậc hai với các hệ số đã nhập, giá trị của delta và các 
nghiệm thức của nó (nếu cố), ngươcij lại thì in là không có nghiệm thực. 
chú ý: nếu a=0 thì sẽ thành pt bậc nhất, nên tiện đây đưa luôn bài gpt b1 
#include 
#include 
void main(void) 
{ 
 float a,b; 
 cout<<"Nhap 2 he so cua pt bac nhat:"; 
 cin>>a>>b; 
 if(a!=0) 
 cout<<"pt co 1 nghiem thuc x="<<(-b/a); 
 else 
 if(b==0) 
 cout<<"pt lay nghiem nao cung dc"; 
 else 
 cout<<"pt vo nghiem"; 
} 
giờ nếu a khác 0 thì có pt bậc 2: 
#include 
#include 
#include 
void main(void) 
{ 
 float a,b,c,d,x1,x2; 
 cout<<"nhap 3 hs cua ptb2: "; 
 cin>>a>>b>>c; 
 d=b*b-4*a*c; 
 if(d>=0){ 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 x1=(-b-sqrt(d))/(2*a); 
 x1=(-b+sqrt(d))/(2*a); 
 cout<<"pt co 2 nghiem thuc"<<endl 
 <<"nghiem thuc 1="<<x1<<endl 
 <<"nghiem thuc 2="<<x2; 
 } 
 else{ 
 cout<<"pt k co nghiem thuc"<<endl 
 <<"pt co 2 nghiem phuc lien hop"<<endl; 
 float thuc,ao; 
 thuc=-b/2/a; 
 ao=sqrt(-d)/2/a; 
 cout<<"nghiem ao 1="<<thuc<<"-i"<<ao<<endl; 
 <<"nghiem ao 2="<<thuc<<"+i"<<ao<<endl; 
 } 
} 
Các bạn hãy vận dụng kiến thức của mình để kết hợp thành 1 bài hoàn chỉnh đủ theo đúng nghĩa với a, b, c 
bất kỳ 
Bài 8. Năm 1999, dân số nước ta là 76 triệu người, tỷ lệ tăng tự nhiên là k% một năm. Lập một 
chương trình in ra màn hình hai cột song song, cột thứ nhất là năm, cột thứ hai là dân số của năm 
tương ứng ở cột một cho đến khi dân số tăng s lần so với năm 1999. Các số k và s được nhập vào 
từ bàn phím. 
Giải: 
#include 
#include 
#include 
#include 
void main(void) 
{ 
 clrscr(); 
 int k; //% tang dan so hang nam 
 float s;//So lan tang 
 cout>k; 
 cout>s; 
 long dansocu=76000000,dansomoi; 
 dansomoi=dansocu; 
 int nam=1999; 
 //Thiet lap dinh dang 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 cout<<"\n------------------------------------------"; 
 cout<<"\n"<<setw(20)<<"NAM"<<setw(20)<<"DAN SO"; 
 cout<<"\n------------------------------------------"; 
 while(dansomoi<=s*dansocu) 
 { 
 cout<<"\n"<<setw(20)<<nam<<setw(20)<<dansomoi; 
 dansomoi=dansomoi+dansomoi*((float)k/100); 
 nam++; 
 } 
 cout<<"\n------------------------------------------\n"; 
 getch(); 
} 
Bài 10. Xây dựng một hàm sắp xếp theo thứ tự tăng dần một mảng gồm n số thực. Viết chương 
trình để nhập n số thực từ bàn phím, sử dụng hàm sắp xếp nói trên, và in ra màn hình hai cột song 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
song, một cột là mảng chưa sắp xếp, một cột là mảng đã được sắp xếp. 
Giải: 
#include 
#include 
#include 
#include 
void NhapMang(float a[],float b[],int n) 
{ 
 cout<<"\nNhap mang\n"; 
 for (int i=0;i<n;i++) 
 { 
 cout<<"a["<<i<<"]="; 
 cin>>a[i]; 
 b[i]=a[i]; 
 } 
} 
void InMang(float a[],float b[],int n) 
{ 
 cout<<setw(10)<<"TT"; 
 cout<<setw(20)<<"Mang chua sap xep"; 
 cout<<setw(20)<<"Mang da sap xep"; 
 cout<<"\n-----------------------------------------------------"; 
 for (int i=0;i<n;i++) 
 { 
 cout<<endl<<setw(10)<<i+1<<setw(20)<<a[i]<<setw(20)<<b[i]; 
 } 
 cout<<"\n-----------------------------------------------------\n"; 
} 
void SapXep(float a[],int n) 
{ 
 //Sap xep tang dan 
 for(int i=0;i<n-1;i++) 
 for(int j=i+1;j<n;j++) 
 if (a[i]>a[j]) 
 { 
 float tg; 
 tg=a[i]; a[i]=a[j]; a[j]=tg; 
 } 
} 
void main(void) 
{ 
 clrscr(); 
 float a[100],b[100]; 
 int n; 
 cout<<"Nhap N="; 
 cin>>n; 
 NhapMang(a,b,n); 
 SapXep(b,n); 
 //Thiet lap dinh dang 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 InMang(a,b,n); 
 getch(); 
} 
Bài 11. Xây dựng một hàm sắp xếp thep thứ tự giảm dần một mảng gồm n số thực. Viết chương 
trình để nhập n số thực từ bàn phím, sử dụng hàm sắp xếp nói trên, và in ra màn hình hai cột song 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
song, một cột là mảng chưa sắp xếp, một cột là mảng đã được sắp xếp. 
Giải: 
#include 
#include 
#include 
#include 
void NhapMang(float a[],float b[],int n) 
{ 
 cout<<"\nNhap mang\n"; 
 for (int i=0;i<n;i++) 
 { 
 cout<<"a["<<i<<"]="; 
 cin>>a[i]; 
 b[i]=a[i]; 
 } 
} 
void InMang(float a[],float b[],int n) 
{ 
 cout<<setw(10)<<"TT"; 
 cout<<setw(20)<<"Mang chua sap xep"; 
 cout<<setw(20)<<"Mang da sap xep"; 
 cout<<"\n-----------------------------------------------------"; 
 for (int i=0;i<n;i++) 
 { 
 cout<<endl<<setw(10)<<i+1<<setw(20)<<a[i]<<setw(20)<<b[i]; 
 } 
 cout<<"\n-----------------------------------------------------\n"; 
} 
void SapXep(float a[],int n) 
{ 
 //Sap xep giam dan 
 for(int i=0;i<n-1;i++) 
 for(int j=i+1;j<n;j++) 
 if (a[i]<a[j]) 
 { 
 float tg; 
 tg=a[i]; a[i]=a[j]; a[j]=tg; 
 } 
} 
void main(void) 
{ 
 //clrscr(); 
 float a[100],b[100]; 
 int n; 
 cout<<"Nhap N="; 
 cin>>n; 
 NhapMang(a,b,n); 
 SapXep(b,n); 
 //Thiet lap dinh dang 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 InMang(a,b,n); 
 //getch(); 
} 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
Bài 12. Cho F là một số thực lớn hơn 2, và S=1/2+1/3+…+1/n. Hãy xây dựng một hàm để tìm giá 
trị lớn nhất của n sao cho S<=F. Viết một chương trình để nhập vào từ bàn phím m số thực Fi, sử 
dụng hàm nói trên đối với các hàm Fi đã nhập và in ra màn hình thành ba cột song song: các giá 
trị của Fi, n, và S tương ứng. 
Giải: 
#include 
#include 
#include 
#include 
int max(double f, double &s) 
{ 
 int i=1; 
 s=0; 
 while(s<=f) 
 { 
 s+=(double)1/double(i++); 
 } 
 return i; 
} 
void main(void) 
{ 
 clrscr(); 
 double f[100], s[100]; 
 int n,i; 
 cout>n; 
 for(i=0;i<n;i++) 
 { 
 cout>f[i]; 
 } 
 //Thiet lap dinh dang 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 clrscr(); 
 cout<<endl<<setw(10)<<"F"<<setw(10)<<"MAX"<<setw(10)<<"S"; 
 cout<<"\n--------------------------------"; 
 for(i=0;i<n;i++) 
 { 
 cout<<endl<<setw(10)<<f[i]<<setw(10)<<max(f[i],s[i]); 
 cout<<setw(10)<<s[i]; 
 } 
 cout<<"\n--------------------------------\n"; 
 getch(); 
} 
Bài 11 (chế lại đầu bài): Nhập n phần tử số thực từ bàn phím, in mảng ra màn hình, sắp xếp giảm 
dần, in mảng vừa sắp xếp. 
Code: 
#include //khai bao thu vien su dung luong nhap xuat 
#include //thu vien dinh dang nhap xuat 
#include //thu vien cac ham toan hoc 
#include //thu vien cung cap cac ham ve man hinh, ban phim 
void NhapMang(float a[], int n){ 
 cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau 
 for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc 
nhap 
 cin >> a[i]; //nhap gia tri tu ban phim cho phan tu thu 
i 
 } //ket thuc vong lap 
} //ket thuc ham NhapMang 
void InMang(float a[], int n){ 
 //Thiet lap dinh dang 
 cout << setiosflags(ios::showpoint|ios::fixed); 
 cout << setprecision(2); 
 //in tung phan tu cua mang, cach nhau boi dau cach (space) 
 for (int i = 0; i < n; i++)cout << a[i] << " "; 
 cout << endl; 
} 
void SapXep(float a[], int n){ 
 //Sap xep giam dan 
 for(int i = 0; i < n-1; i++) 
 for(int j = i+1; j<n; j++) 
 if (a[i] < a[j]){ 
 float tg = a[i]; 
 a[i] = a[j]; 
 a[j] = tg; 
 } 
} 
void main(void) 
{ 
 clrscr(); //xoa man hinh 
 float a[100]; //khai bao bien mang a co 100 phan tu số thực 
 int n; //khai bao bien n luu so luong phan tu trong mang 
 cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong 
 cin >> n; //nhap gia tri cho bien n tu ban phim 
 NhapMang(a,n); //nhap n gia tri cho tung phan tu cua mang 
 cout << "Mang truoc khi sap xep:"<<endl; 
 InMang(a,n); //in mang truoc khi sap xep 
 SapXep(a,n); //sap xep mang 
 cout << "Mang sau khi sap xep:"<<endl; 
 InMang(a,n); //in mang sau khi da sap xep 
 getch(); //cho nguoi dung an phim bat ky de thoat 
} 
Chú ý: nếu muốn sắp xếp tăng dần thì thay toán tử so sánh nhỏ hơn trong đoạn code trên bởi toán 
tử so sánh lớn hơn. 
Cụ thể hàm sắp xếp tăng dần sẽ là: 
Code: 
void SapXep(float a[], int n){ 
 //Sap xep tăng dần 
 for(int i = 0; i < n-1; i++) 
 for(int j = i+1; j<n; j++) 
 if (a[i] > a[j]){ 
 float tg = a[i]; 
 a[i] = a[j]; 
 a[j] = tg; 
 } 
} 
Còn sắp xếp giảm dần sẽ là: 
Code: 
void SapXep(float a[], int n){ 
 //Sap xep tăng dần 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 for(int i = 0; i < n-1; i++) 
 for(int j = i+1; j<n; j++) 
 if (a[i] < a[j]){ 
 float tg = a[i]; 
 a[i] = a[j]; 
 a[j] = tg; 
 } 
} 
@admin: malyfo chế lại đầu bài tí, vì thiết nghĩ động tác in 2 cột song song không toát lên vấn đề, ở đây vấn 
đề là đưa ra cách nhập 1 mảng n phần tử 
và cách sắp xếp 1 mảng n phần tử (tăng hoặc giảm) 
trước khi sắp xếp và sau khi sắp xếp ta đều gọi hàm in toàn bộ giá trị của mảng ra màn hình => giúp thấy 
được ý nghĩa của việc sắp xếp 
------------------------------------------------------------------------------------- 
Bài 11 (chế lại đầu bài): Nhập n phần tử số thực từ bàn phím, in mảng ra màn hình, sắp xếp giảm 
dần, in mảng vừa sắp xếp. 
Ta làm bài trên theo cách đưa quá trình nhập số lượng phần tử vào trong hàm nhập bằng cách khai báo đối 
số của hàm nhập: đối số n là tham chiếu 
#include //khai bao thu vien su dung luong nhap xuat 
#include //thu vien dinh dang nhap xuat 
#include //thu vien cac ham toan hoc 
#include //thu vien cung cap cac ham ve man hinh, ban phim 
void NhapMang(float a[], int &n){ // n là tham chiếu 
 cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong 
 cin >> n; //nhap gia tri cho bien n tu ban phim 
 cout << "Nhap mang" << endl; //thong bao qua trinh nhap bat dau 
 for (int i = 0; i < n ; i++){ //vong lap duyet tu chi so 0 den n-1 
 cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc 
nhap 
 cin >> a[i]; //nhap gia tri tu ban phim cho phan tu thu 
i 
 } //ket thuc vong lap 
} //ket thuc ham NhapMang 
void InMang(float a[], int n){ 
 //Thiet lap dinh dang 
 cout << setiosflags(ios::showpoint|ios::fixed); 
 cout << setprecision(2); 
 //in tung phan tu cua mang, cach nhau boi dau cach (space) 
 for (int i = 0; i < n; i++)cout << a[i] << " "; 
 cout << endl; 
} 
void SapXep(float a[], int n){ 
 //Sap xep giam dan 
 for(int i = 0; i < n-1; i++) 
 for(int j = i+1; j<n; j++) 
 if (a[i] < a[j]){ 
 float tg = a[i]; 
 a[i] = a[j]; 
 a[j] = tg; 
 } 
} 
void main(void) 
{ 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 clrscr(); //xoa man hinh 
 float a[100]; //khai bao bien mang a co 100 phan tu số thực 
 int n; //khai bao bien n luu so luong phan tu trong mang 
 NhapMang(a,n); //nhap số lượng n và gia tri cho tung phan tu cua 
mang 
 cout << "Mang truoc khi sap xep:"<<endl; 
 InMang(a,n); //in mang truoc khi sap xep 
 SapXep(a,n); //sap xep mang 
 cout << "Mang sau khi sap xep:"<<endl; 
 InMang(a,n); //in mang sau khi da sap xep 
 getch(); //cho nguoi dung an phim bat ky de thoat 
} 
Bài 16. Hãy xây dựng một hàm để nhập từ bàn phím một mảng số thực. Viết một chương trình sử 
dụng hàm đã xây dựng được ở trên để nhập số liệu cho hai mảng số thực, một mảng có n phẩn tử, 
và một mảng có m phần tử, in ra màn hình hai cột song song, mỗi cột là một mảng với ô cuối cùng 
là tổng của các phần tử trong mảng, và cuối cùng là tổng của hai mảng. 
Giải: 
#include 
#include 
#include 
//Do bài yêu cầu nhập hai mang 
//Chúng ta cho thêm tham số name để hiển thị tên mạng khi nhập 
void nhapMang(double *a,char *name, int n){ 
 for (int i=0; i<n;i++) 
 { 
 cout<<name<<"["<<i+1<<"]="; 
 cin>>a[i]; 
 } 
} 
void main(){ 
 double a[100],b[100]; 
 int n,m,i; 
 //Nhập số lượng phần tử mảng A 
 cout>n; 
 //Nhập số lượng phần tử mảng B 
 cout>m; 
 //Nhap hai mang a[N], b[M] 
 nhapMang(a,"a",n); 
 nhapMang(b,"b",m); 
 // Thiết lập định dạng 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 //Max chua so phan tu lon hon 
 int max=m>n?m:n; 
 double s1=0.0,s2=0.0;//Tong mang a la s1, tong mang b la s2 
 cout<<endl<<setw(5)<<"TT"<<setw(10)<<"A"<<setw(10)<<"B"; 
 cout<<"\n---------------------------------"; 
 for(i=0;i<max;i++) 
 { 
 if ((i<m) && (i<n)) 
 { 
 cout<<endl<<setw(5)<<i+1<<setw(10)<<a[i]<<setw(10)<<b[i]; 
 s1=s1+a[i]; 
 s2=s2+b[i]; 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
 } 
 //Luc nay chi con phan tu cua mang A hoac B 
 else if (i<n)//Neu i<n thi In phan tu cua mang a 
 { 
 cout<<endl<<setw(5)<<i+1<<setw(10)<<a[i]; 
 s1=s1+a[i]; 
 } 
 else if (i<m)//Neu i<m thi In phan tu cua mang b 
 { 
 cout<<endl<<setw(5)<<i+1<<setw(10)<<" "<<setw(10)<<b[i]; 
 s2=s2+b[i]; 
 } 
 } 
 cout<<"\n---------------------------------"; 
 cout<<endl<<setw(5)<<"Tong:"<<setw(10)<<s1<<setw(10)<<s2<<endl; 
 cout<<"Tong: s1+s2="<<s1+s1<<endl; 
} 
Viết chương trình giải bài toán cổ điển sau: 
Vừa gà vừa chó 36 con 
Bó lại cho tròn, đếm đủ 100 chân 
Hỏi có bao nhiêu gà, bao nhiêu chó 
Gọi số gà là x, số chó là y 
x+y=36 
Mỗi con gà có hai chân, chó có bốn chân. Số chân gà và chân chó là: 
x*2+y*4=100 
Vì vậy 
#include 
int main() 
{ 
 int ga,cho; 
 for(ga=1;ga<=35;ga++) 
 for(cho=1;cho<=24;cho++) 
 if ((ga+cho==36)&&(ga*2+cho*4==100)) 
 cout<<"Ga="<<ga<<"\nCho"<<cho<<endl; 
} 
5. Viết chương trình giải bài toán cổ điển sau: 
Trăm trâu, trăm cỏ 
Trâu đứng ăn năm 
Trâu nằm ăn ba, 
Ba trâu già ăn một 
Hỏi mỗi loại trâu có bao nhiêu con. 
Gọi x là số trâu đứng, y là trâu năm, z là trâu già 
x+y+z=100 
Do trâu đứng ăn năm, trầu nằm ăn 3 và ba trâu già ăn một 
x*5+y*3+z/3=100 
Số trâu đứng tối là là 16 vì tối thiểu phải có 3 trâu già (3 trâu già ăn một bó), và một trâu năm. Nếu có 20 
trâu đứng thì sẽ ăn hết 20*5=100 bó cỏ, như vậy 20-3(trâu già)-1 (trâu nằm)=16. 
// Tram trau tram co. 
//Trau Dung an 5. 
//Trau nam an 3. 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
//Trau gia 3 con an 1. 
#include 
#include 
int main() 
{ 
 int Dung,Nam,Gia; 
 for (Dung=1;Dung<=16;Dung++) 
 for (Nam=1;Nam <33;Nam++) 
 for (Gia=3;Gia<=100;Gia+=3) 
 if(Dung+Nam+Gia==100&&5*Dung+3*Nam+Gia/3==100) 
 { 
 cout<<"\nTrau Dung="<<Dung; 
 cout<<" Trau nam="<<Nam; 
 cout<<" Trau gia="<<Gia; 
 } 
 cout<<endl; 
} 
Viết chương trình nhập vào từ bàn phím bán kính R của hình cầu. Hãy tính và in ra diện tích và thể 
tích hình cầu đó: 
#include 
#include 
float main() 
{ 
 const float PI=3.1415; 
 float s,v,r; 
 //Yêu cầu nhập r>0, trong khi r<=0 thì nhập lại r 
 do 
 { 
 cout>r; 
 }while(r<=0); 
 s=4*PI*r*r; 
 v=4*PI*r*r*r/3; 
 cout<<setiosflags(ios::showpoint|ios::fixed); 
 cout<<setprecision(2); 
 cout<<"\nV="<<v; 
 cout<<"\nS="<<s<<endl; 
} 
Generated by Foxit PDF Creator © Foxit Software
 For evaluation only.
            Các file đính kèm theo tài liệu này:
 40_bai_tap_c_tuananhk43_trathai_vn.pdf 40_bai_tap_c_tuananhk43_trathai_vn.pdf