第1章 C语言编程基础知识

1.1 程序设计语言及其发展随堂测验

1、计算机能直接执行的程序是用何种程序设计语言编写的?
    A、C语言
    B、机器语言
    C、汇编语言
    D、C++

2、C语言源程序是用编译方式进行翻译的。

1.2 C语言的发展及其特点随堂测验

1、下列哪种程序设计语言能编写系统软件?
    A、Fortran
    B、VB
    C、C
    D、JAVA

1.3 简单的C程序介绍随堂测验

1、C程序中main函数的位置是:
    A、必须在程序的开始。
    B、必须在程序的最后。
    C、可以任意位置。
    D、必须在程序的中间位置。

2、C程序的执行总是从:
    A、第1个函数开始执行。
    B、main函数开始执行。
    C、最后1个函数开始执行。
    D、中间函数开始执行。

3、1个C程序可以由1个或多个函数构成,但必须有1个函数名为main。

4、语句的结束标志是冒号“:”

5、C程序中1条语句必须写在一行。

1.4 C程序的上机步骤随堂测验

1、C语言源程序的扩展名是:
    A、.obj
    B、.exe
    C、.doc
    D、.c

2、C语言程序上机调试步骤是:
    A、编写源程序、编译、连接、运行。
    B、编写源程序、编译、运行。
    C、编写源程序、连接、运行。
    D、编写源程序、运行。

第2章 程序的数据描述——基本数据类型

2.1 C语言基本元素随堂测验

1、正确的用户标识符是:
    A、6a
    B、_int
    C、a-b
    D、char

2、不正确的用户标识符是:
    A、stu_no
    B、Int
    C、a1.
    D、_char

3、不正确的数据类型关键字是:
    A、float
    B、char
    C、double
    D、integer

4、用户标识符开头必须是:
    A、数字
    B、字母
    C、任意字符
    D、下划线

2.2 C语言数据类型随堂测验

1、C语言基本数据类型包括:
    A、整型、实型、逻辑型
    B、整型、实型、字符型
    C、整型、字符型、逻辑型
    D、整型、实型、字符串型

2.3 常量和变量随堂测验

1、下列不能正确定义变量并给变量赋值的是:
    A、int a,b; a=b=6;
    B、int a=5,b=5;
    C、int a=5,b; b=5;
    D、int a=b=5;

2、C语言中常量是没有类型之分的。

3、在程序运行期间,变量可以多次被赋值。

4、C程序中变量可以不定义而直接使用。

5、在程序运行过程中其值不能被改变的量称为:

2.4 整型数据随堂测验

1、C语言中整型数据在内存中的存放形式是:
    A、原码
    B、反码
    C、补码
    D、ASCII码

2、整型数据类型关键字是:.
    A、double
    B、unsigned
    C、char
    D、int

3、不合法的整型常量是:
    A、12345
    B、068
    C、0xabc
    D、0147

4、1个有符号短整型数的最大正数是:

5、1个无符号短整型数的最大正数是:

2.5 实型数据随堂测验

1、不正确的实型常量是:
    A、0.5
    B、.5
    C、5.0
    D、5

2、下列C语言合法的实型数据类型关键字是:
    A、int
    B、float
    C、char
    D、Double

3、下面四个选项中,均是不合法的浮点数的选项是:
    A、160. 0.12 e3
    B、123 2e4.2 .e5
    C、-.18 23e4 0.
    D、-e3 .234 1e3

4、下面四个选项中,均是合法浮点数的选项是:
    A、+1e+1 5e一9 03e2
    B、-.60 12e-4 -e5
    C、123e 1.2e-.4 +2e-1
    D、-e3 .8e4 5.e-0

5、合法的实型常量是:
    A、.2e5
    B、2.5e4.5
    C、4e-2
    D、e3

2.6 字符型数据随堂测验

1、字符数据类型关键字是:
    A、string
    B、c
    C、char
    D、CHAR

2、下面4个选项中,均是合法的转义字符选项是:
    A、"\'" '\\' '\n'
    B、'\\' '\017' '\"'
    C、'\018' '\f' 'xab'
    D、'\\0' '101' 'xlf'

3、下面正确的字符常量是:
    A、"a"
    B、'\\''
    C、'W'
    D、''

4、下面不正确的字符串常量是:
    A、'abc'
    B、"12\7812"
    C、"0"
    D、""

5、字符串“ab\108g”在内存中占的字节数是:
    A、8
    B、7
    C、6
    D、5

6、字符型数据在内容中占的字节数是:

7、'a'在内存中占的字节数是:

8、"a"在内存中占的字节数是:

第3章 程序的数据运算

3.1 运算符与表达式随堂测验

1、在C语言中,要求运算符两侧的运算对象必须是整型数据的运算符( )。
    A、/
    B、++
    C、!=
    D、%

2、下列运算符优先级最高的是( )。
    A、关系运算符
    B、赋值运算符
    C、算术运算符
    D、逻辑运算符

3、根据运算对象个数,运算符可以分为( )。
    A、单目运算符
    B、双目运算符
    C、三目运算符
    D、四目运算符

4、赋值运算符的结合性为左结合。()

5、单目运算符、赋值运算符和条件运算符均为右结合性。( )

3.2 算术运算随堂测验

1、若有代数式,则不正确的C语言表达式是( )
    A、a/b/c*e*3
    B、3*a*e/b/c
    C、3*a*e/b*c
    D、a*e/c/b*3

2、在C语言中,如果算术运算符(/)的运算对象中有一个是实型,则结果为双精度实型。()

3、在C语言中, 用算术运算符%求两个数相除的余数,要求两侧的运算对象必须为 数据。

3.3 赋值运算随堂测验

1、下列选项中符合C语言语法的赋值表达式是( )。
    A、a=b+c=3
    B、a=(b=5,c=b+6)
    C、a=b=5,c=b+2
    D、a-=4+b=c+2

2、已知各变量的类型说明如下:int a=2, b=5; double y=8.5; 则以下符合C语言语法的表达式是( )。
    A、a+=a-=(b=2)*(a=8)
    B、a=b/3=8
    C、y%3
    D、y=float (a)

3、已知ch是字符型变量,下面正确的赋值语句是
    A、ch='\034';
    B、ch= '34';
    C、ch='3'+'4';
    D、ch=3+4;

4、已知“int x=6;”,则执行语句“x+=x-=x*x;”后x的值是 。

5、若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为 ,n的值为 。

3.4 自增和自减运算及强制类型转换随堂测验

1、当c的值不为0时,以下能将c的值赋给变量a, b 的是( )。
    A、c=b=a
    B、(a=c) || (b=c)
    C、(a=c) && (b=c)
    D、a=c=b

2、若希望当x的值为奇数时,表达式的值为“真”,x的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是( )。
    A、x%2==1
    B、x%2
    C、!(x%2)
    D、!(x%2==0)

3、C语言中用 表示逻辑“假”。

4、为表示关系x≥y≥z,应使用C语言表达式 。

5、若有定义“int a=2,b=3;float x=3.5,y=2.5;”则表达式“(float)(a+b)/2+(int)x%(int)y”的值为 。

第4章 顺序结构程序设计

4.1 程序的基本结构随堂测验

1、任何复杂的程序都是由逆序结构、选择结构、循环结构这三种结构构成的。

4.2 C语句概述随堂测验

1、C语言中,可将一系列语句置于一对( )之间从而构成复合语句。
    A、尖括号"< >"
    B、圆括号"( )"
    C、花括号"{}"
    D、方框号"[ ]"

2、C语言空语句是由一个( )构成的。
    A、冒号":"
    B、分号";"
    C、逗号","
    D、句号"."

4.3 字符数据输入输出随堂测验

1、函数putchar(65) 的功能是向终端输出( )。
    A、6
    B、65
    C、有编译错误
    D、A

2、有如下程序段: char c1,c2; c1=getchar(); c2=getchar(); printf("%c%c",c1,c2); 运行程序时,从键盘输入1 65,则输出结果为( )。
    A、16
    B、1
    C、1 6
    D、1 A

4.4 数据格式化输入输出随堂测验

1、若已定义 int a=11; 执行以下语句后的输出结果是( )。 printf("a=%d,a=%o,a=%x\n",a,a,a) ;
    A、a=11, a=11, a=b
    B、a=11, a=13, a=b
    C、a=11, a=13, a=c
    D、a=11, a=12, a=13

2、已有如下定义和输入语句: char c1,c2; int x; scanf("%c%d%c",&c1,&x,&c2); 若要求x、c1、c2的值分别为9、'K'和'H',正确的数据输入是( )。
    A、K 9H
    B、K 9 H
    C、K9 H
    D、9KH

3、若有定义 int a=8,b=5; 要实现输出形式为: 8*5=40 ,正确的printf()函数调用语句是( )。
    A、printf("a*b=%d\n",a*b);
    B、printf("a*b=a*b\n");
    C、printf("%d*%d=a*b\n",a,b);
    D、printf("%d*%d=%d\n",a,b,a*b);

4、已有定义 char s; 使用scanf( )函数输入一个字符给变量s,不正确的函数调用是( )。
    A、scanf("%c",&s) ;
    B、scanf("%d",&s) ;
    C、scanf("%u",&s) ;
    D、scanf("%lf",&s) ;

5、若有定义:int a; float x; 则下面正确的输入函数调用语句是( )。
    A、scanf("%f%d",&a,&x);
    B、scanf("%f%d",a,x);
    C、scanf("%d%f",&a,&x);
    D、scanf("%d%f",a,x);

第1次单元测验

1、一个C程序的执行是从( )。
    A、本程序的main函数开始,到main函数结束。
    B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。
    C、本程序的main函数开始,到本程序文件的最后一个函数结束。
    D、本程序文件的第一个函数开始,到本程序main函数结束。

2、以下叙述正确的是:
    A、在C程序中,main函数必须位于程序的最前面
    B、C程序的每行中只能写一条语句
    C、C语言本身没有输入输出语句
    D、在对一个C程序进行编译的过程中,可发现注释中的拼写错误

3、以下叙述不正确的是:
    A、一个C源程序可由一个或多个函数组成
    B、一个C源程序必须包含一个main函数
    C、C程序的基本组成单位是函数
    D、在C程序中,注释说明只能位于一条语句的后面

4、C语言规定:在一个源程序中,main函数的位置:
    A、必须在最开始
    B、必须在系统调用的库函数的后面
    C、可以任意
    D、必须在最后

5、若x,i,j和k都是int型变量,则执行下面表达式后x的值为 。 x=(i=4,j=16,k=32)
    A、4
    B、16
    C、32
    D、52

6、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是:
    A、7
    B、8
    C、6
    D、2

7、下列四组选项中,均不是C语言关键字的选项是:
    A、define IF type
    B、getc char printf
    C、include scanf case
    D、while go pow

8、下面四个选项中,均是不合法的用户标识符的选项是:
    A、A P_0 do
    B、float 1a0 _A
    C、b-a if int
    D、-123 temp INT

9、下面四个选项中,均是不合法的浮点数的选项是:
    A、160. 0.12 e3
    B、123 2e4.2 .e5
    C、.18 123e4 0.
    D、-e3 .234 1e3

10、下面四个选项中,均是合法浮点数的选项是:
    A、+le+1 5e-9.4 03e2
    B、-.60 12e-4 -8e5
    C、123e 1.2e-.4 +2e-1
    D、-e3 .8e4 5.e-0

11、下面四个选项中,均是合法转义字符的选项是:
    A、' \'' '\\' '\n'
    B、'\' '\018' '\"'
    C、'\017' '\f' '\xaw'
    D、'\\0' '\101' '\xlf'

12、下面四个选项中,均是不合法的转义字符的选项是:
    A、'\'' '\\' '\xf'
    B、'\1011' '\' '\ab'
    C、'\011' '\f' '\9'
    D、'\abc' '\101' '\xlf '

13、下面正确的字符常量是:
    A、"a"
    B、'\\''
    C、'W'
    D、''

14、下面四个选项中,均是不正确的八进制数或十六进制数的选项是:
    A、016 0x8f 018
    B、oabc 017 0x8
    C、010 -0x11 0x16
    D、0a12 7ff -123

15、下面四个选项中,均是正确的八进制数或十六进制数的选项是:
    A、-10 0x8f -011
    B、0abc 017 0xc
    C、0010 -0x11 0xf1
    D、0al2 -0xl23 0x8

16、下面不正确的字符串常量是:
    A、'abc'
    B、"12\12"
    C、"0"
    D、""

17、若有如下代数式,则不正确的C语言表达式是:
    A、a/b/c*e*3
    B、3*a*e/b/c
    C、3*a*e/b*c
    D、a*e/c/b*3

18、已知各变量的类型说明如下: int k,a,b; unsigned long w= 5; double x=1.42; 则以下不符合C语言语法的表达式是:
    A、k=(a=2,b=3,a+b)
    B、x%(-3)
    C、w+=2
    D、a+= a-=(b=4)*(a=3)

19、已知各变量的类型说明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是:
    A、a+=a-=(b= 4)*(a=3)
    B、a=a*3=2
    C、x% i
    D、y=f1oat(i)

20、以下不正确的叙述是:
    A、在C程序中,逗号运算符的优先级最低
    B、在C程序中,APH和aph是两个不同的变量
    C、若a和b类型相同,在执行了赋值表达式a=b后b中的值将放入a中,而b中的值不变
    D、对于运算符%来说参与运算的对象可以是任何类型的数

21、以下正确的叙述是:
    A、在C程序中,每行中只能写一条语句
    B、若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
    C、在C程序中,无论是整数还是实数,都能被准确无误地表示
    D、在C程序中,%是只能用于整数运算的运算符

22、以下符合C语言语法的赋值表达式是:
    A、d=9+e+f=d+9
    B、d=(9+e,f=d+9)
    C、d=9+e,e++,d+9
    D、d=9+e++=d+7

23、在C语言中,要求运算数必须是整型的运算符是:
    A、/
    B、++
    C、=
    D、%

24、若以下变量均是整型,且num=sum=7;则执行表达式sum=num++,sum++,++num后sum的值为:
    A、7
    B、8
    C、9
    D、10

25、若有说明语句:char c='\072' 则变量:
    A、包含1个字符
    B、包含2个字符
    C、包含3个字符
    D、说明不合法,c的值不确定

