(完整版)C语言单项选择题(带答案)

计算机程序设计基础(C语言)

单项选择练习题

一、基本概念

1. C语言程序是由构成的。

A)一些可执行语言 B)main函数C)函数 D)包含文件中的第一个函数

2. 是构成C语言程序的基本单位。

A)函数 B)过程 C)子程序 D)子例程

3.C语言可执行程序从开始执行。

A) 程序中第一条可执行语句 B) 程序中第一个函数

C) 程序中的main函数 D) 包含文件中的第一个函数

4.C语言程序从main()函数开始执行,所以这个函数要写在____。

A) 程序文件的开始 B) 程序文件的最后

C) 它所调用的函数的前面 D) 程序文件的任何位置

5. 以下说法中正确的是。

A)C语言程序总是从第一个定义的函数开始执行

B)在C语言程序中,要调用的函数必须在main( )函数中定义

C)C语言程序总是从main( )函数开始执行

D)C语言程序中的main( )函数必须放在程序的开始部分

6. 下列方法中错误的是。

A)主函数可以分为两个部分:主函数说明部分和主函数体。

B)主函数可以调用任何非主函数的其它函数。

C)任何非主函数可以调用其它任何非主函数。

D)程序可以从任何非主函数开始执行。

7.下列关于C语言的说法错误的是。

A) C程序的工作过程是编辑、编译、连接、运行

B) 标识符的命名由英文字母、数字和下划线组成,与字母的大小写无关

C) C程序的三种基本结构是顺序、选择、循环

D) 一个C程序总是从main函数开始执行的

8. 系统默认的C语言源程序扩展名为.C,需经过之后,生成.exe文件,才能运行?

A) 编辑?编译 B )编辑?连接 C) 编译?连接 D) 编辑?改错

9.下列说法中正确的是。

A)由于C源程序是高级语言程序,因此一定要在TC软件中输入。

B)由于C源程序是由字符流组成的,因此可以作为文本文件在任何文本编辑的软件中输入。

C)由于C程序是高级语言程序,因此输入后即可执行。

D)由于C程序是高级语言程序,因此它是由命令组成的。

二、数据类型、运算符与表达式

1. 不是C语言提供的合法关键字是。

A)switch B)cher C)case D)default

2.C语言提供的合法关键字是。

A)next B)string C)do case D)struct

3.下列不属于C语言中关键字的是。

A)long B)print C)default D)typedef

4.下列不正确的标识符是。

A).-a1 B).a[i] C)a2_i D)int t

5. 下列C语言用户标识符中合法的是。

A)*y B)sum C)int D)%5f

6. 下面四个选项中,合法的标识符是。

A) auto B)define C) 6a D) c

7.下列C语言用户标识符中合法的是。

A)3ax B)x C)case D)-e2

8. 以下选项中合法的用户标识符是。

A) long B) _2Test C) 3Dmax D) A.dat

9.下列四组选项中,正确的C语言标识符是。

A)%x B) a+b C)a123 D) 123

10. 请选出可用作C语言用户标识符的一组标识符

A) void B) a3_b3 C) For D) 2a

define _123 -abc DO

WORD sum Case sizeof

11、下列四组字符串中都可以用作C语言程序中的标识符的是。

A)print _3d oodb aBc B)I\am one_half start$it 3pai

C)str_1 Cpp pow while D)Pxq My->book line# His.age

12.下列C语言标识符中合法的变量名是。

A)2e3 B)you C)*y D)float

13.C语言中的简单数据类型包括。

A)整型、实型、逻辑型 B)整型、实型、逻辑型、字符型

C)整型、字符型、逻辑型 D)整型、实型、字符型

14.下列可以正确表示字符型常量的是。

A)’\t’ B)”a” C)”\n” D)297

15.下列常数是正确的C语言字符常量。

A)”x” B)e3 C)”COMPUTER” D)’#’

16.在下列常量中,属于字符型常量的是。

A) A B) 'a' C) "A" D) b

17. 以下选项中合法的字符常量是

A) “B” B) ‘\n’C) ‘68’ D) E

18.下面字符常量表示错误的是

A)’a’ B)’?’ C)’\n’ D)”\n”

19. 已定义c为字符型变量,则下列语句中正确的是。

A)c='97' B)c="97" C)c=‘a’ D)c="a"

20. 已知ch是字符型变量,不正确的赋值语句是。

