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

第一章 C语言基础知识 ·1·

第一章 C语言基础知识

1.1 选择题

1. 以下不是C语言的特点的是( )。

A、语言简洁紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件操作 D、C语言移植性好

2. 下列字符序列中,不可用作C语言标识符的是( )。

A.abc123 B.no.1 C._123_ D._ok 3. 正确的C语言标识符是 ( )。

A._buy_2 B.2_buy C.?_buy D.buy? 4. 请选出可用作C语言用户标识符的一组标识符( )。

A.void B.a3_b3 C.For D.2a define _123 -abc DO WORD IF Case sizeof

5. 下列符号中,不属于转义字符的是( )。

A.\\\\ B.\\0xAA C.\\t D.\\0 6. 不属于C语言关键字的是( )。

A.int B.break C.while D.character 7. 是C语言提供的合法关键字的是( )。

A.Float B.signed C.integer D.Char 8. 以下不能定义为用户标示符的是( )。

A.scanf B.Void C._3com_ D.int 9. 一个C程序是由( )。

A. 一个主程序和若干子程序组成 B. 一个或多个函数组成 C. 若干过程组成 D. 若干子程序组成 10. C语言程序的基本单位是( )。

A.程序行 B.语句 C.函数 D.字符 11. 下列说法中,错误的是( )。

A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号 B.每个函数都有一个函数头和一个函数体,主函数也不例外 C.主函数只能调用用户函数或系统函数,用户函数可以相互调用

D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数 12. 以下说法中正确的是( )。

A.C语言程序总是从第一个定义的函数开始执行

B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行

D.C语言程序中的main( )函数必须放在程序的开始部分

第一章 C语言基础知识 ·2·

13. C编译程序是( )。

A.C程序的机器语言版本 B.一组机器语言指令 C.将C源程序编译成目标程序 D.由制造厂家提供的一套应用软件 14.以下选项中,合法的用户标识符是( )。

A.long B._2abc C.3dmax D.A.dat 15.以下选项中,合法的实型常数是( )。

A.5E2.0 B.E-3 C.2E0 D.1.3E

16.已知大写字母A的ASCII码值是65, 小写字母a的ASCII码是97,则用八进制表示的

字符常量’\\101’是( )。

A.字符A B.字符a C.字符c D.非法的常量 17.以下选项中, 合法转义字符的选项是( )。

A.’\\\\’ B.’\\018’ C.’xab’ D.’\\abc’ 18.以下选项中,正确的字符常量是( )。

A.”F” B.’\\\\’’ C.’W’ D.’’ 19.以下选项中可作为C语言合法整数的是

A.10110B B.0386 C.0Xffa D.x2a2

20.下列变量定义中合法的是

A.short _a=1-.le-1; B.double b=1+5e2.5; C.long do=0xfdaL; D.float 2_and=1-e-3;

9xn

21.与数学式子对应的C语言表达式是( )。

2x?1

A.9*x^n/(2*x-1) B.9*x**n/(2*x-1) C.9*pow(x,n)*(1/(2*x-1)) D.9*pow(n,x)/(2*x-1) 22.若有代数式

3ab,则不正确的C语言表达式是( )。 cd A.a/c/d*b*3 B.3*a*b/c/d C.3*a*b/c*d D.a*b/d/c*3 23.已知各变量的类型说明如下: int m=8,n, a, b;

unsigned long w=10; double x=3.14, y=0.12;

则以下符合C语言语法的表达式是( )。

A.a+=a-=(b=2)*(a=8) B. n=n*3=18 C.x%3 D.y=float (m) 24.以下符合C语言语法的赋值表达式是( )。

A.a=9+b+c=d+9 B.a=(9+b, c=d+9) C.a=9+b, b++, c+9 D.a=9+b++=c+9

25. 已知字母A的ASCII码为十进制数65,且S为字符型,则执行语句S=’A’+’6’-’3’;

后,S中的值为( )。

A.’D’ B.68 C.不确定的值 D.’C’ 26.在C语言中,要求运算数必须是整型的运算符是( )。

A./ B.++ C.*= D.% 27.若有说明语句:char s=’\\72’;则变量s( )。

第一章 C语言基础知识 ·3·

A.包含一个字符 B.包含两个字符

C.包含三个字符

D.说明不合法,s的值不确定

28.若有定义:int m=7; float x=2.5, y=4.7; 则表达式x+m%3*(int)(x+y)%2/4的值是( )。 A.2.500000 B.2.750000 C.3.500000 D.0.000000 29.在C语言中,char型数据在内存中的存储形式是( )。

A.补码 B.反码 C.原码 D.ASCII码

30.设变量x为float类型,m为int类型,则以下能实现将x中的数值保留小数点后两位,

第三位进行四舍五入运算的表达式是( )。 A.x=(x*100+0.5)/100.0 B.m=x*100+0.5, x=m/100.0 C.x=x*100+0.5/100.0 D.x=(x/100+0.5)*100.0

31.表达式13/3*sqrt(16.0)/8的数据类型是( )。

A.int B.float C.double D.不确定 32.设以下变量均为int类型,则值不等于7的表达式是( )。

A.(m=n=6, m+n, m+1) B.(m=n=6, m+n, n+1)

C.(m=6, m+1, n=6, m+n) D.(m=6, m+1, n=m, n+1)

33.假设所有变量均为整型,则表达式(x=2, y=5, y++, x+y)的值是( )。

A.7 B.8 C.6 D.2 34.已知s是字符型变量,下面不正确的赋值语句是( )。

A.s=’\\012’; B.s= ’u+v’; C.s=’1’+’2’; D.s=1+2; 35.已知s是字符型变量,下面正确的赋值语句是( )。

A.s=’abc’; B.s=’\\08’; C.s=’\\xde’; D.s=”\\”; 36.若有以下定义,则正确的赋值语句是( )。

int x,y; float z;

A.x=1,y=2, B.x=y=100 C.x++; D.x=int (z); 37.设x、y均为float型变量,则不正确的赋值语句是( )。

A.++x ; B.x*=y-2; C.y=(x%3)/10; D.x=y=0; 38.下列语句中符合C语言的赋值语句是( )。

A.a=7+b+c=a+7; B.a=7+b++=a+7; C.a=7+b,b++,a+7 D.a=7+b,c=a+7; 39.putchar函数可以向终端输出一个( )。

A.整型变量表达式值。 B.字符串

C.实型变量值。 D.字符或字符型变量值。 40.以下程序段的输出结果是( )。

