您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > c语言期末上机考试复习题20题答案
C语言题目试编程完成如下功能:1.输入3个实数a,b,c要求按从大到小(或者从小到大)的顺序输出三数#includestdio.hvoidmain(){floata,b,c,t;printf(“请输入三个数!\n”);scanf(“%f,%f,%f”,&a,&b,&c);if(a=b){t=a;a=b;b=t;}if(b=c){t=b;b=c;c=t;}if(a=b){t=a;a=b;b=t;}printf(“%f%f%f\n”,a,b,c);}2.输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。#includestdio.hvoidmain(){charc;printf(“请输入一个字符!\n”);scanf(“%c”,&c);if((c=’A’)&&(c=’Z’))c=c+32;elseif((c=’a’)&&(c=’z’))c=c-32;elsec=c;printf(“%c\n”,c);}3.读入a、b、c的值,计算一元二次方程ax2+bx+c=0的根。#includestdio.h#includemath.hvoidmain(){floata,b,c,n,m,t;printf(“请输入a,b,c的值!\n”);scanf(“%f,%f,%f”,&a,&b,&c);n=-b/(2*a);m=b*b-4*a*c;if(m0){t=sqrt(m);printf(“X1=%fX2=%f\n”,n+t,n-t);}elseif(m==0)printf(“X1=X2=%f\n”,n);else{t=sqrt(-m);printf(“X1=%f+%fiX2=%f-%fi\n”,n,t,n,t);}}4.编写程序,判断某一年是否是闰年。#includestdio.hvoidmain(){inty;printf(“请输入年份!\n”);scanf(“%d”,&y);if((y%4==0)&&(y%100!=0)||(y%100==0)&&(y%400==0))printf(“%d年是闰年!\n”,y);elseprintf(“%d年不是闰年!\n”,y);}5.编一程序,对于给定的一个百分制成绩,输出相应的等级。设:90分以上为‘A’;80~89分为‘B’;70~79分为‘C’;60~69分为‘D’;60分以下为‘E’。#includestdio.hvoidmain(){intf;printf(“请输入成绩!\n”);scanf(“%d”,&f);switch(f/10){case10:case9:printf(“A\n”);break;case8:printf(“B\n”);break;case7:printf(“C\n”);break;case6:printf(“D\n”);break;default:printf(“E\n”);}}6.输入一个不多于3位的整数,将其逆序输出各位数字。(如输入123,输出321)#includestdio.hvoidmain(){intt,a,b,c;printf(“请输入一个三位整数!\n”);scanf(“%d”,&t);a=t/100;b=t/10%10;c=t%10;if(a==0){if(b==0)printf(“%d\n”,c);elseprintf(“%d%d\n”,c,b);}elseprintf(“%d%d%d\n”,c,b,a);}7.从键盘上输入若10个学生的成绩,统计并输出最高成绩和最低成绩。#includestdio.hvoidmain(){inta[10],m,n,i=0;printf(“请输入第%d个学生的成绩\n”,i+1);scanf(“%d”,&a[i]);m=a[i];n=a[i];for(i=1;i10;i++){printf(“请输入第%d个学生的成绩\n”,i+1);scanf(“%d”,&a[i]);if(ma[i])m=a[i];if(na[i])n=a[i];}printf(“最高成绩为%d分,最低成绩为%d分。\n”,m,n);}8.输出100以内所有能够同时被5和7整除的整数。#includestdio.hvoidmain(){intt=1,i;for(i=1;i=100;i++){if((i%5==0)&&(i%7==0))printf(“%d”,i);}printf(“\n”);}9.求100~200间的全部素数(质数)。#includestdio.hvoidmain(){inti,j,n;for(i=100;i200;i++){for(j=1,n=0;j=i;j++)if(i%j==0)n=n+1;if(n==2)printf(“%d”,i);}printf(“\n”);}10.输入一行字符,分别统计其中英文字母、数字和其它字符的个数。#includestdio.hvoidmain(){charc;intl=0,s=0,o=0;printf(“请输入一行字符!\n”);while((c=getchar())!=’\n’){if((c=’A’)&&(c=’Z’)||(c=’a’)&&(c=’z’))l++;elseif((c=’0’)&&(c=’9’))s++;elseo++;}printf(“字母个数为%d,数字个数为%d,其它字符为%d。\n”,l,s,o);}11.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,...,编写程序求这个数列的前20项之和。#includestdio.hvoidmain(){inta=2,b=1,c,i;floats;s=1.0*a/b;for(i=2;i=20;i++){c=b;b=a;a=a+c;s=s+1.0*a/b;}printf(“这个数列的前20项之和为%f。\n”,s);}12.编写程序,计算1!+2!+3!+.......+n!的值,其中n的值由用户输入。#includestdio.hvoidmain(){intn,s=1,m=0,i,j;printf(“请输入n的值!\n”);scanf(“%d”,&n);for(i=1;i=n;i++){for(j=1;j=i;j++)s=s*j;m=m+s;s=1;}printf(“值为%d。\n”,m);}13.请编写一程序,将所有“水仙花数”打印出来,并打印出其总数。“水仙花数”是一个其各位数的立方和等于该整数的三位数。#includestdio.hvoidmain(){inta,b,c,m=0,i;for(i=100;i1000;i++){a=i/100;b=i/10%10;c=i%10;if(i==a*a*a+b*b*b+c*c*c){printf(“%d”,i);m=m+1;}}printf(“\n”);printf(“一共有%d个数符合!\n”,m);}14.输出如下图形。****************#includestdio.hvoidmain(){inti,j;for(i=1;i=4;i++){for(j=1;j=(4-i);j++)printf(“”);for(j=1;j=(2*i-1);j++)printf(“*”);printf(“\n”);}}15.请编写一程序,打印出九九乘法口诀表(例:1*1=1)。#includestdio.hvoidmain(){inti,j;for(i=1;i=9;i++){for(j=1;j=i;j++)printf(“%d×%d=%2d”,j,i,i*j);printf(“\n”);}}16.用起泡法(冒泡法)对八个数由大到小排序(从小到大)#includestdio.hvoidmain(){inta[8],i,j,t;for(i=0;i=7;i++){printf(“请输入a[%d]的值”,i);scanf(“%d”,&a[i]);}for(i=0;i=7;i++)for(j=0;j=(7-i);j++)if(a[j]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}for(i=0;i=7;i++)printf(“%d”,a[i]);printf(“\n”);}17.将一个n*m二维数组的行和列元素互换,存到另一个m*n的二维数组中,并输出其结果。#includestdio.hvoidmain(){inta[20][20]={0},b[20][20]={0},i,j,m,n;printf(“请输入m、n的值!\n”);scanf(“%d,%d”,&m,&n);for(i=0;in;i++)for(j=0;jm;j++){printf(“请输入a[%d][%d]的值”,i,j);scanf(“%d”,&a[i][j]);}for(i=0;in;i++)for(j=0;jm;j++)b[j][i]=a[i][j];for(i=0;im;i++){for(j=0;jn;j++)printf(“%d”,b[i][j]);printf(“\n”);}}18.编程完成下述功能:从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该矩阵两条对角线上各元素值之和并打印出结果。#includestdio.hvoidmain(){inta[20][20]={0},t=0,i,j,n;printf(“请输入n的值!\n”);scanf(“%d”,&n);for(i=0;in;i++)for(j=0;jn;j++){printf(“请输入a[%d][%d]的值”,i,j);scanf(“%d”,&a[i][j]);}for(i=0;in;i++)t=t+a[i][i]+a[i][n-1-i];if((n%2)!=0)t=t-a[(n-1)/2][(n-1)/2];printf(“两对角线元素之和为%d\n”,t);}19.求Fibonacci数列中前20个数,Fibonacci数列的前两个数为1,1,以后每一个数都是前两个数之和。Fibonacci数列的前n个数为1,1,2,3,5,8,13,用数组存放数列的前20个数,并输出之(按一行5个输出)。#includestdio.hvoidmain(){intFibonacci[20],i,j;Fibonacci[0]=1;Fibonacci[1]=1;for(i=2;i=19;i++)Fibonacci[i]=Fibonacci[i-1]+Fibonacci[i-2];for(i=0;i=19;i++){printf(“%d”,Fibonacci[i]);if((i+1)%5==0)printf(“\n”);}}20.使用递归法求n!(函数)#includestdio.hintf(intx){intm;if(x==0||x==1)m=1;elsem=x*f(x-1);return(m);}voidmain(){intn,y;printf(“请输入n的值!\n”);scanf(“%d”,&n);y=f(n);printf(“%d!的值为%d\n”,n,y);}逻辑运算符的混合运算:1、x=y=z=0;c=++x||++y&&++z;printf(x=%d,y=%d,z=%d,x,y,z);结果:x=1,y=0,z=0解释:由于第一个是“或”运算符,当++z为1时,它具有短路特性,屏蔽掉后面的运算符。2、x=y=z=0;c=(++x||++y)&&++z;printf(x=%d,y=%d,z=%d,x,y,z);结果:x=1,y=0,z=1解释:由于在c的左边的逻辑表达式中的第一项含有“()”,所以(++x||++y)作为一个整体——作为一个数,所以先算括号里面的,然后由于“&&”的运算符的特性,再算++z,而对于括号里的再由于“||”的短路特性,只算了“++x”,由于它为“1”,所以
本文标题:c语言期末上机考试复习题20题答案
链接地址:https://www.777doc.com/doc-2908024 .html