A)ch='a+b' ; B)ch=' \0 ' ; C) ch=' 7'+' 9' ; D) ch=5+9;

21.C语言中字符型(char)数据在内存中的存储形式是。

A) 原码 B) 补码 C) 反码 D) ASCII码

22.在C语言中,字符型数据所占的内存空间是。

A)2个字节 B) 4字节 C) 1字节 D)由用户自定义

23.若int类型数据占2个字节,则unsigned int类型数据的取值范围是。

A)0~255 B)0~65535 C)-32768~32767 D)-256~255

24. 若有以下类型说明语句:char a;int b; float c; double d; 则表达式a*b+d-c的结果类型为。

A)float B) char C) int D)double

25.若有以下类型说明语句: char w;int x;float y;double z; 则表达式w-x*y/z的结果为 D 类型,表达式(int)(x+y-z*w)的结果为 C 类型。

A)float B)char C)int D)double

26 .C语言中运算对象必须是整型的运算符是。

A) %= B) / C) = D) 〈=

27.在C语言程序中,表达式8/5的结果是。

A)1.6 B)1 C)3 D)0

28.设x为int型变量,则执行语句x=10; x+=x; 后,x的值为

A) 10 B) 20 C) 40 D) 30

29.为求出s=10!的值,则变量s的类型应当为。

A) int B) unsiged C) long D) 以上三种类型均可

30.如果int a=1,b=2,c=3,d=4;则条件表达式"a

A)1 B) 2 C.)3 D )4

31.在C语言程序中,表达式5%2的结果是。

A)2.5 B)2 C)1 D)3

32.如果int a=3,b=4;则条件表达式"a

A) 3 B) 4 C) 0 D) 1

33.若int x=2,y=3,z=4 则表达式x

A)4 B)3 C)2 D)0

34.C语言中,关系表达式和逻辑表达式的值是。

A) 0 B) 0或1 C) 1 D) ‘T’或’F’

35.设a,b和c都是int型变量,且a=3,b=4,c=5,则下面表达式中,值为0的表达式是。A)’a’&&’b’ B)a<=b C)a||b+c&&b-c D)!((a

36.设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后x的值。

A)4 B)16 C)32 D)52

37. 下面表达式的值为4.

A) 11/3 B) 11.0/3 C) (float)11/3 D) (int)(11.0/3+0.5)

*38. 有: int a=2,b=10,c=3,d=4,m=2,n=1;执行(m=a>b)&&(n=c>d)后n的值为

A) 0 B) 1 C) 2 D) 没有结果

39. 已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是

A )0 B) 1 C) 5 D) 6

40. 已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3';后,c2中的值为

A) 68 B) D C) 错误 D) d

41.下列关于C语言的叙述错误的是。

A) 大写字母和小写字母的意义相同

B) 不同类型的变量可以在一个表达式中

C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型

D) 同一个运算符号在不同的场合可以有不同的含义

42. 有:int w=11,x=12,y=3,m; 执行下面语句后m的结果是。

m=(w

m=(m

A)1 B) 2 C) 3 D) 以上结果都不对

43. 有:int w=7, x=12, y=3, m; 执行下面语句后m的值是。

m=(w>x)?w:x;

m=(m>y)?m:y;

A)12 B) 0 C) 3 D) 1

*44.设整型变量m,n,a,b,c,d均为0,则执行“(m=a==b)||(n=c==d)”后,m,n的值是。

A)0,0 B)0,1 C)1,0 D)1,1

45.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是。

A)b=1.0/a B)b=(float)(1/a) C)b=1/(float)a D)b=1/(a*1.0)

46.执行语句“x=(a=3,b=a--)”后,x,a,b的值依次为。

A)3,3,2 B)3,2,2 C)3,2,3 D)2.3.2

47.若已定义x和y为double类型,则表达式“x=1,y=x+3/2”的值是。

A)1 B)2 C)2.0 D)2.5

*48.表达式“1?(0?3:2)(10?1:0)”的值是()。

A)3 B)2 C)1 D)0

49.若“int n; float f=13.8;”,则执行“n=((int)f)%3”后,n的值是。

A)1 B)4 C)4,333333 D)4.6

50.设 int x=0, y=1; 表达式(x||y)的值是。

A) 0 B) 1 C) 2 D) -1

*51.设a是char型变量,a=‘1’,则把其值变成整数1的表达式是。

A)(int)a B)int(a) C)a=a-48 D)a/(int)a

