Tải bản đầy đủ (.docx) (71 trang)

8200 bài tập lập trình C có đáp án

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (374.31 KB, 71 trang )

Bài 1. Viết chương trình nhập từ bàn phím n số nguyên dương nhỏ hơn 100, in ra màn hình
hai cột song song, một cột là các số, còn cột kia là tổng của các chữ số tương ứng ở cột thứ
nhất. Tìm và in ra số có tổng của các chữ số là lớn nhất, nếu có nhiều hơn một số như vậy thì
in số đầu tiê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.
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).
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.
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ố.
Bài 6. Viết một chương trình nhập vào từ bàn phím điểm kiểm tra của một môn học của n học
sinh và in kết quả ra màn hình dưới dạng hai cột song song, một cột là điểm và cột thứ hai là
xếp loại theo điểm với các qui định sau:
Dưới 5: Yếu
Từ 5 đến dưới 7: Trung bình
Từ 7 đến dưới 9: Khá
Từ 9 trở lên: Giỏi
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.
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.
Bài 9. Viết chương trình giải bất phương trình bận hai với a, b, c bất kỳ được nhập từ bàn
phím: ax2+bx+c>0 . In ra màn hình bất phương trình với các hệ số đã nhập, giá trị của delta và
các nghiệm thực của bất phương trình.
Bài 10. Xây dựng một hàm sắp xếp thep 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 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.
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 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.
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.
Bài 13. 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ị nhỏ 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.
Bài 14. Xây dựng một hàm tính giá trị trung bình của n số thực. (Giá trị trung bình của một
dãy số được cho bằng công thức: ).
Sử dụng hàm nói trên để viết chương trình nhập n số thực từ bàn phím và in ra màn hình cột
số đã nhập, tổng, giá trị trung bình của chúng.
Bài 15. Xây dựng một hàm tính giá trị trung bình của n số thực. (Độ lêcnh chuẩn của dãy số
được cho bằng công thức: , với ).
Sử dụng hàm nói trên để viết chương trình nhập n số thực từ bàn phím và in ra màn hình cột

số đã nhập, tổng, giá trị trung bình và độ lệch chuẩn của chúng.
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.
Bài 17. 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 ba cột song song, hai cột đầu là hai mảng
đã nhập, cột thứ ba tổng của hai cột đầu, dòng cuỗi cùng của cả ba cột là tổng của các phần tử
trong cột.
Bài 18. Cho tuổi và số con của n phụ nữ trong độ tuổi 15-49, hãy xây dựng một hàm tính và in
bản phân bố của các phụ nữ này theo nhóm 5 tuổi. Viết chương trình để nhập tuổi và số con
của n phụ nữ trong độ tuổi 15-49, sau đó sử dụng hàm đã xây dựng ở trên để in bảng phân bố
theo tuổi.
Bài 19. Cho tuổi và số con của n phụ nữ trong độ tuổi 15-49, hãy xây dựng một hàm tính và in
bản phân bố của các phụ nữ này theo nhóm 5 tuổi. Viết chương trình để nhập tuổi và số con
của n phụ nữ trogn độ tuổi 15-49, sau đó sử dụng hàm đã xây dựng ở trên để in bảng phân bố
số con của các phụ nữ này theo tuổi.
Bài 20. Cho một xây bất kỳ, không sử dụng các hàm thư viện về xâu, hãy xây dựng một hàm
đổi tất cả các chữ thường thành chữ hoa (các ký tự khác giữ nguyên) và in cả hai ra màn
hình. Viết một chương trình nhập một xây bất kỳ từ bàn phím, sau đó sử dụng hàm đã xây
dựng ở trên để in kết quả ra màn hình.
Bài 21. Cho một xây bất kỳ, không sử dụng các hàm thư viện về xâu, hãy xây dựng một hàm
đổi tất cả các chữ hoa thành chữ thường (các ký tự khác giữ nguyên) và in cả hai ra màn
hình. Viết một chương trình nhập một xây bất kỳ từ bàn phím, sau đó sử dụng hàm đã xây
dựng ở trên để in kết quả ra màn hình.
Bài 22. Cho một xây bất kỳ, không sử dụng cac shamf thư viện về xâu, hãy xây dựng một hàm
đổi tất cả các chữ hoa của xây thành chữ thường, và ngược lại, đổi các chữ thường của xâu
thành chữ hoa (các chữ khác giữ nguyên) và in cả hai ra màn hình. Viết một chương trình
nhập một xâu bất kỳ từ bàn phím, sau đó sử dụng hàm đã xây dựng ở trên đê in kết quả ra màn

