11计算机二级考试C语言选择题

#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 以下程序运行后输出结果是( B )。 #define MIN(m,n) m

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 \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

17

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) C.#define XPF(x) (x*x) D.#define XPF(x) ((x)*(x)) 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未赋值,编译出错 51501 有以下语句:

int a[5]={0,1,2,3,4,5},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

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 )。

18

A.q=&p;scanf(\ C.*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=\

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

51511若已定义: int a=5,*p; 且 p=&a; 则以下表示中不正确的是( B )。 A.&a==&(*p) B.*(&p)==a C.&(*p)==p D.*(&a)==a 51512若有以下程序段,则叙述正确的是( C )。 char s[]=\

A.s和p完全相同 B.数组s的长度和p所指向的字符串长度相等 C.*p与s[0]相等 D.数组s中的内容和指针变量p中的内容相等 51600以下程序段的运行结果是( B )。

enum weekday{ aa,bb=2,cc,dd,ee }week=ee;printf(\ A.ee B.5 C.2 D.4

51601若有以下程序段,则不能正确访问数组元素a[1][2]的是( A )。 int (*p)[3];

int a[][3]={1,2,3,4,5,6,7,8,9}; p = a;

A.p[1]+2 B.p[1][2] C.(*(p+1))[2] D.*(*(a+1)+2) 51602以下程序段的运行结果是( A )。 int a[]={1,2,3,4,5,6,7},*p=a; int n,sum=0;

for(n=1;n<6;n++) sum+=p[n++]; printf(\ A.12 B.15 C.16 D.27

51603下面程序的运行结果是( A )。 main( ) { int a,b;

int *p1=&a,*p2=&b,*t; a=10; b=20; t=p1; p1=p2; p2=t; printf(\ A.10,20 B.20,10 C.10,10 D.20,20 51604以下程序段运行后变量s的值为( C )。

int a[]={1,2,3,4,5,6,7}; int i,s=1,*p; p=&a[3];

for(i=0;i<3;i++) s*=*(p+i);

19

A.6 B.60 C.120 D.210

51605以下程序段运行后变量ans的值为( B )。

int a[]={1,2,3},b[]={3,2,1}; int *p=a,*q=b; int k,ans=0;

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

if(*(p+k)==*(q+k)) ans=ans+*(p+k)*2; A.2 B.4 C.6 D.12

51606以下程序运行结果是( A )。 main( )

{ char a[]=\

for(p=a;p void main() {int i;

char *s=\

for(i=0;i<3;i++) printf(\ A.CD BCD ABCD

B.ABCD BCD CD

C.AB ABC ABCD

D.ABCD ABC AB

51608以下程序的输出结果是( B )。 #include void main()

{char *p=\ A.A B.B C.C D.D

51609 下面程序执行时,若输入5 4 3 2 1<回车>,则输出为( B ) #include #define N 5 void main() { int a[N]; int *p=a; while(p

while(p>a) printf(\

A.5 4 3 2 1 B.1 2 3 4 5 C.3 4 5 1 2 D.3 2 1 5 4 51610 下面程序段的运行结果是( C )。

int a[]={1,2,3,4,5,6},*p=a; int i,sum=0;

for(i=1;i<6;i++) sum+=*(p++); printf(\ A.10 B.12 C.15 D.20

51611下面程序运行结果是( D )。 main( )

20

联系客服:779662525#qq.com(#替换为@)