52. 设x为int型变量,则执行语句x=10; x*=x;后,x的值为。

A) 10 B) 20 C) 100 D) 0

53. 若有语句int a=1,b; double y=2.3; b=(int)y; 则b的值为?

A) 3 B) 2 C) 1 D) 2.3

54.已知int x;char y;则下面错误的scanf函数调用语句为。

A)scanf(“%d,%d”,&x,&y); B) scanf(“%d,%c”,x,y)

C) scanf(“%d%d”,&x,&y) D) scanf(“%d,%c”,&x,&y)

*55. 使用语句scanf("x=%f,y=%f",&x,&y);输入变量x、y的值(□代表空格),正确输入是。

A) 1.25,2.4 B) 1.25□2.4

C) x=1.25,y=2.4D) x=1.25□y=2.4

56.在C语言的库函数中,可以输出char型变量x值的语句是。

A)getchar(x); B)fputc(x) C)putchar(x) D)puts(x)

57. 设x、y均为整型变量,且x=10 y=3,则语句printf(”%d,%d\n”,x--,++y);的输出结果是。

A) 10,3 B) 9,3 C) 9,4 D)10,4

58. 以下说法正确的是。

A) 'x'+101是一个错误的表达式

B) C语言不允许类型的混合运算

C) 强制类型转换时,类型说明符必须加括号

D) (int)x+y 和(int)(x+y)是完全等价的表达式

59.表达式sizeof(double)是。

A) 函数调用 B) double型表达式C) int型表达式 D) 非法表达式

62.以下运算符中优先级最高的运算符是:

A)&& B)++ C)? D)!=

三、选择结构

1. 在C语言中,能代表逻辑值"真"的是。

A) true B)大于0的数 C)非0整数 D)非0的数

2. 表示关系x<=y<=z的c语言表达式为。

A) (x<=y)&&(y<=z) B) (x<=y)AND(y<=z)

C) (x<=y<=z) D) (x<=y)&(y<=z)

3.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是。

A) a>=10 or a<=0 B) a>=0|a<=10 C) a>=10 &&a<=0 D) a>=10‖a<=0

4、判断char型变量c1是否为大写字母的表达式为。

A)’A’<=c1<=’Z’ B)(c1>=’A’) & (c1<=’Z’)

C)(’A’<=c1)AND (‘Z’>=c1) D)(c1>=’A’)&& (c1<=’’Z’)

5. 有定义char c; c=getchar();表示字符变量c为大写字母的正确表达式为。

A) ‘A’==‘A’&& c<=’Z C)A==A && c<=Z

6.设有语句“int a=4;b=3,c=-2,d=2;”,则逻辑表达式“a>0&&b&&c<0&&d>0”的值是。

A)1 B)0 C)-1 D)出错

7. 设a为整型变量,则不能正确表达数学关系10<a<15的C语言表达式是。

A)10

C) a>10&&a<15 D)!(a<=10)&&!(a>=15)

8. 为表示逻辑表达式79

A)( X>79 )&&( X<90 ) B) ( X>79 )!=( X<90 )

C) 7979 )||( X<90 )

9. 在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三个语句不等价,它是。

A)if (a) s1 ; else s2; B)if (a= =0) s2; else s1;

C)if (a!=0) s1; else s2; D)if (a= =0) s1; else s2;

10.假定所有变量均已正确定义,则下列程序段运行后y的值是。

int a=0,y=10;

if(a=0) y--;

else if(a>0) y++;

else y+=y;

A)20 B)11 C)9 D)0

11.假定所有变量均已正确定义,则下列程序段运行后x的值是。

a=b=c=0; x=35;

if(!a) x--;

else if(b);

if(c) x=3;

else x=4;

A)34 B)4 C)35 D)3

12. C语言对嵌套if语句的规定是:else语句总是与配对。

A) 其之前最近的if B) 第一个if

C) 缩进位置相同的if D) 其之前最近的且尚未配对的if

13.在C语言语句中,用来决定分支流程的表达式是。

A)可用任意表达式B)只能用逻辑表达式或关系表达式

C)只能用逻辑表达式D)只能用关系表达式

14.C语言中用表示逻辑“真”。

A) true B) 整数值1 C)非零整数值 D) false

15.若k是int型变量,且有下面的程序段:

int k;

k= -3;

if (k<=0) printf(“####”);

else printf(“&&&&”);

上面程序段的输出结果是。

A)#### B)&&&& C)####&&&& D)有语法错误,无输出结果

