admin 管理员组

文章数量: 887032


2023年12月16日发(作者:关联数据表)

国家开放大学《C语言程序设计》章节测试参考答案

第一章 C语言概述

自测练习一:C语言字符集 自测练习

1.在C语言字符集中,包含有全部26个英文大写字母和对应的小写字母。(√)

2.在C语言字符集中,一个大写英文字母和它的小写英文字母被视为不同的字符。(√)

3.在C语言程序中, ABC和abc被作为同一标识符使用。(×)

自测练习二: C语言字符集 自测练习

1.在C语言中,保留字是有专门含义和作用的,不能作为一般标识符使用。(√)

2.在C语言中,作为标识符的第一个字符只能是英文字母或下划线,不能是数字字符。(√)

3.C语言中使用的字符常量,其起止标记符是( )。

a. 双引号

b. 尖括号

c. 单引号

d. 中括号

4.C语言中使用的字符串常量,其起止标记符是( )。

a. 双引号

b. 中括号

c. 尖括号

d. 单引号

自测练习三:C语句分类 自测练习

1.在C语言中,一条简单语句的结束符是( )。

a. 分号

b. 空格

c. 冒号

d. 逗号

2.在C语言中,每条复合语句的开始标记字符为( )。

1 / 82

a. <

b. [

c. (

d. {

3.不符合C语言规定的复合语句是( )。

a. {x=0;}

b. {}

c. {;}

d. {y=10}

4.C语言中的选择类语句有两条,它们是( )。

a. else和case

b. if和switch

c. if和else

d. switch和case

自测练习四:函数分类与使用 自测练习

1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( )。

a. name

b. main

c. MAIN

d. function

2.C语言程序中的基本功能模块为( )。

a. 标识符

b. 函数

c. 表达式

d. 语句

3.一个函数定义所包含的两个部分是( )。

a. 函数头和函数体

b. 函数原型和函数体

c. 函数名和参数表

2 / 82

d. 函数头和函数尾

4.一个程序文件开始使用的每条预处理命令,其首字符必须是( )。

a. #

b. @

c. %

d. $

5.在一个程序文件中,若要使用#include命令包含一个系统头文件,则此头文件所使用的起止定界符为一对( )。

a. 双引号

b. 花括号

c. 尖括号

d. 单引号

6.在一个函数定义中,函数体的格式是一条复合语句。(√)

7.一个函数必须返回一个值,不允许定义不返回任何值的函数。(×)

8.若要在程序文件中使用数学函数,则需要引入的系统头文件为math.h。(√)

9.若要在程序文件中使用标准输入和输出函数,则需要引入的系统头文件为stdio.h。(√)

自测练习五:C语言程序的层次结构 自测练习

1.在C语言程序中,单行或行尾注释使用的标记符为( )。

a. //

b. **

c. /*

d. */

2.在C语言程序中,多行注释使用的结束标记符为( ).

a. /*

b. **

c. */

d. //

3.在程序文件中添加注释内容是为了增强程序的可读性。(√)

3 / 82

4.在一行中出现多条语句时,注释语句只能为最后一条语句。(√)

自测练习六:标准输出函数printf()的使用 自测练习

1.用于输出表达式值的标准输出函数是( )。

a. print()

b. scanf()

c. output()

d. printf()

2.在printf()函数调用的格式字符串中,每个格式符的先导字符为( )。

a. #

b. @

c. $

d. %

3.在printf()函数调用的格式字符串中,若使用格式符为“%d”,则对应输出的数据类型为( )。

a. int

b. char

c. float

d. double

4.在printf()函数调用的格式字符串中,若使用格式符为“%f”,则对应输出的数据类型为( )。

a. char

b. float

c. int

d. double

5.在printf()函数调用的格式字符串中,若使用格式符为“%5d”,则规定对应输出的数据占用的字符位置个数为( )。

a. 5

b. 4

c. 6

d. 3

4 / 82

6.在利用printf()函数向屏幕输出数据时,需要在参数表的开始位置使用相应的格式字符串。(√)

7.在“printf("%d - %d = %d",x,y,x-y);”语句所使用的格式字符串中,包含有3个格式符。(√)

8.在执行“printf("s=%sn","abc");”语句时,输出结果为s=abc。(√)

9.在“printf("s=%cn","abc");”语句中,格式符的使用同后面的输出数据相适合。(×)

10.在执行“printf("%d - %d = %d",x,y,x-y);”语句时,其输出的前两个数据值之间将采用逗号分开。(×)

自测练习七:标准输入函数scanf()的使用 自测练习

1.程序运行中需要从键盘上输入多于一个数据时,若不特别规定分隔符,则输入的各数据之间所使用的分隔符为( )。

a. 空格或回车

b. 空格或逗号

c. 逗号或回车

d. 逗号或分号

2.用于从键盘上为变量输入值的标准输入函数是( )。

a. print()

b. scanf()

c. printf()

3.在scanf()函数调用的格式字符串中,每个格式符的先导字符为( )。

a. %

b. #

c. @

d. $

4.在scanf()函数调用的格式字符串中,若使用格式字符串为“%d,%d”,则规定输入的两个数据之间的分隔符为( )。

a. $

b. #

c. @

5 / 82

d. %

5.在利用scanf()函数从键盘输入数据时,需要在参数表的开始位置使用相应的格式字符串。(√)

6.在“scanf("%d %d",&x,&y);”语句所使用的格式字符串中,包含有2个格式符。(√)

7.在执行“scanf("%d %d",&x,&y);”语句时,需要从键盘上输入2个整数。(√)

自测练习八:C语言程序的上机操作过程 自测练习

1.C语言源程序文件的扩展名为( )。

a. exe

b. obj

c. c

d. cpp

2.每个C语言程序文件的编译错误的类型有( )。

a. 2种

b. 3种

c. 1种

d. 4种

3.每个C程序文件在编译时可能出现有警告性错误,其对应的标识符号为( )。

a. err

b. error

c. warn

d. warning

4.一个C语言程序只能够包含一个程序源文件。(×)

5.一个C语言程序只能够包含一个用户头文件。(×)

6.在C语言程序上机操作的过程中,编译程序的操作步骤之后是连接操作。(√)

第一章 综合练习

一、单项选择题

1.C语言中的循环类语句有3条,它们是( )。

A. for,if,while

B. for,while,do

6 / 82

C. while,do,switch

D. for,break,do

2.C语言中的跳转类语句有四条,它们是goto,return和( )。

A. break,const

B. static,continue

C. break,continue

D. while,extern

3.当不需要函数返回任何值时,则所使用的返回类型为( )。

A. int

B. union

C. void

D. Void

4.在一个函数定义中,函数头包括的3个部分依次为函数类型、函数名和( )。

A. 表达式

B. 语句

C. 函数体

D. 参数表

5.在一个程序文件的开始,若需要使用一个包含命令包含一个头文件时,则命令标识符为( )。

A. #clude

B. #const

C. #include

D. #defile

6.在#include预处理命令中,不可以包含( )。

A. 系统头文件

B. 程序文件

C. 用户头文件

D. 目标文件

7.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应7 / 82

输出的数据占用的字符位置个数为( )。

A. 5

B. 6

C. 4

D. 2

8.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应输出的数据中,其小数部分占用的字符位置个数为( )。

A. 5

B. 6

C. 4

D. 2

9.在printf()函数调用的格式字符串中,若使用格式符为“%6.2f”,则规定对应输出的数据中,其整数部分占用的字符位置个数为( )。

A. 6

B. 4

C. 3

D. 2

10.在scanf()函数调用的格式字符串中,若使用格式符为“%f”,则对应输入的数据类型为( )。

A. char

B. int

C. float

D. double

11.在scanf()函数调用的格式字符串中,若使用格式符为“%Lf”,则对应输入的数据类型为( )。

A. char

B. int

C. float

D. double

8 / 82

12.每个C程序文件在编译时可能出现有严重性错误,其对应的标识符号为( )。

A. warning

B. error

C. warn

D. err

13.在VC++环境下,为运行一个程序而建立的工作区文件的扩展名为( )。

A. obj

B. exe

C. dsw

D. dsp

二、判断题

1.在C语言中,作为标识符的第一个字符可以是英文字母、数字或下划线字符。(×)

2.在C语言中,标识符中的非首字符可以是英文字母、数字或下划线字符。(√)

3.当需要在程序文件中引入用户定义的头文件时,使用的不是#include命令。(×)

4.使用#include命令只能包含头文件,不能包含其他任何文件。(×)

5.注释语句的内容只会出现在源程序文件中,不会出现在编译后而生成的目标代码文件中。(√)

6.一条注释语句的最后必须使用分号结束。(×)

7.源程序文件被编译成目标文件后,其目标文件中也存在有对应的注释内容。(×)

8.源程序文件被编译成目标文件后,源程序文件中的注释语句仍然存在。(√)

9.在一条注释语句中,除了注释内容外,不需要使用任何特定的标记符。(×)

10.多行注释语句的开始和结束标记符可以互换使用。(×)

11.在执行“printf("%5d",x);”语句时,其输出的x的值所占用的显示宽度将大于等于5个字符位置。(√)

12.在执行“printf("%6d",x);”语句时,其输出的x的值所占用的显示宽度将小于6个字符位置。(×)

9 / 82

13.在执行“printf("%8.2f",x);”语句时,其输出的x的值所占用的显示宽度将大于等于8个字符位置。(×)

14.在“scanf("%d %d",&x,&y);”语句中,x和y变量均为整数类型。(√)

15.在“scanf("%s",x);”语句中,x变量不是字符指针类型。(×)

16.在“scanf("%d-%d=%d",&x,&y,&z);”语句中,有语法错误。(×)

17.在C语言程序上机操作的过程中,连接程序的操作步骤之前是编译程序。(√)

18.在C语言程序上机操作的过程中,需要对每个用户头文件进行单独的编译操作。(×)

19.在C语言程序上机操作的过程中,不能够对用户头文件进行单独的编译操作。(√)

第二章 基本数据类型和表达式

自测练习一:数据类型 自测练习

类型的长度为( )。

a. 1

b. 3

c. 4

d. 2

2.常数120的数据类型为( )。

a. 双精度型

b. 短整型

c. 长整型

d. 整型

3.一个无符号字符类型的值域范围是( )。

a. -127到255

b. 0到255

c. 1到255

d. -128到+127

10 / 82

4.广义整数类型包括短整型、标准整型和长整型3种。(×)

5.短整型、标准整型和长整型的长度分别为2、4和8。(×)

自测练习二:常量 自测练习

1.数值常量0x62的表示方式为( )。

a. 八进制

b. 十进制

c. 二进制

d. 十六进制

2.在C语言中,表示换行符的转义字符为( )。

a. r

b. f

c. m

d. n

3.字符串"It's'"中包含的字符个数为( )。

a. 8

b. 7

c. 6

d. 5

4.执行“printf("%c",'B'+2);”语句后得到的输出结果为( )。

a. D

b. B

c. C

d. A

5.常数3.26是双精度浮点数。(×)

6.常数3.26f是单精度浮点数。(×)

7.浮点数包括单精度浮点数和双精度浮点数两种。(√)

8.常数3.26是双精度浮点数。(×)

自测练习三:变量 自测练习

1.要定义a和b为两个整型变量,则使用的定义语句为( )。

a. int a:b;

11 / 82

b. int a b;

c. int a,b;

d. int a;b;

自测练习四:运算符和表达式 自测练习

1.运算符优先级最高的是( )。

a. /

b. ||

c. ++

d. %

2.下列数值中最小值是( )。

a. 28/8

b. 28%8

c. 35/3

d. 35%3

3.已知x的初值为15,则下列各表达式中的最小值为(

a. x*=2

b. x+=10

c. x/=2

d. x%=20

4.若x=5,y=10,则计算y*=++x表达式后,y的值为(

a. 40

b. 60

c. 50

d. 55

5.设x和y均为逻辑值,则x && y为真的条件是( )。a. 其中一个为假

b. 它们均为假

c. 它们均为真

d. 其中一个为真

12 / 82

。)。 )

6.x<=10的相反表达式为( )。

a. x>=10

b. x!=10

c. x>0

d. x>10

7.表达式(float)25/4的值为6。(×)

8.表达式x=x+y表示成复合赋值表达式为x=+y。(×)

9.增量表达式++y表示成赋值表达式为y=y+1。(√)

10.表达式sizeof(25)的值等于4。(√)

11.逻辑表达式(x>3 && x<10)的相反表达式为(x<=3 || x>=10)。(√)

自测练习五:一些系统函数的使用 自测练习

1.函数pow(4,3)的值为( )。

a. 64.0

b. 27

c. 12.0

d. 56

2.假定x=4.6,则函数floor(x)的值为( )。

a. 5.0

b. 4.0

c. 4.6

d. 4.5

3.正弦函数sin48在C语言的表示为( )。

a. sin(48*3.14159)

b. sin(48)

c. sin(48/180.0)

d. sin(48*3.14159/180)

4.在C语言中,求一个实数的绝对值的数学函数为fabs(x)。(√)

5.已知x=-25,则abs(x)的值为25。(√)

6.在C语言中,正弦、余弦或正切函数的参数的度量单位是度。(×)

13 / 82

第二章 综合练习

一、单项选择题(1-12题每题3分,13-16题每题4分,共48分)

类型的长度为( )。

A. 1

B. 2

C. 4

D. 8

2.常数-4.25的数据类型为( )。

A. 整型

B. 单精度型

C. 双精度型

D. 长双精度型

3.一个有符号字符类型的值域范围是( )。

A. -128到+127

B. 0到255

C. -127到255

D. 1到255

4.字符串"Its40n"的长度为( )。

A. 5

B. 6

C. 7

D. 8

5.实数340.25对应的规格化浮点数为( )。

A. 340.25

B. 34.025e1

C. 3.4025e2

D. 0.34025e3

6.要利用const保留字定义整型常量ABC的值为10,则对应的定义语句为(A. const int ABC 10;

B. const int ABC,10;

14 / 82

。 )

C. const int ABC;10;

D. const int ABC=10;

7.要利用#define命令定义ABC常量的值为100,则对应的命令格式为( )。

A. #define ABC=100

B. #define ABC==100

C. #define ABC 100

D. #define ABC;100

8.下列数值中最大值是( )。

A. 28/8

B. 35/3

C. 28%8

D. 35%4

9.在下面运算符中,优先级最高的是( )。

A. !

B. &&

C. ||

D. !=

10.设有语句序列为“int a=12; a+=a*a;”,则执行结束后,a的值为(A. 12

B. 144

C. 156

D. 288

11.在C语言中,用于比较大小的关系运算符的总数为( )。

A. 3

B. 4

C. 5

D. 6

12.x>0 && y<=5的相反表达式为( )。

A. x<=0 || y>5

B. x>0 || y<=5

15 / 82

)。

C. x<=0 && y>5

D. x<0 && y!=5

13.假定x是一个逻辑量,则(x && !x)和(x || !x)的值分别为( )。

A. 1和1

B. 0和0

C. 0和1

D. 1和0

14.假定x=4.6,则函数ceil(x)的值为( )。

A. 4.0

B. 4.6

C. 4.5

D. 5.0

15.表达式floor(2.3457*100+0.5)/100的值为( )。

A. 2.35

B. 2

C. 2.34

D. 2.3457

二、判断题(每题4分,共52分)

16.常数3.26e4是双精度浮点数。(√)

17.浮点数只有单精度表示,没有双精度表示。(×)

18.定点数包括单精度定点数和双精度定点数两种。(√)

19.定义符号常量只有一种方法,就是采用预处理命令#define的方法。(×)

20.使用const语句定义一个符号常量时,则必须对它同时进行初始化。(√)

21.在一条变量定义语句中,定义的变量和赋给它的初值之间只能使用等号(=)。(√)

22.假定x=5,则表达式2+x++的值为7。(√)

23.表达式(int)14.6%5的值为0。(×)

24.表达式x=x+1表示成增量表达式为x++。(×)

25.假定x=5,则执行“a=(x?10:20);”语句后a的值为10。(√)

16 / 82

26.逻辑表达式(a>b || b==5)的相反表达式为(a>b && b==5)。(×)

27.在C语言中,求一个整数的绝对值的数学函数为abs(x)。(√)

28.在C语言中,退出程序运行的系统函数为exit()。(√)

第三章 流程控制语句

自测练习一:if条件语句 自测练习

1.若x的值为5,则执行“if(x>10) x++; else x--;”语句后,x的值为( )。

a. 4

b. 6

c. 3

d. 5

2.若x的值为-10,则执行“if(x) x++; else x--;”语句后,x的值为( )。

a. -9

b. -11

c. -10

d. 0

3.在if语句中,可以带有else子句,也可以省略它。(×)

4.在if语句中,每个else关键字与它前面同层次并且最接近的if关键字相配套。(×)

5.执行下面程序的输出结果为

#include

void main() {

int a=25,b=18;

if(a>b) printf("%sn","a>b");

if(a==b) printf("%sn","a==b");

if(a

}

答案:a>b

17 / 82

6.执行下面程序的输出结果为

#includestdio.h>

#include

void main() {

int a=18,b=4,c=0;

if(a/b) {c+=a/b; c+=a%b;}

if(a%b) {a=a/b; b=a%b;}

printf("%d",a+b+c);

}

答案:a>b

自测练习二:switch开关语句 自测练习

1.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写成语句( )。

a. if

b. while

c. do

d. for

2.每个C语言程序文件的编译错误的类型有( )。2. 在switch语句中,每个保留字case后面的表达式必须是( )。

a. 函数调用

b. 变量种

c. 一般表达式

d. 常量

3.执行下面程序的输出结果为

#include

void main() {

int x=5,y=0;

switch(2*x-3) {

case 4: y+=x; break;

case 7: y+=2*x+1; break;

18 / 82

case 10: y+=3*x; break;

}

printf("y=%dn",y);

}

答案:y=11

4.执行下面程序的输出结果为

#include

void main() {

int x=9,y=0;

switch(x%3) {

case 0: y+=x;

case 1: y+=2*x+1;

case 2: y+=3*x; break;

default: y+=x-1;

}

printf("y=%dn",y);

}

答案:y=55

自测练习三:for循环语句 自测练习

1.当处理问题时的循环次数是确定的,则采用的最合适的循环方式为( )。

a. do-while

b. switch

c. while

d. for

2.若需要定义一个符号常量,并且使C语言能够进行类型检查,则应在定义语句的开始使用保留字( )。

a. case

b. continue

c. static

d. const

19 / 82

3.已知'A'~'Z'的ASCII码为65~90,当执行“int x='C'+5;”语句后x的值为( )。

a. 70

b. 73

c. 72

d. 71

4.在一条变量定义语句中可以同时定义多个变量。(√)

5.在一条变量定义语句中,当同时定义多个变量时,各变量之间只能使用逗号分开。(√)

6.在一条变量定义语句中,定义的变量和赋给它的初值之间不需要使用等号(=)。(×)

自测练习四:while循环语句 自测练习

1.每次先进行循环条件的判断,然后再执行循环体的语句为( )。

a. for和while

b. for和do

c. switch和break

d. while和do

2.若n的值为5,s的值为0,则执行“while(n>0) s+=n--;”语句后,s的值为( )。

a. 13

b. 14

c. 15

d. 12

3.当循环次数确定时,while循环语句能够转换为for循环语句。(√)

循环语句中的循环体至少被执行一次。(×)

5.执行下面程序的输出结果为

#include

void main() {

int n=10,y=0;

while(n>5) y+=n--;

printf("y=%dn",y);

}

20 / 82

答案:y=40

6.执行下面程序的输出结果为。

#include

void main() {

int i=1,p=1,s=1;

while(s<40) {i++; p=p*i; s=s+p;}

printf("s=%dn",s);

}

答案:s=153

自测练习五:do循环语句 自测练习

1.流程控制类语句包括的3类语句为( )。

a. 选择、循环、跳转

b. 选择、循环、输入

c. 选择、输入、输出

d. 循环、选择、函数

2.若i的值为0,则执行“do i++; while(i*i<10);”语句的过程中,循环体被执行的次数为( )。

a. 2

b. 3

c. 5

d. 4

-while循环语句中的循环体至少被执行一次。(√)

-while循环语句是以分号结束的语句。(√)

5.执行下面程序的输出结果为

#include

void main() {

int x=16,s=0;

do {s+=x; x-=3;} while(x>0);

printf("s=%dn",s);

}

21 / 82

答案:s=51

6.此程序的功能是从键盘上输入两个(),输出结果为它们的平方和______。

#include

void main() {

int x,y;

do scanf("%d %d",&x,&y); while(x<=0 || y<=0);

printf("%dn",x*x+y*y);

}

答案:正整数

自测练习六:跳转类语句 自测练习

1.若要结束所在函数的执行过程,返回到调用该函数所在位置,则使用的语句为( )。

a. goto

b. continue

c. return

d. break

2.要结束所在循环语句中循环体的一次执行,则在其中使用的语句为( )。

a. goto

b. return

c. break

d. continue

语句只能使用在循环语句中。(×)

语句只有保留字,没有其他成分。(×)

ue语句只有保留字,没有语句体。(√)

6.执行下面程序的输出结果为

#include

void main() {

int i,s=0;

for(i=1; i<10; i++) {

s+=i*(i+1);

22 / 82

if(s>40) break;

}

printf("s=%dn",s);

}

答案:s=70

7.执行下面程序的输出结果为

#include

void main() {

int i=0,s=0;

do {

i+=2;

if(i%3==0) continue;

s+=i*(i+1);

} while(s<60);

printf("s=%dn",s);

}

答案:s=98

第三章 综合练习

一、单项选择题

1.若x的值为15,则执行“if(x>10) x++; else x--;”语句后,x的值为(a. 16

b. 10

c. 15

d. 14

2.若x的值为-10,则执行“if(!x) x++; else x--;”语句后,x的值为(

a. 0

b. -10

c. -9

23 / 82

)。。

d. -11

3.若x的值为10,则执行“switch(x%3){case0: x++; case 1:x++; case 2: x++;}”语句后,x的值为( )。

a. 13

b. 10

c. 12

d. 11

4.若x的值为10,则执行“switch(x%3){case0: x++; break; case 1:x++; default: x++;}”语句后,x的值为( )。

a. 9

b. 10

c. 12

d. 11

5.若n的值为10,则执行“for(i=1;i

a. n-1

b. 1

c. n

d. n+1

6.若n的值为10,则执行“for(i=0;; i++) if(i>n/3) break;”语句后,i的值为( )。

a. 6

b. 3

c. 4

d. 5

7.若n的值为10,则执行“for(i=1;i

a. n

b. n+1

c. 1

d. n-1

24 / 82

8.若n的值为10,则执行“for(i=0;i

a. n*n

b. n(n+1)/2

c. (n+1)/2

d. n(n-1)/2

9.若n的值为10,则执行“while(n-->0)s+=n;”语句的过程中,循环体被执行的次数为( )。

a. 9

b. 11

c. 8

d. 10

10.若n的值为5,s的值为0,则执行“while(n-->0) s+=n;”语句后,s的值为( )。

a. 15

b. 12

c. 10

d. 14

11.在下列的语句中,必须以分号作为结束的语句是( )。

a. while

b. for

c. do

d. switch

12.若n的值为5,s的值为0,则执行“do s+=n--; while(n>0);”语句后,s的值为(

)。

a. 14

b. 12

c. 15

d. 13

25 / 82

13.要结束任一种循环语句或switch语句的执行,则在其中使用的语句为( )。

a. goto

b. break

c. continue

d. return

二、判断题

14.在if语句中,必须带有else子句,不能省略它。(×)

15.在for循环语句的头部,for后面括号内共有3个表达式位置。(√)

循环语句不能够被转换为while循环语句。(×)

循环语句中的循环体可能不会被执行。(√)

循环语句的循环体,只能是复合语句,不能是简单语句。(×)

-while循环语句中的循环体可能不会被执行。(×)

-while循环语句的循环体,只能是复合语句,不能是简单语句。(×)

-while循环语句是以循环体结尾的。(×)

语句可以使用在switch语句中。(√)

语句中可以带有返回表达式。(√)

ue只能使用在任一种循环语句的循环体中。(√)

三、程序填空题

25.#include

void main() {

int a=5,b=8,c=6,d=15,x,y;

if(a>=b) x=a; else x=b;

if(c>=d) y=c; else y=d;

if(x>=y) printf("%dn",x);

else printf("%dn",y);

}

答案:15

26.#include

void main() {

int x=5,y=8,z=12;

26 / 82

if(x>y && x>z) printf("%dn",x);

else if(y>x && y>z) printf("%dn",y);

else printf("%dn",z);

}

答案:12

27.#include

void main() {

int a=5,b=8,c;

if(3*a>2*b) c=2*a+3*b;

else if(a==b) c=a*a+b*b; else c=a*b+3;

printf("c=%dn",c);

}

答案:c=43

29.#include

void main() {

int x=5,y=0;

switch(2*x-3) {

case 4: y+=x;

case 7: y+=2*x+1;

case 10: y+=3*x;

}

printf("y=%dn",y);

}

答案:y=26

29.#include

void main() {

char ch;

int a,b,c;

scanf("%c",&ch);

27 / 82

scanf("%d %d",&a,&b);

switch(ch) {

case '+': c=a+b; break;

case '-': c=a-b; break;

case '*': c=a*b; break;

case '/': c=a/b; break;

default: printf("Error!n");

}

printf("%d%c%d=%dn",a,ch,b,c);

}

答案:3 5=15

30.#include

void main() {

int i,s=0;

for(i=16; i>0; i-=2)

if(i%3==0 || i%4==0) s+=i;

printf("s=%dn",s);

}

答案:s=46

31.#include

void main() {

int i,x,y,s=0;

scanf("%d %d",&x,&y);

if(x>y) {i=x; x=y; y=i;}

for(i=x; i<=y; i++)

if(i%2==1) s+=i*i;

printf("s=%dn",s);

}

答案:奇数

32.#include

28 / 82

const int N=100;

void main() {

int a,b;

for(a=2; a<=N; a++) {

for(b=2; b*b<=a; b++)

if(a%b==0) break;

if(b*b>a) printf("%d ",a);

}

}

答案:素数(质数)

33.#include

void main() {

int i=0, s=0;

while(s<50) {i+=2; s+=i*i;}

printf("s=%dn",s);

}

答案:s=56

34.#include

void main() {

int x,p=2;

scanf("%d",&x);

while(x>=p)

if(x%p==0) {printf("%d=%d*%dn",x,p,x/p); break;}

else p++;

}

答案:35=5 7

35.#include

void main() {

int x,y,a,p=1;

scanf("%d %d",&x,&y);

29 / 82

if(x

if(x%y==0) {printf("%dn", y); return;}

a=2;

while(y>=a)

if(x%a==0 && y%a==0) {x=x/a; y=y/a; p*=a;}

else a++;

printf("%dn",p);

}

答案:公约数

36.#include

void main() {

int x=36,y=48,z;

do {z=x%y; x=y; y=z;} while(y>0);

printf("x=%dn",x);

}

答案:x=12

37.#include

void main() {

int x,i=0,s=0;

scanf("%d",&x);

do {i+=2; s+=i*i;}while(s

printf("n=%dn",i-2);

}

答案:最大

38.#include

void main() {

int x=37,k=2;

do {if(x%k==0) break; k++;} while(k*k<=x);

if(k*k>x) printf("Yes!n");

else printf("No!n");

30 / 82

}

答案:Yes!

第四章 数组的概念

自测练习一:数组的概念 自测练习

1.在一个数组中,数组元素a[i]前面的元素个数为( )。

a. 2*i

b. i+1

c. i

d. i-1

2.假定一维数组的定义为“char a[8];”,则该数组所占用的存储空间的字节数为( )。

a. 8

b. 32

c. 64

d. 16

3.对于一维数组元素,数组名后使用一对中括号。(√)

4.二维数组元素带有一个下标。(×)

自测练习二:一维数组的定义和使用 自测练习

1.假定有一个定义语句为“int a[10]={3,4,2,8,6};”,则元素a[3]的值为( )。

a. 6

b. 8

c. 4

d. 2

2.在下面字符数组的定义语句中,有语法错误的是( )。

a. char a[]="x+y=55.";

b. char a[15]={'1','2'};

c. char a[10]='5';

d. char a[20]="abcdefg";

31 / 82

3.在一维数组的定义语句中,可以给数组中每个元素赋初值。(√)

4.假定一维数组的定义为“double a[M];”,则每个数组元素的下标取值范围在1~M之间。(×)

自测练习三:二维数组的定义和使用 自测练习

1.假定有一个定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为( )。

a. 8

b. 6

c. 4

d. 0

2.假定二维数组的定义语句为“int* a[3][5];”,则该数组所占用的存储空间的字节数为( )。

a. 120

b. 60

c. 30

d. 15

3.在二维数组的定义语句中,数组名后带有两对中括号。(√)

4.假定二维数组的定义语句为“double a[M][N];”,则每个数组元素的列下标取值范围在0~N-1之间。(√)

自测练习四:使用typedef语句定义数组类型 自测练习

1.使用“typedef int Integer;”语句把标识符Integer定义为一个( )。

a. 整数变量

b. 整数类型

c. 数组类型

d. 数组变量

2使用“typedef int ABC[10];”语句把标识符ABC定义为( )。

a. 符号常量

b. 字符数组

c. 整型数组类型

d. 简单变量

32 / 82

3.执行“typedef int intType;”语句后,在使用int定义整型变量的地方都可以使用整数类型标识符intType来定义整型变量。(√)

4.使用“typedef char BB[10][50];”语句定义标识符BB为含有10行50列共500个元素的二维字符数组。(×)

自测练习五:数组的应用 自测练习

1.执行下面程序的输出结果为

#include

void main() {

int a[8]={3,8,6,5,9,2,8,5};

int i,s=0;

for(i=0;i<8;i++) s+=a[i];

printf("s=%dn",s);

}

答案:s=46

2.执行下面程序的输出结果为

#include

void main() {

int a[8]={12,15,20,8,25,30,28,36};

int i,c[3]={0};

for(i=0; i<8; i++) {

if(a[i]%2==0) c[0]++;

if(a[i]%3==0) c[1]++;

if(a[i]%4==0) c[2]++;

}

printf("%d %d %dn",c[0],c[1],c[2]);

}

答案:6 4 5

3.执行下面程序的输出结果为

#include

void main() {

33 / 82

int a[3][3]={{13,18,16},{15,19,12},{8,15,22}};

int i,j,x=a[0][0];

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

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

if(a[i][j]

printf("x=%dn",x);

}

答案:x=8

4.执行下面程序的输出结果为

#include

void main() {

int a[3][3]={{12,18,10},{8,6,14},{5,10,19}};

int i,j,s[3]={0};

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

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

s[a[i][j]%3]+=a[i][j];

for(i=0; i<3; i++) printf("%d ",s[i]);

}

答案:36 39 27

自测练习六:字符串的定义与应用 自测练习

1.利用一维字符数组存储一个字符串时,在其末尾自动存储的一个字符是( )。

a. 'n'

b. '0'

c. 空格

d. 回车

2.一个二维字符数组a[M][N]能够存储的字符串个数至多为( )。

a. M

b. N-1

c. M-1

d. N

34 / 82

3.若需要把一个字符串赋给字符数组,则选用的函数是( )。

a. strlen

b. strcat

c. strcpy

d. strcmp

4.在C语言中,在定义一个字符数组时,不能利用一个字符串进行初始化。(×)

5.对于一个长度为n的字符串,存储它的字符数组的长度至少为n。(×)

6.有一个语句为“char s2[4]="abcd";”,s2数组长度是合适的。(×)

7.执行下面程序的输出结果为

#include<

#include

void main() {

int c1,c2;

char a[20]="String1234n";

char b[10]="str";

c1=strlen(a);

strcat(b, "2450");

int c2=strlen(b);

printf("%d %dn",c1,c2);

}

答案:11 6

8.执行下面程序后,假定从键盘上输入的两个字符串数据为123和456,则输出结果为

#include

#include

void main() {

char a[20],b[20];

scanf("%s %s",a,b);

if(strcmp(a,b)>=0) printf("%s %sn",a,b);

else printf("%s %sn",b,a);

35 / 82

}

答案:456 123

第四章 综合练习

一、单项选择题

1.假定有一个元素类型为int的数组a[10],它所占用的存储空间的字节数为( )。

a. 20

b. 80

c. 10

d. 40

2.假定一维数组的定义为“char* a[8];”,则该数组所占用的存储空间的字节数为( )。

a. 16

b. 8

c. 32

d. 64

3.假定有一个定义语句为“int a[10]={3,4,2,8,6};”,则元素a[5]的值为( )。

a. 6

b. 2

c. 0

d. 8

4.在下面的一维数组定义语句中,有语法错误的是( )。

a. int a[];

b. int a[5];

c. int a[10]={0};

d. int a[]={1,2,3};

5.假定二维数组的定义语句为“int a[3][5];”,则该数组所含元素的个数为( )。

a. 12

36 / 82

b. 8

c. 10

d. 15

6.假定有一个定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为( )。

a. 4

b. 6

c. 8

d. 2

7.对于一个长度为n的字符串,保存它至少需要占用的存储字节数为( )。

a. n+2

b. n+1

c. n

d. n-1

8.对于一个二维字符数组a[M][N],存储每个字符串的长度至多为( )。

a. M

b. N

c. M-1

d. N-1

9.若需要比较两个字符串的大小,则选用的函数是( )。

a. strcmp

b. strlen

c. strcat

d. strcpy

二、判断题

10.一维数组元素带有两个下标。(×)

11.对于二维数组元素,数组名后使用两对中括号。(√)

12.在一维数组的定义语句中,给数组赋初值的部分是用一对花括号括起来的数据表。(√)

37 / 82

13.在一维数组的定义语句中,数组名前为元素类型关键字。(√)

14.在二维数组的定义语句中,数组名后带有两对圆括号。(×)

15.假定二维数组的定义语句为“double a[M][N];”,则每个数组元素的列下标取值范围在1~N之间。(×)

16.使用“typedef char BB[10];”语句定义标识符BB为含有10个元素的一维字符数组。(×)

17.使用“typedef char BB[10][50];”语句定义标识符BB为含有10行50列共500个元素的二维字符数组类型。(√)

18.一个二维字符数组a[10][20]中存储每个字符串的最大长度为19。(√)

三、程序填空题

19.#include

void main() {

int a[8]={10,8,6,15,9,21,8,16};

int i,x=a[0];

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

if(a[i]>x) x=a[i];

printf("x=%dn",x);

}

答案:x=21

20.#include

void main() {

int a[8]={12,15,20,8,5,9,16,10};

int i,s[3]={0};

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

s[a[i]%3]+=a[i];

printf("%d %d %dn",s[0],s[1],s[2]);

}

答案:36 26 33

21.#include

void main() {

38 / 82

int a[3][3]={{3,8,6},{5,9,2},{8,5,12}};

int i,j,b[3]={0};

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

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

b[j]+=a[i][j];

for(j=0; j<3; j++) printf("%d ",b[j]);

}

答案:16 22 20

22.#include

void main() {

int a[3][4]={{60,75,83,52},{76,94,88,35},{80,74,46,90}};

int i,j,x=a[0][0],y=-1;

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

for(j=0; j<4; j++)

if(a[i][j]>x) {y=x; x=a[i][j];}

else if(a[i][j]>y) y=a[i][j];

printf("%d %dn",x,y);

}

答案:94 90

23.#include

#include

void main() {

char a[10],b[10],c[10];

int c1,c2,c3;

scanf("%s %s %s",a,b,c);

c1=strlen(a); c2=strlen(b); c3=strlen(c);

if(c1>c2 && c1>c3) printf("%s ",a);

else if(c2>c1 && c2>c3) printf("%s ",b);

else printf("%s ",c);

}

39 / 82

答案:xucong

24.#include

void main() {

char a[]="abcdbfbgacd";

int i=0,i1=0,i2=0,i3=0;

for(i=0; a[i]!='0'; i++) {

switch(a[i]) {

case 'a': i1++; break;

case 'b': i2++; break;

case 'c': i3++; break;

}

}

printf("%d %d %d %dn",i1,i2,i3,i);

}

答案:2 11

25.#include

void main() {

char a[]="356";

int i,c[7]={0};

for(i=0; a[i]!='0'; i++)

c[a[i]-48]++; //48为数字字符0的ASCII码

for(i=1; i<7; i++) printf("%d ",c[i]);

}

答案:4

第五章 指针的概念

自测练习一:指针的概念 自测练习

1.一个指针类型的简单变量占用内存中的字节数为( )。

a. 16

40 / 82

b. 4

c. 2

d. 8

2.在定义指针变量的语句中,在指针变量名的前面标记的字符为( )。

a. $

b. *

c. #

d. &

3.一个指针指向一个数据对象时,指针值是这个对象的首字节地址。(√)

4.假定一个数据对象为x,则x的地址表示为*x。(×)

自测练习二:指针变量的定义和使用 自测练习

1.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大( )。

a. 4个字节

b. 8个字节

c. 1个字节

d. 2个字节

2.假定变量m定义为“int m=7;”,则下面定义语句格式正确的是( )。

a. int p=&m;

b. int *p=m;

c. int &p=*m;

d. int *p=&m;

3.假定一个数据对象为int*类型,则指向该对象的指针类型为( )。

a. int**

b. int***

c. int*

d. int

4. 在定义指针变量的语句中,最前面的类型关键字仍然允许是指针类型。(√)

5.在定义指针变量的语句“int *p,**pp;”中,p和pp具有相同的指针类型。(×)

41 / 82

自测练习三:指针运算 自测练习

1.假定p是一个指向数据对象的指针,则通过p表示该数据对象为( )。

a. *p

b. p&

c. p*

d. &p

2.若p指向x,则与x的等价表示为( )。

a. *x

b. *p

c. p

d. &x

3.假定p所指对象的值为25,p+1所指对象的值为42,则表达式*++p的值为42。(√)

4.假定p所指对象的值为25,p-1所指对象的值为42,则执行*p--运算后,p所指对象的值为42。(×)

自测练习四:指针与数组的关系 自测练习

1.假定a为一个数组名,则下面表达式中错误的是( )。

a. *(a+1)

b. *a

c. *a++

d. a[i]

2.已知“int a[10], x, *pa=a;”,若要把数组a[3]元素的值赋给x,则不正确的语句为( )。

a. x=pa[3];

b. x=a[3];

c. x=*pa+3;

d. x=*(a+3);

3.已知“char a[3][5];”,则元素a[2][3]的地址比该数组的首地址大( )。

a. 52个字节

42 / 82

b. 26个字节

c. 13个字节

d. 48个字节

4.一个二维数组元素为a[i][j],它的指针访问方式不正确的是( )。

a. (*(a+i))[j]

b. *(a[i]+j)

c. *a[i]+j

d. *(*(a+i)+j)

5.在一个函数定义中,函数体的格式是一条复合语句。1. 假定a是一个一维数组,则表达式*(a+i)所对应的元素为a[i]。(√)

6.在一个函数定义中,函数体的格式是一条复合语句。1. 假定a是一个一维数组,则表达式*(a+i)所对应的元素为a[i]。(√)

7.假定a是一个一维数组,则进行a++运算是允许的。(×)

8.已知“int a[3][5]; int(*p)[5]=a;”,则进行p++运算是允许的。(√)

自测练习五:变量存储空间的动态分配 自测练习

1.对于每个进行动态存储分配的函数,其返回值类型为( )。

a. void*

b. char

c. char*

d. void

2.已知“int *p=calloc(24,sizeof(int));”,则p所指向的动态内存空间中,能够存储整型元素的个数为( )。

a. 12

b. 58

c. 24

d. 6

3.在程序文件中要进行动态存储分配和释放,则需要引入的系统头文件是stdio.h。(×)

4.进行动态存储分配的malloc()函数带有一个参数。(√)

43 / 82

自测练习六:使用指针和动态存储分配的程序举例 自测练习

1.执行下面程序的输出结果为

#include

#include

void main() {

int *p=malloc(sizeof(int));

*p=20;

*p+=30;

printf("%dn",*p);

}

答案:50

2.执行下面程序的输出结果为

#include

#include

void main() {

int *p=calloc(6,sizeof(int));

int *t;

*p=1;

for(t=p+1; t

printf("%dn",*(p+5));

}

答案:16

第五章 综合练习

一、单项选择题

1.一个指针指向一个数据对象,它保存着该数据对象的地址,若数据对象为DataType类型,则该指针的类型为( )。

a. DataType&

b. DataType*

44 / 82

c. DataType**

d. DataType

是一个符号常量,通常作为空指针值,它的取值为( )。

a. -1

b. 0

c. 1

d. 'n'

3.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为( )。

a. (int)*p

b. (char*)p

c. int*)p

d. (char*)p

4.若要定义整型指针p并初始指向x,则所使用的定义语句为( )。

a. int *p=&x;

b. int p=&x

c. int *p=x;

d. int *p=&x;

5.假定p所指对象的值为25,p+1所指对象的值为42,则表达式*p++的值为( )。

a. 43

b. 26

c. 25

d. 42

6.假定p是一个指针变量,则该变量的地址表示为( )。

a. &&p

b. &p

c. **p

d. *p

7.已知“char*s="Hello world!";”,要使变量p指向s所指向的同一个字符串,则p应定义为( )。

a. char *p(s);

45 / 82

b. char *p=&s;

c. char *p;p=*s;

d. char *p=s;

8.假定a为一个数组名,则下面表达式中错误的是( )。

a. (*a)++

b. *a++

c. a+i

d. *a+i

9.已知“char b[10]=”12345”, *p=b;”,则*(p+2)的值为( )。

a. '4'

b. '3'

c. '2'

d. '5'

10.已知“int a[6][5];”,则元素a[2][4]的地址比该数组的首地址大( )。

a. 56个字节

b. 14个字节

c. 28个字节

d. 96个字节

11.要使p指向二维整型数组a[10][20],p应定义为( )。

a. int(*p)[20]=a;

b. int *p=a;

c. int **p=a;

d. int *p[20]=a;

12.执行“int *p=malloc(sizeof(double)*2);”语句后得到的动态存储空间的字节数为( )。

a. 16

b. 4

c. 8

d. 32

46 / 82

13.利用动态存储分配创建具有10个字节的一维数组空间的正确语句是( )。

a. char *p=calloc(5,4);

b. char *p=malloc(10);

c. char *p=malloc(10,1);

d. char *p=calloc(10);

二、判断题

14.在定义指针变量的语句中,对指针变量不允许赋初值。(×)

15.在定义指针变量的语句“int *p,pp;”中,p和pp具有相同的数据类型。(×)

16.在语句“typedef int* inPointer;”中,把标识符inPointer定义为int*类型。(√)

17.假定a是一个一维数组,则a+i的值与&a[i]的值相等。(√)

18.已知“int a[10], *p=a;”,则进行*p++运算是不允许的。(×)

19.假定a是一个二维数组,则表达式*(a[j]+i)所对应的元素为a[i][j]。(×)

20.假定a是一个二维数组,则数组名a的值和a[0]的值相等。(√)

21.进行动态存储分配的calloc()函数带有一个参数。(×)

22.用于释放动态存储空间的函数为free,调研它需要带有一个参数。(√)

23.假定a是一个指针数组,则a+i所指对象的地址比a地址大4*i个字节。(√)

三、程序填空题

24.执行下面程序的输出结果为

答案:80

25.#include

void main() {

int a[8];

int s1=0,s2=0,*p;

printf("请输入8个整数:");

for(p=a; p

for(p=a; p

if(*p%2) s1+=*p;

else s2+=*p;

}

printf("%d %dn",s1,s2);

47 / 82

}

答案:偶数

26.#include

void main() {

char a[5][10]={"12345","asde45","wer45t","zxc12","89uy78"};

char *p;

int i,c=0,k=0;

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

p=&a[i][0];

while(*p!='0') {

if(*p>='0' && *p<='9') k++;

c++; p++;

}

}

printf("%d %dn",k,c);

}

答案:15 28

27.#include

#include

void main() {

int i,n,*a;

do scanf("%d",&n); while(n<2);

a=calloc(n,sizeof(int));

for(i=0; i

if(i%2) a[i]=2*n+i; else a[i]=2*n-i;

for(i=0; i

}

答案:13 6

28.#include

#include

48 / 82

void main() {

int i=0,j,n=10,*a;

a=calloc(10,sizeof(int));

while(i

a[i]=rand()%30+10; //每次得到一个随机整数

for(j=0; j

if(a[i]==a[j]) break;

if(i==j) i++;

}

for(i=0; i

}

答案:相同(相等)

第六章 函数的定义

自测练习一:函数的定义 自测练习

1.下面正确的函数原型语句是( )

a. void int(double a);

b. int Function(void a);

c. void Function (int);

d. int Function(a);

2.函数调用func(2+x,4*y,5)中所含实参的个数为( )。

a. 3

b. 4

c. 5

d. 2

3.在程序的一个文件中定义的函数,若要在另一个文件中调用,则必须在这另一个文件中给出该函数的( )。

a. 参数表

49 / 82


本文标签: 语句 使用 程序