int a=12345; printf(”-\\n”, a);

A.12 B.34 C.12345 D.提示出错、无结果

第一章 C语言基础知识 ·4·

41.若x和y均定义为int 型,z定义为double型,以下不合法的scanf()函数调用语句为

( )。

A.scanf(”%d%lx,%le”,&x,&y,&z); B.scanf (”-*%d%lf ”, &x, &y, &z); C.scanf(”%x%*d%o”, &x,&y);

D。scanf(”%x%o%6.2f”, &x,&y,&z); 42.有如下程序段: int x1,x2;

char y1,y2;

scanf(”%d%c%d%c”,&x1,&y1,&x2,&y2);

若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。(注:└┘代表空格)

A.10A└┘20B B.10└┘A20B C.10 └┘A└┘20└┘ B D.10A20└┘B 43.若变量已正确说明为float类型, 要通过语句scanf(”%f %f%f”, &a, &b, &c);给a赋予10.0,

b赋予22.0, c赋予33.0, 不正确的输入形式为( )。

A.10<回车> B.10.0,22.0,33.0<回车> 22<回车> 33

C.10.0<回车> D.10 22<回车>

22.0 33.0<回车> 33<回车>

44.有如下程序,若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是( )。

(注:└┘代表空格) int x1,x2; char y1,y2;

scanf(”%d%d”,&x1,&x2); scanf(”%c%c”, &y1,&y2);

A.1020AB B.10└┘20└┘ABC C.10└┘20 D.10└┘20AB

AB

45.已有定义int a=-2;和输出语句:printf(”%8lx”,a);以下正确的叙述是( )。

A.整型变量的输出格式符只有%d一种

B.%x是格式符的一种,它可以适用于任何一种类型的数据 C.%x是格式符

D.%8lx不是错误的格式符,其中数字8规定了输出字段的宽度 46.有如下程序段,对应正确的数据输入是( )。

float x,y;

scanf(”%f%f”, &x,&y); printf(”a=%f,b=%f”, x,y);

A.2.04<回车> B.2.04,5.67<回车> 5.67<回车>

C.A=2.04,B=5.67<回车> D.2.055.67<回车> 47.有如下程序段,从键盘输入数据的正确形式应是( )。(注:└┘代表空格)

float x,y,z;

scanf(―x=%d,y=%d,z=%d‖,&a,&y,&z);

A.123 B.x=1,y=2,z=3

第一章 C语言基础知识 ·5·

C.1,2,3 D.x=1└┘ y=2└┘ z=3 48.以下说法正确的是( )。

A.输入项可以为一个实型常量,如scanf(”%f”,3.5);

B.只有格式控制,没有输入项,也能进行正确输入,如scanf(”a=%d,b=5d”); C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(”%4.2f”,&f); D.当输入数据时,必须指明变量的地址,如scanf(”%f”,&f); 49.根据定义和数据的输入方式,输入语句的正确形式为:( )。(注:└┘代表空格)

已有定义:float x,y;

数据的输入方式:1.23<回车> 4.5<回车>

A.scan(”%f,%f”,&x,&y); B.scanf(”%f%f”,&x,&y);

C.scanf(”%3.2f└┘%2.1f”,&x,&y); D.scanf(”%3.2f%2.1f”,&x,&y);

50.根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为( )。

#include ”stdio.h” main()

{char s1,s2,s3; 输入语句;

printf(”%c%c%c”,s1,s2,s3); }

输入形式:A└┘B└┘C<回车> (注:└┘代表空格) 输出形式:A└┘B

A.scanf(”%c%c%c”,&s1,&s2,&s3);

B.scanf(”%c└┘%└┘c%c”,&s1, &s2,&s3); C.scanf(”%c,%c,%c”,&s1,&s2,&s3); D.scanf(”%c%c”, &s1, &s2,&s3); 51.以下程序的执行结果是:( )。

#include ”stdio.h” main()

{ int x=2,y=3;

printf(”x=%%d,y=%%d\\n”,x,y); }

A. x=%2,y=%3 B. x=%%d,y=%%d C. x=2,y=3 D. x=%d,y=%d 52.以下程序的输出结果是( )。(注:└┘代表空格)

#include ”stdio.h” main()

{ printf(”\\nstring1=s*”, ”programming”); printf(”\\nstring2=%-5s*‖, ”boy”); printf(”string3=%2s*‖, ”girl”); }

A.string1=programming└┘└┘└┘└┘* B.string1=└┘└┘└┘└┘programming* string2=boy* string2=boy└┘└┘*string3=gi* string3=gi*

C.string1=programming└┘└┘└┘└┘* D.string1=└┘└┘└┘└┘programming* string2=└┘└┘boy*string3=girl* string2=boy└┘└┘*string3=girl*

53.根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( )。

#include ”stdio.h”

第一章 C语言基础知识 ·6·

main() { int a; float b; 输入语句 输出语句 }

输入形式:1└┘2.3<回车> (注:└┘代表空格) 输出形式:a+b=3.300

A.scanf(”%d%f”,&a,&b); B.scanf(”%d%3.1f”,&a,&b); printf(”\\na+b=%5.3f”,a+b); printf(”\\na+b=%f”,a+b); C.scanf(”%d,%f”,&a,&b); D.scanf(”%d%f”,&a,&b); printf(”\\na+b=%5.3f”,a+b) printf(”\\na+b=%f”,a+b);

54.阅读以下程序,当输入数据的形式为:12,34,正确的输出结果为( )。

#include ”stdio.h” main() { int a,b;

scanf(”%d%d”, &a,&b); printf(”a+b=%d\\n”,a+b); }

A.a+b=46 B.有语法错误 C.a+b=12 D.不确定值 55.若有定义:int x,y; char s1,s2,s3; 并有以下输出数据:(注:└┘代表空格)

1└┘2<回车>

U└┘V└┘W<回车>

则能给x赋给整数1,给y赋给整数2,给s1赋给字符U,给s2赋给字符V,给s3赋给字符W的正确程序段是( )。