16. main()

{ int x=0,a=0,b=0;

switch(x){

case 0: b++;

case 1: a++;

case 2: a++;b++;}

printf(“a=%d,b=%d\n”,a,b);}

该程序的输出结果是。

A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2

17 以下程序的输出结果是:()

main()

{ int x=-10,y= 1,z=1;

if(x

if(y<0) z=0;

else z=z+1;

printf(“%d\n”,z);

}

A) 0 B) 1 C) 2 D) 3

18. 以下程序段的输出结果是。

int a=10,b=50,c=30;

if(a>b)

a=b;

b=c;

c=a;

printf("a=%2d b=%2d c=%2d\n",a,b,c);

A) a=10 b=50 c=10 B) a=10 b=30 c=10

C) a=50 b=30 c=10 D) a=50 b=30 c=50

19. 若int i=10; 执行下列程序后,变量i的正确结果是。

switch ( i ) { case 9: i+=1;

case 10: i+=1;

case 11: i+=1;

default : i+=1;

}

A)13 B)12 C)11 D)10

四、循环结构

1.在C语言中,下列说法中正确的是()。

A) do-while语句构成的循环不能用其它语句构成的循环来代替。

B) do-while语句构成的循环只能用break语句退出。

C) do-while语句构成的循环在while后的表达式非零时结束循环。

D) do-while语句构成的循环,在while后的表达式为零时结束循环。

2. break语句不能出现在语句中()

A) switch B)for C) while D) if…else

3.对于break语句和continue语句的说法错误的是()

A) break语句不能用于循环语句和switch语句之外的任何其他语句中。

B) break和continue也可以用于if语句中

C) continue语句只结束本次循环,而不是终止整个循环的执行。

D) break语句是结束整个循环过程,不再判断执行循环的条件是否成立。

4.语句while(!y);中的表达式!y等价于

A)y==0 B)y!=1 C)y=!0 D) y==1

5.若有“int a=1,x=1;”,则循环语句“while(a<10) x++; a++;”的循环执行()。

A)无限次 B)不确定次C)10次D)9次

6. 有以下程序段

int k=0

while(k)k++;

则while循环体执行的次数是

A) 无限次B) 有语法错,不能执行

C) 一次也不执行D) 执行1次

7. 下列循环语句中有语法错误的是( )

A while(x=y) 5;

B while(0) ;

C do 2;while(x= =b);

D do x++ while(x= =10);

8.当运行时输入:abcd$abcde ,下面程序的运行结果是。

#include

main()

{char c;

while(putchar(getchar())!='$');

printf("end");

}

A) abcd$abcde B)abcd$end C)abcdend D) abcd$abcdeend 9. 以下程序段 ( )

x=-1;

do { x=x*x; }

while(x>0);

A) 是死循环 B) 循环执行一次 C) 循环执行二次 D) 有语法错误

10. 下面程序段执行后的结果为: ( )

int sum=0, n=10;

do { sum=sum+n;

n++; }

while(n<10); //添加分号printf(“%d,%d”,sum,n); //添加分号

A.0, 10 B) 10, 11 C) 0, 11 D) 以上结果都不对

11.对以下程序段的叙述正确的是_______.

int x=1;

do

{ x= -1*x; }

while(!x)

A) 是死循环 B) 循环执行一次 C)循环执行二次D)有语法错误

12.循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行()。

A)无限次B)不确定次C)10次D)9次

13.执行语句{for(j=0;j<=3;j++) a=1;}后变量j的值是 .

A)0 B) 3 C)4 D) 1

14.有如下程序

main()

{ int i,sum=2;

for(i=1;i<=3;i+=2) sum+=i;

printf(“%d\n”,sum); }

该程序的执行结果是

A) 6 B) 3 C) 死循环 D) 4

15、执行语句”for ( i=0; i++<3 ; ) ;”后,变量i的值为()。

A、2

B、3

C、4

D、5

16.设x和y均为int型变量,则执行以下的循环后,y的值为()。

for(y=1,x=1;y<=50;y++)

{

if(x>=0) break;

if(x%2==1) {x+=5;continue;}

x-=3; //此题没有正确答案,y值应该为1 }

A)2 B)4 C)6 D)8

五数组

1. 以下对一维数组a的正确说明是:

A)char a(10);B) int a[];

C)int k=5,a[k];D)char a[]={‘a’,’b’,’c’};