26、若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是:
    A、2.5
    B、2.75
    C、3.5
    D、0.0

27、设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为:
    A、int
    B、float
    C、double
    D、不确定

28、在C语言中, char型数据在内存中的存储形式是:
    A、补码
    B、反码
    C、原码
    D、ASCII码

29、设C语言中,一个short int型数据在内存中占2个字节,则unsigned short int型数据的取值范围为:
    A、0~255
    B、0~32767
    C、0~65535
    D、0~2147483647

30、若有以下定义,则能使值为3的表达式是: int k= 7,x =12;
    A、x%=(k%= 5)
    B、x%=(k-k%5)
    C、x%=k- k%5
    D、(x%=k)-(k%=5)

31、设以下变量均为int类型,则值不等于7的表达式是:
    A、(x= y= 6, x+y , x+1)
    B、(x= y= 6 , x+y , y+1)
    C、(x= 6 ,x+1,y= 6,x+y)
    D、(y=6,y+l,x = y,x+1)

32、若x ,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是:
    A、scanf("%d%x,%e",&x,&y,&z);
    B、scanf("%2d*%d%f",&x,&y,&z );
    C、scanf("%x%o%f",&x,&y,&z);
    D、scanf("%x%o%d",&x,&y,&z);

33、已有如下定义和输入语句 ,若要求a1,a2,c1,c2值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是: int a1,a2; char c1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
    A、10A 20B< CR>
    B、10 A 20 B<CR>
    C、10A20<CR> B
    D、10A20 B<cR>

34、有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678(回车),则x 的值为:
    A、12345
    B、123
    C、45
    D、345

35、已有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678(回车),则y 的值为:
    A、无定值
    B、45.000000
    C、678.000000
    D、123.000000

36、已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是: int a1,a2; char c1,c2; scanf("%d%d",&a1,&a2); scanf("%c%c",&c1,&c2);
    A、1020AB<CR>
    B、10 20<CR>AB<CR>
    C、10 20 AB<CR>
    D、10 20AB<CR>

37、根据定义和数据的输入方式,输入语句的正确形式为: 已有定义: float fl,f2; 数据的输入方式: 4.52 3. 5
    A、scanf("%f,%f",&f1,&f2);
    B、scanf("%f%f",&f1,&f2 );
    C、scanf("%d%f",&f1,&f2);
    D、scanf("%f%x",&f1,&f2);

38、阅读以下程序,当输入数据的形式为25,13,10<CR>正确的输出结果为: #include<stdio.h> int main() { int x,y,z scanf("%d%d%d",&x,&y,&z ); printf("x+y+z=%d\n ,x+y+z); return 0; }
    A、x +y+z=48
    B、x +y+z=35
    C、x +z=35
    D、不确定值

39、有输入语句: scanf("a= %d,b= %d,c=%d",&a,&b,&c); 为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是:
    A、132(回车)
    B、1,3,2(回车)
    C、a=1b=3c=2(回车)
    D、a=1,b =3,c =2(回车)

40、已知ch是字符型变量,下面不正确的赋值语句是:
    A、ch='a+b';
    B、ch='\0';
    C、ch='7'+'9';
    D、ch=5+9;

41、已知ch是字符型变量,下面正确的赋值语句是:
    A、ch= '123';
    B、ch= '\xff';
    C、ch= '\08';
    D、ch="\";

42、若有以下定义,则正确的赋值语句是: int a,b;float x;
    A、a=1,b=2 ;
    B、b++;
    C、a= b= 5
    D、b= int(x);

43、x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后,x 、y 和之的值是:
    A、x=10 y=15 z=10
    B、x=10 y=10 z=10
    C、x=10 y=10 z=15
    D、x=10 y=5 z=10

44、在C程序中,注释说明只能位于一条语句的后面。

45、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值为7。

46、在C 程序中,逗号运算符的优先级最低。

47、在C语言中char型数据在内存中的存储形式为ASCII码。

48、若有int x , 则 (x+1)++ 是一个合法的c语言表达式。

49、每个语句和数据定义的最后都必须有分号。

50、字符 '\0' 是字符串的结束标记,其ASCII代码为0。

51、算述运算*、/、+和一具有相同的优先级。

52、C语言认为变量number和NuMbEr是相同的。

53、若 int i=10,j=2; 则执行完 i*=j+8; 后 i 的值为 28 。

54、在 C 语言中,"A" 和 'A' 等价。

55、表达式 4/7 和 4.0/7 的值相等。

56、设x的值为15,n的值为2,则表达式 x%=(n+=3) 运算后x的值是( )。

57、设 (k=a=5,b=3,a*b),则表达式的值为( )。

58、下列语句输出的结果是( )。 short b=65535; printf("%d",b);

59、若a是int型变量,则计算表达式 a=25%3/3 后 a 的值为( )。

60、已知 i=5.6; 语句 a=(int)i; 执行后变量 i 的值是( )。

61、若int x=6;则 x+=x-=x*x 表达式最后x的值是( )。

62、执行下列语句: int a=1, b=2; a=a+b; b=a-b; a=a-b; printf("%d%d", a,b ); 输出结果是( )。

63、字符串常量 "ab\10823c" 在内存中的字节数是( )。

64、int a=24; printf("%o ", a ); 输出结果是( )。

65、在C语言的赋值表达式中,赋值号左边必须是( )。

第5章 选择结构程序设计

5.1 关系运算符和关系表达式随堂测验

1、下列运算符中优先级最高的是:
    A、=
    B、+
    C、++
    D、<

2、下列运算符中优先级最低的是:
    A、=
    B、+
    C、++
    D、>

3、下列运算符中结合方向与其他不同的是:
    A、=
    B、+
    C、<=
    D、>

5.2 逻辑运算符和逻辑表达式随堂测验

1、下列运算符中优先级最高的是:
    A、=
    B、+
    C、*
    D、&&

2、下列运算符中优先级最低的是:
    A、==
    B、+
    C、++
    D、||

3、下列运算符中结合方向与其他不同的是:
    A、!
    B、&&
    C、||
    D、+

5.3 if 语句随堂测验

1、下列符合c语法的if语句是:
    A、if 3>5 then printf("Ok!");
    B、if 3>5 printf("Ok!")
    C、if (3>5) then printf("Ok!");
    D、if (3>5) printf("Ok!");

2、在c语言中,叙述正确的是:
    A、if语句可以不以 分号;结尾
    B、if语句必须要有else
    C、if后面小括号里可以加分号;
    D、if语句不一定要有else

3、下列符合c语法的if语句是:
    A、if (3>5;) printf("Ok!");
    B、if (3>5) then printf("Ok!");
    C、if (3>5) printf("Ok!")
    D、if (3>5) printf("Ok!");

5.4 switch语句随堂测验

1、在c语言中,叙述正确的是:
    A、switch语句可以没有default分支
    B、switch语句必须有default分支
    C、switch语句每个分支必须执行
    D、case与冒号之间可以是条件表达式

2、case与冒号之间可以是浮点类型数据

3、switch语句每个分支必须执行

5.5 条件运算符和条件表达式随堂测验

1、下列运算符中优先级最低的是:
    A、==
    B、+
    C、++
    D、? :

2、下列运算符中结合方向与其他不同的是:
    A、? :
    B、+
    C、&&
    D、||

3、条件运算符符可以嵌套使用。

5.6 选择结构程序举例随堂测验

1、以下代码输出结果是: if(3>2>1)printf("ok"); else printf("no");
    A、ok
    B、no
    C、不确定
    D、代码错误,不能输出

2、以下代码输出结果是: int x=10,y=20,z=30; if(x||(y=50)>z)printf("y=%d",y); else printf("y=%d",y);
    A、y=20
    B、y=50
    C、不确定
    D、代码错误,不能输出

3、以下代码输出结果是: char x='f'; if('A'<x<'Z')printf("ok"); else printf("no");
    A、ok
    B、no
    C、不确定
    D、代码错误,不能输出

第6章 循环结构程序设计

6.1 while语句随堂测验

1、下列程序的输出结果是__ int main() { int t=98765,x; while(t!=0) { x=t%10; printf("%d",x); t/=10; } return 0; }
    A、98765
    B、56789
    C、57689
    D、程序不停机

2、循环条件表达式不仅限于关系表达式和逻辑表达式,可以是任意类型的表达式。

3、while语句的循环体,可能一次也不被执行。

4、如果循环条件表达式的值__,表示条件为真;如果表达式的值为___,表示条件为假。

5、当循环体包含一条以上的语句时,必须用__括起来,组成复合语句。

6、本程序执行时出现__ int main() { int k=1,sum=0; while(k<=10) sum=sum+k; k++; printf("%d\n",sum); return 0; }

7、下列程序段中的循环执行次数为__ int x=10; while(x) x=x/2;

8、k=100; while(k--); printf("%3d\n",k);

6.2 do…while语句随堂测验

1、int main() { int t=98765,x; do { x=t%10; printf("%d",x); t/=10; }while(t!=0) return 0; }
    A、98765
    B、56789
    C、57689
    D、程序不停机

2、若某do-while的循环体由3条语句组成,这3条语句不必用大括号“{}”括起来。

3、while语句与do-while语句执行的过程相同。

4、do-while语句的循环体,可能一次也不被执行。

5、下列程序段的输出结果是__ int a=3,b=15; do { a+=b;b=b/2; }while(b>1); printf("%d\n",a);

6、以下代码片段执行结束后,变量i的值是__ int i = 1; do{ i += 5; }while (i<17);

6.3 for语句随堂测验

1、以下哪个循环和其他三条循环不等价(假设循环体都是一样的)?
    A、for(i=0;i<10;i++ ) {...}
    B、for(i=0;i<10;++i ) {...}
    C、for(i=0;i++<10; ) {...}
    D、for(i=0;i<=9;i++ ) {...}

2、下列程序段的输出结果是__ int k=12; for(;k>8;k--); if(k%2==0) printf("%d",k);
    A、1210
    B、12
    C、8
    D、无限循环

3、for(表达式1;表达式2;表达式3)中的3个表达式都可以省略,但用于分割3个表达式的两个分号“;”不能省略。

4、以下代码段的输出是__ for(int i=10;i>1;i/=2 ) { printf("%d ", i++); }

5、下列程序的输出结果是__ int main() { int m; for(m=6;m<10;m++,m++) printf("**%d",m); return 0; }

6.4 循环嵌套随堂测验

1、以下代码段的输出是__ int i,b,k=0; for(i=1;i<=5;i++ ) { b=i%2; while(b-->=0) k++; } printf("%d,%d", k,b);
    A、3,-1
    B、8,-1
    C、3,0
    D、8,-2

2、下列程序段的输出结果是__ int a,b,m; for(a=5;a>=1;a--) { m=0; for(b=a;b<=5;b++) m=m+a*b; } printf("%d\n",m);
    A、30
    B、15
    C、20
    D、10

3、while、do-while和for三种循环可以互相嵌套。

4、双重循环的执行过程是外层循环的循环体执行一次,内层循环执行一遍。

5、以下代码段的输出是__ int i,b,k=0; for(i=1;i<=5;i++ ) { b=i%2; do k++; while(b-->=0) ; } printf("%d,%d", k,b);

6、下列程序的输出结果是__ int a,b,m; m=0; for(a=5;a>=1;a--) { for(b=a;b<=5;b++) m=m+a*b; } printf("%d\n",m);

6.5 辅助控制语句随堂测验

1、下面代码段的输出是__ int c=5,k; for(k=1;k<3;k++) switch(k) { default:c+=k; case 2: c++;break; case 4: c+=2;break; } printf("%d\n",c);
    A、10
    B、8
    C、6
    D、12

2、break语句只能用于__中。
    A、while语句
    B、do-while语句
    C、for语句
    D、switch语句

3、continue语句只能用于__中。
    A、while语句
    B、do-while语句
    C、for语句
    D、switch语句

4、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { m=k*k;; if(m>50) break; } printf("%d,%d\n",k,m);

5、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { if(m>50) continue; m=k*k; } printf("%d,%d\n",k,m);

6.6 循环结构实例随堂测验

1、百鸡百钱问题。有一百只鸡,价值一百文钱,其中公鸡五文钱一只,母鸡三文钱一只,三只鸡雏一文钱,问公鸡、母鸡和鸡雏各多少只?现用枚举法求解,假设公鸡有x只、母鸡有y只,鸡雏有z只,程序如下: #include <stdio.h> int main( ) { int x,y,z,k=0; for(x=0;x<100;x++) for(y=0;y<=100;y++) for(z=0;z<=100;z++) if(x+y+z==100&&x*5+y*3+z/3==100) { k++; printf("Plan %d is x:%-3d y:%-3d z:%-3d\n",k,x,y,z); } return 0; } 此程序可以求出正确的解。

2、百鸡百钱问题。现用枚举法求解,假设公鸡有x只、母鸡有y只,鸡雏有z只,程序如下: #include <stdio.h> #include <math.h> int main( ) { int x,y,z,k=0; for(x=0;x<100;x++) for(y=0;y<=100;y++) { z=100-x-y; if(z>=0&&z%3==0) { if(fabs(x*5+y*3+z/3-100)<1e-3) { k++; printf("Plan %d is x:%-3d y:%-3d z:%-3d\n",k,x,y,z); } } } return 0; } 此程序可以求出正确的解。

3、计算1!+2!+3!+4!+5!编程如下,程序中下划线处应填写__。 #include <stdio.h> void main( ) { int i; int t=__,s=__; for(i=1;i<6;i++) { t=t*i; s=s+t; } printf("1!+2!+3!+4!+5!=%d\n",s); }

第2次单元测验

1、下列程序的输出结果是__ 。 int main() { int t=98765,x; while(t!=0) { x=t%10; printf("%d",x); t/=10; } return 0; }
    A、98765
    B、56789
    C、57689
    D、程序不停机

2、下列程序的输出结果是__ 。 int main() { int t=98765,x; do { x=t%10; printf("%d",x); t/=10; }while(t!=0); return 0; }
    A、98765
    B、56789
    C、57689
    D、程序不停机

3、以下哪个循环和其他三条循环不等价(假设循环体都是一样的)?
    A、for(i=0;i<10;i++ ) {...}
    B、for(i=0;i<10;++i ) {...}
    C、for(i=0;i++<10; ) {...}
    D、for(i=0;i<=9;i++ ) {...}