A.scanf(”x=%dy=%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar(); B.scanf(”%d%d”,&x,&y); s1=getchar();s2=getchar();s3=getchar(); C.scanf(”%d%d%c%c%c”,&x,&y,&s1,&s2,&s3);

D.scanf(”%d%d%c%c%c%c%c%c”,&x,&y,&s1,&s1,&s2,&s2,&s3,&s3);

1.2 填空题

1. C语言的符号集包括________、________、________。

2. 结构化设计中的三种基本结构是________、_______、________。

3. C语言源程序文件的后缀是________,经过编译后生成文件的后缀是________,经过链

接后生成文件的后缀是________。

4. C语言的关键字都用________{大写或小写}。

5. 一个函数由两部分组成,它们是_______、_______。 6. 函数体一般包括_______、_______。

7. C语言是通过_______来进行输入和输出的。 8. 以下程序的执行结果________。 #include ”stdio.h” main()

{ short i=-1,j=1;

第一章 C语言基础知识 ·7·

printf(”dec:%d,oct:%o,hex:%x,unsigned:%u\\n”,i,i,i,i); printf(”dec:%d,oct:%o,hex:%x,unsigned:%u\\n”,j,j,j,j); }

9. 以下程序的执行结果是________。

#include ”stdio.h” main()

{ char s=’b’;

printf(”dec:%d,oct:%o,hex:%x,ASCII:%c\\n”, s,s,s,s); }

10.以下程序的执行结果是________。(注:└┘代表空格)

#include ”stdio.h” main()

{ float pi=3.1415927;

printf(”%f,%.4f,%4.3f,.3f”,pi,pi,pi,pi); printf(”\\n%e,%.4e,%4.3e,.3e”,pi,pi,pi,pi); }

11.以下程序的执行结果是:________。

#include ”stdio.h” main()

{ char c=’c’+5;

printf(”c=%c\\n”,c); }

12.以下程序输入1└┘2└┘3后的执行结果是________。(注:└┘代表空格)

#include ”stdio.h” main() { int i,j; char k;

scanf(”%d%c%d”,&i,&k,&j); printf(”i=%d,k=%c,j=%d\\n”,i,k,j); }

13.有以下程序,若输入9876543210后的执行结果是________;若输入为:98└┘76└┘543210

后的执行结果是________;若输入为:987654└┘3210后的执行结果为:________。(注:└┘代表空格)

#include ”stdio.h” main()

{ int x1,x2; char y1,y2;

scanf(”-=<%c”,&x1,&x2,&y1,&y2); printf(”x1=%d,x2=%d,y1=%c,y2=%c\\n”,x,y); }

14.若x和y均为int型变量,则以下语句的功能是________。 x+=y; y=x-y; x-=y; 15.有一输入函数scanf(”%d”,k);则不能使float类型变量k得到正确数值的原因是:________。 16.有如下程序段,输入数据:12345ffl678后,u的值是 【1】 ,v的值是 【2】 。

int u; float v;

scanf(“=%f”,&u,&v);

第一章 C语言基础知识 ·8·

1.3 答案及部分解析

一.选择题答案 1.B 2.B 3.A 4.B 5.B 6.D 7.B 8.D 9.B 10.C 11.A 12.C 13.C 14.B 15.C 16.A 17.A 18.C 19.C 20.A 21.C 22.C 23.A 24.B 25.A 26.D 27.A 28.A 29.D 30.B 31.C 32.C 33.B 34.B 35.C 36.C 37.C 38.D 39.D 40.C 41.D 42.A 43.B 44.D 45.D 46.A 47.B 48.D 49.B 50.A 51.D 52.D 53.A 54.D 55.D

14.解析:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须

为字母或下划线。而且不能与C语言规定的关键字同名。关键字如:auto, break, case, char, const, continue, default, do, double, else, entry, extern, for, float, goto, if, int, int, long, register, return, short, signed, sizeof, static, struct, unsigned, while, switch, typedef, void, volatile, unior。这些关键字先不必硬背下来,随着后续的学习,你将发现它们都是一些数据的类型、语句等,自然会随着学习的深入,而记下来。

15.解析:用指数形式表示一个实型常数时,E或e之前必须有数字,且E后面指数必须为

整数。

16.解析:’\\101’为转义字符,相对应一个ASCII码字符。(101)8=(65)10=A.

17.解析:转义字符的特征是以“\\”开头,其后跟一些字符,如\\n, \\t, \\’, \\\\, \\}, \\‖, \\b, \\f等代表

一些特殊的含义,而\\后如跟数字,可以为八进制或者十六进制,将其转换为对应的ASCII码值,就可以得出对应的字符。“\\”后跟八进制的写法:\\0nn, 或者\\nn, 表示“\\0”或者“\\”后只能跟1或3位0——7之间的数字;“\\”后跟十六进制的写法:\\xnn,或者\\nn, 表示“\\x”或者“\\”后只能跟1或2位0——9及a——f(A——F)之间的字符。选项B的错误在于8不是八进制;而选项C的错误在于没有“\\”;选项D的错误在于超长(多了一位)。

21.解析:B的错误在于赋值语句的左侧只能为一个简单变量,如:n=3*(n=18); C的错误在

于%运算符只能适用于整型数据,D的错误在于作类型转换时,应将类型加上括号,即为:y=(float) m

31.解析:逗号表达式的最终结果为最右端的表达式(即x+y)的值,其运算顺序是从左自

右的。第三个表达式y++,其隐含有两步操作:先取y的原值,再执行y=y+1运算;而本题中,虽然没有将y赋给某个变量(取其原值),但还是一定会执行加运算的。因而,经过第三个表达式,y已经自加为6,故x+y的值为8,相对应得表达式最终结果为8。若本题改为:(x=2, y=5, z=y++, x+z),则其结果应为7。

二.填空题答案

1. 答案:英文字母、数字、一些有特定含义的标点符号 2. 答案:顺序结构、选择结构、循环结构 3. 答案:C,OBJ,EXE 4. 答案:小写

5. 答案:函数说明部分和函数体

第一章 C语言基础知识 ·9·

6. 答案:变量定义部分和执行部分 7. 答案:输入和输出函数

8. 答案:dec:-1,oct:177777,hex:ffff,unsigned:65535

dec:1,oct:1,hex:1,unsigned:1

9. 答案:dec:98,oct:142,hex:62,ASCII:b

10.答案:3.141593,3.1416,3.142, └┘└┘└┘└┘└┘3.142

3.141593e+00,3.1416e+00,3.142e+00,└┘└┘3.142e+00

(注:由于c编译系统不同,我们上机使用的机器,其第二个printf语句实际结果为:3.14159e+00,3.142e+00,3.14e+00,└┘└┘3.14e+00,即:小数点后取5位。)

11.答案:c=h

12.答案:i=1,k=└┘,j=2

13.答案:第一种情况的执行结果:x1=98,x2=765,y1=4,y2=1

