《最新C语言习题及解答.doc》由会员分享,可在线阅读,更多相关《最新C语言习题及解答.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品资料C语言习题及解答.C语言习题及解答1、输入一个华氏温度,要求输出摄氏温度。公式为#include void main( )float C,F; printf(Input F:); scanf(%f,&F); C=5.0/9*(F-32); printf(C=%.2fn,C);2、编写程序,从键盘输入一个大写字母,将它转换为对应的小写字母后输出。(提示:同一个字母的大写比小写小32)#include void main( ) char ch; printf(Input ch:); scanf(%c,&ch); ch=ch+32; printf(“ch=%cn,ch);3、编写程序,输入梯
2、形的上底、下底和高,计算并输出梯形的面积。 #include void main( ) float a,b,h,area; printf(Input a,b,h: ); scanf(%f%f%f, &a,&b,&h); area=(a+b)*h/2; printf(area=%.2fn, area);4、编写程序,输入圆半径r,求圆周长、圆面积、圆球表面积、圆球体积。#include #define PI 3.1415926void main( )float r,L,s1,s2,V; printf(Input r:); scanf(%f, &r); L=2*PI*r; s1=PI*r*r; s
3、2=4*PI*r*r; V=4.0/3*PI*r*r*r; printf(L=%.2f, s1=%.2f, s2=%.2f, V=%.2fn, L,s1,s2,V);5、有三个电阻r1、r2、r3并联,编写程序计算并输出并联后的电阻r。已知电阻并联公式为:#include void main( ) float r,r1,r2,r3; printf(Input r1,r2,r3: ); scanf(%f%f%f, &r1,&r2,&r3); r=1/(1/r1+1/r2+1/r3); printf(r=%.2fn, r);6、由键盘输入一个10-99之间的整数,将该数分解,分别输出其个位数字和十
4、位数字。例如,输入85,输出:5,8。提示:用算术运算中的整除和取余运算实现。#include void main( )int x, a, b; scanf(%d, &x); a=x%10;b=x/10;printf(“a=%d, b=%dn, a, b);7、编写程序,输入三角形的三条边,计算并输出三角形的面积。(注意输入的三条边必须要能构成一个三角形)求三角形的面积公式为其中s=(a+b+c)/2。 #include #include void main( )scanf(%f%f%f, &a,&b,&c);s= (a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c)
5、;printf(area=%.2fn, area);8、周期为T秒的人造卫星离地面的平均高度H的计算公式为:其中:M=61024kg是地球质量,R=6.371106m是地球半径。编写程序,输入人造卫星的周期T,计算并输出人造卫星离地面的高度H。 算法提示:求xy结果的数学函数是pow(x, y) #include #include #define PI 3.1415926void main( )double M=6E24,R=6.371E6,T,H,x; printf(Input T: ); scanf(%lf,&T); x=6.67E-11*M*T*T/(4*PI*PI); H=pow(x,
6、1.0/3)-R; printf(H=%.2En, H);9、求任意三个整数的平均值。要求:输入数据与输出结果都应有相应的提示信息。且输出数据取小数点后两位数字显示。#include void main( )float a,b,c,ave;printf(“Input 3 numbers:”);scanf(%f%f%f, &a,&b,&c);ave= (a+b+c)/3;printf(“average=%.2fn, ave);10、输入一个字符,并输出。其中有一个条件是如果该字符是小写的英文字母,则需把它转换成大写字母再输出。#include void main( )char ch; print
7、f(Input ch: ); scanf(%c, &ch); if (ch=a&ch=z) ch=ch-32; printf(%cn, ch);11、输入年号,判断并输出该年是否为闰年。所谓闰年,是指能被4整除,但不能被100整除;或能被400整除的年份。#include void main( )int year;printf(Input year: );scanf(%d,&year); if (year%4=0&year%100!=0|year%400=0)printf(%d is a leap year.n,year);else printf(%d is not a leap year.n
8、,year);12、编写程序,输入一个字符存入变量ch中,根据该字符的ASCII码值判断并输出字符的类型,即字母(alpha)、数字(numeric)或其他字符(other)#include void main( ) char ch; printf(Input ch: ); scanf(%c, &ch); if (ch=A&ch=a&ch=0 & ch=9) printf(numericn); else printf(othern);13、有一个函数,编写程序,输入x的值,计算并输出y值。#include #include void main( )double x,y; printf(Inpu
9、t x: ); scanf(%lf, &x); if (x-1) y=x*x*x-1; else if (x=1) y=-3*x+1; else if (x=10) y=3*exp(2*x-1)+5;else y=5*x+3*log10(2*x*x-1)-13;printf(y=%.2fn, y);14、从键盘输入三个数,代表三条线段的长度。请编写程序,判断这三条线段组成的三角形是什么类型(等边、等腰、不等边或不能构成三角形)。#include void main( )float a,b,c; printf(Input a,b,c:);scanf(%f%f%f,&a,&b,&c);if (a+
10、b=c | b+c=a | c+a=b) printf(It is not a triangle!n);else if (a=b&b=c) printf(It is a equilateral triangle!n);else if (a=b|b=c|c=a) printf(It is a isosceles triangle!n);else printf(It is a common triangle!n);15、简单选择界面的编程,要求用switch实现多分支。从键盘输入整数,输出不同的字符串: 输入1,输出Good morning; 输入2,输出Good afternoon; 输入3,输
11、出Good evening; 输入4,输出Good night; 输入其它数字,输出Bye-bye。#include void main( ) int x; printf(Input x: ); scanf(%d, &x); switch(x) case 1: printf(Good morningn); break; case 2: printf(Good afternoonn); break; case 3: printf(Good eveningn); break; case 4: printf(Good nightn); break; default: printf(Bye byen)
12、; 16、从键盘输入若干整数,以0结束,判断并输出其中的最大数。#include void main( )int x,max;Scanf(“%d”,&x);max=x;While(x!=0)if(xmax)max=x;Scanf(“%d”,&x);printf(max=%dn,max); 17、输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、空格、数字和其它字符的个数。 while (ch!=n) if (ch=A&cn=a&ch=0&ch=9) d=d+1;else e=e+1; #include void main( ) char ch; int a=0,b=0,c=0,
13、d=0,e=0; printf(Input a string: ); while (ch=getchar( )!=n) if (ch=A&cn=a&ch=0&ch=9) d=d+1; else e=e+1; printf(%d,%d,%d,%d,%dn,a,b,c,d,e);数学表达式的写法:x=6.67E-11*M*T*T/4*PI*PI; x=6.67E-11*M*T*T/(4*PI*PI); x=6.67E-11*M*T*T/4/PI/PI; x=pow(6.67E-11*M*T*T/(4*PI*PI),1.0/3); 2 、scanf、printf函数的格式:scanf(%f%f%f,
14、&a,&b,&c); /双引号间不要加其它任何符号scanf(%lf%lf%lf,&a,&b,&c); /double型输入时应使用%lfprintf(area=%.2fn,area); /printf函数中常加其它说明字符数学函数的使用方法;同时需加上#include double pow(double x,double y);4、方法一:使用scanf函数scanf(%c,&ch); /读入第一个字符while (ch!=n) if () scanf(%c,&ch); /读入其它字符/循环之前读入第一个字符,以便第一次判断表达式是否成立;循环体最后读入下一个字符,以便判断循环是否继续执行5
15、、5/9.0*(F-32)5.0/9.0*(F-32)5*(F-32)/918、分别用while、do-while和for语句计算 (即求1!+2!+3!+20!),并试着简化程序。 #include void main( )int i;double fact,sum;i=1; sum=0;fact=1;while (i=20)fact=fact*i; sum+=fact; i+; printf(%.0lfn,sum);19计算: #include void main( ) int n=1; double sum=0; while (n=10) sum+=n*n+n-2.3; n+; prin
16、tf(%lfn,sum); 20、输出所有的水仙花数。水仙花数是指一个3位数,各位数字的立方和等于该数本身,例如153=13+53+33。分析:对每一个3位数来说,分解出它们的个位、十位和百位,然后判断它们的立方和是否等于该数本身。 #include void main( ) int i,a,b,c; printf(The narcissus numbers are: );for (i=100; i=999; i+)a=i/100;b=i%100/10;c=i%10;if (i=a*a*a+b*b*b+c*c*c) printf(%d ,i);21.有一分数序列 求出这个数列的前20项之和。
17、之和。 #include void main( ) int i; double a,b,sum=0; a=2;b=1; for (i=1;i=20;i+) sum+=a/b;a=a+b;b=a-b; printf(sum=%lfn,sum);22、用循环语句编写程序,输出如下图案:* * * * * * * * * * * * * * * * * * * * *#include void main( ) int i,j; for (i=1;i=6;i+) /输出一行 for (j=1;j=i-1;j+) /输出空格 printf( );for (j=1;j=7-i;j+) /输出*printf
18、(* ); /*后有个空格 printf(n); 23. 3、求 的值,其中a是一个数字2+22+222+2222+22222(此时a=2,n=5),。 a和n均由键盘输入。 #include void main( ) int a,n,i; double x=0,sum=0; printf(Input a,n: ); scanf(%d%d,&a,&n); for (i=1;i=n;i+) x=x*10+a; sum+=x; printf(sum=%.0lfn,sum);24、输出3100之间的全部素数#include #include void main() int m, k, i; for
19、(m=3; m=100; m+=2) k=sqrt(m); for (i=2; i=k; i+) if (m%i=0)break; if (i=k+1) printf(%-5d,m); 25、从键盘输入10个整数存放在一个一维数组中,找出最大的数并输出该数及其下标。 #include void main( )int a10,i,max,k;for (i=0;i10;i+) scanf(%d, &ai);max=a0; k=0;for (i=1;i10;i+) if (maxai) max=ai; k=i; printf(a%d=%dn, k,max);26、设有一个已按从大至小顺序排好的数列存
20、放在一维数组中,依次为81,76,66,61,54,47,36,30,22,16。现输入一个数,仍按原来的排序规律将其插入到数组中,试编程。 #include void main( )int a11=81,76,66,61,54,47,36,30,22,16;int x, i;scanf(%d,&x);for (i=9; i=0; i-)if (aix)ai+1=ai;else break;ai+1=x;for (i=0; i=10; i+) printf(%5d,ai);另解#include void main() int a11=81,76,66,61,54,47,36,30,22,16;
21、 int x, i, j; printf(Input a number:); scanf(%d,&x); for (i=0; i=9; i+) if(ai=i; j-) aj+1=aj; ai=x; for (i=0; i=10; i+) printf(%5d,ai);27、从键盘输入N个数(在数组中从下标为0的位置开始存放),N由下面的符号常量定义。用冒泡法将下标为m到下标为n的数按降序排序。m和n通过键盘输入。假设0mN-1,mnN-1 #define N 15#include #define N 15void main( ) int aN, i, j, t, m, n; for (i=0
22、;iN;i+) scanf(%d, &ai); scanf(%d%d, &m, &n); for (i=0;in-m;i+) for (j=m;jn-i;j+) if (ajaj+1) t=aj; aj=aj+1; aj+1=t; for (i=0;iN;i+) printf(%d ,ai);28、二分法又称为折半查找法,它用于在一个有序的序列上查找指定的数。其基本思路是:先确定待查元素的范围,将其分成两半,然后测试中间位置元素的值,如果相等,则找到待查元素。如果待查元素的值大于中间元素,就缩小待查范围,只测试中间元素之后的元素;反之,测试中间元素之前的元素,测试方法同前。试编写程序,应用折半
23、查找法从存有10个整数的a数组中对输入的关键字m进行查找,若找到,输出其下标值;反之,输出提示。#include#define N 10void main( ) int aN= 6, 9, 15, 25, 26, 36, 48, 53, 60, 65 ; int low=0, high=N-1, mid, m, found=0; printf(请输入查找数据:); scanf(%d, &m); if( m=alow & m=ahigh ) while( !found & lowamid ) low=mid+1; else high=mid-1; if( found ) printf(元素值为%
24、d的数组下标是%d。n, m, mid); else printf(未找到。n);29、输入一个M行M列的二维数组,计算两条对角线上的元素之和(放在一个变量中)。M由下面的符号常量定义: #define M #include#define M 5void main( )int aMM,i,j,sum=0;printf(Input array a:n);for (i=0; iM; i+) for (j=0; jM; j+) scanf(%d, &aij);for (i=0; iM; i+) for (j=0; jM; j+) if (i=j|i+j=M-1) sum+=aij;printf(su
25、m=%dn,sum);30、输入一个M行M列的二维数组,分别计算两条对角线上的元素之和。M由下面的符号常量定义: #define M #include#define M 5void main( )int aMM,i,j,sum1=0,sum2=0; /输入afor (i=0; iM; i+) sum1+=aii; sum2+=aiM-i-1;printf(sum1=%d, sum2=%dn,sum1,sum2);31、输入一个M行M列的二维数组,计算四周元素之和。M由下面的符号常量定义: #define M #include#define M 5void main( )int aMM,i,j,
26、sum=0;printf(Input array a:n);for (i=0; iM; i+) for (j=0; jM; j+) scanf(%d, &aij); if (i=0|i=M-1|j=0|j=M-1) sum+=aij; printf(sum=%dn,sum);32、有一个班,有4个学生,5门课。 求各门课的平均分; 找出有两门以上课程不及格的学生,输出它们的学号和全部课程成绩及平均成绩。 找出平均成绩在90分以上或全部课程成绩在85分以上的学生,输出它们的学号和全部课程成绩。#include #define M 4#define N 6void main( )int i,j,c
27、ount; float sum,average; int aMN=1001,87,78,98,99,99,1002,80,87,68,85,90, 1003,88,87,92,85,86,1004,68,65,60,56,36; float averN; /存放每门课程的平均分/* printf(Input score:n); for (i=0;iM;i+) for (j=0;jN;j+) scanf(%d,&aij); */ for (j=1;jN;j+) /从第1门课到第N-1门课 sum=0; for (i=0;iM;i+) /从第0个学生到第M-1个学生 sum+=aij; averj
28、=sum/M; /计算第j门课程的平均分 for (i=1;iN;i+) printf(The %dth averScore: %.2fn,i,averi); for (i=0;iM;i+) count=0; for (j=1;jN;j+) /计算60分以下课程门数 if (aij60) count+=1; if (count2) /不及格课程小于2门(不包含2门) continue; printf(No: %-8d,ai0); /输出学号 printf(Score: ); for (j=1;jN;j+) /输出各门课程成绩 printf(%-5d,aij); for (j=1,sum=0;j
29、N;j+) /计算并输出平均分 sum+=aij; printf(averScore: %.2fn,sum/(N-1); printf(n); for (i=0;iM;i+) count=0; for (j=1;j=85) count+=1; for (j=1,sum=0;jN;j+) /计算平均成绩 sum+=aij; average=sum/(N-1); if (count!=N-1&average90) /判断是否满足条件 continue; printf(No: %-8d,ai0); printf(Score: ); for (j=1;jN;j+) printf(%-5d,aij);
30、printf(n); 1、有一个字符串str,编写程序,将str中第n个字符开始的全部字符复制到字符串std中。#includevoid main( )char str80, std80;int i, n;printf(Input string str:);gets(str);printf(Input n:);scanf(%d,&n);for(i=n;stri!=0;i+) stdi-n=stri;stdi-n=0;printf(String std:);puts(std);printf(String std:);puts(std);33、编写程序求出字符串str中指定字符ch的个数,并返回字
31、符个数。例如,若输入字符串str=abEF123112,则输出3。#includevoid main( )char str80, ch;int i, n=0;printf(Input string str:);gets(str);printf(Input ch:);scanf(%c,&ch);for(i=0;stri!=0;i+) if(stri=ch) n+;printf(The number of %c is %d. n,ch,n);34、有一段文字,共有5行(请先存放在二维数组中),分别统计出其中英文大写字母、小写字母、数字、空格及其他字符的个数。#include#define M 5v
32、oid main( )char strM80;int i,j,a=0,b=0,c=0,d=0,e=0;printf(Input 5 string:n);for (i=0; iM; i+) gets(stri);for (i=0; i=A & strij=a & strij=0 & strij=9) c+=1; else if (strij=32) d+=1; else e+=1;printf(%d, %d, %d, %d,%dn,a,b,c,d,e);35、输入6个字符串,输出最大的字符串。#include #include void main( ) char str680; int i,k;
33、 for (i=0;i6;i+) gets(stri); k=0; for (i=1;i0) k=i; printf(str%d=%sn, k,strk);36、编写一个函数,输出语句:“I Love China!”;编写主函数调用该函数。#include void print( ) printf(I love China!n);void main( ) print( );37、编写函数,计算下式前n项的和。注意,n在主函数中输入,计算结果在主函数中输出。例如,当n=10时,结果为0.909091。#include double fun(int n)int i;double s=0;for (
34、i=1; i=n; i+) s+=1.0/(i*(i+1);return(s);void main( ) int n; printf(Input n:); scanf(%d,&n); printf(%fn,fun(n);38、编写函数,计算Fibonacci数列第n项的值,n在主函数中由键盘输入,结果在主函数中输出。已知: #include int Fib(int n)int i,a=1,b=1,c=1;for (i=3;i=n;i+) c=a+b; a=b; b=c;return(c);void main()int n,s;printf(Input n: );scanf(%d,&n);s=Fib(n);printf(%dn,s);39、编写函数,根据公式计算值,并作为函数值返回,精确到10-8。 #include float pi() int i;float sum=1, f=1;i=1;while(f1e-8) f=f*i/(2*i+1); sum=sum+f; i+;return 2*sum; void main( ) printf(%f,pi(); 另解一:#include fl