最新C语言习题及解答.doc
精品资料C语言习题及解答.C语言习题及解答1、输入一个华氏温度,要求输出摄氏温度。公式为#include <stdio.h>void main( )float C,F; printf("Input F:"); scanf("%f",&F); C=5.0/9*(F-32); printf("C=%.2fn",C);2、编写程序,从键盘输入一个大写字母,将它转换为对应的小写字母后输出。(提示:同一个字母的大写比小写小32)#include <stdio.h>void main( ) char ch; printf("Input ch:"); scanf("%c",&ch); ch=ch+32; printf(“ch=%cn",ch);3、编写程序,输入梯形的上底、下底和高,计算并输出梯形的面积。 #include <stdio.h>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 <stdio.h>#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; s2=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 <stdio.h>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之间的整数,将该数分解,分别输出其个位数字和十位数字。例如,输入85,输出:5,8。提示:用算术运算中的整除和取余运算实现。#include <stdio.h>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 <stdio.h>#include <math.h>void main( )scanf("%f%f%f", &a,&b,&c);s= (a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf("area=%.2fn", area);8、周期为T秒的人造卫星离地面的平均高度H的计算公式为:其中:M=6×1024kg是地球质量,R=6.371×106m是地球半径。编写程序,输入人造卫星的周期T,计算并输出人造卫星离地面的高度H。 算法提示:求xy结果的数学函数是pow(x, y) #include <stdio.h>#include <math.h>#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,1.0/3)-R; printf("H=%.2En", H);9、求任意三个整数的平均值。要求:输入数据与输出结果都应有相应的提示信息。且输出数据取小数点后两位数字显示。#include <stdio.h>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 <stdio.h>void main( )char ch; printf("Input ch: "); scanf("%c", &ch); if (ch>='a'&&ch<='z') ch=ch-32; printf("%cn", ch);11、输入年号,判断并输出该年是否为闰年。所谓闰年,是指能被4整除,但不能被100整除;或能被400整除的年份。#include <stdio.h>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",year);12、编写程序,输入一个字符存入变量ch中,根据该字符的ASCII码值判断并输出字符的类型,即字母(alpha)、数字(numeric)或其他字符(other)#include <stdio.h>void main( ) char ch; printf("Input ch: "); scanf("%c", &ch); if (ch>='A'&&ch<='Z')|(ch>='a'&&ch<='z') printf("alphan"); else if (ch>='0' && ch<='9') printf("numericn"); else printf("othern");13、有一个函数,编写程序,输入x的值,计算并输出y值。#include <stdio.h>#include <math.h>void main( )double x,y; printf("Input 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 <stdio.h>void main( )float a,b,c; printf("Input a,b,c:");scanf("%f%f%f",&a,&b,&c);if (a+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,输出Good evening; 输入4,输出Good night; 输入其它数字,输出Bye-bye。#include <stdio.h>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"); 16、从键盘输入若干整数,以0结束,判断并输出其中的最大数。#include <stdio.h>void main( )int x,max;Scanf(“%d”,&x);max=x;While(x!=0)if(x>max)max=x;Scanf(“%d”,&x);printf("max=%dn",max); 17、输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、空格、数字和其它字符的个数。 while (ch!='n') if (ch>='A'&&cn<='Z') a=a+1; else if (ch>='a'&&ch<='z') b=b+1;else if (ch=' ') c=c+1;else if (ch>='0'&&ch<='9') d=d+1;else e=e+1; #include <stdio.h>void main( ) char ch; int a=0,b=0,c=0,d=0,e=0; printf("Input a string: "); while (ch=getchar( )!='n') if (ch>='A'&&cn<='Z') a=a+1; else if (ch>='a'&&ch<='z') b=b+1; else if (ch=' ') / ch=32 c=c+1; else if (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",&a,&b,&c); /双引号间不要加其它任何符号scanf("%lf%lf%lf",&a,&b,&c); /double型输入时应使用%lfprintf("area=%.2fn",area); /printf函数中常加其它说明字符数学函数的使用方法;同时需加上#include <math.h>double pow(double x,double y);4、方法一:使用scanf函数scanf("%c",&ch); /读入第一个字符while (ch!='n') if () scanf("%c",&ch); /读入其它字符/循环之前读入第一个字符,以便第一次判断表达式是否成立;循环体最后读入下一个字符,以便判断循环是否继续执行5、5/9.0*(F-32)5.0/9.0*(F-32)5*(F-32)/918、分别用while、do-while和for语句计算 (即求1!+2!+3!+20!),并试着简化程序。 #include <stdio.h>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 <stdio.h>void main( ) int n=1; double sum=0; while (n<=10) sum+=n*n+n-2.3; n+; printf("%lfn",sum); 20、输出所有的水仙花数。水仙花数是指一个3位数,各位数字的立方和等于该数本身,例如153=13+53+33。分析:对每一个3位数来说,分解出它们的个位、十位和百位,然后判断它们的立方和是否等于该数本身。 #include <stdio.h>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项之和。 之和。 #include <stdio.h>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 <stdio.h>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("* "); /*后有个空格 printf("n"); 23. 3、求 的值,其中a是一个数字2+22+222+2222+22222(此时a=2,n=5),。 a和n均由键盘输入。 #include <stdio.h>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 <stdio.h>#include <math.h>void main() int m, k, i; for (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 <stdio.h>void main( )int a10,i,max,k;for (i=0;i<10;i+) scanf("%d", &ai);max=a0; k=0;for (i=1;i<10;i+) if (max<ai) max=ai; k=i; printf("a%d=%dn", k,max);26、设有一个已按从大至小顺序排好的数列存放在一维数组中,依次为81,76,66,61,54,47,36,30,22,16。现输入一个数,仍按原来的排序规律将其插入到数组中,试编程。 #include <stdio.h>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 (ai<x)ai+1=ai;else break;ai+1=x;for (i=0; i<=10; i+) printf("%5d",ai);另解#include <stdio.h>void main() int a11=81,76,66,61,54,47,36,30,22,16; int x, i, j; printf("Input a number:"); scanf("%d",&x); for (i=0; i<=9; i+) if(ai<x) break; for (j=9; j>=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 <stdio.h>#define N 15void main( ) int aN, i, j, t, m, n; for (i=0;i<N;i+) scanf("%d", &ai); scanf("%d%d", &m, &n); for (i=0;i<n-m;i+) for (j=m;j<n-i;j+) if (aj<aj+1) t=aj; aj=aj+1; aj+1=t; for (i=0;i<N;i+) printf("%d ",ai);28、二分法又称为折半查找法,它用于在一个有序的序列上查找指定的数。其基本思路是:先确定待查元素的范围,将其分成两半,然后测试中间位置元素的值,如果相等,则找到待查元素。如果待查元素的值大于中间元素,就缩小待查范围,只测试中间元素之后的元素;反之,测试中间元素之前的元素,测试方法同前。试编写程序,应用折半查找法从存有10个整数的a数组中对输入的关键字m进行查找,若找到,输出其下标值;反之,输出提示。#include<stdio.h>#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 && low<=high ) mid=(low+high)/2; if ( amid = m ) found=1; else if( m>amid ) low=mid+1; else high=mid-1; if( found ) printf("元素值为%d的数组下标是%d。n", m, mid); else printf("未找到。n");29、输入一个M行M列的二维数组,计算两条对角线上的元素之和(放在一个变量中)。M由下面的符号常量定义: #define M #include<stdio.h>#define M 5void main( )int aMM,i,j,sum=0;printf("Input array a:n");for (i=0; i<M; i+) for (j=0; j<M; j+) scanf("%d", &aij);for (i=0; i<M; i+) for (j=0; j<M; j+) if (i=j|i+j=M-1) sum+=aij;printf("sum=%dn",sum);30、输入一个M行M列的二维数组,分别计算两条对角线上的元素之和。M由下面的符号常量定义: #define M #include<stdio.h>#define M 5void main( )int aMM,i,j,sum1=0,sum2=0; /输入afor (i=0; i<M; i+) sum1+=aii; sum2+=aiM-i-1;printf("sum1=%d, sum2=%dn",sum1,sum2);31、输入一个M行M列的二维数组,计算四周元素之和。M由下面的符号常量定义: #define M #include<stdio.h>#define M 5void main( )int aMM,i,j,sum=0;printf("Input array a:n");for (i=0; i<M; i+) for (j=0; j<M; 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 <stdio.h>#define M 4#define N 6void main( )int i,j,count; 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;i<M;i+) for (j=0;j<N;j+) scanf("%d",&aij); */ for (j=1;j<N;j+) /从第1门课到第N-1门课 sum=0; for (i=0;i<M;i+) /从第0个学生到第M-1个学生 sum+=aij; averj=sum/M; /计算第j门课程的平均分 for (i=1;i<N;i+) printf("The %d'th averScore: %.2fn",i,averi); for (i=0;i<M;i+) count=0; for (j=1;j<N;j+) /计算60分以下课程门数 if (aij<60) count+=1; if (count<2) /不及格课程小于2门(不包含2门) continue; printf("No: %-8d",ai0); /输出学号 printf("Score: "); for (j=1;j<N;j+) /输出各门课程成绩 printf("%-5d",aij); for (j=1,sum=0;j<N;j+) /计算并输出平均分 sum+=aij; printf("averScore: %.2fn",sum/(N-1); printf("n"); for (i=0;i<M;i+) count=0; for (j=1;j<N;j+) /计算85分以上课程数 if (aij>=85) count+=1; for (j=1,sum=0;j<N;j+) /计算平均成绩 sum+=aij; average=sum/(N-1); if (count!=N-1&&average<90) /判断是否满足条件 continue; printf("No: %-8d",ai0); printf("Score: "); for (j=1;j<N;j+) printf("%-5d",aij); printf("n"); 1、有一个字符串str,编写程序,将str中第n个字符开始的全部字符复制到字符串std中。#include<stdio.h>void 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的个数,并返回字符个数。例如,若输入字符串str="abEF123112",则输出3。#include<stdio.h>void 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<stdio.h>#define M 5void main( )char strM80;int i,j,a=0,b=0,c=0,d=0,e=0;printf("Input 5 string:n");for (i=0; i<M; i+) gets(stri);for (i=0; i<M; i+)for (j=0;strij!='0'j+) if (strij>='A' && strij<='Z') a+=1; else if (strij>='a' && strij<='z') b+=1; else if (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 <stdio.h>#include <string.h>void main( ) char str680; int i,k; for (i=0;i<6;i+) gets(stri); k=0; for (i=1;i<6;i+) if (strcmp(stri,strk)>0) k=i; printf("str%d=%sn", k,strk);36、编写一个函数,输出语句:“I Love China!”;编写主函数调用该函数。#include <stdio.h>void print( ) printf("I love China!n");void main( ) print( );37、编写函数,计算下式前n项的和。注意,n在主函数中输入,计算结果在主函数中输出。例如,当n=10时,结果为0.909091。#include <stdio.h>double fun(int n)int i;double s=0;for (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 <stdio.h>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 <stdio.h>float pi() int i;float sum=1, f=1;i=1;while(f>1e-8) f=f*i/(2*i+1); sum=sum+f; i+;return 2*sum; void main( ) printf("%f",pi(); 另解一:#include <stdio.h>fl