版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include main()float r,h,C1,Sa,Sb,Va,Vb; scanf(“%f”,&r); scanf(”%f”,&h);; 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(“周长=%.2f,面积=%2f,表面积=%.2f,圆球体积=%.2f,圆柱体积=.2f,C1,Sa,Sb,
2、Va,Vb);2、输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include main()float F,c; scanf(%f,&F); c=5*(F-32)/9; printf(c=%.2f,c); 3、有一函数: 写一程序,输入x值,输出y值。 #include main()int x,y; printf(输入x:); scanf(%d,&x); if(x1) /* x1 */ y=x; printf(x=%3d, y=x=%dn,x,y); else if (1=x-10) /* 1x-10 */ 或x10y=2*x-1; p
3、rintf(x=%3d, y=2*x-1=%dn,x,y); else /* x10 */ y=3*x-11; printf(x=%3d, y=3*x-11=%dn,x,y); 4、给定一个不多于5位的正整数,要求: 求它是几位数;按逆序打印出各位数字。例如原数为321,应输出123。 #include main() long int num,m=0; int i=0; printf(请输入一个整数(099999):); scanf(%ld,&num); while(num0) 或num!=0i+; /*统计长度*/m=m*10+num%10; 求各位之和m+num%10 num = num/
4、10;printf(”数字长度为:%d”, i); printf(”逆序数字为:%d”, m); 5、以下程序实现的功能:求三个数的最大值#includemain() int a,b,c,max; scanf(%d %d %d,&a,&b,&c); if(ab) if(ac) max=a; else max=c; else if(bc) max=b; else max=c; printf(max= %d,max);6、输入两个正整数m和n,求其最大公约数和最小公倍数。 /*枚举法*/#includemain() long m,n,i=1,j,s; scanf(%ld,%ld,&m,&n); f
5、or(;i=m&i=n) j=m; else j=n; for(;!(j%m=0&_j%n=0);j+); printf(s=%ld,j=%ldn,s,j); /*辗转相除*/#includemain()int m,n,k,j,p,r=1;scanf(%d,%d,&m,&n);k= mn?m:n;j= mn? n:m;do /重要r=k%j; k=j;j=r; while(r0); 或 j0/r!=kprintf(%d,%d,k,m*n/k);/*反复减法*/#includemain()int m,n,k,j,p,r=1;scanf(%d,%d,&m,&n);k= mn? m:n;j= mn?
6、 n:m;dop=k-j; if(jp) k=j; j=p; else k=p; while(p0); printf(%d,%d,k,m*n/k);7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #includestdio.h main() char c;int i=0,j=0,k=0,l=0; while(c=getchar()!=n) if(c=65&c=97&c=a&c=A&c=48&c=0&c=9else if(c=32) k+; /空格统计或c=空格else l+; printf(i=%d,j=%d,k=%d,l=%dn,i,j,k,l); 8、求Sn=a+a
7、a+aaa+aaaaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include main() int a,n; long b=0,sum=0; scanf(“%d %d”,&a,&n); for (int i=1;i=n;i+) b = b*10+a; 移位技术 sum = sum+a; printf (“%ld”,sum);9、打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=13+53+33。 【程序1】#includemain()int i,m,n,k;f
8、or(i=100;i1000;i+)m=i%10; n=i/10%10; k=i/100; if(i=m*m*m+n*n*n+k*k*k) printf(%5d,i);【程序2】#includemain()int i,a,n,s;for (i=100;i0) a=n%10; s+=a*a*a; n /=10; if (s=i) printf(“%d”,i); 或s-i=0/!(s-i)10、一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6itsfactorsare1、2、
9、3 #include main() int a,i,m; for (a =1; a=1000;a+) for (i=1,m=0; i = a/2;i+) 或i=sqrt(a) if (!(a%i) m=m+i; if (m=a) printf(“%4d”,a); ? t11、利用:p/4=1-1/3+1/5-1/7+.级数求p的值,直到最后一项的绝对值小于10-6为止。求绝对值的函数为fabs()。#include#includemain() int i=1,flag=1; double sum=0.0,s; do s=1.0/(2*i-1); sum+=s*flag; i+; flag=-f
10、lag; 或flag=-1*flag while(fabs(pow(s)=1e-6);/*/ printf(pi=%f,);12、有一分数序列:2/1,3/2,5/3, 求出这个数列的前20项之和。 #include#define N 20main() int i=1;double x=1,y=2, sum=0; while(i=20) sum=sum+y/x;y =x+y;x =y-x ;i+; printf(%fn,sum);13、一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?#include main() int i,
11、n=10;double h=100,s=100; for(i=2;i=n;i+) h*=1/2; s=s+2*h; printf(s=%f,h=%fn,s,h); 14、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 #include #define N 10main() int i=1,sum=1; while(i+N)sum=(sum+1)*2; printf(sum=%dn,sum); 15、用迭代法求
12、。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include #include main() float x0,x1,a; scanf(%f,&a); x1=a/2; do x0=x1;x1=1.0/2*(x0+a/x0); while(fabs(x0-x1)=fabs(0.00001); printf(%gn,x1); ?16、用牛顿迭代法求方程在1.5附近的根。 #include #include #define F(x) 2*x*x*x-4*x*x+3*x-6 main() double x,y;x=1.5; doy = F(x); x = x - y/
13、(6*x*x-8*x+3); while(fabs(y)1e-6); printf(x=%.3fn,x); 16、用二分法求方程在(-10,10)之间的根 #include #include #define F(x) 2x*x*x-4*x*x+3*x-6main() double x1=-10,x2=10,x,y;do x=(x1+x2)/2; y=F(x); if(y1e-6);printf(x=%gn,x); 17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如 输入75,输出 C。请完成填空#includemain() int score; scanf(%d,&sco
14、re); switch(score/10) case 0: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; case 10:if(score=100) print(“grade An”);break; default:printf(Error input!n)
15、; 18、该程序功能:对x=1,2,.,10,求f(x)=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;xmax) max=f(x); 或max=f(x)max?f(x):max printf(%fn,max);19、程序功能:输入整数a和b的值,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。#includemain()int a,b,s; scanf(%d%d,&a,&b); s=a*a+
16、b*b; if(s100) printf(%d,s/100); else printf(%d,a+b);20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。#include main() int day,x1,x2; day=0;x1=1020; while(x10) x2=x1/2-2; x1=x2; day+ printf(“day=%d”,day);21、找出整数的所有因子#include main()int i,x;scanf(“%d”,&x);i=1;for ( ; ix/2;) if (x%i=0) printf(%d”,i); i+
17、;22、统计用数字0-9可以组成多少个各位上的数字没有重复的3位偶数。#include main() int n=0,i,j,k; for (i = 1;i = 9;i+) for (k = 0;k = 8; k+) if (k != i) for (j = 0;j = 9;j+) if (j!=i&j!=k&(100*i+10*k+j)%2=0) n+;printf(“n=%dn”,n);23、用100元换成1、2、5元的所有兑换方案。#include main() int i,j,k,l=0; for (i = 0; i=20;i+) for (j =0; j=0) printf(“%2d
18、 %2d %2d”,i,j,k); l = l + 1; if (l%5=0) printf(“n”); 24、输出1-100之间满足每位数的乘积大于每位数的和的数#include main() 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个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。#include main() int i,j,k; for (i=0;i=3;i+) for (j=1; j=0) printf(“%3d %3d %
19、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(9*i=m) break; printf(i=%d,i);27、以下程序完成两整数的交换。#include main() int a,b; printf(“请依次输入a,b的值:”); scan
20、f(“%d,%d”, &a,&b); 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”,&year); if (year%4=0|(year%400=0&year%100=0) printf(“yes”); else printf(“No”);29、以下程序利用冒泡排序法对输入的10个数进行排序。#include #define N 10void main() int aN; int i
21、,j,t; printf(input 10 numbers :n); for (i=0;iN;i+) scanf(%d,&ai); printf(n); for(j=0;jN-1;j+) for(i=0;iN-1-j;i+) if (aiai+1) t=ai; ai=ai+1; ai+1=t; printf(the sorted numbers :n); for(i=0;iN;i+) printf(%d ,ai); printf(n);30、用筛法求100之内的素数。筛法素数的思想是:1、取最小的数2,并声明它是素数,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及
22、它的倍数。3、重复步骤2至筛中无数,得到所有的素数。#include #define M 100 / 范围 #define N (M+1)/2) / 奇数的个数void main( ) int i,j,aN; a0 = 2; for(i=1;iN-1;i+) /* 初始数组实现第一步筛选 */ ai = 2*i+1; for(i=1;iN-1;i+) /* 第二步筛选 */ if(ai!=0) for(j=i+1;jN;j+) if(aj%ai=0) /* 倍数时置零筛去 */ aj=0; printf(nThe primer are 2-%d:n,M); for(i=0,j=0;iN;i+)
23、 /* 显示得到素数 */ if(ai!=0) printf(%5d,ai); if(+j)%10=0) /* 十个数换行 */ printf(n); getch();31、用选择法对10个整数从小到大排序。 #include #define N 10main() int aN,i,j,k,t; for (i=0;iN;i+) scanf(“%d”,&ai); for (i=0;iN-1;i+) k=i; for(j=i+1;jN;j+) if(ajak) k=j; if (k!=i) t=ak; ak=ai;ai=t; for(i=0;iN;i+) printf(“%d”,ai);32、求一
24、个NN矩阵主对角线元素、次对角线之和。#define N 3#include main() int i=0,j=0,aNN,s1=0,s2=0; for(i=0;iN;i+) for(j=0;jN;j+) scanf(%d,&aij); for(i=0;iN;i+) for(j=0;jN;j+) if(i=j) s1+=aij; /主对角线 if(i+j=N-1) s2+=aij; /次对角线 printf(s1=%d,s2=%dn,s1,s2);33、已有一个已排好的数组今输入一个数要求按原来排序的规律将它插入数组中。#define N 10#include main() int i,t,a
25、N=1,7,8,17,23,24,59,62,101; scanf(%d,&t); for(i=N-2;i0;i-) if(tai) ai+1=ai; else break;ai+1= t;for(i=0;i10;i+) printf(%5d,ai); 34、将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 #include #define N 11main() int i,aN,tmp; for(i=0;iN;i+) scanf(%d,&ai); for(i=0;iN/2;i+) tmp=ai; ai= aN-1-i; N-1-i=tmp;f
26、or(i=0;iN;i+)printf(%5d,ai); 35、打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1n2的自然数构成的魔方阵。 #define N 3#include main( ) int i,j,k,aNN;/* 初始化魔方阵置为0,作为有无数字的判断*/for(i=0;iN;i+) for(j=0;jN;j+) aij= 0;j=N/2;a0j=1; /* 存放第一个数字 */* 存放2n*n */for(k=2;k=N*N;k+) i-; / 数存放前一数行数减1、列数加1
27、 j+;if (i N-1) /到达右上角的位置 i=i+2; j-; else if(iN-1) j=0; /上一数的列数为n-1时,下一数的列数为0 if(aij!=0) /若下一数的位置上已经有数字, /则下一数存到上一个数行数加1的位置 i=(i+2)%N; j=(j -1 + N)%N; aij= k; / 填数for(i=0;iN;i+) /输出魔方阵 printf( ); for(j=0;jN;j+) printf(%4d,aij); printf(nn);36、找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 #include #defin
28、e M 5#define N 4main() int aMN,i,j,x,y,k,max,min;/x,y分别是用来记录鞍点的位置 int flag=0; /用于指示是否存在鞍点for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,&aij);for(i=0;iM;i+)max=ai0; y=0; /先默认第一个数是最大值for(k=1;kN;k+)if(maxaik) y=k;max=aik; min=aiy; x=i; /先默认第一个数是最小值 for(k=0;kaky) x=k;min=aky; if(x=i) printf(a%d%d=%d 是鞍点n,x,y,axy
29、);flag=1; if (flag =0) printf(“不存在鞍点n”);37、有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出无此数 #include #define N 15main() int low,high,mid,x; /low=0,high=N-1 int aN=1,4,9,13,21,34,55,89,144,233,377,570,671,703,812; low=0,high=N-1; scanf(%d,&x); do mid=(low+high)/2; if(amid=x) break;
30、else if(amidx) low=mid+1; else high=mid-1; while(low=high); if(low=high) printf(x is the %dth numbern,mid+1);else printf(x not exist in the arrayn);38、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。0是字符串结束的唯一标识#include void main() char string81; int i,num=0,word=0; char c; gets(string); for (i=0;(c=stringi)!=0;i+) if
31、(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; j=i;j+) printf(“%5d”,ai); printf(“n”); 40、以下程序的功能是:从键盘输入一个整数n(n10)和n个整数,存入数组a中,
32、先依次输出各个数组元素的值,然后找出最大值,并输出。#includemain() int a10,n,i,j, max; printf(输入 n=); scanf(%d,&n); printf(输入各数组元素:); for(i=0;in;i+) scanf(%d, &ai); printf(输出各数组元素:); for(i=0;in;i+) printf(%d , ai ); printf(n); max=a0;for(j=1;jmax) max=ai ;printf(最大值:%dn,max);41、以下程序实现的功能是:将字符串s中所有的字符c删除。请完成程序填充#include#inclu
33、demain() 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门课程的成绩,计算出每位学生的平均分并输出,请完成程序填充。#include#define N 10main() int n,k; float score,sum,ave; for(n=1;n=N;n+) sum=0; for(k=1;k=4;k+) scanf(%f,&score); sum+=score; ave=sum/4; printf(NO.%d:%fn,
34、n,ave);43、本程序的功能是:输入一串字符,将字符串中的字符反序输出。#include #include main()int i,j,k;char str80;gets(str);for(i=0,j=strle(str)-1;ij;i+,j-) k=stri; stri=strj; strj=k;puts(strj);待定44、求方程ax2+bx+c=0 的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include #include void doubleRoots(double a,double b,double c)
35、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 different 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(v
36、oid) printf(No real root found for the equationn);main() double a,b,c,delta; scanf(%lf%lf%lf,&a,&b,&c); delta=b*b-4*a*c; if(delta0) doubleRoots(a,b,c); else if(delta0) Noroot();else singleRoot(a,b);45、写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 #include #include void IsPrime(int n) int i; int k=sqrt(n); for(i
37、=2;i=k+1) printf(%dis Prime numbern,n); else printf(%d is not Prime numbern,n);main() int m; scanf(%d,&m); IsPrime(m); 实际(在)46、用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出后由主函数输出。 #include #include double EquationRoot(double a,double b,double c,double d) double x,y; x=1; do y=a*x*x*x+b*
38、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,&a,&b,&c,&d); x=EquationRoot(a,b,c,d);printf(x=%g,x);47、输入10个学生5门课的成绩,分别用函数求:每个学生平均分;每门课的平均分;找出最高分所对应的学生和课程;求平均分方差:,其中xi为一学生的平均分。 #include #define M 5#define N 10void EachStudentEverageMar
39、k(float a,int m,int n)/*求每个学生的平均分。m-学生数,n-课程数*/ int i,j; float sum; for(i=0;im;i+) sum=0.0; for(j=0;jn;j+) sum+=aji; printf(average mark of the %dth stu is%gn,i+1,sum/n); void EachCourseEverageMark(floot aN,int m,int n)/* 每门课的平均分 */ int i,j; float sum; for(i=0;in;i+) sum=0.0; for(j=0;jm;j+) sum+=aij
40、; printf(average mark of the %dth stu is%gn,i+1,sum/n); void MaxScore(float a,int m,int n) /* 找出最高分所对应的学生和课程*/ int i,j,s,t; float max=a00;s=0,t=0; for(i=0;in;i+) for(j=0;jm;j+) if(maxaij) max=aij; s = i;t = j; printf(the %dth course and the %dth stu has the maxn,s,t);void AverageVariance(float a,int m,int n)/* 求平均分方差 */ float delta,ave; int i,j; for(i=0;im
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理评估中的疼痛管理
- 护理研究中的跨文化研究方法
- 护理基本护理伦理学
- 2005年7月国开电大行政管理本科《城市管理学》期末纸质考试试题及答案
- 护理教学比赛活动推广
- 护理教学研究:方法与成果
- 护理团队冲突管理与解决
- 护理服务品牌建设
- 快手平台内容审核部招聘与面经
- 快递公司业务部经理的招聘全解
- 2026年陕西航空职业技术学院单招职业适应性测试题库带答案详解(能力提升)
- 2026年自贡市市本级招用高校毕业生从事公共服务(58人)笔试参考题库及答案解析
- 【2026年中考复习】全国中考物理真卷综合能力题100道(上)
- 2026年雨季安全驾驶试题及答案
- 高中历史必背阶段特征-2026届高三统编版历史一轮复习(选必融合)
- 2026年安徽工商职业学院单招职业技能测试题库带答案详解ab卷
- 2026年安徽工贸职业技术学院单招职业技能测试题库带答案详解(基础题)
- 纳税人员财会制度
- 2026年西安科技大学辅导员招聘(15人)考试参考试题及答案解析
- 医保局联席会议制度
- 2026年南京铁道职业技术学院单招职业适应性测试题库及答案详解(名校卷)
评论
0/150
提交评论