hình.
Bài 23. Cho cấu trúc:
Code:
struc thisinh{
int sbd; //Số báo danh
char hoten[25]; //Họ và tên
float m1,m2,m3l //Điểm ba môn thi
float tong; //Tổng điểm ba môn
} danhsach[100];
Hãy xây dựng một hàm để nhập số liệu cho n thí sinh. Sau đó viết một chương trình sử dụng
hàm nói trên để nhập số liệu và in bảng điểm của các thí sinh này theo dạng ba cột: Số báo
danh, Họ tên, Tổng điểm.
Bài 24. Cho một xây bất, hãy xây dựng một hàm để sửa các lỗi chính tả không viết hoa đầu
câu trong xâu này, in ra xâu chưa sửa và xâu đã sửa. Sau đó viết một chương trình để nhập
một xâu và sử dụng hàm nói trên để sửa lỗi.
Bài 25. Cho cấu trúc:
Code:
struc dienthoai{
int sdt; //Số điện thoại
char hoten[25]; //Họ và tên
float sotien; //Số tiền phải nộp
} thuebao[100];
Hãy xây dựng một hàm để nhập số liệu cho n thuê bao. Sau đó viết một chương trình sử dụng
hàm nói trên để nhập số liệu và in bảng số tiền phải nộp của các thuê bao theo dạng ba cột: Họ
tên, số điện thoại, số tiền phải nộp.
Bài 26. Hãy xây dựng một hàm in ra màn hình nội dung một tệp văn bản bất kỳ (có dựng lại
sau mỗi trang màn hình). Sau đó, viết một chương trình để nhập vào từ bàn phím tên của một
tệp văn bản và sử dụng hàm nói trên để in nội dung của tệp này ra màn hình.
Bài 27. Cho tuổi và trình độ văn hóa (0-4) của n người, hãy xây dựng một hàm in bản phân bố
của số người này theo nhóm 5 tuổi và trình độ văn hóa. Sau đó, viết một chương trình để nhập

tuổi và trình độ văn hóa của n người, sử dụng hàm nói trên để in kết quả ra màn hình.
Bài 28. Viết một chương trình để nhập tuổi và trình độ văn hóa (0-4) của n người, sau đó ghi
các số liệu này lên một tệp mode văn bản.
Bài 29. Cho một xâu bất kỳ, hãy xây dựng một hàm để sửa các lỗi chính tả không có dấu
cách sau dấu phảy và sau dấu chấm, in ra màn hình xâu chưa sửa và xâu đã sửa. Sau đó viết
chương trình để nhập một xâu bất kỳ và sử dụng hàm nói trên để sửa lỗi.
Bài 30. Cho một xâu bất kỳ, hãy xây dựng một hàm để sửa các lỗi chính tả không có dấu
cách giữa các từ, in ra xâu gốc và xâu đã sửa. Sau đó viết một chương trình để nhập một xâu
ký tự bất kỳ và sử dụng hàm nói trên để sửa lỗi.
Bài 31. Cho một xâu bất kỳ, hãy xây dựng một hàm để viết hoa chữ cái đầu tiên của tất cả
các từ trong xâu đã cho, in ra xâu gốc và xâu đã sửa. Sau đó viết một chương trình để nhập
một xâu ký tự bất kỳ và sử dụng hàm nói trên để sửa lỗi.
Bài 32. Cho cấu trúc:
Code:
struc tiendien{
char hoten[25]; //Họ và tên
float csc,csm; //Chỉ số cũ, chỉ số mới
float dg; //Đơn giá/Kw
float tong; //Tổng tiền phải nộp
} danhsach[100];
Hãy xây dựng một hàm để nhập số liệu cho n hộ sử dụng điện. Sau đó, viết một chương trình
sử dụng hàm nói trên để nhập số liệu và in bảng tính tiền sử dụng điện thoại của các hộ này
theo dạng hai cột: Họ tên, số điện tiêu thụ, Tổng số tiền.
Bài 33. Hãy xây dựng một hàm để nhập từ bàn phím một mảng các số thực. Viết chưng trình
sử dụng hàm nói trên để nhập số liệu cho hai mảng số thực cùng có n phần tử, in ra màn hình
ba cột song song, hai cột đầu là hai mảng đã nhập, còn cột thứ ba là hiệu của hai cột đầu, dòng
cuối cùng của cả ba cột là tỏng của các phần tử trong cột.
Bài 34. Cho F là một số thực lớn hơn 2, và , với x là một số nguyên dương bất kỳ.
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, in ra màn hình các giá trị
của x, F, S và n. Viết một chương trình để nhập vào từ bàn phím số thực F, số nguyên dương x