第二种情况的执行结果:x1=98,x2=76,y1=└┘,y2=3

第三种情况的执行结果:x1=98,x2=765,y1=4,y2=2

14.答案:交换x和y的值 15.答案:(1)格式符应为:%f;(2)变量前边未加取地址符&, 即应为scanf(”%f”,&k); 16.答案:【1】123 【2】45.000000

第二章 选择结构 ·10·

第二章 选择结构

2.1 选择题

1. 已有定义:int x=3, y=4, z=5; 则表达式!(x+y)+z-1 && y+z/2的值是()。

A.6 B.0 C.2 D.1

2. 设a=5,b=6,c=7,d=8,m=2,n=2, 则执行(m=a>b) && (n=c>d)后n的值为()。

A.1 B.2 C.3 D.4

3. 设x、y和z都是int类型变量,且x=3,y=4,z=5, 则下面的表达式中,值为0的表达式为

()。

A.’x’ && ’y’ B.x<=y

C.x||y+z && y-z D.!((x

4.为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。

A.缩排位置相同的if B.在其之前未配对的if

C.在其之前未配对的最近的if D.同一行上的if

5. 逻辑运算符两侧运算对象的数据类型()。 A.只能是0或1

B.只能是0或非0正数 C.只能是整型或字符型数据 D.可以是任何类型的数据

6. 以下关于运算符优先顺序的描述中正确的是()。

A.关系运算符<算术运算符<赋值运算符<逻辑与运算符 B.逻辑与运算符<关系运算符<算术运算符<赋值运算符 C.赋值运算符<逻辑与运算符<关系运算符<算术运算符 D.算术运算符<关系运算符<赋值运算符<逻辑与运算符 7. 下列运算符中优先级最高的是()。

A.< B.&& C.+ D.!= 8. 选择出合法的if语句(设int x,a,b,c;)()。 A.if(a=b) c++; B.if(a=b) c++; D.if(a=>b) c++;

9. 能正确表示“当x的取值在[-58,-40]和[40,58]范围内为真,否则为假”的表达式是()。 A.(x>= -58) && (x<= -40) && (x>=40) && (x<=58) B.(x>= -58) || (x<= -40) || (x>=40) || (x<=58)

C.(x>= -58) && (x<= -40) || (x>=40) && (x<=58) D.(x>= -58) | |(x<= -40) && (x>=40) || (x<=58)

10.判断char型变量s是否为小写字母的正确表达式是()。

A.’a’ <= s<=’z’ B.(s>=’a’) & (s<=’z’)

第二章 选择结构 ·11·

C.(s>=’a’) && (s<=’z’) D.(’a’<=s) and (’z’>=s) 11.若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”。

则以下不能满足要求的表达式是()。

A.x%2==1 B.!(x%2==0) C.!(x%2) D.x%2

12.已知 x=45, y=’a’, z=0; 则表达式(x>=z && y<’z’ || !y)的值是()。 A.0 B.语法错 C.1 D.“假” 13.指出下列程序段所表示的逻辑关系是()。

if(a

x=10; } else

x=-10;

A.x???10??10a?b且c?d

a?b且c?d?10x?B.???10?10C.x????10D.x??a?b且c?d

a?ba?b且c?d

a?b且c?da?b且c?d

c?d?10??10??1?14.有一函数:y??0?1?x?0x?0 ,以下程序段中不能根据x值正确计算出y值的是()。 x?0A.if (x>0) y=1;

else if (x==0) y=0; else y= -1; B.y=0;

if (x>0) y=1;

else if (x<0) y= -1; C.y=0; if (x>=0)

if(x>0) y=1; else y= -1; D.if (x>=0) if (x>0) y=1; else y=0; else y= -1;

15.执行以下语句后,y 的值为()。

int x,y,z; x=y=z=0;

第二章 选择结构 ·12·

++x || ++y && ++z;

A.0 B.1 C.2 D.不确定值 16.已知int a=1,b=2,c=3; 以下语句执行后a,b,c的值是()。

if(a>b)

c=a; a=b; b=c;

A.a=1, b=2, c=3 B.a=2, b=3, c=3 C.a=2, b=3, c=1 D.a=2, b=3, c=2 17.请阅读以下程序:该程序()。

#include ”stdio.h” main()

{ int x=-10, y=5, z=0;

if (x=y+z) printf(”***\\n” ); else printf(”$$$\\n”); }

A.有语法错不能通过编译 B.可以通过编译但不能通过连接 C.输出*** D.输出$$$

18.以下程序的运行结果是()。

#include ”stdio.h” main() { int a=1;

if (a++>1) printf(”%d\\n”, a); else printf(”%d\\n”, a--); }

A.0 B.1 C.2 D.3 19.当a=1,b=2,c=4,d=3时,执行完下面一段程序后x的值是()。 if (a

if (c

if (a

if (b

A.1 B.2 C.3 D.4 20.执行以下程序段后,变量x,y,z的值分别为()。 int a=1,b=0, x, y, z;

x=(--a==b++)?--a:++b; y=a++; z=b;

A.x=0,y=0,z=0 B.x= -1,y= -1,z= 1 C.x=0,y=1,z=0 D.x= -1,y= 2, z= 1

21.若a、b、c、d、w均为int类型变量,则执行下面语句后的w值是()。

a=1;b=2;c=3;d=4; w=(a

第二章 选择结构 ·13·

A.1 B.2 C.3 D.4 22.以下程序的输出结果是()。

#include ”stdio.h” main() {

int a=5, b=4, c=6, d;

printf(”%d\\n”, d=a>b? a>c?a:c :b); }

A.5 B.4 C.6 D.不确定 23.若a、b、c1、c2、x、y均为整型变量,正确的switch 语句是()。

A.switch (a+b); B.switch a

{ case 1: y=a+b; break; { case c1: y=a-b; break; case 0: y=a-b; case c2: x=a*d; break; break; default: x=a+b; } }

C.switch (a*a+b*b) D.switch(a-b)

{ case 3: { default: y=a*b; break; case 1: y=a+b; break; case 3: x=a+b; break;

case 3: y=b-a; break; case 10: case 11: y=a-b; break; } }

24.执行下列程序,输入为3的数出结果是()。

#include ”stdio.h” main() {

int k;

scanf(”%d”, &k); switch(k)

{ case 1: printf(”%d\\n”, k++); case 2: printf(”%d\\n”, k++); case 3: printf(”%d\\n”, k++); case 4: printf(”%d\\n”, k++);

break;

default: printf(”Full!\\n”);

} }

A.3 B.4 C.3 D.4

5 4

25.假定等级和分数有以下对应关系:

等级:A 分数:85——100 等级:B 分数:60——84 等级:C 分数:60以下

对于等级grade输出相应的分数区间,能够完成该功能的程序段是()。 A.switch (grade)

{ case ’A’ :printf(”85——100\\n”);

case ’B’ :printf(”60——84\\n”); case ’C’ :printf(”<60\\n”);

default: printf(”grade is error!\\n”); }

第二章 选择结构 ·14·

B.switch (grade)

{ case ’A’ :printf(”85——100\\n”); break;

case ’B’ :printf(”60——84\\n”); case ’C’ :printf(”<60\\n”);

default: printf(”grade is error!\\n”); }

C.switch (grade)

{ case ’A’ :printf(”85——100\\n”); break;

case ’B’ :printf(”60——84\\n”); break;

case ’C’ :printf(”<60\\n”);

default: printf(”grade is error!\\n”); }

D.switch (grade)

{ case ’C’ :printf(”<60\\n”);

break;

case ’B’ :printf(”60——84\\n”); break;

default: printf(”grade is error!\\n”);

break;

case ’A’ :printf(”85——100\\n”); }

26.有如下程序,写出该执行结果()。

#include ”stdio.h” main() {

float x=2.0, y; if (x<0.0) y=0.0;

else if (x<10.0) y=1.0/x; else y=1.0;

printf(”%f\\n”,y); }

A.0.000000 B.0.250000 C.0.500000 27.以下程序的运行结果是()。

#include ”stdio.h” main() {

int a=2,b= -1,c=2; if (a

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

A.0 B.1 C.2 28.运行以下程序后,如从键盘上输入china#,则输出为()。D.1.000000 D.3

第二章 选择结构 ·15·

#include ”stdio.h” main() {

int v1=0,v2=0; char ch;

while ( (ch=getchar()) != ’# ’) switch (ch) { case ’a’:

case ’h’: default: v1++; case ’o’: v2++; }

printf(”%d,%d\\n”, v1,v2); }

A.2,0 B.5,0 C.5,5 29.有以下程序,若输入为字符s,则程序运行结果为()。

#include ”stdio.h” main() {

char ch;

ch=getchar(); switch (ch)

{ case ’a’: printf(”a=%c\\n”,ch); default: printf(”end!\\n”); case ’b’: printf(”b=%c\\n”,ch); case ’c’: printf(”c=%c\\n”,ch); } }

A.end! B.end! C.有语法错误 b=s c=s

30.有以下程序,程序运行后的输出结果是()。

#include ”stdio.h” main() {

int a=15, b=21, m=0; switch (a%3)

{ case 0: m++; break; case 1: m++; switch (b%2) { default: m++;

case 0: m++; break;

} }

printf(”%d\\n”,m); }

A.1 B.2 C.3 D.2,5 D.a=s end! D.4

第二章 选择结构 ·16·

2.2 填空题

1. 若从键盘输入58,则输出结果是________。

#include ”stdio.h” main() {

int a;

scanf(”%d”, &a);

if (a>50) printf(”%d”, a);

if (a>40) printf(”%d”,a); if (a>30) printf(”%d”,a); }