4、下列程序段的输出结果是__ int k=12; for(;k>8;k--); if(k%2==0) printf("%d",k);
    A、1210
    B、12
    C、8
    D、无限循环

5、以下代码段的输出是__ int i,b,k=0; for(i=1;i<=5;i++ ) { b=i%2; while(b-->=0) k++; } printf("%d,%d", k,b);
    A、3,-1
    B、8,-1
    C、3,0
    D、8,-2

6、下列程序段的输出结果是__ int a,b,m; for(a=5;a>=1;a--) { m=0; for(b=a;b<=5;b++) m=m+a*b; } printf("%d\n",m);
    A、30
    B、15
    C、20
    D、10

7、下面代码段的输出是__ int c=5,k; for(k=1;k<3;k++) switch(k) { default:c+=k; case 2: c++;break; case 4: c+=2;break; } printf("%d\n",c);
    A、10
    B、8
    C、6
    D、12

8、关于双重循环的执行过程,以下说法正确的是__。
    A、外层循环的循环体执行一次,内层循环执行一遍。
    B、外层循环的循环体执行一次,内层循环执行一次。
    C、外层循环的循环体执行一遍,内层循环执行一次。
    D、外层循环的循环体执行一遍,内层循环执行一遍。

9、9、计算1!+2!+3!+4!+5!编程如下,程序中下划线处应填写__。 #include <stdio.h> void main( ) { int i; int t=__,s=__; for(i=1;i<6;i++) { t=t*i; s=s+t; } printf("1!+2!+3!+4!+5!=%d\n",s); }
    A、0 0
    B、1 0
    C、0 1
    D、1 1

10、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { m=k*k; if(m>50) break; } printf("%d,%d\n",k,m);
    A、8,64
    B、9,81
    C、10,64
    D、10,81

11、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { if(m>50) continue; m=k*k; } printf("%d,%d\n",k,m);
    A、8,64
    B、9,81
    C、10,64
    D、10,81

12、假设有定义: int k; 下面程序段编译运行的情况是___。 for (k=1; k; k++) printf ("%d ", k);
    A、能运行, 是死循环
    B、能运行, 正常结束
    C、编译错误
    D、以上说法都不对

13、for(表达式1;;表达式3)可理解为____。
    A、for(表达式1;0;表达式3)
    B、for(表达式1; 表达式1;表达式3)
    C、for(表达式1; 表达式3;表达式3)
    D、for(表达式1;1;表达式3)

14、以下哪个for语句是错误的__
    A、for(i=0;j<10;j++);
    B、for(i=0;j=0;i<10;i++);
    C、for(i=0;i<10;i--);
    D、for(;;);

15、while(x%3) a++;中的表达式x%3等价于____
    A、x%3!=0
    B、x%3==1
    C、x%3==2
    D、x%3==0

16、while (!x&&!y)中的循环条件表达式等价于__
    A、!(x!=0||y!=0)
    B、x=0 && y=0
    C、!(x==0 && y==0)
    D、!(x==0 || y==0)

17、在代码:while(!e)中,!e等价于__
    A、e != 1
    B、e == 1
    C、e!=0
    D、e == 0

18、对于以下代码: int i; for(i=0;i<10;i++) printf("%d",i); for循环结束后,i的值是__
    A、i不再存在了
    B、11
    C、10
    D、9

19、以下代码片段的输出是__ int i,j=4; for(i=j; i<=2*j; i++ ) { switch ( i/j ) { case 0: case 1: printf("*"); break; case 2: printf("#"); } }
    A、****#
    B、***#
    C、*#
    D、****##

20、对于以下代码: int i=6; do{ printf("%d", i--); }while(0); 正确的是__
    A、打印不出东西
    B、打印出5
    C、因为while(0),无法编译
    D、打印出6

21、对于以下代码: int i=6; do{ printf("%d", i--); }while(i--); 正确的是__
    A、输出642
    B、输出6420
    C、输出6420-2
    D、输出6420-2-4...,程序无法停机

22、对于以下代码: int i=6; do{ printf("%d", i--); }while(i); 最后一个输出的值是__
    A、0
    B、1
    C、2
    D、3

23、以下代码片段的输出是__ int i,j=4; for(i=j; i<=2*j; i++ ) { switch ( i%j ) { case 0: case 1: printf("*"); break; case 2: printf("#"); } }
    A、****#
    B、***#
    C、**#*
    D、****##

24、在代码:while(e)中,e等价于__
    A、e != 1
    B、e == 1
    C、e!=0
    D、e == 0

25、在代码:while(e==0)中,e等价于__
    A、e != 1
    B、e == 1
    C、e!=0
    D、!e

26、在代码:while(e||0)中,e等价于__
    A、e != 1
    B、e == 1
    C、e!=0
    D、e == 0

27、在代码:while(e&&1)中,e等价于__
    A、e != 1
    B、e == 1
    C、e!=0
    D、e == 0

28、在代码:while(e||1)中,e等价于__
    A、e取任何值
    B、e == 1
    C、e!=0
    D、e == 0

29、若int k;while(k%4)中,使循环条件不成立的是__
    A、k=0
    B、k=1
    C、k=2
    D、k=3

30、设有程序段int k=5; while(k=0) k=k-1;则下面描述中正确的是__
    A、while循环执行5次
    B、循环是无限循环
    C、循环体语句一次也不执行
    D、循环体语句执行一次

31、设有程序段int k=5; do k=k-1; while(k=0);则下面描述中正确的是___
    A、while循环执行5次
    B、循环是无限循环
    C、循环体语句一次也不执行
    D、循环体语句执行一次

32、有以下程序段 int x=0,s=0; while(!x!=0) s+=++x; printf("%d",s);则
    A、运行程序段后输出0
    B、运行程序段后输出1
    C、程序段中的控制表达式是非法的
    D、程序段执行无限次

33、下面程序段的运行结果是 int a,b,c; a=1;b= 2;c=2; while(--b,c--,a--) printf("%d,%d,%d",a,b,c);
    A、1,2,0
    B、2,1,0
    C、1,2,1
    D、0,1,1

34、下面程序段的运行结果是: x=y=0; while(x<15) y++,x+=++y; printf("%d,%d",y,x);
    A、20,7
    B、6,12
    C、20,8
    D、8,20

35、下面程序段的运行结果是 int n=0; while(n++<=2);printf("%d",n);
    A、2
    B、3
    C、4
    D、有语法错

36、下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循 环,请选择填空: int a,b,t; scanf("%d%d",&a,&b); while( ___ ) { if(a>b) {t=a;a=b;b=t;} printf("%d,%d",a,b); scanf("%d%d",&a,&b); }
    A、!a=b
    B、a!=b
    C、a==b
    D、a=b

37、下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n, 并输出m、n中的较大者,请选择填空: int m=0,n=0; char c; while((__)!='\n') { if(c>='A'&& c<='Z') m++ ; if(c>='a'&& c<='z') n++; } printf("%d\n",m)
    A、scanf("%d",c)
    B、getchar()
    C、c=getchar()
    D、scanf("%c",c)

38、下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z 变成B. 请选择填空 char c; while((c=getchar())!='\n') { if(c>= 'a'&&c<='z') c-= 30; if(c>'z'&&c<='z'+ 2) ___ ; printf("%c",c); }
    A、c='B'
    B、c='A'
    C、c-=26
    D、c=c+26

39、以下描述中正确的是__
    A、由于do一while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
    B、do一while循环由do开始,用while结束,在while(表达式)后面不能写分号
    C、在do一while循环体中,一定要有能使while后表达式值变为零("假")的操作
    D、do一while循环中,根据情况可以省略while

40、若有如下语句 int x=3; do { printf("%d\n",x -=2);} while(!(--x)); 则上面程序段__
    A、输出的是1
    B、输出的是1和-2
    C、输出的是3和0
    D、是死循环

41、下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。 #include main() { int n,sum=0; n=2345; do { sum=sum+(n%10)*(n%10); n=__; }while(n); printf("sum=%d",sum);}
    A、n/1000
    B、n/100
    C、n/10
    D、n%10

42、下面程序是从键盘输入学号,然后输出学号中百位数字是3的学号,输入0时结束循环。请选择填空。 main() { 1ong int num; scanf("%ld",&num); do { if(__) printf("%ld",num); scanf("%ld",&num); }while(!num==0); }
    A、num%100/10==3
    B、num/100%10==3
    C、num%10/10==3
    D、num/10%10==3

43、下面程序的运行结果是__ main() { int y=10; do{y--;}while(--y); printf("%d\n",y--); }
    A、-1
    B、1
    C、8
    D、0

44、下面有关for循环的正确描述是__
    A、for循环只能用于循环次数已经确定的情况
    B、for循环是先执行循环体语句,后判断表达式
    C、在for循环中,不能用break语句跳出循环体
    D、for循环的循环体语句中, 可以包含多条语句,但必须用花括号括起来

45、若i为整型变量,则以下循环执行次数是__ for (i=2;i==0;) printf("%d",i-- );
    A、无限次
    B、0次
    C、1次
    D、2次

46、以下不是无限循环的语句为:
    A、for (y=0,x=1;x > ++y;x =i++) i=x ;
    B、for (;; x++=i);
    C、while(1){x ++;}
    D、for(i=10; ;i--) sum+=i;

47、下面程序的功能是计算:至50中是7的倍数的数值之和,请选择填空. main() { int i,sum= 0; for(i=1;i<=50;i++) if(__) sum+=i; printf("%d",sum); }
    A、(int)(i/7)==i/7
    B、(int)i/7==i/7
    C、i%7= 0
    D、i%7==0

48、下面程序的功能是计算 1至10之间的奇数之和及偶数之和。请选择填空; main() { int a,b,c,i; a=c=0; for(i=0;i<=10;i+=2) { a+=i; ___; c+=b; } printf("偶数之和=%d\n",a); printf("奇数之和=%d\n",c-11); }
    A、b=i--
    B、=i+1
    C、b=i++
    D、b=i-1

49、下面程序段: for(t=1;t<=100;t++) { scanf("%d",&x); if(x<0) continue; printf("%3d",t); }
    A、当x<0时整个循环结束
    B、x>=0时什么也不输出
    C、printf函数永远也不执行
    D、最多允许输出100个非负整数

50、下面程序段: x=3; do { y=x--; if(!y) { printf("x"); continue; } printf("#"); }while (1<=x<=2);
    A、将输出##
    B、将输出##*
    C、是死循环
    D、含有不合法的控制表达式

51、与下面程序段等价的是: for(n=100;n<= 200; n++) { if (n%3==0) continue; printf("%4d",n);}
    A、for(n=100;(n%3)&& n<=200;n++) printf("%4d",n);
    B、for(n=100;(n%3)|| n<=200;n++) printf("%4d",n);
    C、for(n=100;n<=200;n++)if(n%3!=0)printf("%4d",n)
    D、for(n=100;n<=200; n++) {if(n%3) printf("%4d",n); else continue; break;}

52、下面程序的运行结果是: main() { int i,j,a=0; for (i=0;i<2;i++) { for (j=0;j<=4;j++) { if(j%2) break; a++; } a++; } printf("%d\n",a); }
    A、4
    B、5
    C、6
    D、7

53、下列运算符中优先级最高的是:
    A、=
    B、+
    C、--
    D、<

54、下列运算符中优先级最低的是:
    A、+=
    B、+
    C、++
    D、>

55、下列运算符中结合方向与其他不同的是:
    A、+=
    B、+
    C、<=
    D、>

56、下列运算符中优先级最高的是:
    A、=
    B、+
    C、!
    D、&&

57、下列运算符中优先级最低的是:
    A、==
    B、+
    C、++
    D、+=

58、下列符合c语法的if语句是:
    A、if 3>5 then printf("Ok!");
    B、if 3>5 printf("Ok!")
    C、if (3>5) then printf("Ok!");
    D、if (3>5) printf("Ok!");

59、下列运算符中优先级最低的是:
    A、==
    B、+
    C、++
    D、? :

60、下列运算符中结合方向与其他不同的是:
    A、? :
    B、+
    C、&&
    D、||

61、下列运算符中,结合方向是从右至左的是:
    A、? :
    B、/
    C、&&
    D、>=

62、以下代码输出结果是: if(5>3>1)printf("ok"); else printf("no");
    A、ok
    B、no
    C、不确定
    D、代码错误,不能输出

63、以下代码输出结果是: int x=0,y=20,z=30; if(x||(y=50)>z)printf("y=%d",y); else printf("y=%d",y);
    A、y=20
    B、y=50
    C、不确定
    D、代码错误,不能输出

64、以下代码输出结果是: char x='G'; if('Z'>x>'A')printf("ok"); else printf("no");
    A、ok
    B、no
    C、不确定
    D、代码错误,不能输出

65、以下代码输出结果是: int x=0,y=20,z=30 if(x||(y=50)>z)printf("y=%d",y); else printf("y=%d",y);
    A、y=20
    B、y=50
    C、不确定
    D、代码错误,不能执行

66、C语言中循环语句有__。
    A、while语句
    B、do-while语句
    C、for语句
    D、loop语句

67、for(表达式1;表达式2;表达式3)中的3个表达式可被省略的是__。
    A、其中1个
    B、其中2个
    C、3个都可以
    D、表达式1和表达式3,表达式2不能省略

68、循环条件表达式可以是__。
    A、关系表达式
    B、逻辑表达式
    C、赋值表达式
    D、逗号表达式

69、若int x=2;以下__表达式作为循环条件表达式时表示条件为真。
    A、x+2
    B、x-2
    C、x/2
    D、x%2

70、若int x=2;以下__表达式作为循环条件表达式时表示条件为假。
    A、x+2
    B、x-2
    C、x/2
    D、x%2

71、以下说法正确的是__。
    A、while循环可与do-while循环可相互改写
    B、while循环不能改写为for循环
    C、while、do-while和for可相互改写
    D、以上说法都不对

72、循环体语句可以是__。
    A、关系表达式语句
    B、空语句
    C、赋值表达式语句
    D、逗号表达式语句

73、以下说法正确的是__。
    A、while语句与do-while语句执行的过程相同。
    B、do-while语句的循环体,可能一次也不被执行。
    C、while语句的循环体,可能一次也不被执行。
    D、do-while语句的循环体,至少执行一次。