2.以下能对一维数组a进行初始化的语句是: ( C )

A) int a[5]=(0,1,2,3,4,) B) int a(5)={}

C) int a[ ]={0,1,2} D) int a{5}={10*1}

3.在C语言中对一维整型数组的正确定义为。

A)int a(10); B)int n=10,a[n];

C)int n;a[n]; D)#define N 10

int a[N];

4、已知:int a[10]; 则对a数组元素的正确引用是()。

A、a[10]

B、a[3.5]

C、a(5)

D、a[10-10]

5. 执行下面的程序段后,变量k中的值为

A) 不定值 B) 33 C) 30 D) 10

int k=3, s[2];

s[0]=k; k=s[0]*10;

6. 下列说法中错误的是

A 构成数组的所有元素的数据类型必须是相同的

B 用指针法引用数组元素允许数组元素的下标越界

C 一维数组元素的下标依次是1、2、3……

D 定义数组时的长度可以是整型常量表达式

7.若有以下数组说明,则数值最小的和最大的元素下标分别是()。//修改“大”和“小”位置

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

A)1,12 B)0,11 C)1,11 D)0,12

8.若有以下数组说明,则i=10;a[a[i]]元素数值是()。

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

A)10 B)9 C)6 D)5

9. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是

A) 3 B) 6 C) 10 D) 20

10.若有说明:int a[][3]={1,2,3,4,5,6,7}; 则数组a的第一维的大小为: ( )

A) 2 B) 3 C) 4 D)无确定值

11.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )

A) 2 B) 3 C) 4 D)无确定值

12.以下定义语句中,错误的是

A) int a[]={1,2}; B) char *a[3];

C) char s[10]=“test”; D) int n=5,a[n];

13.下面程序段的输出结果是:

int i;

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

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

printf("%d ",x[i][2-i]);

A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9

14.对二维数组的正确定义是()

A)int a[ ] [ ]={1,2,3,4,5,6}; B)int a[2] [ ]={1,2,3,4,5,6};

C)int a[ ] [3]={1,2,3,4,5,6}; D)int a[2,3]={1,2,3,4,5,6}; 15.已知int a[3][4];则对数组元素引用正确的是______.

A)a[2][4] B)a[1,3] C)a[2][0] D)a(2)(1)

*16. 若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是

A) &t[3][2] B) t[3] C) t[1][2] D) t[2] 17.下面程序的输出结果是____。

main( )

{

int m[3][3]={ {1}, {2}, {3} };

int n[3][3]={ 1, 2, 3 };

printf("%d", m[1][0]+n[0][0] );

printf("%d", m[0][1]+n[1][0] );

}

A)30 B)34 C)56 D)11

六、函数

1.C语言中函数返回值的类型是由决定的.

A)函数定义时指定的类型 B) return语句中的表达式类型

C) 调用该函数时的实参的数据类型 D) 形参的数据类型

2. 在C语言中,函数的数据类型是指( )

A 函数返回值的数据类型 B) 函数形参的数据类型

C 调用该函数时的实参的数据类型D)任意指定的数据类型

3.C程序中函数返回值的类型是由决定的.

A)函数定义时指定的函数类型 B) 函数中使用的最后一个变量的类型

C)调用函数时临时确定 D) 调用该函数的主调函数类型

4. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为 ( )

A) 由系统选择 B) 单向值传递 C) 由用户指定传递方式 D. 地址传递

5. 在函数调用时,以下说法正确的是()

A)函数调用后必须带回返回值

B)实际参数和形式参数可以同名

C)函数间的数据传递不可以使用全局变量

D)主调函数和被调函数总是在同一个文件里

6. 在C语言程序中,有关函数的定义正确的是( )。

A)函数的定义可以嵌套,但函数的调用不可以嵌套

B)函数的定义不可以嵌套,但函数的调用可以嵌套

C)函数的定义和函数的调用均不可以嵌套

D)函数的定义和函数的均可以嵌套

7. 以下对C语言函数的有关描述中,正确的是( )。

A)在C语言程序中,调用函数时,只能把实参的值传递给形参,形参的值不能传送给实参

B)C语言函数既可以嵌套定义又可递归调用

C)C语言函数必须有返回值,否则不能使用函数

D)在C语言程序中有调用关系的所有函数必须放在同一个源程序文件中

8.C语言中对函数的描述正确的是 .

A)可以嵌套调用,不可以递归调用 B) 可以嵌套定义

