··
【3】
rate=0.8;
printf(”the account payable of the watermelon is %f\\n”, weight*rate); printf(”the change for client is %f\\n”,money-weight*rate); }
17.以下程序段的运行结果是________。
#include ”stdio.h” main() {
char ch1=’a’,ch2=’A’; switch (ch1) { case ’a’:
switch (ch2)
{case ’A’: printf(”good!\\n”); break; case ’B’: printf(”bad!\\n”); break; }
case ’b’: printf(”joke\\n”); } }
18.根据以下函数关系,对输入的每个x值,计算出相应的y值。请在【】内填入正确内容。
x y x<0 0 0<=x<10 x 10<=x<20 10 20<=x<40 -0.5x+20 #include ”stdio.h” main()
{
int x, rate;
float y;
printf(”please input the value of x:”); scanf(”%d”,&x); if (【1】) rate= -1; else rate=【2】; switch(rate)
{ case –1: y=0; break;
case 0: y=x; break; case 1: y=10; break; case 2:
case 3: y=-0.5*x+20; break; default: y= -2;
}
if (【3】) printf(”y=%f\\n”,y);
else printf(”the value of x is invalid!\\n”);
}
19.以下程序实现的功能是:从键盘输入某年某月,输出该年份该月的天数。请在【】内填
入正确内容。 #include ”stdio.h” main()
··
{
int year, month, days, leap;
printf(”please input both year and month:”); scanf(”M/-”,&year,&month); switch (【1】) { case 1: case 3: case 5; case 7: case 8: case 10:
case 12: days=31; 【2】 case 4: case 6: case 9:
case 11: days=30;
break;
case 2: if (year@0==0) leap=1;
else if (year%4==0 && year0!=0) leap=1; else 【3】; if (leap) days=29;
else
days=28; }
printf(”%d年%d月的天数为%d\\n”, year, month, days); }
20.以下程序完成两个数的四则运算。请在【】内填入正确内容。
#include ”stdio.h” main() {
float x,y; char operator;
printf(”please input the expression:”); scanf(”%f%c%f”,&x,&operator,&y); switch (【1】)
{ case ’+’: printf(”%g%c%g=%g\\n”, x, operator, y, x+y);
【2】;
case ’-’: printf(”%g%c%g=%g\\n”, x, operator, y, x-y);
break;
case ’*’: printf(”%g%c%g=%g\\n”, x, operator, y, x*y);
break;
case ’/’: if (y==0.0)
printf(”除零错误!\\n”); else
printf(”%g%c%g=%g\\n”, x, operator, y, x/y); break;
【3】: printf(”表达式存在错误!\\n”);
··
}
}
21.以下程序运行后的输出结果是_____________。 #include ”stdio.h” main()
{
int x=10, y=20, t=0;
if (x==y) t=x; x=y; y=t; printf(”%d,%d\\n”,x,y);
}
22.执行以下语句后,x、y和z 的值分别为_____________。
int x,y,z; x=y=z=0;
++x || ++y && ++z;
3 答案及部分解析
一.选择题答案
1. D 2. B 3. D 4.C 5.D 6.C 7. C 8. A 9. C 10.C 11.C 12.C 13.B 14.C 15.A 16.B 17.C 18.C 19.B 20.B 21.A 22.C 23.D 24.C 25.D 26.C 27.C 28.C 29.A 30.A 2. 解析:当条件1:m=a>b的值为假时, 便已经确定整个表达式的值为假,所以不必再继
续判断第二个表达式的逻辑值。由于没有执行第二个表达式n=c>d,所以n的值仍为2。
17.解析:if的条件表达式x=y+z为赋值语句,x=5为非零值,即为if (1) printf(”***\\n”); 23.解析:A.的错误在于switch(a+b);其后有一个“;”,B的错误在于switch a的条件表达
式a没有括号,应该为switch(a),C的错误在于有两个case具有相同的入口值。
28.解析:当输入c时,switch语句执行情况为:
switch(ch) {case ’a’: 从此处向下执行 case ’h’: default: v1++; case ’0’: v2++; } 因为没有break语句
当继续输入h时,switch语句的执行情况为: switch(ch) 从此处向下执行 {case ’a’: case ’h’: 因为没有break语句
?v1? default: v1++; case ’ 0 ’ : v2++; ??v2?} v1?1?2
v2?1?2 重复上述过程,输入5个有效字符,则v1和v2执行5次自加操作,所以: v1=5, v2=5
··
二.填空题答案
1.答案:585858
解析:虽然三个if语句按照嵌套方式书写,但是程序仍然是依顺序运行的,会分别对每一
个if的条件表达式进行判断,若其条件表达式为真,就执行其后的语句,否则,不执行。 2.答案:1
解析:注意该表达式是关系表达式的双等号,所以其结果只能为1或0。 3.答案:4 4.答案:1
5.答案:在Turbo C编译系统下,结果为a=2,b=3,c=2,d=3,e=-1;若在Visual C++下,
结果为a=2,b=3,c=2,d=3,e=-0。
解析:①在Turbo C编译系统下,解题过程如下:
第一个赋值语句“c=(-a++)+(++b);”可分解为如下的几个语句:
b?b?1??c??a?b??b?2?1?3,c??1?3?2,a?1?1?2 a?a?1??此时a=2,b=3,c=2。
第二个赋值语句“d=(b--)+(++a)-a;”可分解为如下的几个语句:
a?a?1??d?b?a?a??a?2?1?3,d?3?3?3?3,b?3?1?2 b?b?1??此时a=3,b=2,c=2,d=3。
第三个赋值语句“e=(a/(++b))-(a/(--a));”中由于自加、自减运算符的优先级高于其它运算符,故先运算++和--,令a=2,b=3,然后该等式中a的值都取2参与运算,故该等式等价与:“e=2/3-2/2;”,因此e的值等于0。 此时a=2,b=3,c=2,d=3,e=0
②在Visual C++编译系统下,解题过程如下: 前两条赋值语句“c=(-a++)+(++b);”、“d=(b--)+(++a)-a;”的运算过程和在Turbo C编译系统一样,第三个赋值语句“e=(a/(++b))-(a/(--a));”可按步骤分解为如下的几个语句
??e?a/b?a/(a?1)??b?2?1?3,e?3/3?3/2?0,a?2
?a?a?1?因此,其结果为a=2,b=3,c=2,d=3,e=-0
6.答案:a=3,b=2,c=1,d=1,e=0,f=0
解析:第一个赋值语句c=(a++>= --b);可以分解为如下的语句:
b?b?1b?b?1??c?(a??b)??b?3?1?2,c?(2??2)?1,a?2?1?3 a?a?1??第二个赋值语句d=(a==++b);可以分解为如下的语句:
b?b?1???b?2?1?3,d?(3??3)?1
d?(a??b)? ··
第三个赋值语句e=(a--!=b);可以分解为如下的语句:
e?(a!?b)???e?(3!?3)?0,a?3?1?2
a?a?1?第四个赋值语句f=(++a>b--);可以分解为如下的语句:
a?a?1??f?(a?b)??a?a?1?3,f?(3?3)?0,b?3?1?2 b?b?1??由以上各步,可以得到:a=3,b=2,c=1,d=1,e=0,f=0
7.答案:2 0 0
解析:参看如下的注释语句。
if (c>0) s=a+b; /* c=3>0为真,所以执行s=a+b语句;即:s=2*/
if (a<=0) /*由于a= -1, 故a<=0为真,所以执行其后的大括号内的语句*/ { if (b>0) /*由于b=3, 故b>0为真,可以继续下面的语句*/
if (c<=0) w=a-b; /*由于c=3,c<=0为假,其后w=a-b不会执行*/
}
else if (c>0) w=a-b;/*这一对if-else因a<=0为真,所以没有机会执行到*/ else t=c;
8.答案:100
9.答案: 6 250
5 1 0 0
10.答案:【1】x>2 && x<=10 【2】x>-1 && x<=2 【3】y= -1 11.答案:【1】a==0 【2】b==0 【3】disc<0 12.答案:【1】(a+b>c) && (b+c>a) &&(a+c>b) 【2】 (a==b) || (b==c) || (a==c)
【3】 (a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a) 13.答案:【1】(year%4==0)&&(year0!=0) 【2】flag=0 14.答案:【1】ch>=’A’ && ch<=’Z’ 【2】ch=ch-32 15.答案:【1】a>b 【2】min=c; 16.答案:【1】weight>10 【2】rate=0.4 【3】else 17.答案:good!
joke
18.答案:【1】x<0 【2】x/10 【3】y!= -2 19.答案:【1】month 【2】break; 【3】leap=0; 20.答案:【1】operator 【2】break 【3】default 21.答案:20,0 22.答案:1,0,0