74、若int i;while(i%3)中,使循环条件成立的是__
    A、i=0
    B、i=1
    C、i=2
    D、i=3

75、在c语言中,叙述正确的是:
    A、if后面小括号里可以是任意类型的表达式
    B、if语句必须要有else
    C、if后面小括号里可以加分号;
    D、if语句不一定要有else

76、在c语言中,叙述正确的是:
    A、switch语句可以没有default分支
    B、switch语句必须有default分支
    C、switch语句每个分支必须执行
    D、case与冒号之间可以是整型常量

77、循环条件表达式不仅限于关系表达式和逻辑表达式,可以是任意类型的表达式。

78、while语句的循环体,可能一次也不被执行。

79、若某do-while的循环体由3条语句组成,这3条语句不必用大括号“{}”括起来。

80、while语句与do-while语句执行的过程相同。

81、do-while语句的循环体,可能一次也不被执行。

82、for(表达式1;表达式2;表达式3)中的3个表达式都可以省略,但用于分割3个表达式的两个分号“;”不能省略。

83、while、do-while和for三种循环可以互相嵌套。

84、双重循环的执行过程是外层循环的循环体执行一次,内层循环执行一遍。

85、百鸡百钱问题。有一百只鸡,价值一百文钱,其中公鸡五文钱一只,母鸡三文钱一只,三只鸡雏一文钱,问公鸡、母鸡和鸡雏各多少只?现用枚举法求解,假设公鸡有x只、母鸡有y只,鸡雏有z只,程序如下: #include <stdio.h> int main( ) { int x,y,z,k=0; for(x=0;x<100;x++) for(y=0;y<=100;y++) for(z=0;z<=100;z++) if(x+y+z==100&&x*5+y*3+z/3==100) { k++; printf("Plan %d is x:%-3d y:%-3d z:%-3d\n",k,x,y,z); } return 0; } 此程序可以求出正确的解。

86、百鸡百钱问题。现用枚举法求解,假设公鸡有x只、母鸡有y只,鸡雏有z只,程序如下: #include <stdio.h> #include <math.h> int main( ) { int x,y,z,k=0; for(x=0;x<100;x++) for(y=0;y<=100;y++) { z=100-x-y; if(z>=0&&z%3==0) { if(fabs(x*5+y*3+z/3-100)<1e-3) { k++; printf("Plan %d is x:%-3d y:%-3d z:%-3d\n",k,x,y,z); } } } return 0; } 此程序可以求出正确的解。

87、case与冒号之间可以是逻辑表达式,进行选择

88、switch语句的分支有可能一个都不执行

89、如果循环条件表达式的值__,表示条件为真;如果表达式的值为___,表示条件为假。

90、当循环体包含一条以上的语句时,必须用__括起来,组成复合语句。

91、本程序执行时出现__ int main() { int k=1,sum=0; while(k<=10) sum=sum+k; k++; printf("%d\n",sum); return 0; }

92、下列程序段中的循环执行__次 int x=10; while(x) x=x/2;

93、下列程序段的输出结果是__ k=100; while(k--) printf("%3d\n");

94、下列程序段的输出结果是__ int a=3,b=15; do { a+=b;b=b/2; }while(b>1); printf("%d\n",a);

95、以下代码片段执行结束后,变量i的值是__ int i = 1; do{ i += 5; }while (i<17);

96、以下代码段的输出是__ for(int i=10;i>1;i/=2 ) { printf("%d", i++); }

97、下列程序的输出结果是__ int main() { int m; for(m=6;m<10;m++,m++) printf("**%d",m); return 0; }

98、以下代码段的输出是__ int i,b,k=0; for(i=1;i<=5;i++ ) { b=i%2; do k++; while(b-->=0) ; } printf("%d%d", k,b);

99、下列程序的输出结果是__ int a,b,m; m=0; for(a=5;a>=1;a--) { for(b=a;b<=5;b++) m=m+a*b; } printf("%d\n",m);

100、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { m=k*k;; if(m>50) break; } printf("%d%d\n",k,m);

101、下面代码段的输出是__ int k,m; for(k=0;k<10;k++ ) { if(m>50) continue; m=k*k; } printf("%d%d\n",k,m);

102、在逻辑运算符!,&&,||中,优先级最高的是 。

103、在下列运算符+,+=,++中,优先级最低的是 。

第7章 同类型数据的处理——数组(一)

7.2 一维数组的定义和引用随堂测验

1、1、以下对一维数组a的定义中正确的是()。
    A、char a(10);
    B、int a[0..100];
    C、int a[5];
    D、int k=10;int a[k];

2、2、以下对一维数组的定义中不正确的是()。
    A、int y[3]={3,5,7,9};
    B、char ch2[ ]={'x10', 'xa', 'x8'};
    C、char ch1[ ]={'1', '2', '3', '4', '5'};
    D、double x[5]={6.5,4.0,6.4,8.66,10.0};

3、3、在vc++6.0中,假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是()。
    A、6
    B、9
    C、12
    D、15

4、4、完善以下程序,填写括号内容: 已有一个已排好序的整型数组,今输入一个整数,要求按原来排序的规律将它插入数组中。例如:原来数组的元素依次为4、6、8、41、56、77、102。若将42插入数组中,则插入后数组元素依次为4、6、8、41、42、56、77、89、102。 #include <stdio.h> int main() { int a[8]={ 4,6,8,41,56,77,102}; int number,i,j; scanf("%d",&number); if(number>a[6]) a[7]=number; else { for(i=0;i<8;i++) if(a[i]>number) break; for(j=7;j();j--) a[j]=a[j-1]; a[i]=number; } for(i=0;i<8;i++) printf("%6d",a[i]); return 0; }
    A、>=i
    B、>i
    C、>i+1
    D、>=i+1

5、5、一般地,一维数组各元素分配在连续地内存单元之中。

7.3 一维数组的应用随堂测验

1、1、以下程序的输出结果是()。 #include<stdio.h> int main() { int m[]={1,4,7}; int i; for(i=0;i<3;i++) { printf("%d",m[i]);} return 0; }
    A、741
    B、471
    C、147
    D、417

2、2、以下程序输出结果为741,那么循环控制变量i的下限是()。 #include<stdio.h> int main() { int m[]={1,4,7}; int i; for(i=2;i>( );i--) printf("%d",m[i]); return 0; }
    A、0
    B、1
    C、-1
    D、-2

3、3、以下程序的输出结果是()。 #include<stdio.h> int main() { int m[]={1,4,7}; int i; for(i=1;i<=2;i++) printf("%d",m[i]); return 0; }
    A、14
    B、47
    C、41
    D、74

4、4、以下程序的输出结果是()。 #include<stdio.h> int main() { int m[] = { 1,4,7 }; int i; m[0] = m[1] + 34; for (i = 0; i <= 2; i++) { m[i] = m[i] / 3; printf("%d", m[i]); } return 0; }
    A、1112
    B、1212
    C、1313
    D、1312

5、5、阅读程序选结果 #include<stdio.h> int main() { int i, temp; int a[5] = { 9,6,5,2,1 }; for (i = 0; i<5 / 2; i++) { temp = a[i]; a[i] = a[5 - i - 1]; a[5 - i - 1] = temp; } for (i = 0; i<5; i++) printf("%d", a[i]); return 0; }
    A、15269
    B、12569
    C、96521
    D、16952

7.4 二维数组定义和引用随堂测验

1、1、以下对二维数组的定义中正确的是()
    A、int a[4][]={1,3,2,4,5};
    B、int a[][3];
    C、int a[][3]= {1,5,6,3,7,8,2};
    D、int a[][]={{1,2,3},{4,5,6}};

2、2、下列各语句定义了数组,其中哪一个是不正确的()
    A、char a[3][10]={"China","American","Asia"};
    B、int x[2][2]={1,2,3,4};
    C、float x[2][ ]={1,2,4,6,8,10};
    D、int m[][3]={1,2,3,4,5,6,7};

3、3、按照下题选出正确的输出结果 如果有如下定义: int a[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8},{9, 10, 11, 12}};,那么a[1][6]元素的结果是()?
    A、12
    B、11
    C、10
    D、9

4、4、c程序如下,写出输出结果 #include<stdio.h> int main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) { printf("%d ",m[k][i]);} }
    A、1 4 7
    B、2 5 8
    C、3 6 9
    D、7 8 9

5、5、c语言中,一维数组某一个数组元素等价于一个同数据类型的变量。

7.5 二维数组的应用随堂测验

1、1、完善以下程序达到要求的功能: 先从键盘上输入一个3行3列整型数组的各个元素的值,然后输出主对角线和次对角线元素之和。 #include<stdio.h> int main() { int a[3][3], sum = 0, sum1 = 0; int i, j; printf("Enter data:\n"); for (i = 0; i<3; i++) for (j = 0; j<3; j++) scanf("%d", &a[i][j]); for (i = 0; i<3; i++) { sum = sum + a[i][i]; sum1 = sum1 + a[i][()]; } printf("\nsum=%5d,sum1=%5d\n", sum, sum1); return 0; }
    A、2-i
    B、2-1
    C、i
    D、1-i

2、2、输出如下程序的结果: #include <stdio.h> int main() { int a[3][3] = { 1,3,5,7,9,2,4,6 }; int sum = a[0][0], i,j,x, y; for (i = 0; i<3; i++) { for (j = 0; j<3; j++) { if (sum<a[i][j]) { sum = a[i][j]; x = i; y = j; } } } printf("a[%d][%d]=%d", x, y, sum); getchar(); return 0; }
    A、a[1][0]=9
    B、a[1][1]=9
    C、a[1][2]=2
    D、a[0][0]=1

3、3、输出如下程序的结果: #include <stdio.h> int main() { int a[3][3] = { { 98,97,99 },{ 100,67,89 },{ 78,89,79 } }; int i, j; float sum1 = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { sum1 = sum1 + a[i][j]; } } printf("%f",sum1/9); return 0; }
    A、87.333334
    B、87.444443
    C、88.333334
    D、88.444443

4、4、c语言中,当二维数组越界时,会有错误提示。

5、5、c语言中,二维数组某一个数组元素等价于一个同数据类型的变量。

7.6 数组下标越界访问问题随堂测验

1、1、c程序如下,写出输出结果 #include<stdio.h> int main() { int m[][3] = { 1,4,7,2,5,8,3,6,9 }; int i, j, k = 1; for (i = 0; i<4; i++) { printf("%d", m[k][i]); } return 0; }
    A、2583
    B、4725
    C、8369
    D、5836

2、2、c程序如下,写出输出结果 #include<stdio.h> int main() { int m[][3] = { 1,4,7,2,5,8,3,6,9 }; int i, j, k = 0; for (i = 0; i<5; i++) { printf("%d", m[k][i]+2); } return 0; }
    A、14725
    B、25836
    C、36947
    D、47958

3、3、c程序如下,写出输出结果 #include<stdio.h> int main() { int m[][3] = { 1,4,7,2,5,8,3,6,9 }; int i, j, k = 0; for (i = 0; i<6; i++) { printf("%d", m[k][i]/2+3); } return 0; }
    A、259435
    B、356556
    C、356557
    D、356457

4、4、输出如下程序的结果: #include <stdio.h> int main() { int a[3][3] = { { 98,97,99 },{ 100,67,89 },{ 78,89,79 } }; int i, j=0; float sum = 0; for (i = 0; i < 5; i++) sum = sum + a[j][i]; printf("%f", sum / 5); return 0; }
    A、93.199997
    B、92.29997
    C、92.19997
    D、94.199997

5、5、c语言中,二维数组下标越界时,会有错误提示。

第8章 同类型数据的处理——数组(二)

7.7 字符数组定义及输入输出随堂测验

1、下面是对数组s的初始化操作,其中不正确的是()
    A、char s[5]={"a"};
    B、char s[5]={‘a’};
    C、char s[5]= " ";
    D、char s[5]= "abcdef";

2、如下的数组中,数组array占用的内存空间是( )个字节。 char array[]={'c','h','i','n','a'};
    A、1
    B、5
    C、6
    D、不确定

3、字符数组中的数据存储时必须以'\0'结尾。

7.8 字符串处理函数随堂测验

1、下面是有关C语言字符数组的描述,其中错误的是()
    A、不可以用赋值语句给字符数组名赋字符串
    B、可以用输入语句把字符串整体输入给字符数组
    C、字符数组中的内容不一定是字符串
    D、字符数组只能存放字符串

2、对字符串进行输入输出操作时,只能对字符串整体进行输入输出。

3、如果在程序中调用了strcpy函数,则需要预处理命令 。

7.9 字符数组应用举例随堂测验

1、下面程序段的输出结果是() int i; char c[5]={'1','2','','3',''}; for(i=0;i<5;i++) printf("%c",c[i]);
    A、'1''2'
    B、12
    C、12 3
    D、123

2、字符数组中只能有一个'\0'。

3、有定义:char a[]="";则a数组的长度是 。

第3次单元测验

1、下列描述中不正确的是()
    A、字符型数组中能存放字符串。
    B、可以对字符型数组进行整体输入、输出。
    C、字符串函数声明在ctype.h中。
    D、字符串的结束符是'\0'。

2、下列程序的输出结果是() char a[10]="abcd", b[ ]="ABCD", str[50]="xyz"; strcpy(str,strcat(a,b)); printf("%s",str);
    A、xyabcAB
    B、abcABz
    C、ABabcz
    D、abcdABCD

3、下面是有关C语言字符数组的描述,其中错误的是()
    A、不可以用赋值语句给字符数组名赋字符串
    B、可以用输入语句把字符串整体输入给字符数组
    C、字符数组中的内容不一定是字符串
    D、字符数组只能存放字符串

4、下面是对数组s的初始化操作,其中不正确的是()
    A、char s[5]={"a"};
    B、char s[5]={'a'};
    C、char s[5]= " ";
    D、char s[5]= "abcdef";

5、有两个字符数组s1,s2,则以下正确的输入语句是()
    A、gets(s1,s2);
    B、scanf("%s%s",s1,s2);
    C、scanf("%s%s",&s1,&s2);
    D、gets("s1"),gets("s2");

6、判断字符串s1是否大于s2,应当使用()
    A、if (s1>s2)
    B、if (strcmp(s1,s2))
    C、if (strcmp(s2,s1)>0)
    D、if (strcmp(s1,s2)>0)

