1、C 语言程序设计(第三版)习题库1、设圆半径 r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用 scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include main()float r,h,C1,Sa,Sb,Va,Vb; scanf(_”%f”_, scanf(”%d”,_; C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf(_”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f”,Cl,Sa,Sb,Va,Vb
2、);2、输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位 2 小数。 #include main()float F,c; scanf(“%f“, _c=5*(F-32)/9_; printf(“c=%.2f“,c); 3、有一函数: 写一程序,输入 x 值,输出 y 值。 1032xy#include main()int x,y; printf(“输入 x:“); scanf(“%d“, if(x=1 int i=0; scanf(“%ld“, while(num0)i+; /*统计长度*/m=m*10+num%10;num =num/10;prin
3、tf(“数字长度为: %d“,i); printf(“逆序数字为: %dn“,m); 5、以下程序实现的功能:求三个数的最大值#includemain()int a,b,c,max;scanf(“%d %d %d“,if(ab)if(ac) max=a;else max=c; elseif(bc) max=b;else max=c;printf(“max= %d“,max);#include main()int x,y,z,t=0;scanf(“%d %d %d“,if(xy)t=y;y=x;x=t;if(xz)t=z;z=x;x=t;if(yz)t=z;z=y;y=t;printf(“%dn
4、“,z);6、输入两个正整数 m 和 n,求其最大公约数和最小公倍数。 /*枚举法*/#includemain() long m,n,i=1,j,s; scanf(“%ld,%ld“, for(;i=n)j=m; else j=n; for(;!(j%m=0j+); printf(“s=%ld,j=%ldn“,s,j); #include main()int a,b,k,temp,i,p;scanf(“%d,%d“,if(ab)temp=b;elsetemp=a;for(i=2;imain()int m,n,k,j,p,r=1;scanf(“%d,%d“,k= mn?m:n;j= mn? n:
5、m;dor=k%j;k=j;j=r;while(r!=0);printf(“%d,%d“,k,m*n/k);/*反复减法*/#includemain()int m,n,k,j,p,r=1;scanf(“%d,%d“,k= mn? m:n;j= mn?n:m;dop=k-j;if(jp) k=j; j=p;else k=p;while(p!=0);printf(“%d,%d“,k,m*n/k);7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #include“stdio.h“ main() char c;int i=0,j=0,k=0,l=0; while(c=getch
6、ar()!=n) if(c=A long b=0,sum=0;scanf(“%d %d”,for (i=1;imain()int i,m,n,k;for(i=100;imain()int i,a,n,s;for (i=100;i0) a=_n%10_;s+=a*a*a; n /=_10_;if (_s=i_) printf(“%d”,i);10、一个数如果恰好等于它的因子之和,这个数就称为“完数“。例如,6 的因子为1、2、3,而 6=1+2+3,因此 6 是“完数“。编程序找出 1000 之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 #includ
7、e main() int a,i,m;for (a =1; a_#includemain() int i=1,flag=1;double sum=0.0,s;dos=_1.0/(2*i-1)_;sum+=s*flag;i+;_flag=-flag_;while(_fabs(s)1e-6_);/*/printf(“pi=%f“,_4*sum_);11、有一分数序列:2/1,3/2,5/3, 求出这个数列的前 20 项之和。 #include#define N 20main()int i=1;double x=1,y=2, sum=0; while(_imain() int i,n=10;doub
8、le h=100,s=100; for(i=2;i#define N 10main() int i=1,sum=1; while(i+#include main() float x0,x1,a; scanf(“%f“, x1=a/2; do x0=x1;x1=_(x0+a/x0)/2_; while(_x11e-5_); printf(“%gn“,x1); 15、用牛顿迭代法求方程 在 1.5 附近的根。 0634223xx#include #include _#define f(x) 2*x*x*x-4*x*x+3*x-6 main() double x,y;x=_1.5_; doy = f
9、(x); x = x - y/(6*x*x-8*x+3); while(fabs(y)1e-6); printf(“x=%.3fn“,x); 16、用二分法求方程 在(-10,10) 之间的根 0634223xx#include #include #define f(x) 2x*x*x-4*x*x+3*x-6main() double x1=-10,x2=10,x,y;dox=(x1+x2)/2;y=f(x);if(y1e-6);printf(“x=%gn“,x); 17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如 输入75,输出 C。请完成填空#includemain
10、()int score;scanf(“_%d_“,switch(_score/10_)case 1:case 2:case 3:case 4:case 5: printf(“grade En”); _break_;case 6: printf(“grade Dn”);break;case 7: printf(“grade Cn”);break;case 8: printf(“grade Bn”);break;case 9: printf(“grade An”);break;_default_:printf(“Error input!n“);18、该程序功能:对 x=1,2,.,10,求 f(x
11、)=x*x-5*x+sin(x)的最大值。#include #include #define f(x) x*x-5*x+sin(x)void main() int x; float max;_max=f(1)_;for(x=2;xmain()int a,b,s;scanf(“%d%d“,s=_a*a+b*b_;if(s100) printf(“%d“,_s/100_);else printf(“%d“,_a+b_);20、有 1020 个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。#include main()int day,x1,x2;day=0;x1=
12、1020;while(_x10_)x2=_x1/2-2_; x1=x2; day+printf(“day=%d”,day);21、找出整数的所有因子#include main()int i,x;scanf(“%d”,i=1;for ( ; _imain()int n=0,i,j,k;for (i = 1;i main() int i,j,k,l=0;for (i = 0; imain() int n,k=1,s=0,m;for (n=1; n0_) k *=m%10;s+=m%10;_m/=10_;if (ks) printf(“%d”,n);25、从 3 个红球、5 个白球、6 个黑球中任意
13、取出 8 个球,且其中必须有白球,输出所有可能的方案。#include main() int i,j,k;for (i=0;i=0_)printf(“%3d %3d %3dn”,i,j,k);26、以下程序的功能是:判断一个四位数是否满足这样的条件:它的 9 倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。#includemain()int i,a,b,c,d,m;for(i=1000;i+)a=_i%10_;b=i/10%10;c=i/100%10;d=i/1000;m=_a*1000+b*100+c*10+d_;if(_m=i*9_) _break_;p
14、rintf(“i=%d“,i);27、以下程序完成两整数的交换。#include main()int a,b;printf(“请依次输入 a,b 的值:”);scanf(“%d,%d”, _a=a+b;_b=a-b_;_a=a-b_;printf(“交换后 :a=%d,b=%d”,a,b);28、以下程序的功能是判断输入的年份是否为闰年,若是则输出”yes” ,否则输出”No” 。#include main()int year ;scanf(“%d”,if (_year%400=0|year%4=0else printf(“No”);29、以下程序利用冒泡排序法对输入的 10 个数进行排序。#
15、include #define N 10void main() int aN;int i,j,t;printf( input 10 numbers :n); for (i=0;iai+1_) t=ai; ai=ai+1;ai+1 =t;printf(the sorted numbers :n);for(i=0;i#define M 100 / 范围 #define N (M+1)/2) / 奇数的个数void main( ) int i,j,aN;a0 = 2;for(i=1;i#define N 10main()int aN,i,j,k,t;for (i=0;iak_)t=ak; ak=ai
16、;ai=t; for(i=0;imain() int i=0,j=0,aNN,s1=0,s2=0;for(i=0;imain() int i,t,aN=1,7,8,17,23,24,59,62,101; scanf(“%d“, for(i=N-2;i0;i-) if(t#define N 11main() int i,aN,tmp; for(i=0;imain( ) int i,j,k,aNN;/* 初始化魔方阵置为 0,作为有无数字的判断*/for(i=0;i N-1) /到达右上角的位置i=i+2; j-; else if(iN-1)j=0; /上一数的列数为 n-1 时,下一数的列数为
17、0 if(_aij!=0_) /若下一数的位置上已经有数字, /则下一数存到上一个数行数加 1 的位置i=(i+2)%N;j=(j -1 + N)%N;aij= _k_; / 填数for(i=0;i#define M 5#define N 4main()int aMN,i,j,x,y,k,max,min;/x,y 分别是用来记录鞍点的位置int flag=0; /用于指示是否存在鞍点for(i=0;iaky) x=k; _min=aky_; if(_i=k_) printf(“a%d%d=%d 是鞍点n“,x,y,axy);flag=1; if (flag =0) printf(“不存在鞍点n
18、”);37、有个 15 数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出“无此数“ #include #define N 15main()int low,high,mid,x;int aN=1,4,9,13,21,34,55,89,144,233,377,570,671,703,812;low=0,high=N-1;scanf(“%d“,domid=_(low+high)/2_;if(amid=x) break;else if(amidvoid main() char string81 ;int i,num=0,word=0
19、;char c;gets(string);for (i=0;(c=stringi) _!=0_;i+) if(c= ) word=0;else if(word=0) word=_1_;num+;printf(There are %d words in the line.n ,num); 39、输出 10 行的杨辉三角形。11 11 2 11 3 3 1#include #define N 10main() int i,n,k,aN=1; printf(“%5dn”,a0); for(i=1;i=1;j-) aj= _aj+aj-1_;for(j=0; _jmain()int a10,n,i,j
20、, _max_ ;printf(“输入 n=“);scanf(“%d“,printf(“输入各数组元素: “);for(i=0;imax) _max=ai_ ;printf(“最大值 :%dn“,max);41、以下程序实现的功能是:将字符串 s 中所有的字符 c 删除。请完成程序填充#include#includemain()char s80;int i,j;gets(s);for(i=j=0; _si!=0_;i+)if(si!=c)sj=si;_j+_;sj=0;puts(s);42、以下程序的功能是:按顺序读入 10 名学生 4 门课程的成绩,计算出每位学生的平均分并输出,请完成程序填
21、充。#include#define N 10main()int n,k;float score,sum,ave;for(n=1;n#include main()int i,j,k;char str80;gets(str);for(i=0,j=_n-1_;i#include void doubleRoots(double a,double b,double c)double x1,x2,delta;delta=_b*b-4*a*c_;x1=(-b+sqrt(delta)/(2*a);x2=(-b-sqrt(delta)/(2*a);printf(“Equation has two differe
22、nt roots:n“);printf(“x1=%g,x2=%g“,x1,x2);void SingleRoot(double a,double b,double c)double x1;x1= _-b/2/a_;printf(“Equation has two equal roots:n“);printf(“x1=x2=%g“,x1);void NoRoot(void)printf(“No real root found for the equationn“);main()double a,b,c,delta;scanf(“%lf%lf%lf“,delta=b*b-4*a*c;if(delt
23、a0) _doubleRoots(a,b,c)_;else if(delta#include void IsPrime(_int n_)int i;int k=sqrt(n);for(i=2; _i=k+1) printf(“%dis Prime numbern“,n);else printf(“%d is not Prime numbern“,n);main()int n;scanf(“%d“,;IsPrime(_n_);46、用牛顿迭代法求根。方程为 ax3+bx2+cx+d=0,系数 a,b,c,d 由主函数输入。求 x在 1 附近的一个实根。求出后由主函数输出。 #include #i
24、nclude double EquationRoot(double a,double b,double c,double d)double x,y;x=1;doy=a*x*x*x+b*x*x+c*x+d;x=x-y/(3*a*x*x+2*b*x+c);while(_fabs(y)1e-6_);return _x_;main()double a,b,c,d,x;scanf(“%lf %lf %lf %lf“,x=_EquationRoot(a,b,c,d)_;printf(“x=%g“,x);47、输入 10 个学生 5 门课的成绩,分别用函数求:每个学生平均分;每门课的平均分;找出最高分所对应
25、的学生和课程;求平均分方差: ,其中 xi 为22)(1nxii一学生的平均分。 #include #define M 5#define N 10void EachStudentEverageMark(float a,int m,int n)/*求每个学生的平均分。m-学生数,n-课程数*/int i,j;float sum;for(i=0;iint num100; /职工号char name100100; /职工姓名int count=0;void informationInput(void) /职工信息输入int i,n;printf(“how many do you want to in
26、put:n“);scanf(“%d“,printf(“please enter the name and numbers:n“);for(i=count;inumj+1)t=numj;strcpy(str, _namej_);numj=numj+1;strcpy(namej, _namej+1_);numj+1=t;strcpy(namej+1,str);void search(int nb) /用职工号找出该职工的姓名int low,high,mid;low=0;high=count-1;domid=(low+high)/2;if(nummidnb)high=mid-1;else if(nu
27、mmidhigh)printf(“employee not existn“);else printf(“%s is foundn“,namemid);main()int k;informationInput();sorting();printf(“num to find:“);scanf(“%d“,search(k);49、写一函数,输入一个十六进制数,输出相应的十进制数。 #include int HexToDecimal(char* hex)int len,i,dec;if(hex=NULL) return 0;len=strlen(hex);for(i=0,dec=0;i=0char c
28、h80=0,t;while(n)chi+=_n%10+0_;n/=10;for(j=0;jint find(int y,int m,int d)int leap=0,i,s,days=0;if(y%400=0|_y%4=0for(i=1;ivoid shift(int p,int n,int m)int i,j,t;for(i=0;i=0;j-)pj+1=pj;p0= _t_;main()int aN,k,i;printf(“please enter the numbers:n“);for(i=0;i#define N 7void f(int a,int n,int k)int i,j=0,m
29、=n;/*j-报数,每次以 k 为基数循环移动,m 是桌上留下的人数*/for(i=0;m!=1;i+)if(i=n) i=0;/*数组指针循环移动*/if(_ai!=0_)j+;if(j=k+1) j=1;if(_j=k_)m-;ai=0;main()int aN;int i,k=4;for(i=0;iint strlength(char* str)int i,len=0;if(str=NULL) return _0_;for(i=0; _stri!=0_;i+) len+;return _len_;main()char ch=“chinease“;printf(“string length=%d“,strlength(ch);