và sử dụng hàm nói trên đối với các giá trị đã nhập để in kết quả ra màn hình.
Bài 35. Cho F là một số thực lớn hơn 2, và , với x là một số nguyên dương bất kỳ.
Hãy xây dựng một hàm để tìm giá trị nhỏ nhất của n sao cho S<=F, in ra màn hình các giá trị
của x, F, S và n. Viết một chương trình để nhập vào từ bàn phím số thực F, số nguyên dương x
và sử dụng hàm nói trên đối với các giá trị đã nhập để in kết quả ra màn hình.
Bài 36. Hãy xây dựng một hàm để nhập từ bán phím một mảng cac số thực. Viết chương trình
sử dụng hàm nói trên để nhập số liệu cho hai mảng số thực cùng có n phần tử, in ra màn hình
ba cột song song, hai cột đầu là hai mảng đã nhập, cột thứ ba là tích của hai cột đầu, dòng cuỗi
cùng của cả ba cột là tổng các phần tử trong cột.
Bài 37. Viết một chương trình để nhập số báo danh, họ tên và điểm thi ba môn Toán, Lý, Hóa
của n thí sinh, sau đó ghi các số liệu này lên một tệp ở mode văn bản.
Bài 38. Hãy xây dựng một hàm in ra mnaf hình nội dung của một tệp văn bản bất kỳ theo dạng
trang màn hình có đánh số trang. Sau đó, viết một chương trình để nhập từ bàn phím tên của
một tệp văn bản và sử dụng hàm nói trên để in nội dung của tệp này ra màn hình.
Bài 39. Hãy xây dựng một hàm in ra mnafh ình nội dung của một tệp văn bản bất kỳ theo dạng
trang màn hình, ở dòng đầu của mỗi trang có đánh số trang ở góc bên phải và tên tệp góc trái.
Sau đó, viết một chương trình để nhập từ bàn phím tên của một tệp văn bản và sử dụng hàm
nói trên để in nội dung của tệp này ra màn hình.
Bài 40. Cho cấu trúc
Code:
struc thisinh{
int sbd; //Số báo danh
char hoten[25]; //Họ và tên
float m1,m2,m3l //Điểm ba môn thi
float tong; //Tổng điểm ba môn
} danhsach[100];
Viết chương trình (có sử dụng các hàm) để thêm và bớt các thí sinh theo thứ tự giảm dần của
tổng điểm, và in ra mnaf hình danh sách đã sắp.
Trích:
tuananhk43

