Res第五周实验及练习情况总结.docx
《Res第五周实验及练习情况总结.docx》由会员分享,可在线阅读,更多相关《Res第五周实验及练习情况总结.docx(19页珍藏版)》请在冰豆网上搜索。
Res第五周实验及练习情况总结
C语言练习题
一、填空题
1.C语言程序的三种基本结构是_顺序_、_分支_、__循环__。
2.C语言程序的三种逻辑运算符是__&&______、___||_____、____!
_____。
为了避免嵌套的条件语句if–else的二义性,C语言规定else与____最近的且没有和其他else匹配过的______if配对。
3.C语言没有逻辑数据,在给出逻辑运算结果时,以___1____代表“真”,以_____0_代表“假”,但在判断一个量是否为真时,以___非0____代表“真”,以____0___代表“假”。
4.条件“22&&x<4||x<-20________________。
5.执行下列语句后,a,b,c值依次为____8__、__8_____、___10__。
intx=10,y=9;
inta,b,c;
a=(--x==y++)?
--x:
++y;
b=x++;
c=y;
6.设i为整型变量,则for(i=2;i==0;)printf(“%d”,i--);循环_____0_____次。
二、选择题
1.若要求在if后面一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表示式为(D)
A.a<>0B.!
aC.a=0D.a
2.C语言中while与do…while语句的区别是(A)
A.do—while的循环体至少无条件执行一次
B.do—while允许从外部转到循环体内
C.do—while的循环体不能是复合语句
D.while的循环控制条件比do—while的循环控制条件严格
3.以下的for循环(B)
for(x=0,y=0;(y!
=123)&&(x<4);x++)
A.循环3次B.执行4次C.循环次数不定D.无限循环
4.若w=1,x=2,y=3,z=4则条件表达式ww:
yy:
z的结果是(D)
A.4B.3C.2D.1
5.逻辑运算符两侧运算对象的数据类型(D)
A.只能是0或1B.只能是0或非0正数
C.只能是整型或字符型数据D.可以是任何类型数据
6.while(!
x)中的(!
x)与下面条件(C)等价
A.(x!
=1)B.(x==1)C.(x==0)D.(x!
=0)
7.以下关于switch语句和break语句的描述,只有(C)是正确的。
A.在switch语句中必须使用break语句
B.break语句中只能用于switch语句中
C.在switch语句中,可以根据需要使用或不使用break语句
D.break语句是switch语句一部分
8.若a为int变量,则执行以下语句后的结果为(A)
a=5;
do{
printf(“%2d\n”,a--);
}while(!
a);
A.5B.不打印任何内容C.4D.陷入死循环
9.下面程序段的运行结果是(C)
a=1;b=2;c=3
while(a
printf(“%d,%d,%d”,a,b,c);
A.1,2,0B.2,1,0C.1,2,1D.2,1,1
10.若x是int型变量,则执行下列语句后结果是(C)
for(x=1;x<=100;x++)
if(++x%2==0)
if(++x%3==0)
if(++x%5==0)
printf(“%d“,x);
A.306090B.295089C.不打印任何内容D.316191
三、写出下列程序的运行结果
1.#include
main()
{inti,j=4;for(i=j;i<=2*j;i++)
switch(i/j)
{case0:
case1:
printf(“*”);break;
case2:
printf(“#”);
}
}
****#
2.main()
{inti,j,k;
charspace=‘’;
for(i=0;i<=5;i++)
{for(j=1;j<=i;j++)
printf(“%c”,space);
for(k=0;k<=5;k++)
printf(“%c”,’*’);
printf(“\n”);
}
}
******
******
******
******
******
******
3.main()
{intx=18,i;
for(i=2;i<9;i++)
if(x%i==0)
{printf(“%d",i);
x=x/i--;
if(x==0)break;
}
}
233
30004
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。
五级制成绩对应的百分制成绩区间为:
A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示"Invalidinput"。
输出使用以下语句:
printf("90-100\n");
printf("80-89\n");
printf("70-79\n");
printf("60-69\n");
printf("0-59\n");
printf("Invalidinput\n");
输入输出示例:
括号内是说明
输入
6ABCDEj(repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j)
输入时不要空格或回车
输出
90-100
80-89
70-79
60-69
0-59
Invalidinput(输入数据不合法)
#include
intmain(void)
{
charch;
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
ch=getchar();
switch(ch)
{case'A':
printf("90-100\n");break;
case'B':
printf("80-89\n");break;
case'C':
printf("70-79\n");break;
case'D':
printf("60-69\n");break;
case'E':
printf("0-59\n");break;
default:
printf("Invalidinput\n");
}
}
}
30005
查询水果的单价。
有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。
在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。
当用户输入编号1~4,显示相应水果的单价(保留1位小数);输入0,退出查询;输入其他编号,显示价格为0。
输入输出示例:
括号内是说明
输入
3(oranges的编号)
0(退出查询)
输出
[1]apples
[2]pears
[3]oranges
[4]grapes
[0]Exit
price=4.1
[1]apples
[2]pears
[3]oranges
[4]grapes
[0]Exit
#include
intmain(void)
{
intchoice,i;
doubleprice;
for(i=1;i<=5;i++){
printf("[1]apples\n");
printf("[2]pears\n");
printf("[3]oranges\n");
printf("[4]grapes\n");
printf("[0]Exit\n");
scanf("%d",&choice);
if(choice==0)
break;
else{
switch(choice){
case1:
price=3;break;/*注意是整型值而不应用字符常量,如’1’*/
case2:
price=2.5;break;
case3:
price=4.1;break;
case4:
price=10.2;break;
default:
price=0.0;
}
printf("price=%0.1f\n",price);
}
}
}
30009
输入一个正整数n,再输入n个学生的百分制成绩,统计各等级成绩的个数。
成绩等级分为五级,分别为A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59)。
输入输出示例:
括号内是说明
输入
5(n=5)
7754927360
输出
NumberofA(90-100):
1
NumberofB(80-89):
0
NumberofC(70-79):
2
NumberofD(60-69):
1
NumberofE(0-59):
1
#include
intmain(void)
{
inti,mark,n;
intna,nb,nc,nd,ne;
scanf("%d",&n);
na=nb=nc=nd=ne=0;
for(i=1;i<=n;i++){
scanf("%d",&mark);
switch(mark/10)
{case10:
case9:
na++;break;
case8:
nb++;break;
case7:
nc++;break;
case6:
nd++;break;
case5:
case4:
case3:
case2:
case1:
case0:
ne++;break;
}
}
printf("NumberofA(90-100):
%d\n",na);
printf("NumberofB(80-89):
%d\n",nb);
printf("NumberofC(70-79):
%d\n",nc);
printf("NumberofD(60-69):
%d\n",nd);
printf("NumberofE(0-59):
%d\n",ne);
}
30061
输入一个正整数repeat(0某城市普通出租车收费标准如下:
"起步里程3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,即每公里租费3元。
营运过程中,因路阻及乘客要求临时停车的,每5分钟按1公里租费计收。
运价计费尾数四舍五入,保留到元。
"。
编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费(元)。
提示:
先将等待的时间折算成公里数,与原公里数相加后再处理。
输入输出示例:
括号内是说明
输入
3(repeat=3)
1.6252(行驶1.6公里,等待2分52秒)
3.1615(行驶3.1公里,等待6分15秒)
11.8230(行驶11.8公里,等待2分30秒)
输出
cost=10
cost=13
cost=31
注意点:
1先将时间折算成公里数.
2无须加0.5,输出时自动四舍五入的.
#include
intmain(void)
{
intrepeat,ri;
intminutes,seconds;
doublecost,mile;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%lf%d%d",&mile,&minutes,&seconds);
mile=mile+(seconds/60.0+minutes)/5.0;
if(mile<=3)cost=10;
elseif(mile<=10)cost=10+(mile-3)*2;
else
cost=24+3*(mile-10);
printf("cost=%.0f\n",cost);
}
}
40012
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat(0读入1个正实数eps,计算并输出下式的值,精确到最后一项的绝对值小于eps(保留6位小数)。
请使用while语句实现循环。
计算:
1-1/4+1/7-1/10+1/13-1/16+……
输入输出示例:
括号内是说明
输入
2(repeat=2)
2E-4(eps=2E-4)
0.02(eps=0.02)
输出
sum=0.835549
sum=0.826310
#include
#include
intmain(void)
{
intdenominator,flag;
intrepeat,ri;
doubleeps,item,sum;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%le",&eps);
sum=0;
flag=1;
item=1;
denominator=1;
while(fabs(item)>=eps)
{item=flag*1.0/denominator;
sum=sum+item;
denominator=denominator+3;
flag=-flag;}
printf("sum=%.6f\n",sum);
}
}
40013
输入一个正整数repeat(0读入一批正整数(以零或负数为结束标志),求其中的奇数和。
请使用while语句实现循环。
输入输出示例:
括号内是说明
输入
2(repeat=2)
139070
87437056101-1
输出
Thesumoftheoddnumbersis11.
Thesumoftheoddnumbersis116.
#include
intmain(void)
{
intx,sum;
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&x);
sum=0;
while(x>0)
{if(x%2==1)sum=sum+x;
scanf("%d",&x);
}
printf("Thesumoftheoddnumbersis%d.\n",sum);
}
}
40014
输入一个正整数repeat(0输入一个整数in,求它的位数。
例如123的位数是3。
请使用do-while语句实现循环。
输入输出示例:
括号内是说明
输入
4(repeat=4)
12345(in=12345)
-100(in=-100)
-1(in=-1)
1290(in=1290)
输出
count=5(12345的位数是5)
count=3(-100的位数是3)
count=1(-1的位数是1)
count=4(99的位数是2)
注意点:
负数和0
#include
intmain(void)
{
intcount,in;
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d",&in);
count=0;
if(in<0)in=-in;
do{
in=in/10;
count++;
}while(in!
=0);
printf("count=%d\n",count);
}
}
40019
输入一个正整数repeat(0皮球从height(米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。
问皮球在第n次落地时,在空中一共经过多少距离?
第n次反弹的高度是多少?
(输出保留1位小数)
输入输出示例:
括号内是说明
输入
3(repeat=3)
102(height=10m,n=2)
41(height=2m,n=1)
1008(height=100m,n=8)
输出
distance=20.0,height=2.5(第2次落地时,空中经过距离为20米,第2次反弹高度为2.5米)
distance=4.0,height=2.0(第1次落地时,空中经过距离为4米,第1次反弹高度为2米)
distance=298.4,height=0.4(第8次落地时,空中经过距离为298.4米,第8次反弹高度为0.4米)
#include
intmain(void)
{
inti,n;
intrepeat,ri;
doubledistance,height;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%lf%d",&height,&n);
distance=height;
height=0.5*height;
for(i=2;i<=n;i++)
{distance=distance+height*2.0;height=0.5*height;
}
printf("distance=%.1f,height=%.1f\n",distance,height);
}
}
40024
输入一个正整数repeat(0输入两个正整数m和n(1<=m,n<=1000),输出m与n之间(含m,n)的所有满足各位数字的立方和等于它本身的数。
例如153的各位数字的立方和是1^3+5^3+3^3=153,这里a^b表示a的b次方。
输出使用语句:
printf("%d\n",i);
输入输出示例:
括号内为说明
输入:
2(repeat=2)
100400(m=100,n=400)
1100(m=1,n=100)
输出:
result:
153(1*1*1+5*5*5+3*3*3=153)
370(3*3*3+7*7*7=370)
371(3*3*3+7*7*7+1*1*1=371)
result:
1(1*1*1=1)
#include"stdio.h"
intmain(void)
{
inti,digit,m,n,number,sum;
intrepeat,ri;
scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%d%d",&m,&n);
printf("result:
\n");
for(i=m;i<=n;i++)
{number=i;sum=0;
while(number!
=0)
{digit=number%10;
sum=sum+digit*digit*digit;
number=number/10;
}
if(sum==i)printf("%d\n",i);
}
}}
40052
输入一个正整数n,再输入n个正整数,判断它们是否为素数。
素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
输出使用以下语句:
printf("%disaprime\n",m);
printf("%dis'ntaprime\n",m);
输入输出示例:
括号内为说明
输入
4(n=4)
12917
输出
1is'ntaprime
2isaprime
9is'ntaprime
17isaprime
#include
#include
intmain(void)
{
intflag,i,j,k,m,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{scanf("%d",&m);
if(m==1)printf("%dis'ntaprime\n",m);
else{
k=sqrt(m);
for(j=2;j<=k;j++)
if(m%j==0)break;
if(j>k)printf("%disaprime\n",m);
elseprintf("%dis'ntaprime\n",m);}
}
}