c语言期末上机考试复习题20题答案.docx

上传人:b****5 文档编号:11793617 上传时间:2023-04-02 格式:DOCX 页数:13 大小:18.65KB
下载 相关 举报
c语言期末上机考试复习题20题答案.docx_第1页
第1页 / 共13页
c语言期末上机考试复习题20题答案.docx_第2页
第2页 / 共13页
c语言期末上机考试复习题20题答案.docx_第3页
第3页 / 共13页
c语言期末上机考试复习题20题答案.docx_第4页
第4页 / 共13页
c语言期末上机考试复习题20题答案.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

c语言期末上机考试复习题20题答案.docx

《c语言期末上机考试复习题20题答案.docx》由会员分享,可在线阅读,更多相关《c语言期末上机考试复习题20题答案.docx(13页珍藏版)》请在冰豆网上搜索。

c语言期末上机考试复习题20题答案.docx

c语言期末上机考试复习题20题答案

C语言题目

试编程完成如下功能:

1.输入3个实数a,b,c要求按从大到小(或者从小到大)的顺序输出三数

#include

voidmain()

{

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.输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。

#include

voidmain()

{

charc;

printf(请输入一个字符!

\n”);

scanf(%c",&c);

if((c>='A')&&(cv=''

c=c+32;

elseif((c>=''&&(cv='')

c=c-32;

else

c=c;

printf(%c\n”,c);

}

2

3.读入a、b、c的值,计算一元二次方程ax+bx+c=0的根。

#include

#include

voidmain()

{

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(m>0)

{

t=sqrt(m);

printf(Xi=%fX2=%f\n”n+t,n-t);

}

elseif(m==0)

printf(Xi=X2=%f\n”n);

else

{

t=sqrt(-m);

printf(Xi=%f+%fiX2=%f-%fi\n”n,t,n,t);

}

}

4.编写程序,判断某一年是否是闰年。

#include

voidmain()

{

inty;

printf(请输入年份!

\n”;

scanf(%d”&y);

if((y%4==0)&&(y%100!

=0)||(y%100==0)&&(y%400==0))

printf(%d年是闰年!

\n”,y);

else

printf(%d年不是闰年!

\n”,y);

}

5.编一程序,对于给定的一个百分制成绩,输出相应的等级。

设:

90分以上为A'80~89

分为B'70~79分为C'60~69分为D';60分以下为E'

#include

voidmain()

{

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)

#include

voidmain()

{

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);

else

printf(%d%d\n”,c,b);

}

else

printf(%d%d%d\n”,c,b,a);

}

7.从键盘上输入若10个学生的成绩,统计并输出最高成绩和最低成绩。

#include

voidmain()

{

inta[10],m,n,i=0;

printf(请输入第%d个学生的成绩\n”,i+1);

scanf(%d",&a[i]);

m=a[i];

n=a[i];

for(i=1;i<1O;i++)

{

printf(请输入第%d个学生的成绩\n”,i+1);scanf(%d",&a[i]);

if(m

m=a[i];

if(n>a[i])

n=a[i];

}

printf(最高成绩为%d分,最低成绩为%d分。

\n”,m,n);

}

8.输出100以内所有能够同时被5和7整除的整数。

#include

voidmain()

{

intt=1,i;

for(i=1;iv=100;i++)

{

if((i%5==0)&&(i%7==0))printf(%d”,i);

}

printf(\n”);

}

9.求100~200间的全部素数(质数)。

#include

voidmain()

{

inti,j,n;

for(i=100;iv200;i++)

{

for(j=1,n=O;jv=i;j++)

if(i%j==0)

n=n+1;

if(n==2)

printf(%d”,i);

}

printf(\n”);

}

10.输入一行字符,分别统计其中英文字母、数字和其它字符的个数。

#include

voidmain()

{

charc;

intl=0,s=0,o=0;

printf(请输入一行字符!

\n”);

while((c=getchar())!

='n'

{

if((c>='A')&&(cv='')||(c>='a')&&(cv='')

l++;

elseif((c>='0')&&(cv=‘9')

s++;

else

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>

voidmain()

{

inta=2,b=1,c,i;

floats;

s=1.0*a/b;

for(i=2;iv=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的值由用户输入。

#include

voidmain()

{

intn,s=1,m=0,i,j;

printf(请输入n的值!

\n”;scanf(%d”&n);

for(i=1;iv=n;i++)

{

for(j=1;jv=i;j++)

s=s*j;

m=m+s;

s=1;

}

printf(值为%d。

\n”m);

}

13•请编写一程序,将所有“水仙花数”打印出来,并打印出其总数。

“水仙花数”是一个

其各位数的立方和等于该整数的三位数。

#include

voidmain()

{

inta,b,c,m=0,i;

for(i=100;ivl000;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.输出如下图形。

*

***

*****

#include

voidmain()

{

inti,j;

for(i=1;iv=4;i++)

{

for(j=1;jv=(4-i);j++)

printf(

for(j=1;jv=(2*i-1);j++)

printf(*”);

printf(\n”);}

}

15.请编写一程序,打印出九九乘法口诀表(例:

1*1=1)。

#include

voidmain()

{

inti,j;

for(i=1;iv=9;i++)

{

for(j=1;jv=i;j++)

printf(%dx%d=%2d”,j,i,i*j);

printf(\n”);

}

}

16.用起泡法(冒泡法)对八个数由大到小排序(从小到大)

#includevstdio.h>

voidmain()

{

inta[8],i,j,t;

for(i=0;iv=7;i++)

{

printf(请输入a[%d]的值”,i);

scanf(%d”&a[i]);

}

for(i=0;iv=7;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;}

for(i=0;iv=7;i++)

printf(%d”a[i]);

printf(\n”;

}

17.将一个n*m二维数组的行和列元素互换,存到另一个m*n的二维数组中,并输出其结

果。

#include

voidmain()

{

inta[20][20]={0},b[20][20]={0},i,j,m,n;

printf(请输入m、n的值!

\n”;

scanf(%d,%d”&m,&n);

for(i=0;i

{

printf(请输入a[%d][%d]的值”,i,j);

scanf(%d”&a[i][j]);

}

for(i=0;i

for(i=0;i

{

for(j=0;j

printf(%d”,b[i][j]);

printf(\n”;

}

}

18.编程完成下述功能:

从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该

矩阵两条对角线上各元素值之和并打印出结果。

#include

voidmain()

{

inta[20][20]={0},t=0,i,j,n;

printf(请输入n的值!

\n”;

scanf(%d”&n);

for(i=0;i

for(j=0;j

{

printf(请输入a[%d][%d]的值”i,j);

scanf(%d”&a[i][j]);

}

for(i=0;ivn;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个输出)。

#include

voidmain()

{

intFibonacci[20],i,j;

Fibonacci[0]=1;

Fibonacci[1]=1;

for(i=2;iv=19;i++)

Fibonacci[i]=Fibonacci[i-1]+Fibonacci[i-2];

for(i=0;iv=19;i++)

{

printf(%d”,Fibonacci"]);

if((i+1)%5==0)

printf(\'n”;

}

}

20.使用递归法求n!

(函数)

#include

intf(intx)

{

intm;

if(x==0||x==1)

m=1;

else

m=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=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)&&++z;

printf("x=%d,y=%d,z=%d",x,y,z);

结果:

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=x||++y&&++z;

结果:

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;

c=x&&++y&&++z;

结果:

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,但同时要结合其“&&、和“||”不同的短路特性以及其内部的短路特性,可以正确地算出其逻辑值。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1