2. 设int x=9,y=8;表达式x==y+1的结果是________。

3. 定义int x,y;执行y=(x=1,++x,x+2);后, y的值是________。

4. 定义int x=10,y,z; 执行y=z=x; x=y==z;后, x的结果是________。 5. 设int a=1,b=2,c,d,e; 执行

c=(-a++)+(++b); d=(b--)+(++a)-a; e=(a/(++b))-(a/(--a));

请问a,b,c,d,e的结果是:________。 6. 设int a=2,b=3,c,d,e,f; 执行

c=(a++>= --b); d=(a==++b); e=(a--!=b); f=(++a>b--);

请问a,b,c,d,e,f的结果是:________。 7. 以下程序的运行结果是________。 #include ”stdio.h” main()

{

int a,b,c,s,w,t;

s=w=t=0;

a= -1; b=3; c=3; if (c>0) s=a+b; if (a<=0) { if (b>0)

if (c<=0) w=a-b;

}

else if (c>0) w=a-b;

else t=c;

printf(”%d %d %d”, s,w,t); }

8. 以下程序的运行结果是________。 #include ”stdio.h” main()

{

int a,b,c,d,e; a=c=1;

第二章 选择结构 ·17·

b=20; d=100;

if (!a) d=d++; else if (!b)

if (d) d= --d;

else d= d--;

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

}

9. 以下程序的运行结果是________。

#include ”stdio.h” main() {

int a, b= 250, c; if ((c=b)<0) a=4; else if (b=0) a=5; else a=6;

printf(”\\t%d\\t%d\\n”,a,c); if (c=(b==0))

a=5;

printf(”\\t%d\\t%d\\n”,a,c); if (a=c=b) a=4;

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

10.下面程序根据以下函数关系,对输入的每个x值,计算出y值。请在【】内填空。

x y 2

int x,y;

scanf(”%d”, &x); if (【1】) y=x*(x+2); else if (【2】) y=1/x; else if (x<=-1) y=x-1; else 【3】;

if (y!= -1) printf(”%d”,y); else printf(”error”); }

11.以下程序的功能是计算一元二次方程ax2+bx+c=0的根。请在【】内填入正确内容。

#include ”stdio.h” #include ”math.h” main() {

float a,b,c,t,disc,w,term1,term2; printf(”enter a,b,c:”);

scanf(%f%f%f”,&a,&b,&c); if (【1】)

第二章 选择结构 ·18·

if (【2】) printf(”no answer due to input error\\n”); else printf(”the single root is %f\\n”, - c/b); else

{ disc=b*b-4*a*c; w=2*a;

term1= -b/w; t=abs(disc); term2=sqrt(t)/w; if (【3】)

printf(”complex root\\n real part=%f imag part =%f\\n”, term1,term2); else

printf(”real roots\\n root1=%f root2=%f\\n”, term1+term2,term1-term2); }

}

12.以下程序根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三

角形的类型。请在【】内填入正确内容。 #include ”math.h” #include ”stdio.h” main() {

float a,b,c,s,area;

printf(”please input three edges of a triangle:”); scanf(”%f%f%f”,&a,&b,&c); if (【1】)