Bài 1. Viết chương trình nhập từ bàn phím n số nguyên dương nhỏ hơn 100, in ra màn hình hai
cột song song, một cột là các số, còn cột kia là tổng của các chữ số tương ứng ở cột thứ nhất.
Tìm và in ra số có tổng của các chữ số là lớn nhất, nếu có nhiều hơn một số như vậy thì in số đầu
tiên.
Code:
#include <iostream.h>
#include<conio.h>
#include<iomanip.h>
//Ham tinh tong cac chu so
//Vd n=15 thi tra ve gia tri la 6
int tong(int n){
int a,b;
a=(int)n/10;
b=n-a*10;
return a+b;
}
//Ham nhap cac gia tri cho mot mang
void nhap(int *a,int n){
for (int i=0;i<n;i++){
cout<<"Nhap a["<<i<<"]=";
cin>>a[i];
}
}
//Ham in cac gia tri thanh hai cot
void in(int *a,int n){
int tong1=0, tong2=0;
int max; //Dung de tinh gia tri lon nhat cua tong
int val;
cout<<setw(15)<<"STT"<<setw(15)<<"Tong"<<"\n";
max=tong(a[1]);

for(int i=0;i<n;i++){
cout<<setw(15)<<a[i]<<setw(15)<<tong(a[i])<<"\n";
if (max<tong(a[i]))
{
max=tong(a[i]);
val=a[i];
}
}
cout<<" \n";
cout<<setw(15)<<val<<setw(15)<<max<<"\n";
}
int main(){
//clrscr();
int n;
int a[100];
cout<<"Nhap N="; cin>>n;
nhap(a,n);
in(a,n);
//getch();
}
Đá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.
Code:
#include <iostream.h>
#include <iomanip.h>
void main(){
float a, s, kq;
int t;

cout<<"nhap so tien gui ban dau: "; cin>>a;
cout<<"nhap lai suat hang thang: "; cin>>s;
cout<<"nhap so thang tiet kiem : "; cin>>t;
kq = a;
cout<<"+ + +"<<endl
<<"| T | Tien von va lai |"<<endl
<<"+ + +"<<endl;
for(int i=1; i<=t; i++){
kq *= (1+s/100);
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).
Code:
#include <iostream.h>
#include <iomanip.h>
void main(){
float a, s, kq;

int t;
cout<<"nhap so tien gui ban dau: "; cin>>a;
cout<<"nhap lai suat hang thang: "; cin>>s;
cout<<"nhap so thang tiet kiem : "; cin>>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;
}
bài này giống bài 2, chú ý tính lãi sau mỗi 6 tháng
Đá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.
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
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++)
{
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<<"Nhap so phan tu N="; cin>>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%
Code:
/*đơn giá:
từ số: đơn giá
0-50: 500
51-150: 800
151-250: 1000
251-351: 1200
351 - : 1500 */
#include <iostream.h>

#include <iomanip.h>
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
Code:
#include <iostream.h>
#include <iomanip.h>
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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
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){
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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
void main(void)
{
clrscr();
int k; //% tang dan so hang nam
float s;//So lan tang
cout<<"Nhap % tang K="; cin>>k;
cout<<"Nhap so lan tang S="; cin>>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 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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
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 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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
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();
}
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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>
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<<"Nhap N="; cin>>n;
for(i=0;i<n;i++)
{
cout<<"F["<<i<<"]"; cin>>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 <iostream.h> //khai bao thu vien su dung luong nhap xuat
#include <iomanip.h> //thu vien dinh dang nhap xuat
#include <math.h> //thu vien cac ham toan hoc

#include <conio.h> //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
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
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;
}
}
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
Code:
#include <iostream.h> //khai bao thu vien su dung luong nhap xuat
#include <iomanip.h> //thu vien dinh dang nhap xuat
#include <math.h> //thu vien cac ham toan hoc
#include <conio.h> //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)
{
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: Viết hàm nhập n phần tử số thực từ bàn phím:
Chúng ta chỉ viết 1 hàm, khi cần sử dụng trong bài nào, ta sẽ đưa hàm này vào bài đó
Cách 1: (kiểu kinh điển)
Code:
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
Cách 2: Sử dụng con trỏ như là biến mảng
Code:
void NhapMang(float *a, int &n){
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

Ở đây a được hiểu là địa chỉ của đầu mảng, tương đương với a[0]
và (a+i) là địa chỉ của phần tử thứ i trong mảng
Cách 3: Kết hợp 2 kiểu trên
Code:
void NhapMang(float *a, int &n){
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
Cách sử dụng: Hàm nhập mảng với 3 cách trên đều có thể được sử dụng vào bài 11 chế với bài
giải lần 2 ở trên
Câu hỏi: Nếu đề bài là Nhập n phần tử số nguyên từ bàn phím thì chúng ta sẽ thay đổi chỗ
nào trong 3 hàm trên?
Đề bài: Nhập mảng n phần tử số nguyên từ bàn phím
a0) Liệt kê các số chẵn có trong mảng
b0) Đếm các số chẵn có trong mảng
c0) Tính tổng các số chẵn có trong mảng
a1) Liệt kê các số nguyên tố có trong mảng
b1) Đếm các số nguyên tố có trong mảng
c1) Tính tổng các số nguyên tố có trong mảng
Phân tích:
Ta đã có hàm nhập n phần tử số nguyên ở trên roài.
sau khi nhập xong số lượng n, và n phần tử số nguyên cho mảng
ta sẽ duyệt qua mọi phần tử của mảng:

