C语言基础练习题(含答案) 下载本文

内容发布更新时间 : 2024/12/23 10:49:57星期一 下面是文章的全部内容请认真阅读。

··

【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