[G]福建省C语言二级考试(选择+填空+程序填空+输出结果) 下载本文

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

51400以下程序的运行结果是( C )。 fun3(int x)

{ static int a=3; a+=x; return a; } main()

{ int k=2,m=1,n; n=fun3(k); n=fun3(m);

printf(\ } A. 3 B. 4 C.6 D.9

51401以下程序运行后输出结果是( D )。 #define F(m,n) m*n main( )

{ int x=5,y=3,a1,a2; a1=F(x+y,x-y); a2=F(x-y,x+y);

printf(\ } A. 16,16 B. 16,-16 C.-7,17 D.17,-7

51402以下叙述正确的是( C )。

A. 编译预处理命令行必须以分号结束 B. 程序中使用带参数的宏时,参数类型要与宏定义时一致

C.宏展开不占用运行时间,只占用编译时间 D.宏名只能包含大写字母和数字字符 51403以下叙述正确的是( B )。

A. 一个源程序只能有一个编译预处理命令行 B. 编译预处理命令行都必须以\开头 C.\定义了与30等价的符号常量PRICE D.使用带参数的宏定义时,应该说明每个参数的数据类型

51404以下叙述错误的是( D )。

A. 编译预处理命令行都必须以#号开始 B. 宏名可以用小写字母表示

C. 使用预处理命令\<文件名>\时,编译系统只在指定的系统目录下查找该文件 D. 宏定义只能放在main()函数之前

51405若有定义:#define N 3+2,则表达式N*2的值为( B )。 A. 5 B. 7 C.10 D.0

51406以下程序运行后输出结果是( C )。 #define MIN(m,n) m

29

main()

{ int a=3,b=5,c; c=2*MIN(a,b); printf(\ } A. 3 B. 5 C.6 D.10

51407下列#include命令中,正确的是( A )。 A. #include \ B. #include [math.h] C.#include (math.h) D.#include {math.h} 51408下面程序的输出结果是( C )。 #include #define MON 1

#define TUE 2*MON #define WED 3*TUE void main()

{printf(\ } A. 2 B. 3 C.4 D.5

51409下面错误的叙述是( A )。

A. 预处理命令行必须位于C源程序的起始位置 B. 在C语言中,预处理命令行都以\开头

C.C程序在开头可以不包含预处理命令行:#include D.C语言的预处理可以实现宏定义和条件编译的功能

51410以下程序的运行结果是( B )。 #define MUL(r) r*r main()

{int a=2,b=3,c; c=MUL(a+b)*2; printf(\ } A. 10 B. 14 C.36 D.50

51411下面程序的运行结果是( C )。 #define N 10

#define K(x) x*x #define T(x) (x*x) main( )

{int a,b; a=9%K(N); b=9%T(N); printf(\ } A. 9,9 B. 9,90 C.90,9 D.90,90

51412以下在任何情况下计算平方数时都不会引起二义性的宏定义是( D )。 A. #define XPF(x) x*x B. #define XPF(x) (x)*(x)

30

C.#define XPF(x) (x*x) D.#define XPF(x) ((x)*(x)) 51413以下程序的运行结果是( C )。 #define X a+b main( )

{ int a=3,b=4,s1; s1=2*X;

printf(\ } A. 14 B. 6 C.10 D.8

51414下面叙述错误的是( C )。

A. “#define PRICE 30”命令的作用是定义一个与30等价的符号常量PRICE B. 预处理命令行都必须以“#”开头

C.预处理命令行必须以分号结束 D.C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率

51415下面叙述正确的是( A )。

A. 宏展开不占用运行时间,只占用编译时间 B. 预处理命令也是C语句,必须以分号结束

C.一个源程序只能有一个预编译处理命令行 D.宏名必须用大写字母表示

51416下面叙述错误的是( D )。

A. “#inclue ”命令的作用是在预处理时将stdio.h文件中的实际内容代替该命令 B. “#define PRICE 30”命令的作用是定义一个与30等价的符号常量PRICE C.C源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 D.宏定义也是C语句,必须在行末加分号

51417若有定义:#define PI 3,则表达式PI*2*2的值为( A )。 A. 12 B. 4

C.322 D.不确定

51418若有定义:#define F 2+3,则表达式F*F的值为( C )。 A. 25 B. 13 C.11 D.17

51500下程序的运行结果是( A )。 void ast (int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; } main()

{ int a=4,b=3,c,d; ast(a,b,&c,&d);

printf(\ } A. 7,1 B. 1,7

C.7,-1 D.c、d未赋值,编译出错

31

51501有以下语句: int a[5]={0,1,2,3,4},i; int *p=a; 设0≤i<5,对a数组元素不正确的引用是( C )。 A. *(&a[i]) B. a[p-a] C.*(*(a+i)) D.p[i]

51502若有定义int *p1,*p2; 则错误的表达式是( A )。 A. p1+p2 B. p1-p2 C.p1

51503以下叙述错误的是( D )。

A. 存放地址的变量称为指针变量 B. NULL可以赋值给任何类型的指针变量

C.一个指针变量只能指向类型相同的变量 D.两个相同类型的指针变量可以作加减运算

51504以下程序段运行后,表达式*(p+4)的值为( B )。 char a[]=\ char *p; p=a;

A. 'n' B. 'a'

C.存放'n'的地址 D.存放'a'的地址

51505以下程序段运行后,表达式*(p++)的值为( A )。 char a[5]=\ char *p=a;

A. 'w' B. 存放'w'的地址 C.'o' D.存放'o'的地址

51506若有定义: int *p,k=4; p=&k; 以下均代表地址的是( C )。 A. k, p B. &k, &p C.&k, p D.k, *p

51507若有定义:double *q,p;则能给输入项读入数据的正确程序段是( B )。 A. q=&p;scanf(\ B. q=&p;scanf(\C.*q=&p;scanf(\ D.*q=&p;scanf(\

51508若已定义: int q=5; 对① int *p=&q;和② p=&q; 这两条语句理解错误的是( C )。 A. ①是对p定义时初始化,使p指向q;而②是将q的地址赋给p B. ①和②中的&q含义相同,都表示给指针变量赋值

C.①是对p定义时初始化,使p指向q;而②是将q的值赋给p所指向的变量 D.①和②的执行结果都是把q的地址赋给p

51509下面语句错误的是( A )。

A. int *p; *p=20; B. char *s=\C.char *str=\ D.char *str;str=\

51510若有定义int a[2][3],*p=a;,则能表示数组元素a[1][2]地址的是( D )。 A. *(a[1]+2) B. a[1][2] C.p[5] D.p+5

32