7、下面叙述正确的是()
    A、两个字符串所包含的字符个数不相同时,才能进行大小比较。
    B、字符个数多的字符串比字符个数少的字符串大。
    C、字符串"123 "与"123"相等。
    D、字符串"123"小于字符串"2"。

8、下面程序段的输出结果是() char c[ ]=”\a\b\\\0c\n”; printf(“%d”,strlen(c));
    A、14
    B、3
    C、9
    D、6

9、下面程序段的输出结果是() int i; char c[5]={'1','2','','3',''}; for(i=0;i<5;i++) printf("%c",c[i]);
    A、'1''2'
    B、12
    C、12 3
    D、123

10、下面程序段的输出结果是() char a[7]=“123456”; char b[4]=”ABC”; strcpy(a,b); printf(“%c”,a[5]);
    A、
    B、\0
    C、5
    D、6

11、以下对一维整型数组a的正确说明是__。
    A、int a(10);
    B、int n= 10, a[n];
    C、int n; scanf("%",&n); int a[n];
    D、#define SIZE 10; int a[SIZE];

12、以下能对一维数组a进行正确初始化的语句是__。
    A、int a[10]=(0,0,0,0,0) ;
    B、int a[10]={};
    C、int a[]=;
    D、int a[5]={1,2,3,4,5,6};

13、以下对二维数组a的正确说明是__。
    A、int a[3][];
    B、floatf a(3,4);
    C、double a[1][4];
    D、float a(3)(4);

14、以下能对二维数组a进行正确初始化的语句是__。
    A、int a[2][]={{1,0,1},{5,2,3}};
    B、int a[][3]={{1,2,3},{4,5,6}};
    C、int a [2][4]={{1,2,3},{4,5},{6}};
    D、int a[][3={{1,0,1},{},{1,1}};

15、若有说明: int a[3][4]=;则下面正确的叙述是__。
    A、只有元素a[0][0]可得到初值0。
    B、此说明语句不正确。
    C、数组a中各元素都可得到初值,但其值不一定为0。
    D、数组a中每个元素均可得到初值0 。

16、以下各组选项中,均能正确定义二维实型数组a的选项是
    A、float a[3][4]; float a[][4]; float a[3][]={{1},};
    B、float a(3,4); float a[3][4]; float a[][]={{0},};
    C、float a[3][4]; static float a[][4]={{0},}; auto float a[][4]={{0},,};
    D、float a[3][4]; float a[3][]; float a[][4];

17、下面程序段的运行结果是( )。 int m[]={5,8,7,6,9,2},i=1; do{ m[i]+=2; } while(m[++i]>5); for(i=0;i<6;i++) printf("%d ",m[i]);
    A、7 10 9 8 11 4
    B、7 10 9 8 11 2
    C、5 10 9 8 11 2
    D、5 10 9 8 11 4

18、下面程序段的运行结果是( )。 int m[]={5,8,7,6,9,2},i=1; for(i=0;i<6;i++) { if(i % 2 !=0) m[i]+=10; } for(i=0;i<6;i++) printf("%d ",m[i]);
    A、5 18 7 16 9 12
    B、15 18 17 16 19 12
    C、15 8 17 6 19 2
    D、5 8 7 6 9 2

19、以下程序段的运行结果是( )。 int a[]={1,2,3,4},i,j; j=1; for(i=3;i>=0;i--) { a[i]=a[i]*j; j=j*3; } for(i=0;i<4;i++) printf("%d ",a[i]);
    A、3 6 9 12
    B、18 12 9 4
    C、27 18 9 4
    D、54 18 9 4

20、以下程序段执行后输出的结果是( )。 int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; printf("%d\n",a[1][5]);
    A、编译有错误。
    B、4
    C、10
    D、11

21、以下程序段执行后p的值是( )。 int a[3][3]={3,2,1,3,2,1,3,2,1}; int j,k,p=1; for(j=0;j<2;j++) for(k=j;k<4;k++) p*=a[j][k];
    A、108
    B、18
    C、12
    D、2

22、以下程序段运行后sum的值为( )。 int k=0,sum=0; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; for(;k<3;k++) sum+=a[k][k+1];
    A、9
    B、18
    C、19
    D、21

23、以下程序段的运行结果是( )。 char str[3][2]={ 'a','b','c','\0','e','f'}; printf("%s",str[0]);
    A、a
    B、abcef
    C、abc\0ef
    D、abc

24、以下程序段的输出结果是( )。 int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
    A、0650
    B、1470
    C、5430
    D、输出值不定

25、以下程序段的输出结果是( )。 int m[][3]={1,4,7,2,5,8,3,6,9};int i,j,k=2; for(i=0;i<3;i++) { printf("%d ",m[k][i]);}
    A、4 5 6
    B、2 5 8
    C、3 6 9
    D、7 8 9

26、以下程序段的输出结果是( )。 int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t);
    A、3
    B、4
    C、1
    D、9

27、若有如下定义,则值为4的表达式是( )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c=’a’,d,g;
    A、a[g-c]
    B、a[4]
    C、a[‘d’-‘c’]
    D、a[‘d’-c]

28、对两个数组m和n进行下列初始化: char m[]="12345"; char n[]={’1’,’2’,’3’,’4’,’5’}; 则下列叙述正确的是(  )。
    A、数组m与数组n不完全相同
    B、数组m与数组n长度相同
    C、数组m比数组n长1
    D、数组m与数组n中都存放字符串

29、字符数组中的数据存储时必须以'\0'结尾。

30、对字符串进行输入输出操作时,只能对字符串整体进行输入输出。

31、数组是一种构造型数据,即是若干相同类型的数据的集合。

32、在C语言中,二维数组元素在内存中的存放顺序可以随意调整变化。

33、C语言中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。

34、若有说明:int a[][4]={0,0};则表示二维数组a的第一维大小为1。

35、若有说明:int a[10]={6,7,8,9,10};则该语句不正确,因为数组长度与初值个数不相同。

36、字符数组中存放的字符串是以 为结束标志的。

37、有定义:char a[]="";则a数组的长度是 。

38、有定义:char a[]="1";则a数组的长度是 。

39、以下程序是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填空使程序完整。 #include "stdio.h" int main ( ) { char a[40]="Hello you!", b[ ]="World!"; int i=0,j=0; while (a[i]!='\0') 1 ; while ( b[j] ) { a[i]=b[j] ; i++ ; j++ ; } a[i]='\0'; printf("%s\n",a); }

40、若有定义语句“int a[5]={1,2,5};”则printf("%d",++a[3])的输出值是( )。

41、若有定义语句”int a[3][4]={{1,2},,{6,4,7,10}};”则初始化后,a[1][2]的值为( ).

第9章 模块化程序设计——函数(一)

8.1 概述随堂测验

1、C语言程序的基本单位是?
    A、A.函数
    B、B.过程
    C、C.子程序
    D、D.源程序文件

2、C语言程序从哪个位置开始执行?
    A、程序中第一条可执行语句
    B、程序中的第一个函数
    C、程序中的main函数
    D、包含文件中的第一个函数

3、关于C语言程序,以下说法正确的是?
    A、一个C语言程序执行时,可以从该程序中任意一个函数开始执行
    B、一个C语言程序中可以包含多个源代码文件,每个源代码文件中只能包含一个main函数
    C、一个C语言程序中包含多个函数,main函数可以调用其它函数
    D、一个C语言程序中包含多个函数,这些函数之间可以相互调用

8.1 概述随堂测验

1、C语言程序的基本单位是?
    A、函数
    B、过程
    C、子程序
    D、源程序文件

2、关于C语言程序,以下说法正确的是?
    A、一个C语言程序执行时,可以从该程序中任意一个函数开始执行。
    B、一个C语言程序中可以包含多个源代码文件,每个源代码文件中只能包含一个main函数。
    C、一个C语言程序中包含多个函数,main函数可以调用其它函数,其它函数不能调用main函数。
    D、一个C语言程序中包含多个函数,这些函数之间可以相互调用。

8.2 函数定义与调用随堂测验

1、在下列关于C函数定义的叙述中,正确的是?
    A、函数可以嵌套定义,但不可以嵌套调用;
    B、函数不可以嵌套定义,但可以嵌套调用;
    C、函数不可以嵌套定义,也不可以嵌套调用;
    D、函数可以嵌套定义,也可以嵌套调用;

2、C语言中函数返回值的类型是由以下哪个选项决定的?
    A、函数定义时指定的类型;
    B、return语句中的表达式类型;
    C、调用该函数时的实参的数据类型;
    D、形参的数据类型;

3、下面函数调用语句含有实参的个数为? func((exp1,exp2),(exp3,exp4,exp5));
    A、1
    B、2
    C、4
    D、5

4、以下叙述中错误的是?
    A、用户定义的函数中可以没有return语句;
    B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值;
    C、用户定义的函数中若没有return语句,则应当定义函数为void类型;
    D、函数的return语句中可以没有表达式;

5、若程序中定义函数 float fadd(float a, float b) { return a+b; } 并将其放在调用语句之后,则在调用之前应对该函数进行说明。以下说明中错误的是?
    A、float fadd(float a,b);
    B、float fadd(float b, float a) ;
    C、float fadd(float, float) ;
    D、float fadd(float a, float b) ;

8.3 函数的参数传递随堂测验

1、以下描述错误的是?
    A、调用函数时,实参可以是表达式;
    B、调用函数时,实参与形参可以共用内存单元;
    C、调用函数时,将为形参分配内存单元;
    D、调用函数时,实参与形参的类型应该一致;

2、C程序中各函数之间可通过多种方式传递数据,下列不能实现数据传递的方式是?
    A、参数的形实结合;
    B、函数返回值;
    C、全局变量;
    D、同名的局部变量;

3、以下关于函数叙述中,错误的是?
    A、函数未被调用时,系统将不为形参分配内存单元;
    B、实参与形参的个数必须相等,且实参与形参的类型必须对应一致;
    C、当形参是变量时,实参可以是常量、变量或表达式;
    D、如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间;

4、若函数调用时参数为基本数据类型的变量,以下叙述正确的是?
    A、实参与其对应的形参共享内存存储单元;
    B、只有当实参与其对应的形参同名时才共享内存存储单元;
    C、实参与对应的形参分别占用不同的内存存储单元;
    D、实参将数据传递给形参后,立即释放原先占用的内存存储单元;

8.4 数组作为函数参数随堂测验

1、函数调用时,实参和形参都是简单变量,它们之间数据传递的过程描述正确的是?
    A、实参将地址传递给形参,并释放原先占用的存储单元;
    B、实参将地址传递给形参,调用结束时形参再将此地址回传给实参;
    C、实参将值传递给形参,调用结束时形参再将其值回传给实参;
    D、实参将值传递给形参,调用结束时形参并不将其值回传给实参;

2、若用数组名作为函数调用的实参,则传递给形参的是?
    A、数组第一个元素的地址;
    B、数组的第一个元素的值;
    C、数组中所有元素的值;
    D、数组元素的个数;

3、已有以下数组定义和f函数调用语句, int a[3][4]; f(a); 则在f函数的说明中,对形参数组array的错误定义方式为:
    A、f(int array[][6]);
    B、f(int array[3][]);
    C、f(int array[][4]);
    D、f(int array[2][5]);

4、以下程序的输出结果是_______? f(int b[],int m,int n) { int i,s=0; for(i=m;i<n;i=i+2) s=s+b[i]; returns; } int main() { int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); }

第10章 模块化程序设计——函数(二)

8.5 函数的嵌套调用与递归调用随堂测验

1、C语言规定了程序中各函数之间调用关系,以下说法正确的是?
    A、既允许直接递归调用也允许间接递归调用;
    B、不允许直接递归调用也不允许间接递归调用;
    C、允许直接递归调用不允许间接递归调用;
    D、不允许直接递归调用允许间接递归调用;

2、以下程序运行后的输出结果是? int f (int x, int y) { if(x>y) return x; else return y; } void main() { int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf("%d\n",r); }
    A、3
    B、6
    C、8
    D、12

3、递归函数f(n)=f(n-1)+n (n>1)的递归体是?
    A、f(1)=0;
    B、f(0)=1;
    C、f(n)=f(n-1)+n;
    D、f(n)=n;

4、在函数调用过程中,如果函数fun A调用了函数fun B,函数fun B又调用了函数fun A,则()。
    A、称为函数的直接递归调用
    B、称为函数的间接递归调用
    C、称为函数的循环调用
    D、C语言中不允许这样的递归调用

5、以下程序的功能是用递归方法计算工资,已知第一位员工工资最少,为3100元,其余员工工资一个比一个多500元,求第5位员工的工资。请填空。 int salary(int n) { int s; if(n==1) s=3100; else s=salary(n-1)+500; return s; } void main() { int n=5; printf(“salary:%d\n”,______); }

8.6 变量的作用域随堂测验

1、以下程序输出的temp的值是? #define N 5 main() { int i; int a[N]={1,2,3,4,5}; for(i=0;i<N/2;i++) { int temp; temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("%d",temp); }
    A、2
    B、3
    C、随机数
    D、编译出错,变量未定义

2、以下程序的运行结果是? int a=8,b=9; int f(int a,int b) { int c; c=a>b?a:b; return(c); } void main() { int a=10; printf("%d",f(a,b)); }
    A、8
    B、9
    C、10
    D、随机数

3、在C语言中,关于变量的作用域,下列描述中错误的是().
    A、局部变量只在整个函数的运行周期中有效
    B、全局变量的作用域为整个程序的运行周期
    C、当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量
    D、全局变量会覆盖掉所有与它重名的局部变量

4、以下程序的运行结果是:______________。 int n; void main() { void prt(); for(n=0;n<5;n++) prt(); } void prt() { for(n=0;n<5;n++) printf(“%c”,’*’); printf(“\n”); }

8.7变量的存储类别随堂测验

1、关于C语言中的全局变量与局部变量,下列描述中正确的是()
    A、全局变量的生存期一定比static局部变量的时间长
    B、局部变量的生存周期只是它所在的函数
    C、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
    D、static类别变量的生存周期贯穿于整个程序的运行期间

2、在C语言中,声明外部函数需要添加的关键字是()
    A、extern
    B、static
    C、this
    D、auto

