1. Trang chủ
  2. » Công Nghệ Thông Tin

40 bài tập lập trình C

13 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 192,6 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 (xuống dòng) setw(n):...

Trang 1

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 <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);

Trang 2

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 <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;

}

Đá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 <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++)

{

Trang 3

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%

/*đơn giá:

từ số: đơn giá

0-50: 500

51-150: 800

151-250: 1000

251-351: 1200

351 - : 1500 */

#include <iostream.h>

Trang 4

#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

#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:

#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){

Trang 5

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 <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

Trang 6

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 <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

Trang 7

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 <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();

}

Trang 8

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 <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

Trang 9

cout << "a[" << i << "] = "; //moi lan: thong bao phan tu sap duoc nhap

i

} //ket thuc vong lap

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)

{

cout << "Nhap N = "; //thong bao cho nguoi dung nhap so luong

cout << "Mang truoc khi sap xep:"<<endl;

cout << "Mang sau khi sap xep:"<<endl;

}

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

Trang 10

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 <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

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

i

} //ket thuc vong lap

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)

{

Ngày đăng: 20/05/2021, 03:44

TỪ KHÓA LIÊN QUAN

w