C)嵌套调用,递归调用均可 D)不可以嵌套调用

9.以下叙述中正确的是

A) 构成C程序的基本单位是函数

B) 可以在一个函数中定义另一个函数

C) main()函数必须放在其它函数之前

D) 所有被调用的函数一定要在调用之前进行定义

10.用数组名作为函数调用时的实参时,传递给形参的是。

A)数组首地址 B)数组第一个元素的值

C)数组全部元素的值 D)数组元素的个数

11.有一函数的定义如:void fun(char *s){……},则不正确的函数调用是( )。

A.main()

{char a[20]=”abcdefgh”;

fun(a);

……

}

B.main()

{ char a[20]=”abcdefgh”;

fun(&a[0]);

……

}

C.main()

{ char a[20]=”abcdefgh”;

char *p=a;fun(p);

……

}

D.main()

{char a[20]=”abcdefgh”;

fun(a[]);

……

}

*12.函数的功能是交换x和y中的值,且通过正确调用返回交换结果。不能正确执行此功能的函数是( )。A.funa(int *x, int *y)

{ int i,*p=&i;

*p=*x;*x=*y;*y=*p;

}

B.funa(int x, int y)

{ int t;

t=x;x=y;y=t;

}

C.funa(int *x, int *y)

{ int p;

p=*x; *x=*y; *y=p;

}

D.funa(int *x, int *y)

{ *x=*x+*y; *y=*x-*y; *x=*x-*y;

}

13、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是()。

A、funa(int *x, int *y) { int *p;

B、funb(int x , int y)

{ int t;

t=x; x=y; y=t;

*p=x ; *x=*y; *y=*p;

}

C 、func(int *x, int *y)

{ *x=*y; *y=*x;

}

14. 有如下程序

int func(int a,int b)

{ return(a+b);}

main()

{ int x=2,y=x,z=8,r;

r=func(func(x,y),func(y,z));

printf(“%d \n”,r); }

该程序的输出的结果是

A) 12 B) 13 C) 14 D) 15

15. 以下程序的输出结果是

int a, b;

void fun()

{ a=100; b=200; }

main()

{ int a=100, b=100;

fun();

printf(“%d %d \n”, a,b);

}

A) 100200

B) 100100 C) 200100 D) 200200

16. 下列说法中正确的是:( A )

A. 局部变量在一定范围内有效,且可与该范围外的变量同名。

B. 如果一个源文件中,全局变量与局部变量同名,则在局部变量范围内,局部变量不起作用。

C. 局部变量缺省情况下都是静态变量。

D. 函数体内的局部静态变量,在函数体外也有效。

17. 在C 语言中,表示静态存储类别的关键字是:

A) auto B) register C) static D) extern

18.未指定存储类别的变量,其隐含的存储类别为( )。

A)auto B)static C)extern D)register D 、fund(int *x, int *y) { int t; t=*x; *x=*y; *y=t; }

七.指针

1.语句int *p;说明了。

A)p是指向一维数组的指针

B)p是指向函数的指针,该函数返回一int型数据

C)p是指向int型数据的指针

D)p是函数名,该函数返回一指向int型数据的指针

2. 变量的指针,其含义是指该变量的:( )

A) 值B) 地址 C) 名 D)一个标志

3.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是( )

A) pb=&x B) pb=x C) *pb=&x D) *pb=*x

4、已知:int a, *p=&a; 则下列函数调用中错误的是()。

A、scanf(“%d”,&a);

B、scanf(“%d”,p);

C、prin tf(“%d”,a);

D、printf(“%d”,p);

5.对于同类型的指针变量,不可能进行的运算是()。

A)- B)= C)+ D)==

6. 对于基类型相同的两个指针变量之间,不能进行的运算是

A) < B) = C) + D) -

7.下列不正确的定义是()。

A.int *p=&i,i; B)int *p,i;

C.int i,*p=&i; D)int i,*p;

8. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是:

A)p=q B)*p=*q C)n=*q D)p=n

9. int *p,a=10,b=0;

p=&a; a=*p+b;

执行该程序段后,a的值为

A) 编译出错B) 10 C) 11 D) 12

10.有语句:int a[10],;则是对指针变量p的正确定义和初始化。

A)int p=*a; B)int *p=a; C)int p=&a; D)int *p=&a;

11.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( )。

A)a[p] B)p[a] C)*(p+2) D)p+2

