C语言程序设计教程第四章练习题解析 下载本文

单选题

1、关于C语言中的函数,下列描述正确的是( ) A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的嵌套均不可以嵌套 D.函数的定义和函数的调用均不可以嵌套 答案:B

解析:函数的定义不可以嵌套,但函数的调用可以嵌套

2、定义一个函数:exce((v1, v2), (v3,v4,v5),v6); 在该函数调用时,实参的个数为( )个 A.3 B.4 C.5 D.6 答案:A

解析:(v1, v2), (v3,v4,v5)和v6一共三个实参

3、关于C语言中print()函数与scanf()函数,下列描述中正确的是( ) A.printf()函数可以向任何地方输出数据 B.printf()只向控制台输出数据 C.scanf()只能输入英文字母和数字 D.scanf()函数可以识别输入的空格 答案:B

解析:printf()是向控制台输出的函数

4、在C语言中,内部函数需要添加的关键字是( ) A.extern B.static C.this D.auto 答案:B

解析:在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态

函数)。

5、当调用时,会调用内部函数 A.当调用时,会调用内部函数 B.当调用时,会调用外部函数

C.当调用时,会调用两次,先调用内部函数再调用外部函数 D.都不调用,会报错 答案:A

解析:当内部函数与外部函数重名时,会优先调用内部函数 6、在C语言中,声明外部函数需要添加的关键字是( ) A.extern B.static C.this D.auto

答案:A

解析:声明外部函数的方式是在函数的返回值类型前面添加extern关键字 7、关于C语言中的局部变量,下列描述中错误的是( ) A.局部变量就是在函数内部声明的变量 B.局部变量只在函数内部有效

C.局部变量只有当它所在的函数被调用时才会被使用 D.局部变量一旦被调用,其生存周期持续到程序结束 答案:D

解析:当函数调用结束时局部变量就会失去作用

8、关于C语言中的全局变量,下列描述中正确的是( ) A.全局变量的作用域一定比局部变量的作用域范围大 B.静态类别变量的生存周期贯穿于整个程序的运行期间 C.函数的形参都属于全局变量

D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值 答案:B

解析:选项1不对:如果程序中只有一个主函数,则在整个程序运行中,局部变量都在起

作用;

选项3不对:除了C++的引用类型参数,所有函数的形参都是局部变量; 选项4不对:static变量定义时就存储地全局区,初始化为0; 9、当全局变量与局部变量重名时,那么在调用时( ) A.局部变量会被屏蔽 B.全局变量会被屏蔽

C.都不会调用,系统会报错

D.会调用两次,先调用局部变量,再调用全局变量 答案:B

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

C.当全局变量与局部变量重名时,局部变量会屏蔽掉全局变量 D.全局变量会覆盖掉所有与它重名的局部变量 答案:D

解析:当全局变量与局部变量重名时,全局变量会被屏蔽掉

11、在C语言中,如果在一个函数的复合语句中定义了一个变量,则该变量( ) A.只在该复合语句中有效,在该复合语句外无效 B.在该函数中任何位置都有效 C.在本程序的原文件范围内均有效

D.此定义方法错误,其变量为非法变量 答案:D

解析:1、2与3错:函数复合语句中定义的变量在该复合语句中引用;但如果函数含有该

变量,则在函数中可以引用该变量

4对:在C++中在复合语句中定义变量为合法,但在C语言中是非法的 12、C语言程序的基本单位是( )。 A.程序行

B.语句 C.函数 D.字符 答案:C

解析:函数是C语言程序的基本单位

13、C语言中决定函数返回值的类型的是( )。 A.return语句中的表达式类型 B.调用函数的主调函数类型 C.调用函数时临时

D.定义函数时所指定的函数类型 答案:D

解析:函数的返回值取决于定义函数时指定的返回值类型

14、若有函数调用语句:fun(a+b, (x,y), fun(n+k,d,(a,b))); 在此函数调用语句中实参的个数是( )。 A.3 B.4 C.5 D.6 答案:A

解析:a+b返回一个值,(x,y)返回一个值,fun(n+k,d,(a,b))返回一个值。

15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是( )。 A.input x,y,z;

B.scanf(\C.scanf(\D.read(\答案:B

解析:读取键盘输入的数据要用scanf()函数,scanf()中的参数要传入变量的地址 16、若变量已正确说明为float类型,要通过语句 scanf(\给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是( )。 A.10 22 33

B.10.0,22.0,33.0 C.10.0 22.0 33.0 D.10; 22; 33 答案:B

解析:用scanf()读取从键盘输入的数据时,中间不能加逗号,要用空格隔开 17、若有定义:int x,y; char a,b,c; 并有以下输入数据(此处\%u代表空格):1\%u2\%uA\%uB\%uC,那么能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是( )。

A.scanf(\B.scanf(\C.scanf(\

D.scanf(\答案:D

解析:空格也会作为一个字符赋给字符变量。

18、对嵌套子程序调用说法正确的是( )。 A.外层子程序可以调用所有的内层子程序

B.内层子程序只可以调用包含本身的外层子程序,不可以隔层调用 C.外分程序必须能完全套住内分程序 D.以上说法均不正确 答案:C

19、C语言中函数能否嵌套调用和递归调用?( ) A.二者均不可

B.前者可,后者不可 C.前者不可,后者可 D.二者均可 答案:D

解析:两者调用都可以

20、C语言规定,程序中各函数之间( )。 A.既允许直接递归调用也允许间接递归调用 B.不允许直接递归调用也不允许间接递归调用 C.允许直接递归调用不允许间接递归调用 D.不允许直接递归调用允许间接递归调用 答案:A

解析:各程序间既可以直接调用也可以间接调用。 21、有如下程序: long fib(int n) { if (n>2) return fib(n-1)+fib(n-2); else return 2; }

void main() { printf(\}

该程序的输出结果是( )。 A.2 B.4 C.6 D.8 答案:B

解析:向fib()函数传入3时,返回fib(1)+fib(2)的值;向fib()函数传入1和2时,都返回2,

所以fib(3)返回2+2=4。

22、以下程序的输出结果是( )。 long fun(int n) { long s;