答案:BCD
5. 以下正确的说法有( )。
C语言程序的基本组成单位是函数
函数必须要有返回值
一个函数的类型为void,在定义时,可以省略void 函数声明是一条C语句 return语句只能返回一个值 答案:ADE
6. 以下叙述中正确的有( )。
调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
函数的实参可以是常量、变量和表达式 形式参数只是局限于所在函数
函数定义时的函数首部不是语句,后面不能跟分号 函数名的存储类别为外部 答案:ABCDE
7. 以下对C语言函数的有关描述中,正确的有( )。
调用函数时,实参与形参应该数量相同,类型一致
函数可以嵌套定义
函数必须有返回值,否则不能正确使用
程序中有调用关系的所有函数必须放在同一个源程序文件中 C程序由一个或一个以上的函数组成 答案:AE
8. 以下对C语言函数的有关描述中,正确的有( )。
在C程序中,函数调用不能出现在表达式语句中
在C语言中,一个函数一般由两个部分组成,它们是函数说明和函数体 函数的实参和形参可以是相同的名字
在main()中定义的变量都可以在其它被调函数中直接使用 外部类型的变量只能定义一次,但可在不同地方声明多次 答案:BCE
9. 一个数据类型为void的函数在被调用后,下列错误的描述有( )。
A、 函数没有返回值 B、 函数可以返回一个系统默认值 C、 函数返回值由用户临时决定 D、 函数可以返回一个不确定的值 答案:BCD
10.下列函数中,能够输出字符数据的函数有( )。
A、 puts( ) B、 printf( ) C、 scanf( ) D、 putchar( ) E、 put( ) 答案:ABD
第9章 编译预处理
一、 选择题
1、若有宏定义“#define PI =3.14159 ”,且在程序中有语句 s +PI; 其中宏名PI代替的是:( A、PI的值 B、3.14159 C、=3.14159 D、宏定义错误,编译通不过 答案:C
2、设有以下宏定义:#define N 3
) #define Y(n) ((N+1)*n) 执行语句z=2*(N+Y(5+1));后,z的值为:( ) A、出错 B、42 C、48 D、54 答案:C
3、以下说法正确的是:( )
A、#define和printf都是C语句
B、#define 是C语句,而printf不是 C、printf是C语句,但#define不是 D、#define 和printf都不是C语句 答案:C
4、编译预处理命令以___________结尾。
A、 ; B、 . C、 \\ D、回车 答案:D
5、用C语言编写的程序是一种_________能运行的程序。 A、只需要经过编译就 B、只需要经过连接就 C、需要经过编译和连接才 D、不需要作任何处理就 答案:D
6、以下叙述中正确的是( )。
A、 用#include包含的头文件的后缀不可以是“.a”
B、 若一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译
C、 宏命令行可以看做是一行C语句 D、 C编译中的预处理是在编译之前进行的 答案:D
7、下面是对宏定义的描述,不正确的是( )。
A、 宏不存在类型问题,宏名无类型,它的参数也无类型 B、 宏替换不占用运行时间
C、 宏替换时先求出实参表达式的值,然后代入形参运算求值 D、 其实,宏替换只不过是字符替代而已
答案:C
8、以下正确的描述为( )。
A、 每个C 语言程序必须在开头使用预处理命令#include
C、 在C语言中预处理命令都以“#”开头
D、 C语言的预处理命令只能实现宏定义和条件编译的功能 答案:C
9、下列选项中不会引起二义性的宏定义是( )。 A、 #define POWER(x) x*x B、 #define POWER(x) (x)*(x) C、 #define POWER(x) (x*x) D、 #define POWER(x) ((x)*(x)) 答案:D
10、以下程序的输出结果是( )。 #define f(x) x*x #include
int a=6,b=2,c;
c=f(a)/f(b); printf(“%d\\n”,c);
}
A、 9 B、 6 C、 36 D、18
答案:C
11、以下程序运行后,输出结果是( )。 #define PT 5.5 #defme S(x) PT*x*x #include
int a=1,b=2;
printf(“%4.1f\\n”,S(a+b));
}
A、 49.5 B、 9.5 C、22.0 D、45.0
答案:B
12、下列程序执行后的输出结果是( )。 #define MA(x) x*(x-1) #include
int a=1,b=2;
printf(“%d\\n”,MA(1+a+b)); }
A、 6 B、 8 C、 10 D、12 答案:B
13、以下程序的输出结果为( )。 #include
int a,k=3;
a=++SQR(k+1);
printf(“%d\\n”,a); }
A、6 B、l0 C、 8 D、 9 答案:D
14、对下面程序段,正确的判断是( )。 #define A 3
#define B(a) ((A+1)*a)
...
x=3*(A+B(7));
A、 程序错误,不许嵌套宏定义 B、 x=93
C、 x=21 D、 程序错误,宏定义不许有参数. 答案:B
15、以下程序的输出结果为( )。
#include
#define PRINT(a) PR(a);putchar(?\\n?) main()
{
int x=2;
PRINT(F(3)*x);
}
A、 8 B、 9 C、 10 D、 11 答案:B
二、判断题
1、 ( F )预处理命令行必须以#开头,且最后要用分号结尾。 2、 ( T )宏命令的处理占用编译时间,而不占用运行时间。 三、多选题
1、 下面是对宏定义的描述,正确的有( )。
A、 宏不存在类型问题,宏名无类型,它的参数也无类型 B、 宏替换不占用运行时间
C、 宏替换时先求出实参表达式的值,然后代入形参运算求值 D、 预处理命令行必须以#开头,且最后要用分号结尾 E、 宏命令的处理占用编译时间,而不占用运行时间 答案:ABE
2、 以下叙述中不正确的是( )。
A、 用#include包含的头文件的后缀不可以是“.a” B、 宏不存在类型问题,宏名无类型,它的参数也无类型 C、 宏命令行可以看做是一行C语句
D、 C编译中的预处理是在编译之前进行的 E、 在C语言中预处理命令都以“#”开头 答案:AC
第10章 指 针
一、 选择题
1、 有以下程序
void fun(char *a, char *b) { a=b; (*a)++; } main()
{ char c1='A',c2='a',*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2); printf(\}
程序运行后的输出结果是:( ) A)Ab B)aa C)Aa D)Bb 答案:A
2、 下列选项中正确的语句组是:( )
A)char s[8]; s={\)char *s; s={\C)char s[8]; s=\)char *s; s=\答案:D
3、 已定义以下函数 fun(int *p) { return *p; }
该函数的返回值是:( )
A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D)形参p的地址值 答案:C
4、 若有定义:int *p[3];,则以下叙述中正确的是:( )
A)定义了一个类型为int的指针变量p,该变量具有三个指针
B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为*p的整型数组,该数组含有三个int类型元素
D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 答案:B
5、 已定义以下函数 fun(char *p2, char *p1)
{ while((*p2=*p1)!='\\0'){ p1++;p2++; } } 函数的功能是:( )
A)将p1所指字符串复制到p2所指内存空间 B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较
D)检查p1和p2两个指针所指字符串中是否有'\\0' 答案:A
6、 有以下程序:
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0;
while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;} printf(\}
执行后输出的结果是:( ) A) 58 B) 56 C) 45 D) 24 答案:D
7、 若有如下定义char a[10],*p=a,则对a数组中元素的不正确的引用是:( )
A)*&a[5] B)a+2 C)*(p+5) D)*(a+5) 答案:B
8、 有以下程序
int *f(int *x,int *y) { if(*x<*y)
return x; else