12. 若指针变量p指向整型数组a[10]的首地址, 即p=a ; 则下列数组元素a[i](0

A) p+i B)&( a+i) C) *(a+i) D) *(p+i*2)

13. 有如下程序

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

则数值为9的表达式是

A) *P+9 B) *(P+8) C) *P+=9 D) P+8

14.若有以下定义,则不能表示a数组元素的表达式是( )。

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

A)*p B)a[10] C)*a D)a[p-a]

15.已知int a[5],*p=a;下面的叙述中正确的是。

A) p+1与a+1等价 B) p[1]与*p等价

C) *(p+1)与a+1等价 D) p[1]与a++等价

16. 若有以下说明:

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

则数值为4的表达式是

A) *p+4 B) *(p+4) C) *(p+3) D) p+3

17. 下面程序的输出结果是

A) 0 B) 1 C) 2D) 输出错误

main()

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

p=a;

printf(“%d\n”,*p+1);

}

18. 执行语句char c[10]={ ”abcd”},*pc=c; 后,*(pc+4)的值是()

A) “abcd” B)’\0’C) ‘d’ D) 不确定

19.下列函数的功能是。

void fun(int *p1,int *p2)

{ int p;

p=*p1;*p1=*p2;*p2=p;

}

A) 交换*p1和*p2的值 B) 语法正确,但无法交换*p1和*p2的值

C) 交换*p1和*p2的地址 D)有语法错误

20. 有如下程序

main()

{ char s[]=“ABCD”, *P;

for(p=s+1; p

该程序的输出结果是

A) ABCD B) A C) B D) BCD

BCD B C CD

CD C D D

D D

21. 请读程序,输出结果为: ( )

#include

int a[]={2,4,6,8};

main()

{ int i,b[4];

int *p=a;

for(i=0;i<4;i++) {b[i]=*p;p++;}

printf("%d\n",b[2]);

}

A) 6B) 8 C) 4 D) 2

*22.内存空间被分成不同区域,其中用函数void* malloc(unsigned int size); 申请的内存在分配。

A)程序区 B)静态存储区C)堆区 D)栈区

八、结构体

1. 若有以下说明语句:

struct student

{ int num;

char name[ ];

float score;

}stu;

则下面的叙述不正确的是: ( )

A) struct是结构体类型的关键字

B) struct student 是用户定义的结构体类型

C) num, score都是结构体成员名

D) stu是用户定义的结构体类型名

2.若有以下说明语句:

struct date

{ int year;

int month;

int day;

}brithday;

则下面的叙述不正确的是_____.

A) struct是声明结构体类型时用的关键字

B) struct date 是用户定义的结构体类型名

C) brithday是用户定义的结构体类型名

D) year,day 都是结构体成员名

3. 已知:(设整型2字节,字符型1字节,浮点型4字节)

struct

{ int i;

char c;

float a;

}test;

则sizeof(test)的值是。

A) 4 B) 5 C) 6 D) 7

4. 以下对结构变量stul中成员age的非法引用是。

struct student

{ int age;

int num;

}stu1,*p;

p=&stu1;

A) stu1.age B) student.age C) p->age D) (*p).age

5. 有如下定义

struct person{char name[9]; int age;};

struct person class[10]={“Tom”,17,“John”,19,

“Susan”,18,“Adam”,16,};

根据上述定义,能输出字母A的语句是

A) printf(“%c\n”,class[3].name);

B) printf(“%c\n”,class[3].name[0]);

C) printf(“%c\n”,class[3].name[1]);

D) printf(“%c\n”,class[2].name[3]);

6.存放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是( )。

A.struct student

{int sno;

char name[20];

float score;} stu[100];

B. struct student stu[100]

{int sno;

char name[20];

float score};

C. struct

{ int sno;

char name[20];

float score;} stu[100];

D. struct student

{int sno;

char name[20];

float score;};

struct student stu[100];

7.设有定义语句“struct {int x; int y;} d[2]={{1,3},{2,7}};”则“printf(“%d\n”,d[0].y/d[0].x*d[1].x);”输出的是( )。

A.0 B)1 C)3 D)6

8.设有如下定义,则对data中的a成员的正确引用是( )。

struct sk{ int a; float b;} data,*p=&data;

A)(*p))data.a B)(*p).a

C)p->data.a D)p.data.a

9、已知: struct sk

{ int a;

float b;

}data, *p;

相关文档
最新文档