C语言练习题精选
-- C语言练习题精选
1. 从键盘上输入两个整数,求出它们的和
#include "stdio.h"
void main()
{int x,y,s;
scanf("%d",&x);
scanf("%d",&y);
s=x+y;
printf("\\n s=%d",s); }
2. 已知三角形的底和高,求出三角形的面积。
#include "stdio.h"
void main()
{ int x,y;
float s;
x=4;
y=5;
s=x*y/2.0;
printf("\\n s=%f",s);
}
3. 从键盘上输入三角形的底和高,求出三角形的面积。
#include "stdio.h"
void main()
{ int x,y;
float s;
scanf("%d",&x);
scanf("%d",&y);
s=x*y/2.0;
printf("\\n s=%f",s);
}
4. 已知三角形的三边长,求出三角形的面积。
#include "stdio.h"
#include "math.h"
void main()
{
int a,b,c;
float p,s;
a=3;
b=4;
c=5;
p=(a+b+c)/2.0;
s=sqrt(p*(p-a) *(p-b) *(p-c));
printf("\\n s=%f",s);
}
5. 已知二元一次方程的三个系数,求方程的一个根。
#include "stdio.h"
#include "math.h"
void main()
{int a,b,c;
float root;
a=3;
b=4;
c=5;
root=(-b-sqrt(pow(b,2)-4*a*c))/(2.0*a);
printf("\\n root=%f",root);}
6. 编程实现符号函数。当x <0 ,则sgn(x)=-1, 当x >0 ,则sgn(x)=+1, 当x =0 ,则sgn(x)=0
#include "stdio.h"
void main()
{float x;
int y;
scanf("%f",&x);
if (x>0);
y=1;
if (x==0);
y=0;
if (x<0);
y=-1;
printf("\\n x=%f ,sgn(x)=%d",x,y);}
或者:
#include "stdio.h"
void main()
{float x;
int y;
scanf("%f",&x);
if (x>0);
y=1;
else if (x==0);
y=0;
else;
y=-1;
printf("\\n x=%f ,sgn(x)=%d",x,y);
}
或者:
#include "stdio.h"
void main()
{
float x;
int y;
scanf("%f",&x);
y=(x>0) ? 1: (x==0) ? 0 : -1;
printf("\\n x=%f ,sgn(x)=%d",x,y);
}
7. 从键盘上输入数字星期,在屏幕上显示英文星期。
#include "stdio.h"
void main()
{
float x;
scanf("%f",&x);
switch( x )
{
case0:printf("Sunday.\\n");break;
case1:printf("Monday.\\n");break;
case2:printf("Tuesday.\\n");break;
case3:printf("Wednesday.\\n");break;
case4:printf("Thursday.\\n");break;
case5:printf("Friday.\\n");break;
case6:printf("Saturday.\\n");break;
default:printf("不存在这个星期!\\n");
}
}
8. 从键盘输入三角形的三边长,判断出这三边能否构成三角形#include "stdio.h"
void main()
{
int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if ((a+b>c) && (a+c)>b) && (b+c)>a }
printf("这三边能构成三角形!");
else
printf("这三边不能构成三角形!"); }
9. 从键盘输入三个整数,将这三个数按从大到小的顺序排列起来#include "stdio.h"
void main()
{
int a,b,c,temp;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if ((a>b) && (a>c) && (b>c))
printf("这三数从大到小的顺序为:%d,%d,%d",a,b,c);
if ((a>b) && (a>c) && (b printf("这三数从大到小的顺序为:%d,%d,%d",a,c,b); if ((b>a) && (b>c) && (a>c)) printf("这三数从大到小的顺序为:%d,%d,%d",b,a,c); if ((b>a) && (b>c) && (c>a)) printf("这三数从大到小的顺序为:%d,%d,%d",b,c,a); if ((c>b) && (c>a) && (a>b)) printf("这三数从大到小的顺序为:%d,%d,%d",c,a,b); if ((c>b) && (c>a) && (b>a)) printf("这三数从大到小的顺序为:%d,%d,%d",c,b,a); } 或者这样写: #include "stdio.h" void main() {int a,b,c,temp; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if (a {temp=a; a=b; b=temp; } if (a {temp=a; a=c; c=temp; } if (b {temp=b; b=c; c=temp; } printf("这三数从大到小的顺序为:%d,%d,%d",a,b,c); } 10. 从键盘输入二个整数,求出最大值。 #include "stdio.h" void main() { int a,b,temp; scanf("%d",&a); scanf("%d",&b); if (a>b) temp=a; else temp=b; printf("这二个整数最大值为%d",temp); } 11. 从键盘输入三个实数,求出最大值。 #include "stdio.h" void main() { float a,b,c,temp; scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); if (a>b) temp=a; else temp=b; if (temp temp=c; printf("这三数最大值为%f",temp); } 12. 从键盘输入三个整数,在一个程序中既要求出最大值,还要求出最大值。#include "stdio.h" void main() { int a,b,c,max,min; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if (a>b) {max=a; min=b;} else {max=b;min=a;} if (max max=c; if (min>c) min=c; printf("这三个整数最大值为:%d,最小值为:%d.",max,min); } 13. 使用for循环编程求出1到100的和 #include "stdio.h" void main() { int i,s=0; for (i=1;i<=100;i++) s=s+i; printf("\\ns= %d",s); } 14. 使用当循环编程求出1到100的和 #include "stdio.h" void main() { int i=1,s=0; while (i<=100) { s=s+i; i++; } printf("\\ns= %d",s); } 15. 使用当循环编程求出1到100的和 #include "stdio.h" void main() { int i=1,s=0; do { s=s+i; i++; } while (i<=100); printf("\\ns= %d",s); } 16. 从键盘输入10个实数,求出最大值 #include "stdio.h" void main() { int i; float x,max; scanf("%f",&x); max=x; for (i=0;i<9;i++) { scanf("%f",&x); if (max max=x; } printf("这十数中的最大值为:%f",max); } 15. 从键盘输入10个整数,求出最小值 #include "stdio.h" void main() { int i x,min; scanf("%d",&x); min=x; for (i=0;i<9;i++) { scanf("%d",&x); if (min>x) min=x; } printf("这十整数中的最小值为:%d",min); } 16. 从键盘输入10个整数,求出它们的平均值#include "stdio.h" void main() { int i a[10],s=0; float aver=0.0; for (i=0;i<10;i++) { scanf("%d",&a[i]); s=s+i; } aver=s/10.0; printf("这十整数中的平均值为:%f",aver); } 17. 编程在屏幕上输出具有7行的正三角形 * *** ***** ******* ********* *********** ************* #include "stdio.h" void main() { int i ,j; for (i=0;i<7;i++) { for (j=0; j<6-i; j++) printf(" "); for (j=0; j<=2*i+1; j++) printf("*"); printf("\\n"); } } 18. 求出8的阶乘。#include "stdio.h" void main() { int i ; long p=1; for (i=1;i<9;i++) p=p*i; printf("\\n8的阶乘值为:%ld",p); } 19、从键盘输入20个整数,求出不大于90所有数的和 #include "stdio.h" void main() { int i ,s=0,x; for (i=0;i<20;i++) { scanf("%d",&x); if (x<=90) s=s+x; } printf("\\n不大于90所有数的和:%d",s); } 20、从键盘输入一个整数,判断这个数是否为素数 #include "stdio.h" void main() { int i ,x,flag=1; scanf("%d",&x); for (i=2;i { if ( x % i ==0) { flag=0; break; } } if (flag==1) printf("\\n该数是素数"); else printf("\\n该数不是素数"); } 21、从键盘输入20个整数,求出它们的和 #include "stdio.h" void main() { int i ,s=0,x[20]; for (i=0;i<20;i++) { scanf("%d",&x[i]); s=s+x[i]; } printf("\\n所有数的和:%d",s); } 22、从键盘输入20个整数,求出它们的平均值及比平均值大的数#include "stdio.h" void main() { int i ,s=0,x[20]; float aver=0.0; for (i=0;i<20;i++) { scanf("%d",&x[i]); s=s+x[i]; } aver=s/20.0; printf("平均为:%f\\n",aver); for (i=0;i<20;i++) { if (x[i]>aver) printf("比平均大的数为:[%d]=%d\\n",i,x[i]); } } 23、已知五个整数3,-5,8,2,9,求出最大值 #include "stdio.h" void main() { int i ,x[5]={ 3,-5,8,2,9},max; max=x[0]; for (i=0;i<20;i++) if (x[i]>max) max=x[i]; printf("最大值为:%d\\n",max); } 24、从键盘输入20个整数,求出它们的最小值,并求最小值所在位置#include "stdio.h" void main() { int i ,min,x[20],pos=0; for (i=0;i<20;i++) scanf("%d",&x[i]); min=x[0]; pos=0; for (i=1;i<20;i++) if (x[i]>min) { min=x[i]; pos=i; } printf("最小值为:%d,最小值位置为:%d\\n",min,pos); } 25、已知五个整数3,-5,8,2,9,按从大到小的顺序排列起来 #include "stdio.h" void main() { int j ,k, t , b[5]={ 3,-5,8,2,9}; for (j=0; j<4; j++) for (k=j-1; k<5; k++) if (b[j] { t= b[j]; b[j]= b[k]; b[k]=t; } for (j=0; j<5; j++) printf("\\n %d,",b[j]); } 26、从键盘输入10个实数,按从大到小的顺序排列起来 #include "stdio.h" void main() { int i, j ,k; float b[10],t; for (i=0;i<20;i++) scanf("%d",&b[i]); for (j=0; j<9; j++) for (k=j-1; k<10; k++) if (b[j] { t= b[j]; b[j]= b[k]; b[k]=t; } for (j=0; j<9; j++) printf("\\n %f,",b[j]); } 某班有43名学生,某门考试结束后,请按10段统计出各分数段的人数 #include "stdio.h" void main() { int j , x[43],fragment[12]; for (j=0; j<43; j++) scanf("%d",&x[j]); for (j=0; j<43; j++) fragment[x[j]/10]= fragment[x[j]/10]+1; for (j=0; j<11; j++) printf("\\n各分数段人数为%d", fragment[j]); } 或者写成: #include "stdio.h" void main() { int j , x[43],t ,fragment[12]; for (j=0; j<43; j++) scanf("%d",&x[j]); for (j=0; j<43; j++) { t= x[j]/10; fragment[t]= fragment[t]+1; } for (j=0; j<11; j++) printf("\\n各分数段人数为%d", fragment[j]); } 从键盘上输入两个字符串,并将它们交换后输出 #include "stdio.h" #include "string.h" void main() { int j ,k; char ch1[81],ch2[81],t[81]; scanf("%s",ch1); scanf("%s",ch2); strcpy(t , ch1); strcpy(ch1 , ch2); strcpy( ch2 ,t); printf("\\n %s,%s\\n,",ch1,ch2); } 26、已知五个字符串"China","American","Japan","France","Australia",编程将它们按从小到大的顺序排列起来 #include "stdio.h" #include "string.h" void main() { int j ,k; char t[81], b[5][81]= {"China","American","Japan","France","Australia"}; for (j=0; j<4; j++) for (k=j-1; k<5; k++) if ( strcmp(b[j]>b[k]) ) { strcpy(t , b[j]); strcpy(b[j] , b[k]); strcpy( b[k] ,t); } for (j=0; j<9; j++) printf("\\n %s,",b[j]); } 27、使用指针将x数组中的五个数依次输出 #include "stdio.h" void main() { int i ,x[5]; int *p=x; for (i=0;i<5;i++) { scanf("%d",p); p++; } p=x; for (i=0;i<5;i++) { printf("\\n%d",*p); p++; } } 或者(全指针型): #include "stdio.h" void main() { int x[5]; int *p=x; for (p=x;p scanf("%d",p); for (p=x;p printf("\\n%d",*p); } 28、已知一维x数组中有10个数,将每个元素加1后输出 //全指针型 #include "stdio.h" void main() { int x[10]; int *p=x; for (p=x;p scanf("%d",p); for (p=x;p printf("\\n%d",*p+1); } 或者(部分指针型) #include "stdio.h" void main() { int i ,x[10]; int *p=x; for (i=0;i<10;i++) { scanf("%d",p); p++; } p=x; for (i=0;i<10;i++) { printf("\\n%d",*p+1); p++; } } 29、在屏幕上显示文件a:\\abc\\abc.txt内容 #include void main( ) { FILE *fp; if((fp=fopen("a:\\\\abc\\\\abc.txt","r+"))==NULL) { printf("Cannot open file!\\n"); exit(1); } while (!feof(fp) ) printf("%c\\n",fgetc(fp) ); fclose(fp); } 30、将五个整数3,-5,8,2,9写到C盘mydocument子目录下的aaa.txt文件中 #include void main( ) { FILE *fp; int x[5]={ 3,-5,8,2,9},j; if((fp=fopen("c:\\\\ mydocument\\\\aaa.txt","w+"))==NULL) { printf("Cannot open file!\\n"); exit(1); } for (j=0 ; j<5 ; j++) fputc(x[j], fp); fclose(fp); } 31、从键盘上输入10个数,将它们按从大到小的顺序排列起来,主函数中使用input(a,10),sort(a,10),output(a,10)三个函数,编程实现 #include "stdio.h" void input(int a[] , int n); void sort(int a[] , int n ); void output(int *, int n ); void main() { int a[10]; input(a,10); sort(a,10); output(a,10); } void input(int b[] , int n) { int i; for (i=0 ; i scanf("%d",&b[i]);或scanf ("%d",(b+i)) return; } void sort(int b[] , int n ) { int j ,k, t; for (j=0; j for (k=j-1; k if (b[j] { t= b[j]; b[j]= b[k]; b[k]=t; } return; } void output(int b[], int n ); { int i; for (i=0 ; i printf("%d",b[i]);或printf("%d",*(b+i)); return; } 或者这样写: #include "stdio.h" void input(int a[]); void sort(int a[]); void output(int * ); void main() { int a[10]; input(a); sort(a); output(a); } void input(int b[10]) { int i; for (i=0 ; i<10; i++) scanf("%d",&b[i]);或scanf ("%d",(b+i)) return; } void sort(int b[10] ) { int j ,k, t; for (j=0; j<9; j++) for (k=j-1; k<10; k++) if (b[j] { t= b[j]; b[j]= b[k]; b[k]=t; } return; } void output(int b[10]); { int i; for (i=0 ; i<10; i++) printf("%d",b[i]);或printf("%d",*(b+i)); return; } 33、指出下列程序输出功能 #include "stdio.h" void swap1(int ,int ); void swap2(int * ,int *); void main() { int x , y; int *p1=&x; int *p2=&y; scanf("%d%d",p1,p2); printf("\\nx=%d,y=%d",*p1,*p2); swap1(*p1,*p2); printf("\\nx=%d,y=%d",*p1,*p2); swap2(p1,p2); printf("\\nx=%d,y=%d",*p1,*p2); } void swap1(int x1 ,int y1 ) { int t; t=x1; x1=y1; y1=t; printf("\\nx=%d,y=%d",x1,y2); return; } void swap2(int *p3 ,int *p4) { int t; t=*p3; *p3=*p4; *p4=t; printf("\\nx=%d,y=%d",*p3,*p4); return; } 34、从键盘上输入三个数,编写函数int max2(int,int)及int max3(int , int , int)求出最大值 #include "stdio.h" int max2(int,int); int max3(int , int , int); void main() { int x , y, z , t; scanf("%d%d%d",&x,&y,&z); t=max3(x , y , z); printf("\\n max=%d",t); } int max2(int x1 ,int y1 ) { if (x1>y1) return x1; else return y1; } int max3(int x1 ,int y1, int z1) { int t; t=max2(x1,y1); t=max2(t,z1); return t; } 35、使用指针求出3~100闭区间内所有素数 使用指针求出3~100闭区间内所有素数。(下标法) #include "stdio.h" void main() { int a[101], i , j, *p; for ( i=3 ; i <101 ; i++) a[i]=i; for ( i=3 ; i <101 ; i++) { for ( j=2 ; j if (a[i] % j == 0) { a[i]=0; break; } } for ( i=3 ; i <101 ; i++) if (a[i]>0) printf("%d\\n", a[i]); } 36、使用指针求出3~100闭区间内所有素数。(相对地址) #include "stdio.h" void main() { int a[102], i , j, *p; for ( i=3 ; i <101 ; i++) a[i]=i; p=a ; for ( i=3 ; i <101 ; i++) { for ( j=2 ; j if (*(p+i) % j == 0) { *(p+i)=0; break; } } p=&a[0]; for ( i=3 ; i <101 ; i++) if (*(p+i)>0) printf("%d\\n", *(p+i)); } 使用指针求出3~100闭区间内所有素数。(绝对地址) #include "stdio.h" void main() { int a[102], i , j, *p; for ( i=3 ; i <101 ; i++) a[i]=i; for (p=a +3; p { for ( j=2 ; j <*p ; j++) if (*p % j == 0) { *p=0; break; } }