Đề 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)
72 trang |
Chia sẻ: maiphuongdc | Lượt xem: 8962 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Bài tập lập trình C, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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à maxCá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
#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];
}
//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ảngCá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
void main(){
int x, i, n, min, max;
cout > n; //nhap so luong
if ( n > 0 ) { //so luong > 0
cout> x; //nhap a[0]
min = max = x; //min=max=a[0]
for ( i = 2 ; in
cout> 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ảngCá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
void NhapMang(int *a, int &n){
cout > 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] maxsau đó 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ảngCá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
void NhapMang(int *a, int &n){
cout > 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, 3giá trị tìm kiếm X = 2vậy kết quả sẽ là: Tìm thấy 2 (2 lần) tại vị trí: 1, 4Phân tích:sau khi nhập mảngta sẽ đếm số lượng phần tử X có trong mảngnế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ôita sẽ chia các công việc ra từng hàm riênghàm nhập kinh điểnhàm đếm trả về số lượng phần tử có giá trị bằng giá trị cho trướchà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
void NhapMang(int a[], int &n){
cout > n;
for (int i = 0; i < n ; i++){
cout > 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 > 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
void NhapMang(int a[], int &n){
cout > n;
for (int i = 0; i < n ; i++){
cout > 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 > x;
if( TimKiem (a, n, x) ){
cout<<"TIM THAY";
else
cout<<"KHONG THAY";
}
BAI TAP
Tìm ước số chung lớn nhất của hai số nguyên được nhập từ bàn phímGiải thích:Tính ước số chung lớn nhất của 91 và 287.Trước hết lấy 287 (số lớn hơn trong 2 số) chia cho 91:287 = 91*3 + 14 (91 & 14 sẽ được dùng cho vòng lặp kế)Nhận xét: bất kỳ số nào chia hết bởi 287 và 91 cũng sẽ chia hết bởi 287 - 91*3 = 14. Tương tự, số chia hết bởi 91 và 14 cũng chia hết bởi 91*3 + 14 = 287. Do đó, ƯSCLN(91,287) = ƯSCLN(91,14). Bài toán trở thành tìm ƯSCLN(91,14). Lặp lại quy trình trên cho đến khi phép chia không còn số dư như sau:91 = 14*6 + 7 (14 & 7 sẽ được dùng cho vòng lặp kế)14 = 7*2 (không còn số dư, kết thúc, nhận 7 làm kết quả)Cuối cùng ta có: 7 = ƯSCLN(14,7) = ƯSCLN(91,14) = ƯSCLN(287,91).
Code:
#include
#include
int main()
{
int a,b;
cout>a>>b;
int x= abs(a), y= abs(b), r;
while (y!=0)
{
r=x%y;
x= y;
y= r;
}
cout<<"USCLN="<<x;
}
Hoặc
Code:
#include
#include
int main()
{
int a,b;
cout>a>>b;
a=abs(a);
b=abs(b);
while(a-b)
{
if (a>b)
a=a-b;
else
b=b-a;
}
cout<<"USCLN="<<a;
}
BAI TAP
Muốn tìm bội số chung nhỏ nhất của hai số a,b ta tìm ước số chung lớn nhất của a và b. Sau đó lấy tích a*b chia cho ước số chung đó.
Code:
#include
#include
int main()
{
int a,b;
cout>a>>b;
int x= abs(a), y= abs(b), r;
while (y!=0)
{
r=x%y;
x= y;
y= r;
}
//x là ước số chung lớn nhất của a và b.
cout<<"USCLN="<<a*b/x;
}
Bài tập: Nhập mảng n phần tử số nguyên, nhập giá trị m, in ra màn hình các số không lớn hơn m theo thứ tự tăng dần, các số còn lại theo thứ tự giảm dầnPhân tích: Cho một ví dụ để các bạn hiểu yêu cầu nhé: Giả sử mảng nhập vào có 10 phần tử là: 2 9 8 3 7 4 6 5 1 0 và m là 6 thì cần phải in ra: 0 1 2 3 4 5 6 9 8 7Bài này có nhiều cách giải, sau đây là 1 cách:+khai báo mảng, khai báo biến số lương n, khai báo biến m+Nhập mảng: nhập n, nhập n phần tử+nhập m+sắp xếp toàn bộ mảng theo thứ tự tăng dần+tìm k là vị trí phần tử bé nhất trong mảng đã sắp xếp nhưng lớn hơn m+từ k đến cuối mảng: sắp xếp giảm dần (có thể dùng thuật toán soi gương ở đây)+in mảng ra màn hình sẽ được kết quả mong muốn.code C++ nè:
Code:
#include
void NhapMang(int *a, int &n){
cout > n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}
void sap_xep(int a[], int n, int m){
int i,j,k;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(a[i]>a[j]){
int tg=a[i];
a[i]=a[j];
a[j]=tg;
}
for(k=0; k<n; k++)
if(a[k]>m) break;
for(i=k; i<n-1; i++)
for(j=i+1; j<n; j++)
if(a[i]<a[j]){
int tg=a[i];
a[i]=a[j];
a[j]=tg;
}
}
void liet_ke(int a[], int n){
for(int i=0; i<n; i++)
cout<<a[i]<<" ";
}
void main(){
int a[100], n, m;
NhapMang(a,n);
cout>m;
sap_xep(a,n,m);
liet_ke(a,n);
}
Các bước trong code trên là y hệt với quá trình phân tích, nên malyfo ko viết chú thích vào nữa hẳn các bạn cũng hiểu cả!
phần trước có bài bài tập gptb2 với hệ số a, b, c bất kỳ, đã post 2 bài là gptb1 và gptb2 riêng biệt, nhưng k thấy có bạn nào ghép nó lại cảgiờ rảnh malyfo ghép lại nè:
Code:
#include
#include
#include
void gptb2(float a, float b, float c){
float d,x1,x2;
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<<endl;
}
else{
cout<<"pt k co nghiem thuc\n";
cout<<"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;
cout<<"nghiem ao 2="<<thuc<<"+i"<<ao<<endl;
}
}
void gptb1(float a, float b){
if(a!=0)
cout<<"pt co 1 nghiem thuc x="<<(-b/a)<<endl;
else
if(b==0)
cout<<"pt co vo so nghiem"<<endl;
else
cout<<"pt khong co nghiem thuc";
}
void main(void){
float a,b,c;
cout<<"nhap 3 hs cua ptb2: ";
cin>>a>>b>>c;
if(a!=0)
gptb2(a,b,c);
else
gptb1(b,c);
}
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ếuTừ 5 đến dưới 7: Trung bình Từ 7 đến dưới 9: Khá Từ 9 trở lên: Giỏi Giải:
Code:
#include
#include
void main(){
clrscr();
float a[100];
int n;
cout<<"Nhap so hoc sinh N=";
cin>>n;
for (int i=0;i<n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<setprecision(0)<<setiosflags(ios::fixed);
cout<<endl;
cout<<setw(10)<<"TT"<<setw(10)<<"Diem"<<setw(20)<<"Xep loai"<<endl;
for (int i=0;i<n;i++)
{
char *xeploai;
if (a[i]<5)
xeploai="Yeu";
else if(a[i]<7)
xeploai="Trung Binh";
else if(a[i]<9)
xeploai="Kha";
else
xeploai="Gioi";
cout<<setw(10)<<i<<setw(10)<<a[i]<<setw(20)<<xeploai<<endl;
}
getch();
}
Đề Bài: Nhập mảng n phần tử số nguyên, kiểm tra xem mảng có phải là tăng dần không? nếu không phải thì sắp xếp tăng dần. Nhập số nguyên cần tìm kiếm m, tìm kiếm theo thuật toán tìm kiếm nhị phân. nếu thấy báo số lượng tìm thấy, vị trí tìm thấy, ngược lại thông báo không thấy. Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên ... cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôiVà đây là Code hoàn thiện ghép nối các module trên
Code:
#include
void NhapMang(int *a, int &n){
cout > n;
for (int i = 0; i < n ; i++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}
void SapXep_TangDan(int a[], int 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;
}
}
int TimKiem_NhiPhan(int a[], int n, int x){
int i=0, j=n-1;
while(i<j){
int m = (i+j)/2;
if(x>a[m])
i=m+1;
else
j=m;
}
return (x == a[ i ]) ? i+1 : 0;
}
int KiemTra_TangDan (int a[], int n){
for( int i = 0; i a[i+1] ) return 0;
return 1;
}
void main(){
int a[100], n;
NhapMang(a, n);
if(! KiemTra_TangDan(a, n)) SapXep_TangDan(a, n);
int m, i;
cout << "Mảng sắp xếp tăng dần:";
for(i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
cout > m;
if( i = TimKiem_NhiPhan(a, n, m) )
cout << m << " o vi tri: " << i << endl;
else
cout << " Khong co phan tu " << m << " trong day " << endl;
}
Chú ý là bài trên chưa có tìm số lượng.và cũng chưa làm được "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên ... cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"
Giải quyết bài toán kiểu "Sau khi tìm xong, hỏi có tìm nữa khôg? nếu tìm nữa thì lại nhập m, rồi tìm y chang như trên ... cứ thế cho đến khi trả lời là không muốn tìm nữa thì thôi"cụ thể cho bài trên
Code:
...//các hàm ở trên k post lại nhé
void main(){
int a[100], n;
NhapMang(a, n);
if(! KiemTra_TangDan(a, n)) SapXep_TangDan(a, n);
int m, i;
cout << "Mang sap xep tang dan:";
for(i = 0; i < n; i++) cout << a[i] << " ";
cout << endl;
char c;
do{
cout > m;
if( i = TimKiem_NhiPhan(a, n, m) )
cout << x << " o vi tri: " << i << endl;
else
cout << " Khong co phan tu " << x << " trong day " << endl;
cout>c;
}while(c=='c'||c=='C');
}
Vậy cách chung để giải quyết là: khai báo 1 biến kiểu ký tự để chứa trả lờiđặt công việc cần làm trong vòng lặp kiểm tra sau do - whilekhi làm xong công việc thì hỏi lại người dùng có muốn chạy lại không? (c/k)và nếu là Có thì sẽ làm lại!
Code:
char c;
do{
//làm công việc gì đó, mà khi làm xong hỏi có làm tiếp kô, nếu đồng ý sẽ làm lại
cout>c;
}while(c=='c'||c=='C');
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 đó:
Code:
#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;
}
Nhập mảng n phần tử số nguyên, tìm giá trị phần tử xuất hiện nhiều nhất trong mảng, nếu có nhiều giá trị khác nhau cùng xuất hiện nhiều nhất thì liệt kê hết các giá trị đó ra.ví dụ 1:có 11 phần tử: 1 4 4 2 2 4 5 6 3 6 6thì thông báogiá trị 4 xuất hiện 3 lầngiá trị 6 xuất hiện 3 lần.ví dụ 2:có 12 phần tử: 1 2 3 3 3 2 2 3 3 4 4 5thì thông báogiá trị 3 xuất hiện 5 lầnPhân tích cách 2sau khi có mảng n phần tử số nguyênta sắp xếp tăng dần(hoặc giảm dần cũng OK) mảng đókhi đó cũng dùng mảng đếm d để lưu số lần xuất hiện của từng phần tử (chỗ này có khác đi 1 tí để dễ dàng việc loại bỏ giá trị lặp hơnbằng cách duyệt từ đầu đến hết mảng đã sắp xếpmỗi khi gặp giá trị trùng (trùng thì đứng cạnh nhau do đã sắp xếp) thì tăng số biến đếm thôid[0]=1;for( i = 1; i < n; i++ ) d[i] = ( a[i]==a[i-1] ) ? d[i-1]+1 : 1 ;khi đó tìm max = giá trị max trong mảng drồi liệt kê lại các giá trị a[k] tương ứng với d[k] có giá trị bằng maxCác bạn cùng phân tích nhé! OK?
Code:
#include
void NhapMang(int *a, int &n){
cout > n;
for (int i = 0; i < n ; i ++){
cout << "a[" << i << "] = ";
cin >> a[i];
}
}
void SapXep_TangDan(int a[], int 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 Dem(int *a, int *d, int n){
d[0]=1;
for(int i = 1; i < n; i ++)
if( a[i] == a[i-1] )
d[i] = d[i-1] + 1;
else
d[i] = 1;
//d[i] = ( a[i]==a[i-1] ) ? d[i-1]+1 : 1 ;
}
int max(int *a, int n){
int m = a[0];
for(int i = 1; i m) m = a[i];
return m;
}
void LietKe(int *a, int *d, int n){
int m = max(d, n);
for(int k = 0; k < n; k ++)
if(d[k] == m)
cout<<"Gia tri "<<a[k]<<" xuat hien "<<m<<" lan"<<endl;
}
void main(){
int a[100], d[100], n;
NhapMang(a, n);
SapXep_TangDan(a, n);
Dem(a, d, n);
LietKe(a, d, n);
}
BAI TAP
Viết chương trình đọc và 2 số nguyên và in ra kết quả của phép (+), phép trừ (-), phép nhân (*), phép chia (/). Nhận xét kết quả chia 2 số nguyên.
Code:
#include
#include
int main()
{
int a,b; //hai toan hang a,b
char ch;//dau cua phep toan
int s;
cout>a;
cout>b;
cout>ch;
switch (ch)
{
case '+':
s=a+b;
cout<<a<<ch<<b<<"="<<s;
break;
case '-':
s=a-b;
cout<<a<<ch<<b<<"="<<s;
break;
case '*':
s=a*b;
cout<<a<<ch<<b<<"="<<s;
break;
case '/':
if(b!=0)//Neu b0 thi a/b
{
s=a/b;
cout<<a<<ch<<b<<"="<<s;
}
else
cout<<"Khong thuc hien phep chia";
break;
default:
cout<<"Khong thuc hien duoc";
}
}
BAI TIEP
Viết chương trình nhập vào bán kính hình cầu, tính và in ra diện tích, thể tích của hình cầu đó. Hướng dẫn: S = 4*PI*R*R và V = (4/3)*PI*R*R*R.
Code:
#include
const float PI=3.1415;
int main()
{
float r,s,v;
do
{
cout>r;
}while(r<=0);
s=4*PI*r*r;
v=4*PI*r*r*r/3;
cout<<endl<<"Dien tich s="<<s;
cout<<endl<<"The tich v="<<v;
}
Viết chương trình nhập vào một số a bất kỳ và in ra giá trị bình phương (a2), lập phương (a3) của a và giá trị (a4).
Code:
#include
#include
int main()
{
double a;
cout<<"Nhap a=";
cin>>a;
double a2,a3,a4;
a2=pow(a,2);
a3=pow(a,3);
a4=pow(a,4);
cout<<endl<<"a2="<<a2;
cout<<endl<<"a3="<<a3;
cout<<endl<<"a4="<<a4;
}
BAI TIEP
Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số. Ví dụ: 02:11:05
Code:
#include
int main()
{
long int num;
int h,m,s;
cout>num;
//S la so giay
s=num%60;
num=num/60;
//m la so phut
m=num%60;
num=num/60;
//h la so gio
h=num%60;
num=num/60;
//Neu h<10 phai them so 0 dang truoc
if (h<10)
cout<<"\n0"<<h;
else
cout<<h;
if (m<10)
cout<<":0"<<m;
else
cout<<":"<<m;
if (s<10)
cout<<":0"<<s;
else
cout<<":"<<s;
}
BAI TIEP
Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn hay lẻ. Hướng dẫn: Nhập vào số nguyên dương x. Kiểm tra nếu x chia chẵn cho hai thì x là số chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ.
Code:
#include
int main()
{
int x;
do
{
cout>x;
}while(x<=0);
if (x%2==0)
cout<<"X la so chan";
else
cout<<"X la so le";
}
BAI TAP
Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nhất.
Code:
#include
int main()
{
int a,b,c,d;
cout<<"Nhap a,b,c,d";
cin>>a>>b>>c>>d;
int max,m1,m2;
max=(m1=(a>b)?a:b)>(m2=(c>d)?c:d)?m1:m2;
/*
Hoac
m1=(a>b)?a:b);
m2=(c>d)?c:d);
max=m1>m2?m1:m2;
*/
cout<<"Max="<<max;
}
Bài 5: Viết chương trình nhập vào số giây, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số.
Code:
#include
void main(){
long t;
cout>t;
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0; cout<<h<<':';
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
}
Nếu muốn viết ra giờ:phút:giây am/pmthì ta chỉnh một chút như sau:
Code:
#include
void main(){
long t;
cout>t;
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0;
if(h>12)cout<<(h-12)<<':'; else cout<<h<<":";
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
if(h>12)cout<<" pm"; else cout<<" am";
}
Bài 5: Viết chương trình nhập vào số giây, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số.
Code:
#include
void main(){
long t;
cout>t;
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0; cout<<h<<':';
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
}
Nếu muốn viết ra giờ:phút:giây am/pmthì ta chỉnh một chút như sau:
Code:
#include
void main(){
long t;
cout>t;
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0;
if(h>12)cout<<(h-12)<<':'; else cout<<h<<":";
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
if(h>12)cout<<" pm"; else cout<<" am";
}
Áp dụng bài trên, viết 1 hàm quy đổi, in ra thời gian vào và ra của lịch học buổi sángtiết 1 bắt đầu vào lúc 6h30 sáng
Code:
#include
void qd(long t){
int s = t%60;
int m = t/60%60;
int h = t/60/60%24;
if(h<10)cout<<0;
if(h>12)cout<<(h-12)<<':'; else cout<<h<<":";
if(m<10)cout<<0; cout<<m<<':';
if(s<10)cout<<0; cout<<s;
if(h>12)cout<<" pm"; else cout<<" am";
cout<<endl;
}
void main(){
long t=(long)6*60*60 + 30*60;
cout<<"vao t1="; qd(t); t+=45*60;
cout<<" ra t1="; qd(t); t+=5*60;
cout<<"vao t2="; qd(t); t+=45*60;
cout<<" ra t2="; qd(t); t+=5*60;
cout<<"vao t3="; qd(t); t+=45*60;
cout<<" ra t3="; qd(t); t+=10*60;
cout<<"vao t4="; qd(t); t+=45*60;
cout<<" ra t4="; qd(t); t+=5*60;
cout<<"vao t5="; qd(t); t+=45*60;
cout<<" ra t5="; qd(t); t+=5*60;
cout<<"vao t6="; qd(t); t+=45*60;
cout<<" ra t6="; qd(t);
}
Nhập vào số nguyên dương n. In ra màn hình các số nguyên tố từ 1 đến nBài này chưa có thuật toán nào hay hơn sàng Eratosthene là một giải thuật cổ xưa để lập bảng tất cả các số nguyên tố nhỏ hơn một số n cho trước. Giải thuật dựa trên tính chất: mọi hợp số m đều có ước nguyên tố không vượt quá căn bậc
Các file đính kèm theo tài liệu này:
- BaitaplaptrinhC.doc