trong mỗi lần duyệt, nếu gặp phần tử thỏa mãn điều kiện ( là số chẵn (a0), hoặc là số nguyên tố
(a1) ) thì sẽ xử lý phần tử đó theo yêu cầu (liệt kê, đếm hoặc là tính tổng )
Ta có code C++ giải các ý a1, b1, c1 như sau:
Code:
#include <iostream.h> //khai bao thu vien su dung luong nhap xuat
#include <iomanip.h> //thu vien dinh dang nhap xuat
#include <math.h> //thu vien cac ham toan hoc
#include <conio.h> //thu vien cung cap cac ham ve man hinh, ban phim
void NhapMang(int *a, int &n){
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
int kiemtra_snt(int x){ // tra ve 1 neu x la snt, nguoc lai tra ve 0
for(int i=2; i<=sqrt(x); i++)
if(x%i==0)return 0; //x chia het cho i => x khong phai la snt
return 1;
}
void lietke_snt(int a[], int n){ //ham in ra cac so nguyen to
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) cout<<a[i]<<" ";
cout<<endl;
}
int dem_snt(int a[], int n){ //ham tra ve so luong so nguyen to

int c=0; //khai bao bien c dung de dem snt
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) c++; //tang bien dem len 1
return c; //tra ve so luong snt dem duoc
}
int tong_snt(int a[], int n){ //ham tra ve so luong so nguyen to
int t=0; //khai bao bien t dung de tinh tong
for(int i=0; i < n; i++)
if(kiemtra_snt(a[i])) t += a[i]; //cong luy tien vao bien t
return t; //tra ve tong cac so nguyen to
}
void main(void)
{
clrscr(); //xoa man hinh
int a[100]; //khai bao bien mang a co 100 phan tu so nguyen
int n; //khai bao bien n luu so luong phan tu trong
mang
NhapMang(a,n); //nhap n gia tri cho tung phan tu cua mang
cout<<"Liet ke snt: ";
lietke_snt(a,n);
cout<<"so luong snt: "<<dem_snt(a,n)<<endl;
cout<<"Tong cac so nguyen to: "<<tong_snt(a,n)<<endl;
getch(); //cho nguoi dung an phim bat ky de thoat
}
Còn các ý a0, b0, c0 quả thực rất đơn giản, ta chỉ việc thay hàm kiemtra là sẽ cho kết quả như ý
muốn!
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Phân tích: Bài này có nhiều cách giải
Cách 1 (đơn giản nhất):
+đầu tiên yêu cầu người dùng nhập số lượng phần tử là n