3、以下程序的输出结果是__________。 int fun(int x[],int n) { static int sum=0,i; for(i=0;i<n;i++) sum+=x[i]; return sum; } void main() { int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0; s=fun(a,5)+fun(b,4);printf("%d\n",s); }

第4次单元测验

1、以下说法中正确的是?
    A、C语言程序总是从第一个定义的函数开始执行 ;
    B、C语言程序中,要调用的函数必须在main( )函数中定义;
    C、总是从main( )函数开始执行;
    D、main( )函数必须放在程序的开始部分;

2、以下叙述正确的是?
    A、C语言程序是由过程和函数组成;
    B、C语言函数可以嵌套调用,例如:fun(fun(x));
    C、C语言函数不能单独编译;
    D、C语言中除了main函数,其他函数不能作为单独文件形式存在;

3、以下描述错误的是?
    A、调用函数时,实参可以是表达式;
    B、调用函数时,实参与形参可以共用内存单元;
    C、调用函数时,将为形参分配内存单元;
    D、调用函数时,实参与形参的类型应该一致;

4、以下错误的描述是:函数调用可以?
    A、出现在执行语句中;
    B、出现在一个表达式中;
    C、做为一个函数的实参;
    D、做为一个函数的形参

5、下面函数调用语句含有实参的个数为? func((exp1,exp2),(exp3,exp4,exp5));
    A、1
    B、2
    C、4
    D、5

6、以下说法正确的是?
    A、定义函数时,形参的类型说明可以放在函数体内;
    B、return后边的值不能为表达式;
    C、如果函数类型与返回值类型不一致,以函数类型为准;
    D、如果形参与实参类型不一致,以实参类型为准;

7、在函数调用时,以下说法正确的是?
    A、函数调用后必须带回返回值;
    B、实际参数和形式参数可以同名;
    C、函数间的数据传递不可以使用全局变量;
    D、主调函数和被调函数总是在同一个文件里;

8、以下描述正确的是?
    A、调用函数时的实参只能是有确定值的变量;
    B、return()语句的括号中,可以是变量、常量或有确定值的表达式;
    C、C语言中,函数调用时实参和形参间的参数传递方式不都是值传递;
    D、实参和形参若类型不匹配,编译时将报错;

9、以下关于函数叙述中,错误的是?
    A、函数未被调用时,系统将不为形参分配内存单元;
    B、实参与形参的个数必须相等,且实参与形参的类型必须对应一致;
    C、当形参是变量时,实参可以是常量、变量或表达式;
    D、如函数调用时,实参与形参都为变量,则这两个变量不可能共享同一内存空间;

10、C程序中各函数之间可通过多种方式传递数据,下列不能实现数据传递的方式是?
    A、参数的形实结合;
    B、函数返回值;
    C、全局变量;
    D、同名的局部变量;

11、若函数调用时参数为基本数据类型的变量,以下叙述正确的是?
    A、实参与其对应的形参共享内存存储单元;
    B、只有当实参与其对应的形参同名时才共享内存存储单元;
    C、实参与对应的形参分别占用不同的内存存储单元;
    D、实参将数据传递给形参后,立即释放原先占用的内存存储单元;

12、函数调用时,实参和形参都是简单变量,它们之间数据传递的过程描述正确的是?
    A、实参将地址传递给形参,并释放原先占用的存储单元;
    B、实参将地址传递给形参,调用结束时形参再将此地址回传给实参;
    C、实参将值传递给形参,调用结束时形参再将其值回传给实参;
    D、实参将值传递给形参,调用结束时形参并不将其值回传给实参;

13、若用数组名作为函数调用的实参,则传递给形参的是?
    A、数组第一个元素的地址;
    B、数组的第一个元素的值;
    C、数组中所有元素的值;
    D、数组元素的个数;

14、若函数调用时,用数组名作为函数的参数,以下叙述中正确的是?
    A、实参与对应的形参共用同一段存储空间;
    B、实参与对应的形参占用相同的存储空间;
    C、实参将地址传递给形参,同时形参也会将该地址传递给实参;
    D、实参将地址传递给形参,等同实现了参数之间的双向值的传递;

15、下列程序的输出结果是()。 #include "stdio.h" void fun(int a,int b,int c) { c = a * b; } int main( ) { int c; fun(2,3,c); printf("%d\n", c); return 0; }
    A、0
    B、无法确定
    C、1
    D、6

16、有以下程序,运行后的输出结果是( )。 #include<stdio.h> float fun(int x, int y) { return(x+y); } void main() { int a=2,b=5,c=8; printf(“%3.0f\n”, fun((int)fun(a+c,b),a-c)); }
    A、9.0
    B、编译出错
    C、9
    D、21

17、若函数的形参为一维数组,则下列说法中正确的是()。
    A、调用函数时的对应实参必为数组名。
    B、形参数组可以不指定大小。
    C、形参数组的元素个数必须等于实参数组的元素个数。
    D、形参数组的元素个数必须多于实参数组的元素个数。

18、有以下函数定义: void fun(int n,double x) {……} 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是()。
    A、fun(int y,double m);
    B、k=fun(10,12.5);
    C、fun(x,n);
    D、void fun(n,x);

19、已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为()。 int a[3][4]; f(a);
    A、f(int array[][6]);
    B、f(int array[3][]);
    C、f(int array[][4]);
    D、f(int array[2][5]);

20、下面程序运行后,w的值为()。 void main() { int w=2,k; for(k=0;k<3;k++) w=f(w); printf("%d\n",w); } int f(int x) { int y=0; static z=3; y++;z++; return(x+y+z); }
    A、20
    B、7
    C、28
    D、13

21、下面程序的运行结果是()。 int main() { int j=4;m=1,k; k=f(j,m); printf("%d,"k); k=f(j,m); printf("%d\n",k); return 0; } int f(int x,int y) { static int m=0,i=2; i+=m+1; m=i+x+y; return m; }
    A、8,20
    B、8,8
    C、8,17
    D、8,6

22、若主函数中有定义句:int a[10] ,b[10],c; 在主函数前定义的fun函数首部为:void fun(int x[ ]), 则以下选项中错误的调用语句是?
    A、fun(b);
    B、fun(&c);
    C、fun(&a[3]);
    D、fun(b[1]);

23、以下叙述中不正确的是( )。
    A、函数中的自动变量可以赋初值,每调用一次,赋一次初值。
    B、调用函数时,实参和对应形参在类型上只需赋值兼容。
    C、外部变量的隐含类别是auto。
    D、函数形参可以说明为register变量。

24、关于static存储类,以下叙述中正确的是( )。
    A、只能用来定义局部变量。
    B、static变量的生存期贯穿于整个程序的运行期间。
    C、只能用来定义全局变量。
    D、在定义完static变量且没有给其赋初始值时,该变量的初值不确定

25、有以下程序,它的输出结果是()。 viod fun (int x,int y,int z) { x=123; y=456; z=789; } void main() { int x=100, y=200,z=300; fun (x,y,z); printf("%d,%d,%d\n",x,y,z); }
    A、100,200,300
    B、123,456,789
    C、300,200,100
    D、789,456,123

26、有以下程序 #include int abc(int u,int v); void main ( ) { int a=24,b=16,c; 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、16
    B、7
    C、8
    D、9

27、下列程序的输出结果是()。 int fun(int par); int main() { int entry=12345; printf("%5d",fun(entry)); return 0; } int fun(int par) { int result; result=0; do{ result=result*10+par%10; par/=10; }while(par); return result; }
    A、12345
    B、543
    C、5432
    D、54321

28、下列程序的输出结果是()。 int m=3; int fun(int x,int y) { int m=3; return(x*y-m); } int main() { int a=7,b=5; printf("%d\n",fun(a,b)/m); return 0; }
    A、1
    B、2
    C、3
    D、10

29、下列程序的输出结果是()。 int fun(int x) { static int a = 3; a += x; return(a); } int main() { int k = 2, m = 1, n; m = fun(k); n = fun(m); printf("%d", n); return 0; }
    A、6
    B、9
    C、10
    D、11

30、下列程序的输出结果是()。 int x=3; void incre() { static int x=1; x*=x+1; printf("%d ",x); } int main() { int i; for(i=1;i<x;i++) incre(); return 0; }
    A、3 3
    B、2 2
    C、2 6
    D、2 5

31、下列程序的输出结果是()。 int f() { static int i=0; int s=1; s+=i; i++; return s; } int main() { int i,a=0; for(i=0;i<5;i++) a+=f(); printf("%d",a); return 0; }
    A、15
    B、20
    C、24
    D、25

32、下列程序的输出结果是()。 void fun2(char a, char b) { printf("%c%c",a,b); } char a='A',b='B'; void fun1() { a='C'; b='D'; } int main() { fun1(); printf("%c%c",a,b); fun2('E','F'); return 0; }
    A、CDEF
    B、ABEF
    C、ABCD
    D、CDAB

33、下列程序执行后输出的结果是()。 int f(int a) { int b = 3; static int c = 3; a = c++, b++; return (a); } int main() { int a = 4, i, k; for (i = 0; i<3; i++) k = f(a++); printf("%d", k); return 0; }
    A、3
    B、0
    C、4
    D、5

34、C语言中函数返回值的类型是由以下哪个选项决定的?
    A、函数定义时指定的类型;
    B、return语句中的表达式类型;
    C、调用该函数时的实参的数据类型;
    D、形参的数据类型;

35、以下叙述中错误的是?
    A、用户定义的函数中可以没有return语句;
    B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值;
    C、用户定义的函数中若没有return语句,则应当定义函数为void类型;
    D、函数的return语句中可以没有表达式;

36、如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了 一个变量,则该变量()。
    A、为全局变量,在本程序文件范围内有效
    B、为局部变量,只在该函数内有效
    C、为局部变量,只在该复合语句中有效
    D、定义无效,为非法变量

37、若在一个C源程序文件中定义了一个允许其他源文件引用的实型外部变量a,则在另一 文件中可使用的引用说明是()。
    A、extern static float a;
    B、float a;
    C、extern auto float a;
    D、extern float a;

38、定义一个void型函数意味着调用该函数时,函数()
    A、通过return返回一个用户所希望的函数值
    B、返回一个系统默认值
    C、没有返回值
    D、返回一个不确定的值

39、有如下程序,则其输出结果为:()。 #include <stdio.h> void main() { int x=7,y=11; swap(x,y); printf("%d,%d\n",x,y); } void swap(int a,int b) { int temp; a=6; b=7; temp=a; a=b; b=temp; }
    A、11,7
    B、7,11
    C、6,7
    D、7,6

40、以下程序运行后的输出结果是()。 int fun(int a, int b) { if(a>b) return a; else return b; } int main() { int x=3,y=8,z=6,r; r=fun(fun(x,y),2*z); printf("%d ",r); }
    A、3
    B、6
    C、8
    D、12

41、c语言中,函数的定义不能嵌套,而调用是可以嵌套的。

42、函数调用时值传递方式特点:形参与实参占用相同的内存单元,单向传递。

43、函数定义与函数说明不是同一个概念。

44、形参是虚设的,所以它始终不占存储单元。

45、实参与它所对应的形参占用不同的存储单元。

46、有如下程序,则程序执行后,数组a的两个数组元素的值并不能完成交换操作。 #include <stdio.h> void swap2(int x,int y) { int z; z=x; x=y; y=z; } void main() { int a[2]={1,2}; swap2(a[0],a[1]); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); }

47、有如下程序,则程序执行后,数组a的两个数组元素并不能完成交换操作。 #include <stdio.h> void swap2(int x[2]) { int z; z=x[0]; x[0]=x[1]; x[1]=z; } void main() { int a[2]={1,2}; swap2(a); printf("a[0]=%d\na[1]=%d\n",a[0],a[1]); }

48、分析以下程序的运行结果是_______ #include “stdio.h” func(int a ,int b) { int c; c=a+b; return c; } int main() { int x=6,y,r; y=x+2; r=func(x++,y); printf("%d %d %d\n",x,y,r); return 0; }

49、有如下程序 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return 2; } int main() { printf("%d\n",fib(3)); } 该程序的输出结果是_______。

50、以下程序的输出结果是________。 f(int b[],int m,int n) { int i,s=0; for(i=m;i<n;i=i+2) s=s+b[i]; return s; } int main() { int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7); printf("%d\n",x); }

51、以下程序的输出结果是_____。 #include<stdio.h> int fac_sum(int n) { static int f=1,t=1,s=0; int i; if(n>t) for(i=t+1; i<=n; i++) f=f*i; else { f=1; for(i=1; i<=n; i++) f=f*i; } t=n; s=s+f; return(s); } void main() { int a[]={3,5,2},i,sum; for(i=0; i<3; i++) sum=fac_sum(a[i]); printf(“sum=%d\n”,sum); }