{ s=(a+b+c)/2;

area=sqrt(s*(s-A*(s-B*(s-c));

printf(”\\nthe area of the triangle is: %f”,area); if ((a==b)&&(b==c))

printf(”等边三角形”); else if (【2】)

printf(”等腰三角形”): else if (【3】)

printf(”直角三角形”): else printf(”一般三角形”): }

else printf(”不能组成三角形”); }

13.以下程序的功能是判断输入的年份是否是闰年。请在【】内填入正确内容。

#include ”stdio.h” main() {

int year, flag;

printf(”please input the year to jude whether it is a leap year:”); scanf(”%d”,&year);

if (year@0==0) flag=1; else if (【1】) flag=1; else 【2】;

if (flag) printf(”%d is a leap year\\n”,year);

第二章 选择结构 ·19·

else printf(”%d is not a leap year!\\n”,year);

}

14.以下程序是对用户输入的字母进行大小写转换。请在【】内填入正确内容。

#include ”stdio.h” main() {

char ch;

printf(”please input a letter:”); scanf(”%c”,&ch); if (【1】) ch=ch+32;

else if (ch>=’a’ && ch<=’z’) 【2】;

printf(” the converted letter is: %c\\n”,ch); }

15.以下程序是对从键盘输入的任何三个整数,求出其中的最小值。请在【】内填入正确内

容。

#include ”stdio.h” main()

{

int a,b,c,min;

printf(”please input three numbers:”); scanf(”%d%d%d”,&a,&b,&c); if (【1】) min=b; else

min=a; if (min>c)

【2】;

printf(”min=%d\\n”,min); }

16.以下程序实现这样的功能:商店卖西瓜,10斤以上的每斤0.15元,8斤以上的每斤0.3

元,6斤以上的每斤0.4元,4斤以上的每斤0.6元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,则输出应付款和应找钱数。请在【】内填入正确内容。 #include ”stdio.h” main()

{

float weight, money, rate;

printf(”the paid money of the client is:”); scanf(”%f”,&money);

printf(”the weight of the watermelon is:”); scanf(”%f”,&weight); if (【1】)

rate=0.15; else if (weight>8) rate=0.3; else if (weight>6) 【2】; else if (weight>4)

rate=0.6;

第二章 选择结构 ·20·

【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()

第二章 选择结构 ·21·

{

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

第二章 选择结构 ·22·

}

}

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;

2.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

第二章 选择结构 ·23·

二.填空题答案 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)? 第二章 选择结构 ·24·

第三个赋值语句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

第三章 循环结构 ·25·

第三章 循环结构

3.1 选择题

1. 以下程序的输出结果是( )。

main()

{ int n=4; while (n--)

printf(〞%d〞,--n);

}

A.20 B.31 2. 以下程序的输出结果是( )。

main()