+lặp n lần, mỗi lần nhập 1 giá trị, vừa nhập xong là so sánh với biến min và max, nếu giá trị vừa
nhập bé hơn min thì min sẽ bằng số vừa nhập, và nếu số đó lớn hơn biến max thì max sẽ bằng số
đó
Cách 2: dùng mảng (kinh điển)
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ gán tạm thời min và max bằng phần tử đầu tiên
+ duyệt qua toàn mảng: nếu giá trị đang duyệt bé hơn min hoặc lớn hơn max thì cập nhật lại min
và max
Cách 3: dài dòng nhất
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ sắp xếp tăng dần (hoặc giảm dần)
+ nếu sắp xếp tăng dần thì min sẽ là phần tử đâu tiên, và max sẽ là phần tử cuối cùng trong mảng
đã sắp xếp.
giờ muộn roài, đi ngủ cái đã, lúc khác post code lên.
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:
Code:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
//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<<"Nhap N="; cin>>n;
//Nhập số lượng phần tử mảng B
cout<<"Nhap M="; cin>>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];
}
//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;
}
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Cách 1 (đơn giản nhất):
+đầu tiên yêu cầu người dùng nhập số lượng phần tử là n
+lặp n lần, mỗi lần nhập 1 giá trị, vừa nhập xong là so sánh với biến min và max, nếu giá trị vừa
nhập bé hơn min thì min sẽ bằng số vừa nhập, và nếu số đó lớn hơn biến max thì max sẽ bằng số
đó
Code:
#include <iostream.h>
void main(){
int x, i, n, min, max;
cout << "Nhap so luong n = "; cin >> n; //nhap so luong
if ( n > 0 ) { //so luong > 0
cout<<" Gia tri phan tu thu dau tien = "; cin >> x; //nhap a[0]
min = max = x; //min=max=a[0]
for ( i = 2 ; i<=n; i++ ){ //vong lap i=2->n
cout<<" Gia tri phan tu thu "<<i<<" = "; cin >> x; //nhap a[i]

if ( x < min ) min = x; //cap nhat min
if ( x > max ) max = x; //cap nhat max
}
cout << "Gia tri lon nhat = " << max << endl; //in ket qua
cout << "Gia tri nho nhat = " << min << endl;
}
}
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Cách giải 2: dùng mảng (kinh điển)
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ gán tạm thời min và max bằng phần tử đầu tiên
+ duyệt qua toàn mảng: nếu giá trị đang duyệt bé hơn min hoặc lớn hơn max thì cập nhật lại min
và max
Code:
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
cout << "Nhap mang" << endl;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> *(a+i);
}
}
void TimMinMax(int a[], int n, int &min, int &max){
min = max = a[0];
for (int i = 1; i < n ; i++){
if ( a[i] < min ) min = a[i];
if ( a[i] > max ) max = a[i];
}
}

void main(){
int a[100], n, min, max;
NhapMang (a, n);
TimMinMax (a, n, min, max);
cout << "Gia tri lon nhat = " << max << endl;
cout << "Gia tri nho nhat = " << min << endl;
}
Chú ý: biến min và max trong đối số hàm TimMminMax là tham chiếu nhé
void TimMinMax(int a[], int n, int &min, int &max)
ở code trên hàm tìm min và max dùng cách kinh điển,
ta có thể thay đổi bằng cách dùng con trỏ như sau:
Code:
void TimMinMax(int *a, int n, int &min, int &max){
min = max = *a;
for (int i = 1, *p=++a; i < n ; i++, p++){
if ( *p < min ) min = *p;
if ( *p > max ) max = *p;
}
}
chú ý a tương đương với con trỏ trỏ vào đầu mảng nên *a tương đương với a[0]
ban đầu p trỏ vào phần tử a[1] (khối khởi tạo con trỏ *p=++a, tức là p trỏ tới a[1] )
trong mỗi vòng lặp p trỏ vào a[i], và cập nhật min và max nếu a[i] < min hoặc a[i] > max
sau đó p trỏ đến phần tử tiếp theo (lệnh p++ )
(biến i ở đây đảm bảo duyệt sẽ duyệt từ a[1] đến a[n-1] : duyệt hết)
Có ai ko hiểu cách làm việc của hàm tìm min max thứ 2 này không?
Đề bài: Nhập n phần tử số nguyên, in ra màn hình giá trị nhỏ nhất và lớn nhất trong mảng
Cách giải 3: dài dòng nhất
+ nhập mảng n phần tử số nguyên từ bàn phím (đã có thuật toán và code ở trên)
+ sắp xếp tăng dần (hoặc giảm dần)
+ nếu sắp xếp tăng dần thì min sẽ là phần tử đâu tiên, và max sẽ là phần tử cuối cùng trong mảng