52、以下程序的运行结果是________。 int n=1; void main() { static int x=5; int y; y=n; printf(“MAIN: x=%2d y=%2d n=%2d\n”,x,y,n); func(); printf(“MAIN: x=%2d y=%2d n=%2d\n”,x,y,n); func(); } func() { static int x=4; int y=10; x=x+2; n=n+10; y=y+n; printf(“FUNC: x=%2d y=%2d n=%2d\n”,x,y,n);

53、若输入一个整数10,以下程序的运行结果是_______。 #include<stdio.h> void main() { int a,e[10],c,i=0; printf("输入一个整数\n"); scnaf("%d",&a); while(a!=0) { c=sub(a); a=a/2; e[i]=c; i++; } for(; i>0; i--) printf("%d",e[i-1]); } sub(int a) { int c; c=a%2; return c; }

54、以下程序的运行结果是______。 int main() { int i; for (i=0;i<3;i++) fun(); return 0; } fun() { static int x=0; x+=1; printf("%3d",x); }

55、以下程序的运行结果是________。 int i=0; int main() { int i=5; reset(i/2); printf("i=%d\n",i); reset(i=i/2); printf("i=%d\n",i); reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); } workover(int i) { i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",i); return i; } reset(int i) { i=i<=2?5:0; return i; }

56、以下函数的功能是判断形参a是否为素数,若是函数返回1,否则返回0,请填空。 int isprime(int a) { int i; for(i=2;i<=a/2;i++) if(___________) return 0; return 1; }

57、函数double fun(double x, int n)的功能是计算,则调用fun函数计算 的函数调用语句为____________。

58、以下程序的功能是:求10个学生的平均成绩,则空处应该填写的语句是:()。 #include <stdio.h> float average(int stu[10], int n); void main() { int score[10], i; float av; printf("Input 10 scores:\n"); for( i=0; i<10; i++ ) scanf("%d", &score[i]); ________________________; printf("Average is:%.2f", av); } float average(int stu[10], int n) { int i; float av,total=0; for( i=0; i<n; i++ ) total += stu[i]; av = total/n; return av; }

59、以下程序的输出结果为:()。 void main() { void increment(void); increment(); increment(); increment(); } void increment(void) { int x=0; x++; printf(“%d ”,x); }

60、以下程序的功能是计算函数F(x,y,z)=(x+z)/(y-z)+(y+2*z)/((x-2*z)的值,请将程序补充完整。 #include<stdio.h> float f(float x,float y) { float value; value= ________; return value; } void main() { float x,y,z,sum; scanf("%f%f%f",&x,&y,&z); sum=f(x+z,y-z)+f(y+2*z,x-2*z); printf("sum=%f\n",sum); }

第11章 C语言灵魂——指针(一)

9.1 地址和指针的基本概念随堂测验

1、设有定义”int a = 3, b, *p = &a; ”,则下列语句中使b不为3的语句是( )
    A、b = *&a;
    B、b = *&p;
    C、b = a ;
    D、b = *p ;

2、设指针x指向的整型变量值为25,则printf(“%d\n”, ++ *x);的输出是( )
    A、23
    B、24
    C、25
    D、26

3、若有说明:int i, j = 7, *p = &i ; 则与i = j;等价的语句是( )
    A、i = p ;
    B、*p = *&j ;
    C、i = &j ;
    D、i = **p ;

4、变量的指针的含义是该变量的()
    A、名
    B、地址
    C、值
    D、标志

5、使用指针变量访问目标变量,也称为对目标变量的()访问。

9.2 指针变量的定义与引用随堂测验

1、若有程序段“int *p,a=5;p=&a;”,则下列选项中均代表地址的是()
    A、a,p,*&a
    B、&*a,&a,*p
    C、*&p,*p,&a
    D、&a,&*p,p

2、若有定义“int *p,m=5,n”,则下列选项中正确的是()
    A、p=&n; scanf("%d",&p);
    B、p=&n; scanf("%d",*p);
    C、scanf("%d",&n); *p=n;
    D、p=&n; *p=m;

3、若有定义“int *p,a;”且“p=&a”,则语句“scanf("%d",*p)”一定是错误的,其错误原因是
    A、*p表示的是指针变量p的地址
    B、*p表示的是目标变量a的值,而不是目标变量a的地址
    C、*p表示的是指针变量p的值
    D、*p只能用来说明p是一个指针变量

9.2 指针变量的定义与引用随堂测验

1、已有程序段“int a=25;pri(&a);”,则下列函数输出的结果是() void pri(int *n) {printf("%dn",++*n);}
    A、24
    B、25
    C、26
    D、27

2、下列程序运行后的输出结果是() void fun(char *c,int d) { *c= *c+1; d=d+1; printf("%c,%c,",*c,d); } int main() { char a='A',b='a'; fun(&b,a); printf("%c,%c\n",a,b); return 0; }
    A、B,a,B,a
    B、a,B,a,B
    C、A,b,A,b
    D、b,B,A,b

9.3 指针和数组随堂测验

1、若有定义“int a[5],*p=a;”,能正确引用a数组元素的是()
    A、*&a[5]
    B、a+2
    C、*(p+5)
    D、*(a+2)

2、若有定义“int a[10],*p=a;”,则p+5表示()
    A、元素a[5]的地址
    B、元素a[5]的值
    C、元素a[4]的地址
    D、元素a[6]的值

3、若有定义“int a[10]={1,2,3,4,5,6,7,8,9,10},*p;”,则下列语句正确的是()
    A、for(p=a;a<(p+10);a++)
    B、for(p=a;p<(a+10);p++)
    C、for(p=a,a=a+10;p<a;p++)
    D、for(p=a;p<(a+10);++a)

4、若有定义“char a[]="I am a boy",*b="I am a boy";”,则下列叙述错误的是()
    A、a+3表示的是字符m的地址
    B、b指向其他字符串时,字符串的长度不受限制
    C、b中存放的地址值可以改变
    D、b中存放的地址就是数组a的首地址

5、下列程序段运行后a的值是 int a,b[]={1,2,3,4,5,6,7,8,9,10}; int *p1=&b[5]; a=p[3];
    A、3
    B、4
    C、5
    D、9

9.3 指针和数组随堂测验

1、若有定义“int (*p)[3];”,则以下叙述中正确的是( )。
    A、p是一个指针数组,其中包含3个指针元素
    B、p是一个指针,它只能指向一个每行包含3个int类型元素的二维数组
    C、p是一个指针,它可以指向一个一维数组中的任意元素
    D、“int (*p)[3];”与“int *p[3];”等价

2、若有以下定义和赋值语句,“int s[2][3],(*p)[3]; p=s;”,则对数组s的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为( )。
    A、*(p+i)+j
    B、*(p[i]+j)
    C、(p+i)+j
    D、(*(p+i))[j]

3、如果二维数组a有m列,则a[i][j]之前有 个元素。

9.3 指针和数组随堂测验

1、发生函数调用时,若实参是一维数组名,则以下叙述中不正确的是( )。
    A、实参传递过去的是该一维数组的首地址
    B、函数定义时的形参只能是与实参相对应的一维数组
    C、函数定义时的形参可以是与实参相对应的一维数组或者是类型相同的指针变量
    D、参数传递方式依然遵循单向值传递的原则

2、若有以下说明“int a[3][4],(*p)[4]; int fun(int (*t)[4]); p=a;”,则发生函数调用时,以下对于fun函数的实参叙述中正确的是( )。
    A、实参可以是&a
    B、实参只能是指针变量p[0]
    C、实参只能是一个行地址,可以是p也可以是a
    D、实参只能是一个列地址,可以是*p或者是a[0]

3、以下程序运行的结果是( )。 #include<stdio.h> #include<string.h> fun(char *w, int n) { char t,*s1,*s2; s1=w; s2=w+n-1; while(s1<s2) { t=*s1++; *s1=*s2--; *s2=t; } } void main() { char *p; p=”1234567”; fun(p, strlen(p)); puts(p); }
    A、7654321
    B、1714171
    C、1711717
    D、7177171

第12章 C语言的灵魂——指针(二)

9.4 指针和字符串随堂测验

1、下面程序段的运行结果是______ 。 char str[ ]="ABC" , *p=str ; printf ("%d\n",*(p+2));
    A、0
    B、字符'C'的ASCII码
    C、字符'C'的地址
    D、字符'C'

2、下面判断正确的是 。
    A、char *a="china"; 等价于 char *a; *a="china";
    B、char str[10]={“china”};等价于 char str[10]; str[ ]={“china”};
    C、char *s="china"; 等价于 char *s; s="china";
    D、char c[4]="abc", d[4]="abc"; 等价于 char c[4]=d[4]="abc"

3、下列程序段的输出结果为: int arr[]={6,7,8,9,10}; int * ptr; ptr=arr; * (ptr+2)+=2; printf ("%d,%d\n",*ptr,*(ptr+2));
    A、8,10
    B、6,8
    C、7,9
    D、6,10

4、有以下定义: char a[10],*b=a;不能给a数组输入字符串的语句是________。
    A、gets(a);
    B、gets(a[0]);
    C、gets(&a[0]);
    D、gets(b);

5、设有程序段: char s[ ]="program"; char *p;p=s; 表示数组的第一个元素s[0]和指针p相等。

9.5 指针与函数随堂测验

1、在说明语句:int *f();中,标识符f代表的是________。
    A、一个用于指向整型数据的指针变量。
    B、一个用于指向一维数组的行指针。
    C、一个用于指向函数的指针变量。
    D、一个返回值为指针型的函数名。

2、函数名是1个地址常量,表示函数的入口地址。

3、一个指向函数的指针变量p,可以进行p++运算。

4、定义一个指向函数的指针变量p,该函数没有参数并返回一个整型数,其定义形式为:

9.6 指针数组和指向指针的指针变量随堂测验

1、若有定义和语句: int **pp,*p,a=100,b=200; pp=&p; p=&b; printf("%d,%d\n",*p,**pp); 则输出结果是________。
    A、100,200
    B、100,100
    C、200,100
    D、200,200

2、若有如下语句: int c[4][5],(*p)[5]; p=c; 则能正确引用c数组元素的是________。
    A、p+1
    B、*(p+3)
    C、*(p+1)+3
    D、*(p[0]+2)

3、设有以下定义:char *c[2]={"12","34"}; 表示c数组的两个元素中各自存放了字符串"12"和"34"的首地址。

第13章 不同类型数据的处理——结构体和共用体

10.1 结构体类型的定义随堂测验

1、2.在定义一个结构体变量时系统分配给它的存储空间是 。
    A、该结构体中第一个成员所需存储空间
    B、该结构体中最后一个成员所需存储空间
    C、该结构体中占用最大存储空间的成员所需存储空间
    D、该结构体中所有成员所需存储空间的总和

2、3.若有以下说明和语句: struct student { int no; char *name; }stu, *p=&stu; 则以下引用方式不正确的是 。
    A、stu.no
    B、(﹡p).no
    C、p->no
    D、stu->no

3、5.结构体类型是一个抽象的类型,它只是表示了由若干个不同类型数据项组成的复合类型。

4、1.有如下结构体定义: struct student { int no; char name[10]; char sex; }stud; 则stud所占的内存空间是 个字节。

5、4.有以下说明定义和语句,可用a.day引用结构体成员day,请写出引用结构体成员a.day的其他两种形式 、 。 struct {int day; char mouth; int year;}a, *b; b=&a;

10.2 结构体变量随堂测验

1、1.设有说明语句: struct s { int a; float b; }type; 则下面不正确的叙述是 。
    A、struct是结构体类型的关键字
    B、struct s是用户定义的结构体类型
    C、type是用户定义的结构体类型名
    D、a和b都是结构体成员名

2、2.有如下定义: struct date { int year; int month; int day; }; struct { char name[20]; char sex; struct date birthday; }person; 下面正确的赋值语句是 。
    A、year=1980
    B、birthday.year=1980
    C、person.birthday.year=1980
    D、person.year=198

3、3.设有如下定义: struct ss{ char name[10];int age;char sex;} std[3],* p=std; 下面各输入语句中错误的是 。
    A、scanf("%d",&(*p).age);
    B、scanf("%s",&std.name);
    C、scanf("%c",&std[0].sex);
    D、scanf("%c",&(p->sex))

4、4.结构体变量不可以在定义时直接进行初始化。

5、5.不允许将一组常量字节赋给结构体变量。

10.3 结构体指针随堂测验

1、1.设有以下定义: struct sk { int a; float b; }data; int *p; 若要使p指向data中的a域,正确的赋值语句是( )。
    A、p=&a;
    B、p=data.a;
    C、p=&data.a;
    D、*p=data.a;

2、3.当一个变量用来指向一个结构体变量时,称之为结构体指针变量。

3、4.结构体指针变量的一般定义形式如下: struct 结构体类型名 *结构体指针变量名;

4、5.struct stu_score { int no; char name[20]; }; struct stu_score *p; 有如下赋值:p=&stu[0].no;正确吗:

5、2.以下程序的运行结果是 。 #include<stdio.h> struct stu{ int a; char *c; float score; }; int main( ) { struct stu x={41101,"LiMing",95}; struct stu *p=&x; printf("%d %s %.1f\n", x.a,p->c, (*p).score); return 0; }

10.4 向函数传递结构体随堂测验

1、3.以下程序的运行结果是 。 struct date { int year; int month; int day; }; struct student{ char name[10]; char sex; struct date birthday; }stu; printf("%d\n",sizeof(struct student));
    A、15
    B、17
    C、23
    D、12

2、2.用结构体变量做函数参数,要将全部成员逐个传送。

3、1.阅读下面的程序: #include<stdio.h> #define Person_1 struct person_1 struct person_1 { char name[31]; int age; char address[101]; }; typedef struct person_2 { char name[31]; int age; char address[101]; } Person_2; int main( ) { Person_1 a = {"Zhao",31,"east street 49"}; Person_1 b = a; Person_2 c = {"Qian",25,"west street 31"}; Person_2 d = c; printf("%s,%d,%s\n",b.name,b.age,b.address); printf("%s,%d,%s\n",d.name,d.age,d.address); return 0; } 该程序的运行结果是:_________________。

4、4.以下程序的执行结果是: #include<stdio.h> struct n { int x; char c; }; func(struct n b) { b.x=20; b.c=’y’; } int main() { struct n a={10,’x’}; func(a); printf(“%d,%c”,a.x,a.c); return 0; }

10.5 共用体随堂测验

1、1.以下程序的执行结果是( )。 #include<stdio.h> int main() { union { char s[2]; int i; }a; a.i=0x1234; printf(“%x,%x\n”, a.s[0],a.s[1]); return 0; }
    A、12,34
    B、34,12
    C、12,00
    D、34,00

2、2.共用体变量在程序执行期间( )。
    A、所有成员一直驻留在内存中
    B、只有一个成员驻留在内存中
    C、部分成员驻留在内存中
    D、没有成员驻留在内存中

3、3.共用体与结构体不可以嵌套使用。

4、4.共用体变量的地址及各成员的地址相同。

11.1 *链表概述随堂测验

1、链表的结点是由 组成的。
    A、数据域
    B、表头
    C、头指针
    D、指针域

2、单链表中的每个结点只有1个 。

3、单链表的头指针存放表中第一个结点的 。

11.2 *单链表建立随堂测验

1、若已建立一个链表,指针p指向尾结点,指针q指向新结点,则能将q所指的结点链接到链表末尾的 一组语句为________。
    A、q->next=NULL;p->next=q; p=q;
    B、p=p->next;q->next=p->next;p->next=q;
    C、p=p->next;q->next=p;p->next=q;
    D、p=(*p)·next;(*q)·next=(*p)·next;(*p)·next=q;

11.4 *单链表查找随堂测验

1、对于一个头指针为head的带头结点的单链表,能够使p指向第1个结点的操作是:
    A、p=head;
    B、p=head->next;
    C、p->next=head->next;
    D、head->next=p->next;

11.5 *单链表删除随堂测验

1、在一个单链表中,指针P指向结点是指针S所指向结点的直接前驱结点,从链表中删除S所指向结点的操作为:
    A、p=s;
    B、s->next=p->next;
    C、p->next=s->next;
    D、s=p;

11.6 *单链表插入随堂测验

1、在一个单链表中,已知q所指结点是p所指结点的后继结点,若在p和q之间插入结点s,则执行( )。
    A、s->next=p->next;p->next=s;
    B、p->next=s->next; s->next=q;
    C、q->next=s;s->next=p;
    D、p->next=s;s->next=q->next;

第5次单元测验

1、指针的含义是:
    A、值
    B、地址
    C、名
    D、一个标志

2、若已定义a为int型变量,则下面的语句中正确的是:
    A、int *p=a;
    B、int *p=*a;
    C、int p=&a;
    D、int *p=&a;

3、若有定义:int x,*p; 则以下正确的赋值表达式是:
    A、p=&x
    B、p=x
    C、*p=&x
    D、*p=*x

4、int a[5]={10,20,30,40,50}, *p; p=&a[1]; 则执行语句“*p++;”后,*p的值是:
    A、20
    B、30
    C、21
    D、31

5、下面的语句段中,char *s="\ta\018bc"; for(; *s!=’\0’;s++) printf("*"); for循环的执行次数是:
    A、9
    B、5
    C、6
    D、7

6、假设int *p[3]; 则以下叙述中正确的是:
    A、p是一个指针数组
    B、p是一个指针,它只能指向一个每行包含3个int类型元素的二维数组
    C、p是一个指针,它可以指向一个一维数组中的任一元素
    D、(*p)[3]与*p[3]等价

7、若有以下说明:int (*p)[3]; 则以下叙述中正确的是:
    A、p是一个指针数组
    B、p是一个指针,它可以指向一个包含3个int类型元素的一维数组
    C、p是一个指针,它可以指向一个一维数组中的任一元素
    D、(*p)[3]与*p[3]等价

8、若有以下定义和赋值语句,int s[2][3]=,(*p)[3];p=s; 则对s数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为:
    A、*(p+i)+j
    B、*(p[i]+j)
    C、(p+i)+j
    D、(*(p+i))[j]

9、若有以下定义,int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是:
    A、x[3]
    B、p1=x+3, *p1++
    C、p1=x+2, *(p1++)
    D、p1=x+2, *++p1

10、若有以下说明语句,static int i, a[2][3]={1, 3, 5, 7, 9,11};int m, n;且0≤m≤1,0≤n≤2,则下述对数组元素的引用,正确的是:
    A、a[m]+n
    B、*(a+5)
    C、(a+m)+n
    D、*(*(a+m)+n)

11、以下程序运行的结果是: #include<stdio.h> void abc(char *p) { int i,j; for(i=j=0; *(p+i)!='\0'; i++) if(*(p+i)>='d') { *(p+j)=*(p+i); j++; } *(p+j)='\0'; } void main() { char str[ ]="cdalb"; abc(str); puts(str); }
    A、dalb
    B、cd
    C、dl
    D、c

12、下面程序的运行结果是: #include<stdio.h> void main() {   int x[5]={2,4,6,8,10},*p,**pp; p=x; pp=&p; printf("%d ",*(p++));   printf("%d",**pp); }
    A、4 4
    B、2 4
    C、2 2
    D、4 6

13、以下程序运行的结果是: #include<stdio.h> #include<string.h> void main() { char *p1,*p2,str[50]="abc",st[50]="abc"; p1=st; p2="abc"; strcpy(str+1, strcat(p1,p2)); printf("%s\n",str); }
    A、abcabcabc
    B、bcabcabc
    C、aabcabc
    D、cabcabc

14、下面程序的运行结果是: #include<stdio.h> sub( int x, int y, int *z) { *z=y-x; } void main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c); }
    A、5, 2, 3
    B、-5, -12, -7
    C、-5, -12, 7
    D、5, -2, -7

15、以下程序运行的结果是: #include<stdio.h> void main() { int b,a=28; char s[10],*p; p=s; do{ b=a%16; if(b<10) *p=b+48; else *p=b+55; p++; a=a/5; }while(a>0); *p='\0'; puts(s); }
    A、10
    B、2
    C、C51
    D、\0

16、下面程序的运行结果是: #include<stdio.h> void main() { static char a[ ]="Language",b[ ] ="programe"; char *p1,*p2; int k; p1=a; p2=b; for(k=0; k<=7; k++) if(*(p1+k)= =*(p2+k)) printf(“%c”,*(p1+k)); }
    A、gae
    B、ga
    C、Language
    D、有语法错误

17、下面程序的运行结果是: #include<stdio.h> void main() { int a[ ]={2, 4, 6, 8, 10}, y=1, x, *p; p=&a[1]; for(x=0; x<3; x++) y+=*(p+x); printf(“%d\n”, y); }
    A、17
    B、18
    C、19
    D、20

18、若有说明:int *p,m=5,n;以下程序段正确的是:
    A、p=&n ; scanf(“%d”,&p);
    B、p = &n ; scanf(“%d”,*p);
    C、scanf(“%d”,&n); *p=n ;
    D、p = &n ; *p = m ;

19、若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是:
    A、a,p,*&a
    B、&*a,&a,*p
    C、*&p,*p,&a
    D、&a,&*p,p

20、下面判断正确的是:
    A、char *a="china"; 等价于 char *a; *a="china";
    B、char str[10]={"china"}; 等价于 char str[10]; str={"china";}
    C、char *s="china"; 等价于 char *s; s="china" ;
    D、char c[4]="abc",d[4]="abc"; 等价于 char c[4]=d[4]="abc" ;

21、下面程序段的运行结果是: char *s="abcde" ; s+=2 ; printf("%d",s);
    A、cde
    B、字符'c'
    C、字符'c’的地址
    D、不确定

22、以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是:
    A、strcpy1(char *p1,char *p2) { while ((*p1++=*p2++)!='\0’) ; }
    B、strcpy2(char *p1,char *p2) { while ((*p1=*p2)!='\0’) { p1++; p2++; } }
    C、strcpy3(char *p1,char *p2) { while (*p1++=*p2++) ; }
    D、strcpy4(char *p1,char *p2) { while (*p2) *p1++=*p2++ ; }

23、函数strcmp(char *s,char *t)功能是: 当第1个串大于第二个串时,函数返回值大于零; 当第1个串等于第二个串时,函数返回值为零; 当第1个串小于第二个串时,函数返回值小于零; 与strcmp功能相等的程序段是:
    A、int strcmp1(char *s,char *t) { for ( ; *s++=*t++; )     if (*s == '\0') return 0 ;   return (*s-*t) ; }
    B、int strcmp2(char *s,char *t) { for ( ; *s++=*t++; ) if (!*s) return 0 ;   return (*s-*t) ; }
    C、int strcmp3(char *s,char *t) { for ( ; *t= =*s; ) { if (!*t) return 0 ; t++ ; s++ ; }   return (*s-*t) ; }
    D、int strcmp4(char *s,char *t) { for ( ; *s==*t; s++, t++ ) if (!*s) return 0 ;   return (*t-*s) ; }

24、设有如下定义:struct ks{int a;float b;}data,*p; 若有p=&data;,则对data中的a域的正确引用是________。
    A、(*p).a
    B、p.data.a
    C、p->data.a
    D、(*p).data.a

25、设有以下说明: struct stud{ char num[6]; int s[4]; double ave;}a; 则变量a在内存所占字节数是________。
    A、18
    B、22
    C、11
    D、5

26、若有定义:int j,*p; ,则操作p=j; 是合法操作。

27、指针变量的值是无符号整型值,所以指针变量都是整型变量。

28、若有定义:double (*dd)[10]; 则dd是一个指向具有10个元素的double型数组的指针变量。

29、在C语言中,可以把一个结构体变量作为一个整体赋值给另一个具有相同类型的结构体变量。

30、使用结构体struct的目的是,将一组数据作为一个整体,以便于其中的成员共享同一空间。

31、当说明一个结构体变量时系统分配给它的内存是成员中占内存量最大者所需的容量 。

32、一个共用体变量中不能同时存放其所有成员。

33、若有以下定义和语句,int a[4]={0,1,2,3},*p; p=&a[2];则*--p的值是___。

34、若有定义:int a[2][3]={2,4,6,8,10,12}; 则*(&a[0][0]+2*2+1)的值是___。

35、下面程序的运行结果是___。 #include<stdio.h> void main() { int x[ ]={0,1,2,3,4,5,6,7,8,9}; int s,i,*p; s=0; p=&x[0]; for(i=1; i<10; i+=2) s+=*(p+i);   printf("%d",s); }

36、下面程序段的运行结果是___。 char a[ ]="12345",*p; int s=0; for(p=a; *p!='\0'; p++)   s=10*s+*p-‘0’; printf(“%d,s);

37、下面程序的运行结果是___ 。 #include<stdio.h> void main() {   int va[10],vb[10],*pa,*pb,i; pa=va; pb=vb;   for(i=0; i<3; i++,pa++,pb++)   {    *pa=i; *pb=2*i; printf(”%d%d”,*pa,*pb);   } pa=&va[0]; pb=&vb[0]; for(i=0; i<3; i++) { *pa=*pa+i; *pb=*pb*i; printf(”%d%d”,*pa++,*pb++); } }

38、以下程序的运行结果是___。 #include<stdio.h> int sub(int *s) {   static int t=0;   t=*s+t;   return t; } void main() { int i,k; for(i=0; i<4; i++)   {    k=sub(&i);    printf("%d", k);   }   printf("\n"); }

39、以下程序的输出结果是___。 #include<stdio.h> void main() { char str[ ]="abc", *ps=str; while(*ps) ps++; for(ps--; ps-str>=0; ps--)    printf("%s",ps); }

40、下面程序的运行结果是: #include<stdio.h> int fun (char *s) { char *p=s;   while (*p) p++ ;   return (p-s) ; } void main ( ) { char *a="abcdef" ; printf(“%d\n”,fun(a)) ; }

41、当运行以下程序时,写出输入 6↙ 的程序运行结果: #include<stdio.h> void sub(char *a,char b) { while (*(a++)!='\0') ; while (*(a-1)<b) *(a--)=*(a-1); *(a--)=b; } void main ( ) { char s[]="97531",c; c = getchar( ) ; sub(s,c); puts(s) ; }

第14章 文件

12.1 文件概述随堂测验

1、将一个短整数10002存在磁盘上,以ASCII码形式存储和以二进制形式存储,占用的字节数分别是:
    A、2和2
    B、2和5
    C、5和2
    D、5和5

2、系统的标准输入文件是指:
    A、键盘
    B、显示器
    C、硬盘
    D、光盘

3、C语言中文件缓冲区是硬盘上一块区域。

12.2 文件的打开和关闭随堂测验

1、以下要作为函数fopen中第一个参数的正确格式是:
    A、c:user\text.txt
    B、c:\rser\text.txt
    C、\user\text.txt
    D、"c:\\user\\text.txt"

2、若以”a+”方式打开一个已存在的文件,则以下叙述正确的是:
    A、文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作。
    B、文件打开时,原有文件内容被删除,位置指针移到文件开头,可作重新写和读操作。
    C、文件打开时,原有文件内容被删除,只可作写操作。
    D、以上各种说法皆不下确。

3、若要用fopen函数打开一个新的二进制文件,该文件既要能读也要能写,则文件打开方式字符串应是:
    A、“ab+”
    B、“wb+”
    C、“rb+”
    D、“ab”

4、若要打开A盘上的user子目录下的名为abc.txt的文本文件进行读写操作,下列符合此要求的函数调用是:
    A、fopen("A:\user\abc.txt","r");
    B、fopen("A:\\user\\abc.txt","r+");
    C、fopen("A:\user\abc.txt","rb");
    D、fopen("A:\\user\\abc.txt","w");

12.3 文件的顺序读写随堂测验

1、fscanf函数的正确调用形式是:
    A、fscanf(格式字符串,输出表列) ;
    B、fscanf(格式字符串,输出表列, fp);
    C、fscanf(格式字符串,文件指针,输出表列) ;
    D、fscanf(文件指针,格式字符串,输入表列);

2、fgets(str,n,fp)的函数概念是从文件读出字符串存入str,下列叙述正确的是:
    A、n代表最多能读出n个字符串。
    B、n代表最多能读出n个字符。
    C、n代表最多能读出n-1个字符串。
    D、n代表最多能读出n-1个字符。

3、下列程序执行后,文件test中的内容是: #include <stdio.h> void fun(char * fname, char *st) { FILE * myf; int i; myf = fopen(fname, "w"); for (i=0; i< strlen(st); i++) { fputc(st[i],myf); } fclose(myf); } int main() { fun("test","new world"); fun("test","hello, "); return 0; }
    A、hello
    B、new worldhello
    C、new world
    D、hello,rld

4、在C程序中,可以把整型数以二进制形式存放到文件中的函数是:
    A、fprintf()函数
    B、fread()函数
    C、fwrite()函数
    D、fputc()函数

5、已知函数调用形式:fread(buffer,size,count,fp);其中buffer代表的是一个指针,指向要读入数据的存放地址。

6、标准输入输出函数中,将一个字符写到磁盘文件上去,应调用fputc函数。

12.4 文件的随机读写随堂测验

1、函数调用语句fseek(fp,10,1)的含义是:
    A、将文件指针移到距离文件头10个字节处
    B、将文件指针移到距离文件尾10个字节处
    C、将文件指针从当前位置后移10个字节
    D、将文件指针从当前位置前移10个字节

2、下列语句中,不能将文件型指针fp指向的文件内部指针置于文件头的语句是:(注:假定能正确打开文件)
    A、fp=fopen("abc.dat","w");
    B、rewind(fp);
    C、feof(fp);
    D、fseek(fp,0L,0);

3、下面程序执行后,abc.dat文件的内容是: #include <stdio.h> int main() { FILE *pf; char *s1 = "China", *s2 = "Beijing"; pf = fopen("abc.dat","wb+"); fwrite(s2,7,1,pf); rewind(pf); fwrite(s1,5,1,pf); fclose(pf); return 0; }
    A、China
    B、Chinang
    C、ChinaBeijing
    D、BeijingChina