{int x=10,y=10,i; for(i=0;x>8;y=++i) printf(\}

A.10192 B.9876 3. 当执行以下程序段时。

x=-1; do

{x=x*x;}

while (!x);

A.循环体将执行一次 C.循环体将执行无数多次 4. 执行以下程序后输出的结果是( main() { int y=10;

do{y--;}while(--y); printf(\

A.-1 B.1 5. 下面程序的输出结果是( )。

main()

{ int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1;

if (y

printf(\}

C.321 D.210 C.10990 D.101091 B.循环体将执行两次 D.系统将提示有语法错误 。

C.8 D.0 ) 第三章 循环结构 ·26·

A.x=4,y=4,a=1 B.x=5,y=5,a=1

C.x=5,y=4,a=3 D.x=5,y=4,a=1

6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是 ( )。

for (i=5;i;i--) for (j=0;j<4;j++)

{…}

A.20 B.24 C.25 D.30 7. 请读程序:

#include main()

{int x=1,y=0,a=0,b=0; switch(x)

{case 1:switch(y)

{case 0:a++;break;

case 1:b++;break;

}

case 2:a++;b++;break; }

printf(\}

上面程序的输出结果是( )。

A.a=2,b=1 B.a=1,b=1 8.若有以下程序段,w和k都是整型变量

w=k;

LB: if(w==0) goto LE;

w--;

printf(〞*〞); goto LB; LE:

则不能与上面程序段等价的循环语句是(A. for(w=k;w!=0;w--) print(〞*〞); B. w=k;

while(w--!=0) printf(〞*〞); w++; C. w=k;

do {w--;printf(〞*〞);} while (w!=0);

D.for (w=k;w;--w) printf(〞*〞); 9. 下面程序的输出是( )。

C.a=1,b=0 )。 D.a=2,b=2 第三章 循环结构 ·27·

main()

{

char *s=〞12134211〞; int k,v1=0,v2=0,v3=0,v4=0; for (k=0;s[k];k++) switch(s[k])

{

default:v4++; case 1:v1++; case 2:v2++; csse 3:v3++; }

printf(〞v1=%d,v2=%d,v3=%d,v4=%d\\n〞,v1,v2,v3,v4);

}

A.v1=4,v2=2,v3=1,v4=1 B.v1=4,v2=9,v3=3,v4=1 C.v1=5,v2=8,v3=6,v4=1 D.v1=8,v2=8,v3=8,v4=8 10. 有以下程序

#include〞stdio.h〞 int abc(int u,int v ); main() {

int c,a=24,b=16; c=abc(a,b);

printf(〞%d\\n〞,c); }

int abc (int u,int v)

{

int w; while (v)

{w=u%v; u=v; v=w;} return u;

}

输出结果是( )。

A.6 B.7 C.8 D.9 11.在下列选项中,没有构成死循环的程序段是( )。

A.int i=100; while (1)

{

i=i0+1; if(i>100) break; }

B. for ( ; ;);

第三章 循环结构 ·28·

C.int k=1000;

do {++k;}while (k>=10000); D.int s=36; while (s) ;

--s;

12.若输入B,以下程序的运行结果为( )。

main()

{char grade;scanf(\switch(grade)

{case'A':printf(\case'B':

case'C':printf(\case'D':printf(\default:printf(\} }

A.>=85. B.>=60. C.>=60.<60.error. 13.列程序运行的情况是( )。

main() { int i=1,sum=0;

while(i<10)sum=sum+1;i++; printf(\}

A.i=10,sum=9 B.i=9,sum=9 C.i=2,sum=1 14.有以下语句:

i=1;

for(;i<=100;i++) sum+=i;

与以上语句序列不等价的有( )。

A. for(i=1; ;i++) {sum+=i;if(i==100)break;} B. for(i=1;i<=100;){sum+=i;i++;} C. i=1;for(;i<=100;)sum+=i;

D. i=1;for(; ;){sum+=i;if(i==100)break;i++;} 15.下面程序的运行结果为( )。

main() { int n;

for(n=1;n<=10;n++) { if(n%3==0)continue; printf(\} }

A.12457810 B.369 C.12 D.error. D.运行出现错误 D.12345678910

第三章 循环结构 ·29·

16.下面程序的运行结果是( )。

main() {int x,y,z;

x=0;y=z=-1; x+=-z---y;

printf(\}

A.x=4 B.x=0 C.x=2 D.x=3 17.标有/**/的语句的执行次数是( )。

int y,i;

for(i=0;i<20;i++) {if(i%2==0)continue; y+=i;/**/ }

A.20 B.19 C.10 D.9

18.在C语言中,if语句后的一对圆括号中,用以决定分支的流程的表达式。

A.只能用逻辑表达式 B.只能用关系表达式 C.只能用逻辑表达式或关系表达式 D.可用任意表达式

19.在以下给出的表达式中,与do-while(E)语句中的(E)不等价的表达式是( )。

A.(!E==0) B.(E>0||E<0) C.(E==0) D.(E!=0) 20.假定所有变量均已正确定义,下列程序段运行后x的值为( )。

k1=1;k2=2; k3=3; x=15; if(!k1)x--;else if(k2) if(k3)x=4;else x=3; A.14 B.4 C.15 D.3 21.执行下面语句的输出为( )。

int i=-1;

if(i<=0)printf(―* * * *\\n‖); else printf(―% % % % \\n‖);

A.* * * * B.% % % % C.% % % % c D.有错,执行不正确 22.下列程序的输出是( )。

#include main()

{ int i;char c;

for(i=0;i<=5;i++)

{c=getchar();putchar(c); } }

程序执行时从第一列开始输入以下数据,代表换行符。 u w xsta

A.uwxsta B.u C.u D.u

w w w x xs xsta 23.下列程序的输出为( )。

第三章 循环结构 ·30·

#include\

main() { int i,j,x=0;

for(i=0;i<2;i++)

{x++;

for(j-0;j<=3;j++)

{if(j%2)continue;x++; } x++; }

printf(\}

A.x=4 B.x=8 C.x=6 D.x=12 24.下列程序的输出为( )。

#include main()

{int i,j,k=0,m=0; for(i=0;i<2;i++)

{ for(j=0;j<3;j++)k++;k-=j;} m=i+j;

printf(\}

A.k=0,m=3 B.k=0,m=5 C.k=1,m=3 D.k=1,m=5

25.在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为

( )。

A.0 B.1 C.true D.非0

26. 在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的

值应为( )。

A.0 B.1 C.true D.非0 27.下列程序的输出为( )。

#include main()

{ int k=0;char c='A'; do

{switch(c++)

{ case'A':k++;break; case'B':k--;

case'C':k+=2;break;

case'D':k=k%2;continue; case'E':k=k*10;break; default:k=k/3; } k++; }

while(c<'G');

第三章 循环结构 ·31·

printf(\

}

A.k=3 B.k=4 C.k=2 D.k=0 28.C语言的if语句嵌套时,if与else的配对关系是( )。

A. 每个else总是与它上面的最近的if配对 B. 每个else总是与最外的if配对 C. 每个else与if的配对是任意的 D. 每个else总是与它上面的if配对 29.下列程序的输出为( )。

#include main()

{int i=0,j=0,a=6;

if((++i>0)||(++j>0))a++;

printf(\}

A.i=0,j=0,a=6 B.i=1,j=1,a=7 C.i=1,j=0,a=7 D.i=0,j=1,a=7 30.下列程序段的输出结果为( )。

main() {int x=3; do

{ printf(\while(!(--x));}

A.1 B.3 0 C.1 -2 D.死循环

3.2 填空题:

1. 当输入19,2,21时下列程序运行的结果是_________。

main()

{int a,b,c,max;

printf(\scanf(\max=a;

if(max

printf(\}

2. 若输入字母C,程序输出结果为【1】;若输入字符*,程序将【2】。

#include main()

{char c1,c2; c1=getchar();

while(c1<97||c1>122)c1=getchar(); c2=c1-32;

printf(\

第三章 循环结构 ·32·

}

3. 以下程序运行的结果为________。

main()

{ int a,b,c,x,y,z; a=10;b=2;

c=!(a%b);x=!(a/b); y=(a=0); z=(a=0);

printf(\}

4. 若输入4,程序运行结果为【 1 】,若输入-4,运行结果为【 2 】,若输入10,运行结果为

【 3 】. main() { int x,y;

scanf(\if(x<1) { y=x;

printf(\}

else if(x<10) { y=2*x-1;

printf(\} else

{ y=3*x-11;

printf(\} }

5.以下程序运行的结果________。

main()

{int i=1,sum=0; loop:if(i<=10) {sum+=i; i++;

goto loop; }

printf(\}

6.以下程序运行的结果________。

main()

{ int x=2,y,z;

x*=3+1;

printf(\x+=y=z=5;

第三章 循环结构 ·33·

printf(\

x=y==z;

printf(\

}

7.以下程序运行的结果________。

#include #include main()

{int i,k,m,n=0;

for(m=1;m<=10;m+=2) { if(n==0)printf(\k=sqrt(m);

for(i=2;i<=k;i++) if(m%i==0)break; if(i>k)

{printf(\n++; } } }

8.如果输入‘1’,‘2’,‘3’,‘4’,程序运行输出的是________。

#include main() {char c; int i,k; k=0;

for(i=0;i<4;i++) {while(1)

{ c=getchar();if(c>='0'&&c<='9')break;} k=k*10+c-'0'; }

printf(\}

9.运行以下程序后,如果从键盘上输入china#<回车>,则输出结果为________。

#include main()

{int v1=0,v2=0; char ch;

while ((ch=getchar())!='#') switch(ch) {case 'a': case 'h':

default: v1++; case '0':v2++;

第三章 循环结构 ·34·

}

printf(\ }

10.程序运行结果是_________。

#include main() {int i;

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

{ if(i>4){printf(\printf(\} }

11. 以下程序运行的结果是_________。

#include main() { int a,b;

for(a=1,b=1;a<=100;a++) { if(b>=20)break; if(b%3==1) { b+=3; continue; } b-=5; }

printf(\}

12.以下程序运行的结果是________。

main() {int i=1;

while(i<10)

if(++i%3!=1)continue; else printf(\}

13.程序运行的结果是________。

main() {int n=0;

while(n++<=1) printf(\printf(\}

14.此程序运行时,输入qwert?程序的运行结果是_________。

#include main() {char c;

第三章 循环结构 ·35·

while((c=getchar())!='?')putchar(++c);

}

15.对以下程序:

当输入65 14时,其运行结果是【 1 】。 当输入14 63时,其运行结果是【 2 】。 当输入25 125时,其运行结果时【 3 】。 #include main() {int m,n;

scanf(\while(m!=n)

{ while(m>n)m-=n; while(n>m)n-=m; }

printf(\} 16.在执行以下程序时,为了使输出结果为t=4,则给a和b输入的值应满足的条件是_______。

main()

{int s,t,a,b;

scanf(〞%d,%d〞,&a,&b); s=1; t=1; if(a>0) s=s+1; if(a>b) t=s+t; else if (a==b) t=5;

else t=2*s;

printf(〞t=%d\\n〞,t);

}

17.求出1000以内的“完全数”。(提示:如果一个数恰好等于它的因子之和(因子包括1,

不包括数本身),则称该数为“完全数”。如:6的因子是1,2,3而6=1+2+3,则6是个“完数”)。 main() {int i,a,m;

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

{for(m=0,a=1;a<=i/2;a++) if(!(i%a)) 【1 】; if【2】)printf(\

} }

18.鸡问题:100元钱买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,

求100元钱能买公鸡、母鸡、小鸡各多少只? #include main()

{int cocks,hens,chicks; cocks=0;

第三章 循环结构 ·36·

while(cocks<=19)

{ hens=0;

while(hens<=33)

{ chicks=100.0-cocks-hens;

if(5.0*cocks+3.0*hens+chicks/3.0==100.0) printf(\【1】; }

【2】; } }

19.爱因斯坦的阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2

阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;只有每步跨7阶时,正好到阶梯顶。问共有多少阶梯。 main()

{int ladders=7;

while(【 1 】)ladders+=14; printf(\}

20.下列程序计算平均成绩并统计90分及以上人数。

main() {int n,m;

float grade,average; average=n=m=【1】; while(【2】)

{ scanf(\if(grade<0)break; n++;

average+=grade; if(grade<90)【3】; m++; }

if(n)printf(\}

21.下列程序计算Fibonacci数列:1,1,2,3,5,8,13……的前40项。

main()

{int I;long f1,f2; 【1】;

for(I=0;I<20;I++)

{ printf(\if(I%2)printf(\f1+=f2; 【2】; }

第三章 循环结构 ·37·

}

22.下列程序判断一个数是否为素数。

#include #include main() {int I,k,m;

scanf(\k=sqrt(【1】); for(I=2;I<=k;I++) if(m%I==0)【2】;

if(【3】)printf(\else printf(\}

23. 求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。

main()

{int I,j,k,m,n;

for(I=1;【1】;I++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) {【2】;

n=I*I*I+j*j*j+k*k*k; if(【3】)

printf(\ } }

24.从键盘上输入两个整数m和n,求其最大公约数。

main()

{int a,b,num1,num2,temp;

scanf(\if(【1】)

{ temp=num1; num1=num2; num2=temp; }

a=num1;b=num2; while(b!=0) { temp=【2】; a=b; b=temp; }

printf(\}

第三章 循环结构 ·38·

3.3 答案及部分解题分析

一.选择题答案

1.A 2.D 3.A 4.D 5.D 6.A 7.A 8.C 9.D 10.C 11.C 12.C 13.D 14C 15.A 16.C 17.C 18.D 19.C 20.B 21.A 22.C 23.B 24.B 25.A 26.A 27.B 28.A 29.C 30.C 1. 答案:A

解析:此题中判断while后面的条件时,先使用n的值再n--,而打印时打印的是n减1

后的值。所以第一次循环,n=4,执行完后n=2,打印出2;第二次循环,n=2, 经过n—和—n,n变成了0,打印出0;第三次循环时while后面的条件不成立(n=0),所以循环结束。故输出为20。 2. 答案:D

解析:第一次循环时打印的x和y的值都是10,然后x通过x—后变成9,因此第二次循环时x=9, 而“y=++i‖执行完后,y变成1,所以第二次循环时打印的x和y的值是9和1 ,然后x—变成8; 第三次循环时,x>8条件不成立,循环结束。故D为正确答案。 3. 答案:A

解析:对于一个不为0的数,!x即为0,故对于x=-1,while后条件不成立,但是do循环体是先执行的,故等判断条件时,循环体已执行了一次。 4. 答案:D

解析:此题是一个do-while循环,当y值为1时,while后的条件--y变成0,从而循环结束,这时打印出0,然后y--变成-1。故D为正确答案。 5. 答案:D

解析:此题中循环进行了1次,但判断了2次,第一次x加1变成4,y减1变成5,a加1变成1;第2次while后面的条件不成立,因为!=的左边先使用x的值4来判断,右边表达式的值为4,即y由5变成4,判断结束后4变成5,循环结束。故D为正确答案。 6. 答案:A

解析:此题中外层for要进行5次,内层for循环要进行4次,所以共进行4*5=20次循环。 二.填空题答案 1. 答案:21 2. 答案:【1】c C 【2】等待继续输入,直到输入小写字母。 3. 答案:1,0,0,1 4. 答案:【1】x=4,y=2*x-1=7 【2】x=-4,y=x=-4 【3】x=10,y=3*x-11=19 5. 答案:55 6. 答案:8,14,1 7. 答案:1 3 5 7 8. 答案:1234

第三章 循环结构 ·39·

9. 答案:5,5 10.答案:1 3 5 11.答案:8

12.答案:4 7 10 13.答案:1 2 3 14.答案:rxfsu 15.答案:【1】m=1 【2】m=7 【3】m=25 16.答案:0num2 【2】a%b

3】continue 3】I>=k+1 3】m==n 【【【 第三章 循环结构 ·40·

第三章 循环结构 ·41·

第三章 循环结构 ·42·

第三章 循环结构 ·43·

第三章 循环结构 ·44·

第三章 循环结构 ·45·

第三章 循环结构 ·46·

第三章 循环结构 ·47·

第三章 循环结构 ·48·

第三章 循环结构 ·49·

第三章 循环结构 ·50·

女装批发,蝴蝶铺

http://www.hudiepu.com XHWE0KKyfaHo

123