c语言期末上机考试复习题20题答案文档格式.docx
《c语言期末上机考试复习题20题答案文档格式.docx》由会员分享,可在线阅读,更多相关《c语言期末上机考试复习题20题答案文档格式.docx(13页珍藏版)》请在冰点文库上搜索。
c);
if((c>
='
A'
)&
&
(cv='
'
c=c+32;
elseif((c>
)
c=c-32;
else
c=c;
printf(%c\n”,c);
2
3.读入a、b、c的值,计算一元二次方程ax+bx+c=0的根。
math.h>
floata,b,c,n,m,t;
printf(请输入a,b,c的值!
\n"
);
n=-b/(2*a);
m=b*b-4*a*c;
if(m>
0)
t=sqrt(m);
printf(Xi=%fX2=%f\n”n+t,n-t);
elseif(m==0)
printf(Xi=X2=%f\n”n);
t=sqrt(-m);
printf(Xi=%f+%fiX2=%f-%fi\n”n,t,n,t);
}
4.编写程序,判断某一年是否是闰年。
inty;
printf(请输入年份!
\n”;
scanf(%d”&
y);
if((y%4==0)&
(y%100!
=0)||(y%100==0)&
(y%400==0))
printf(%d年是闰年!
\n”,y);
printf(%d年不是闰年!
5.编一程序,对于给定的一个百分制成绩,输出相应的等级。
设:
90分以上为A'
80~89
分为B'
70~79分为C'
60~69分为D'
;
60分以下为E'
intf;
printf(请输入成绩!
f);
switch(f/10)
case10:
case9:
printf(A\n”;
break;
case8:
printf(B\n"
);
case7:
printf(C\n”;
case6:
printf(D\n”;
default:
printf(E\n”;
6.输入一个不多于3位的整数,将其逆序输出各位数字。
(如输入123,输出321)
intt,a,b,c;
printf(请输入一个三位整数!
scanf(%d"
&
t);
a=t/100;
b=t/10%10;
c=t%10;
if(a==0)
if(b==0)
printf(%d\n”,c);
printf(%d%d\n”,c,b);
printf(%d%d%d\n”,c,b,a);
7.从键盘上输入若10个学生的成绩,统计并输出最高成绩和最低成绩。
inta[10],m,n,i=0;
printf(请输入第%d个学生的成绩\n”,i+1);
a[i]);
m=a[i];
n=a[i];
for(i=1;
i<
1O;
i++)
scanf(%d"
if(m<
a[i])
if(n>
printf(最高成绩为%d分,最低成绩为%d分。
\n”,m,n);
8.输出100以内所有能够同时被5和7整除的整数。
intt=1,i;
iv=100;
if((i%5==0)&
(i%7==0))printf(%d”,i);
printf(\n”);
9.求100~200间的全部素数(质数)。
inti,j,n;
for(i=100;
iv200;
for(j=1,n=O;
jv=i;
j++)
if(i%j==0)
n=n+1;
if(n==2)
printf(%d”,i);
10.输入一行字符,分别统计其中英文字母、数字和其它字符的个数。
intl=0,s=0,o=0;
printf(请输入一行字符!
while((c=getchar())!
n'
A'
(cv='
'
)||(c>
a'
l++;
='
0'
(cv=‘9'
s++;
o++;
printf(字母个数为%d,数字个数为%d,其它字符为%d。
\n”,l,s,o);
11.有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,…,编写程序求这个数列的前20项之
和。
#includevstdio.h>
inta=2,b=1,c,i;
floats;
s=1.0*a/b;
for(i=2;
iv=20;
c=b;
b=a;
a=a+c;
s=s+1.0*a/b;
printf(这个数列的前20项之和为%f。
\n”s);
12.编写程序,计算1!
+2!
+3!
+•……+n!
的值,其中n的值由用户输入。
intn,s=1,m=0,i,j;
printf(请输入n的值!
\n”;
scanf(%d”&
n);
iv=n;
for(j=1;
s=s*j;
m=m+s;
s=1;
printf(值为%d。
\n”m);
13•请编写一程序,将所有“水仙花数”打印出来,并打印出其总数。
“水仙花数”是一个
其各位数的立方和等于该整数的三位数。
inta,b,c,m=0,i;
ivl000;
a=i/100;
b=i/10%10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
m=m+1;
printf(“n”);
printf(一共有%d个数符合!
m);
14.输出如下图形。
*
***
*****
inti,j;
iv=4;
jv=(4-i);
printf(
jv=(2*i-1);
printf(*”);
}
15.请编写一程序,打印出九九乘法口诀表(例:
1*1=1)。
iv=9;
printf(%dx%d=%2d”,j,i,i*j);
16.用起泡法(冒泡法)对八个数由大到小排序(从小到大)
inta[8],i,j,t;
for(i=0;
iv=7;
printf(请输入a[%d]的值”,i);
i++)for(j=0;
jv=(7-i);
j++)if(a[j]>
a[j+1]){t=a[j];
a[j]=a[j+1];
a[j+1]=t;
printf(%d”a[i]);
printf(\n”;
17.将一个n*m二维数组的行和列元素互换,存到另一个m*n的二维数组中,并输出其结
果。
inta[20][20]={0},b[20][20]={0},i,j,m,n;
printf(请输入m、n的值!
scanf(%d,%d”&
m,&
n;
j<
m;
printf(请输入a[%d][%d]的值”,i,j);
a[i][j]);
j++)b[j][i]=a[i][j];
for(j=0;
printf(%d”,b[i][j]);
18.编程完成下述功能:
从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该
矩阵两条对角线上各元素值之和并打印出结果。
inta[20][20]={0},t=0,i,j,n;
printf(请输入a[%d][%d]的值”i,j);
ivn;
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个输出)。
intFibonacci[20],i,j;
Fibonacci[0]=1;
Fibonacci[1]=1;
iv=19;
Fibonacci[i]=Fibonacci[i-1]+Fibonacci[i-2];
printf(%d”,Fibonacci"
]);
if((i+1)%5==0)
printf(\'
n”;
20.使用递归法求n!
(函数)
intf(intx)
intm;
if(x==0||x==1)
m=1;
m=x*f(x-1);
return(m);
intn,y;
y=f(n);
printf(%d!
的值为%d\n”n,y);
逻辑运算符的混合运算:
1、x=y=z=O;
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=O;
c=(++x||++y)&
x=1,y=0,z=1
由于在c的左边的逻辑表达式中的第一项含有“()”,所以(++x||++y)作为一个整体一一作为一个数,所以先算括号里面的,然后由于“&
的运算符的特性,再算++z,而对于括号里的再由于“”的短路特性,只算了“++x”,由于它为“1”所以“++y”就被屏蔽了。
3、x=y=O
c=x&
++y||++z;
c=1,x=0,y=0,z=1
注意逻辑运算符的运算顺序是自左向右,所以对于左边第一个“&
运算
符,首先算出它的逻辑值,再和后面的“||”运算,作为c的结果。
根据优先级的顺序和“&
的短路特性,由于开始x=0,则整个“&
的逻辑表达式的逻辑值就是0,而且++y也被屏蔽掉了,再由于后面的“||”的特性,根据++z,可知c=1,z=1。
4、x=y=z=0;
c=x||++y&
z;
c=0,x=0,y=1,z=0
如果“||”前为“1”则整个表达式即c=1;
若“||”
前为“0”时,那么根据”的特性,该表达式的值由后面的逻辑值确定。
对于后面的逻辑表达式,根据“&
的特性,由于++y=1而z=0,可知c=0,y=1。
5、x=y=z=0;
c=1,x=0,y=1,z=1
结合上一题可知,由于x=0,则该表达式的值由后面的表达式确定,根据
“&
的特性,由于“++y”的值为“1”则继续再算“&
后面的“++z”,由于“++z”的值也为“1”所以c=1,y=1,z=1o
6、x=y=z=0;
++y&
c=0,x=0,y=0,z=0
首先根据运算符的优先级,运算从左至右,对于第一个“&
由于x=0,则这个逻辑运算符的逻辑值为“0”且屏蔽了后面的“++y”再于逻辑运算符的逻辑值为“0”且后面为“&
根据它的短路特性后面的“++z”被屏蔽了。
所以整个表达式的值即c=O,x=O,y=O,z=O。
最后,总结一下关于类似c=++x&
++y||++z这类任何形式的逻辑表达试,均相当于c=(++x&
++y)||++z,但同时要结合其“&
、和“||”不同的短路特性以及其内部的短路特性,可以正确地算出其逻辑值。