đã sắp xếp.
Code:
#include <iostream.h>
void NhapMang(int *a, int &n){
cout << "Nhap N = "; cin >> n;
cout << "Nhap mang" << endl;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> *(a+i);
}
}
void SapXep(int a[], int n) { //sắp xếp 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] ){
int tg = a[i];
a[i] = a[j];
a[j] = tg;
}
}
void main(){
int a[100], n;
NhapMang (a, n);
SapXep (a, n);
cout << "Gia tri nho nhat = " << a[0] << endl;
cout << "Gia tri lon nhat = " << a[n-1] << endl;
}
Đề bài : Nhập n phần tử số nguyên. Nhập phần tử cần tìm kiếm X. Nếu trong n phần tử
đã nhập có X thì báo "tìm thấy", "số lần tìm thấy" và "các vị trí tìm thấy", ngược lại báo
"không tìm thấy"

Ví dụ: mảng A gồm các phần tử (theo thứ tự chỉ số tăng dần từ 0) là 5, 2, 1, 6, 2, 4, 1, 3
giá trị tìm kiếm X = 2
vậy kết quả sẽ là: Tìm thấy 2 (2 lần) tại vị trí: 1, 4
Phân tích:
sau khi nhập mảng
ta sẽ đếm số lượng phần tử X có trong mảng
nếu đếm thấy có: tiến hành liệt kê các vị trí
ngược lại thì thông báo không có.
Đơn giản vậy thôi
ta sẽ chia các công việc ra từng hàm riêng
hàm nhập kinh điển
hàm đếm trả về số lượng phần tử có giá trị bằng giá trị cho trước
hàm liệt kê: tươg tự hàm trên, mỗi khi gặp a[i] bằng x thì in vị trí ra (vị trí là i)
Code C++ đây thực hành nào:
Code:
#include <iostream.h>
void NhapMang(int a[], int &n){
cout << "Nhap so luong phan tu cua mang: "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> a[i];
}
}
int DemSoLan(int a[], int n, int x) {
int kq = 0;
for (int i=0; i < n; i++) if (a[i] == x) kq++;
return kq;
}
void LietKe(int a[], int n, int x) {
for (int i = 0; i < n; i++) if (a[i] == x) cout << i << " ";
}

void main(){
int a[100], n, x, d;
NhapMang (a, n);
cout << "Gia tri tim kiem = "; cin >> x;
d == DemSoLan (a, n, x);
if (d > 0){
cout << "Tim thay " << x << " (" << d << " lan) tai vi tri: ";
LietKe (a, n, x);
}
else
cout << "Khong tim thay " << x;
}
Đề bài: Nhập n phần tử số nguyên. Nhập phần tử cần tìm kiếm X. Đưa ra màn hình "TÌM
THẤY" nếu có X trong mảng, ngược lại báo "KHÔNG THẤY"
Code:
#include <iostream.h>
void NhapMang(int a[], int &n){
cout << "Nhap N = "; cin >> n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = "; cin >> a[i];
}
}
int TimKiem(int a[], int n, int x) {
for (int i=0; i < n; i++) if(a[i]==x) return 1;
return 0;
}
void main(){
int a[100], n, x;
NhapMang (a, n);
cout << "Gia tri tim kiem = "; cin >> x;

if( TimKiem (a, n, x) ){
cout<<"TIM THAY";
else
cout<<"KHONG THAY";
}
BAI TAP

×