c4-hvtc
Họ và tên :Le van huy
Lớp : CQ46/41.01
BÀI TẬP CHƯƠNG 4
Câu 1: Viết một chương trình hiển thị bảng cửu chương, mỗi chương là một lần gọi hàm.
Bài làm:
#include<stdio.h>
#include<conio.h>
void bang(int n);
void main()
{
int i;
for(i=1;i<=10;i++)
{
bang(i);
if(i%2==0)getch();
printf("
");
}
getch();
}
void bang(n)
int n;
{
int i;
for(i=1;i<=10;i++)printf("%d*%d=%d
",n,i,n*i);
}
Câu 2: Viết các hàm để :
a. Tính và cho giá trị là phần dư của phép chia hai số nguyên khá lớn.
b. Tính và cho giá trị là số nguyên kiểu long int bằng phần nguyên của một số thực.
c. Tính và cho giá trị là số thực bằng phần nguyên của một số thực kiểu double.
d. Tính và cho giá trị là phần phân của một số thực.
e. Cho giá trị là xâu bằng cách cắt ra n kí tự trái (hoặc phải) nhất của một xâu s.
Bài làm
#include<stdio.h>
#include<conio.h>
#include<math.h>
double mod(double a,double b)
{
double kq=a/b;
return a-floor(kq)*b;
}
long trunc(double x)
{
return (long)floor(x);
}
double phannguyen(double x)
{
return floor(x);
}
double phanphan(double x)
{
return (x-trunc(x));
}
char *left(char *s,int n)
{
char tam[100];
int i;
for(i=0;i<=n-1;i++)tam[i]=s[i];
tam[i]='\0';
return tam;
}
void main()
{
double a,b;
char s[100];
int n;
clrscr();
printf("Thu cac ham
");
printf("Nhap hai so nguyen:");
scanf("%lf%lf",&a,&b);
printf("Phan du cua %5.0lf chia %5.0lf la:%5.0lf",a,b,mod(a,b));
printf("
Nhap mot so thuc:");
scanf("%lf",&a);
printf("
phan nguyen cua so tren=%ld",trunc(a));
printf("
Phan thap phan=%1.5lf",phanphan(a));
printf("
Nhap mot xau bat ki:");
fflush(stdin);
gets(s);
printf("Nhap so ki tu cat:");
scanf("%d",&n);
printf("xau xau khi cat %d ki tu dau:%s",n,left(s,n));
getch();
}
Câu 3: Trong một chương trình, viết các hàm tìm ước số chung lớn nhất và bội số chung nhỏ nhất của hai số a, b và sử dụng trong các bài toán:
a.Tối giản một phân số
b.Tìm ước số chung lớn nhất và bội số chung nhỏ nhất của dãy n số nguyên dương nhập từ bàn phím
Bài làm
#include<stdio.h>
#include<conio.h>
long uscln(int a,int b)
{ long min,i;
min=b;
if(min>b) min=b;
for(i=min;i>0;i--)
if(a%i==0 && b%i==0)
return(i);
}
long bscnn(int a,int b)
{ long max,i;
max=a;
if(max<b) max=b;
for(i=max;i=a*b;i++)
if(i%a==0 && i%b==0)
return(i);
}
void main()
{
clrscr();
int a,b,chon,n,i,g,h;
int d[100];
printf("
chon cong viec roi an enter");
printf("
1.toi gian 1 phan so");
printf("
2.tim uscln va bscnn cua n so nguyen duong");
chon=getche();
switch(chon)
{
case '1': clrscr();
printf("
nhap phan so");
printf("
tu so = ");
scanf("%d",&a);
printf("
mau so = ");
scanf("%d",&b);
printf("
phan so toi gian la %d/%d",a/uscln(a,b),b/uscln(a,b));
break;
case '2': clrscr();
printf("so luong so n= ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("d[%d]=",i);
scanf("%d",&d[i]);
}
g=uscln(d[1],d[2]);
h=bscnn(d[1],d[2]);
for(i=3;i<=n;i++)
{ g=uscln(g,d[i]);
h=bscnn(g,d[i]);
}
printf("uscln= %d",g);
printf("
bscnn= %d",h);
}
getch();
}
Câu 4: Lập hàm kiểu int để kiểm tra một số tự nhiên n khá lớn có là số nguyên tố không. Nếu là số nguyên tố hàm cho giá trị 1, ngược lại, hàm cho giá trị 0.
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<math.h>
int kq,songuyento(int a)
{
int i;
kq=1;
for(i=2;i<=sqrt(a);i++)
if(a%i==0)
{ kq=0;
break;
}
return(kq);
}
void main()
{
clrscr();
int n;
printf(“nhap so can kiem tra n=”);
scanf(“%d”,&n);
songuyento(n);
if(kq==0) printf(“%d khong la so nguyen to cho gia tri = 0 “);
else printf(“ %d la so nguyen to cho gia tri = 1”);
getch();
}
Câu 5: Viết chương trình phân tích số tự nhiên n ra thừa số nguyên tố có sử dụng hàm xác định một số có là số nguyên tố hay không.
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<math.h>
int songuyento(int a)
{
int i;
if(a==1) return(0);
if(a==2 || a==3) return(1);
if(a>3)
for(i=1;i<=sqrt(a);i++)
if(a%i==0) return(0);
else return(1);
}
main()
{
int b[200];
int n,i;
int j=1;
printf(“nhap so n=”);
scanf(“%d”,&n);
for(i=2;i<=n;i++)
if(songuyento(i))
{ b[j]=i;
j++;
}
j=1;
while(n>1)
{ if(n%b[j]==0)
{ printf(“%d”,b[j]);
n=n/b[j];
}
else j++;
}
getch();
}
Câu 6: Trong một chương trình, viết các hàm để giải phương trình bậc nhất, hệ phương trình bậc nhất, phương trình bậc hai và một hàm main() để điều hành.
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<math.h>
float ptbac1(float a,float b)
{
if(a==0)
{ if(b==0) printf(“pt vo so nghiem”);
else printf(“pt vo nghiem”);
}
else printf(“nghiem cua pt la x=%f”,-b/a);
}
float heptbac1(float a1,float b1,float c1, float a2, float b2, float c2)
{
float d,dx,dy;
d=a1*b2-a2*b1;
dx=c1*b2-b1*c2;
dy=a1*c2-a2*c1;
if(d==0)
{ if(dx==0 && dy==0) printf(“he pt vo so nghiem”);
else printf(“he pt vo nghiem”);
}
else printf(“nghiem cua he la x=%f,y=%f”dx/d,dy/d);
}
float ptbac2(float a, float b, float c)
{
float d;
if (a==0)
{ printf(“
day k la pt bac 2”);
ptbac1(b,c);
}
else
{ d=b*b-4*a*c;
if (d<0) printf (“pt vo nghiem”);
else if(d==0) printf (“
pt co nghiem kep x=%f”,-b/(2*a));
{ printf(“
pt co 2 nghiem phan biet”);
printf(“
x1=%f”,(-b-sqrt(d))/(2*a);
printf(“
x2=%f”,(-b+sqrt(d))/(2*a);
}
}
main()
{
char menu;
float a,b,c,a1,b1,c1,a2,b2,c2;
clrscr();
printf(“
1.giai pt bac 1”);
printf(“
2.giai he pt bac 1”);
printf(“
3.giai pt bac 2”);
printf(“
go 1\2\3 de chon”);
menu=getch();
switch(menu)
{ case ‘1’: printf(“nhap a,b=”);
scanf(“%f %f”,&a,&b);
ptbac1(a,b);
break;
case ’2’: printf(“nhap a1,b1,c1,a2,b2,c2 =”);
scanf(“%f %f %f %f %f %f”,&a1,&b1, &c1, &a2, &b2, &c2);
heptbac1(a1,b1,c1,a2,b2,c2);
break;
case ‘3’: printf(“nhap a,b,c =”);
scanf(“%f %f %f”, &a, &b, &c);
ptbac2(a,b,c);
break;
}
getch();
}
Câu 7: Lập một hàm tính giá trị một đa thức bậc n rồi dùng hàm main() gọi đến hàm đó và hiển thị giá trị của đa thức trong [a,b] với bước nhảy là h chạy từ a.
Bài làm:
Đa thức bậc n có dạng : P(x)=a0xn + a1xn-1 +.....+ an-1x + an
#include<stdio.h>
#include<conio.h>
#define max 100
float tinhdathuc(float heso[],float x,int n)
{
float tong=0;
int i;
for (i=0;i<n;i++)
{ tong=(tong+heso[i])*x; }
tong=heso[n];
return tong;
}
void main()
{
float heso[max],x;
int n,i;
printf(“
cho biet so bac n= “);
scanf(“%d”,&n);
printf(“
nhap vao cac he so: “);
for(i=0;i<=n;i++)
scanf(“%d”,&heso[i]);
printf(“
nhap vao gia tri x: “);
scanf(“%f”,&x);
printf(“
kq tinh= %f”,tinhdathuc(heso,x,n));
getch();
}
Câu 8: Giả sử hàm f(x) bậc n đơn điệu trong [a, b] và có f(a) x f(b) <0. Viết chương trình tính nghiệm xấp xỉ của f(x) trong đoạn [a, b].
Gợi ý: Liên tục chia đoạn [a, b] làm hai phần và giữ lại để xét nửa nào có giá trị hàm ở hai đầu mút là trái dấu. Khi tại điểm chia, hàm f(x) ≈ 0 hoặc đoạn chia đủ nhỏ thì lấy điểm chia làm nghiệm.
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(float x)
{
return(x*x*x - x*x + x+1);
} /* 1 ham bat ki */
main()
{
float a,b;
printf(“nhap a,b= “);
scanf(“%f %f”,&a,&b);
if(f(a)*f(b)>=0) printf(“k xet”);
else
{ while (f(a)!=0 && f(b)!=0 && fabs(a-b)>=0.000001)
if(f((a+b)/2)*f(a)>0)
a=(a+b)/2;
else b=(a+b)/2;
if(f(a)==0) printf(“nghiem la %f”,a);
else printf(“nghiem la %f”,b);
}
getch();
}
Câu 9: Viết hai hàm để so sánh và đổi chỗ hai xâu s1 và s2 có cùng độ dài rồi sử dụng nó để sắp xếp một mảng xâu.
Bài làm:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void ss(char *x1,char *x2)
{
char *gan;
if(strcmp(x1,x2)>0)
{ gan=x1;
x1=x2;
x2=gan;
}
else { gan=x2;
x2=x1;
x1=gan;
}
printf("
Nhung xau da cho la:%s va' %s",x1,x2);
}
void noi( char *x1,char *x2)
{
printf("
noi xau:%s",strcat(x2,x1));
}
main()
{
char *x1,*x2;char d1[10],d2[10];
printf("
Go vao xau1:");
scanf("%s",d1);
printf("
Go vao xau2:");
scanf("%s",d2);
x1=d1;x2=d2;
ss(x1,x2); noi(x1,x2);
getch();
}
Câu 10: Dùng hàm đệ quy để hiển thị 1000 số trong dãy Fibonacy được xác định theo quy luật: Hai số đầu của dãy bằng 1, các số tiếp theo có giá trị bằng tổng hai số đứng trước trong dãy.
Bài làm:
#include<stdio.h>
#include<conio.h>
long fibo(int n)
{
if(n==1 || n==2) return(1);
else return(fibo(n-1)+fibo(n-2));
}
main()
{
int n,i;
printf(“nhap n= “);
scanf(“%d”,&n);
for(i=1;i<=n;i++);
printf(“%4ld”,fibo(i));
getch();
}
Bạn đang đọc truyện trên: Truyen2U.Net