admin 管理员组

文章数量: 1086019


2024年4月21日发(作者:weigh后面的名词是宾语吗)

二级C语言笔试311

(总分100, 做题时间90分钟)

一、选择题

一、选择题(下列各题A)、B)、C)、D) 四个选项中,只有一个选项是正确

的。)

1.

在软件设计中,不属于过程设计工具的是 ______。

SSS_SINGLE_SEL

A PDL(过程设计语言)

B PAD图

C N-S图

D DFD图

分值: 2

答案:C

[解析] DFD(Data Flow Diagram)是数据流图结构化分析的常用工具。

软件设计中,常见的过程设计工具如下。

(1)图形工具:程序流程图,N-S,PAD,HIPO

(2)表格工具:判定表

(3)语言工具:PDL(过程设计语言)

2.

下列选项中,合法的C语言关键字是 ______。

SSS_SINGLE_SEL

A VAR

B cher

C integer

D default

分值: 2

答案:D

[解析] 本题考查C语言基本知识。本题中default是C语言的关键字。

3.

以下程序的输出结果是 ______。 # defineSQR(X)

X*X main() { int a=10,k=2,m=1; a/=

SQR(k+m)/SQR(k+m); printf("dn",a); }

SSS_SINGLE_SEL

A 16

B 2

C 9

D 1

分值: 2

答案:D

[解析] 本题考查带参数的宏调用。a/=SQR(k+m)/SQR(k+m)进行宏替换后得:

a=a/(SQR(k+m)/SQR(k+m))=a/(k+m*k+m/k+m*k+m)=10/(2+1*2+1/2+1*2+1)

=10/(2+2+0+2+1)=10/7/1。

4.

若有以下说明和语句: int c[4][5],(*p)[5]; p=C; 能

够正确引用c数组元素的是 ______。

SSS_SINGLE_SEL

A p+1

B *(p+1)

C *(p+1)+3

D *(p[0]+2)

分值: 2

答案:D

[解析] p是指向一个一维数组的指针,选项A、B和C中都是地址,而非数组

元素。选项D正确。

5.

x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语

句是 ______。

SSS_SINGLE_SEL

A INPUT x、y、z;

B scanf("%d %d %d",&x,&y,&;

C scanf("%d %d %d",x,y,;

D read("%d %d %d",&x,&y,&;

分值: 2

答案:B

[解析] 选项A和选项D都不是C语言中的输入方法,选项C中的变量名前面缺

少取地址符“&”。

6.

若有以下程序段: int m=0,n=0;char

c='a'; scanf("%d %c %d",&m,&c,&n); printf("%d,%c,%dn"

,m,c,n); 若从键盘上输入:10A10<回车>,则输出结果是 ______。

SSS_SINGLE_SEL

A 10,A,10

B 16,a,10

C 10,a,0

D 10,A,0

分值: 2

答案:A

[解析] scanf函数为格式输入函数,执行该函数后对变量m、n和c重新赋

值,scanf的格式字符为"%d c% d",键盘输入为10A10,所以m=10、c='A'、

n=10。

7.

在16位C编译系统上,若定义long a;,则能给变量a赋值40000的正确语

句是 ______。

SSS_SINGLE_SEL

A a=20000+20000;

B a=4000*10;

C a=30000+10000;

D a=4000L*1OL;

分值: 2

答案:D

[解析] 本题中a是长整型变量,故应将一个长整型常量赋值给a,选项A、B、

C中的数值的末尾都没有加L或1,所以不正确。

8.

有以下程序: main() { int

a[3][3],*p,i; p=&a[0][0]; for(i=0;i<

9;i++)p[i]=i; for(i=0;i<

3;i++)printf("%d",a[1][i]); } 程序运行后的输出结果是

______。

SSS_SINGLE_SEL

A 0 1 2

B 1 2 3

C 2 3 4

D 3 4 5

分值: 2

答案:D

[解析] p指向的a的首地址,由于C语言是行优先存储的,一维数组p就依次

存放了a中从第0行到第2行的所有元素,因此a[1][i]就对应了p[3]~

p[5]。

9.

已有定义:int i,a[10],*p;,则合法的赋值语句是 ______。

SSS_SINGLE_SEL

A p=100;

B p=a[5];

C p=a[2]+2;

D p=a+2;

分值: 2

答案:D

[解析] 因p是指针变量,故选项D正确。

10.

下列描述中正确的是 ______。

SSS_SINGLE_SEL

A 程序就是软件

B 软件开发不受计算机系统的限制

C 软件既是逻辑实体,又是物理实体

D 软件是程序、数据与相关文档的集合

分值: 2

答案:D

[解析] 程序是软件的一部分,软件是一种逻辑实体,它的开发、运行都依赖计

算机系统,因此出现了软件的移植问题。

11.

以下程序运行后的输出结果是 ______。 main() { int

a=1,b=2,c=3; if(c=a) printf("%dn",c); else

printf("%dn",b); }

SSS_SINGLE_SEL

A 2

B 3

C 5

D 1

分值: 1

答案:B

[解析] 根据if条件,语句c=a的值为1,因此输出c值为3。

12.

数字字符0的ASCII值为48,若有以下程

序: main() { char

a='1',b='2'; printf("%c,",b++); printf("%dn",b-

a); } 程序运行后的输出结果是 ______。

SSS_SINGLE_SEL

A 3,2

B 50,2

C 2,2

D 2,50

分值: 1

答案:C

[解析] b++是先使用b再给b赋值1,因此是先输出2,再将b加1,b='3',

则第一条语句输出2,第二条语句输出2。

13.

下列叙述中正确的是 ______。

SSS_SINGLE_SEL

A 程序设计就是编制程序

B 程序测试必须由程序员自己去做

C 程序经调试改错后还应进行再测试

D 程序经调度改错后不必进行再测试

分值: 1

答案:C

[解析] 软件测试包括需求分析、结构功能模块设计、编制程序等阶段。程序的

测试可以由专门的测试人员来完成。程序经调试改错后还应进行再测试。

14.

以下能正确定义且赋初值的语句是 ______。

SSS_SINGLE_SEL

A iht=n1=n2=10;

B char c=32;

C float f=f+1.1;

D double x=12.3E2.5

分值: 1

答案:A

[解析] B选项中32应加单引号,C选项中f=f+1.1两边都是不定值,不正确;

D中E后要用整型数,且E后必须要有数字。

15.

对长度为n的线性表进行顺序查找,在最坏的情况下所需要的比较次数为

______。

SSS_SINGLE_SEL

A

log

2

n

B n/2

C n

D n+l

分值: 1

答案:C

[解析] 顺序查找的最坏情况是所找的元素在线性表的最后,因此查找的比较次

数是线性表的长度,即n。

16.

有以下程序: main() { int

i=10,j=1; printf("%d,%dn",i--,++j); } 执行后的输出

结果是 ______。

SSS_SINGLE_SEL

A 9,2

B l0,2

C 9,1

D 10,1

分值: 1

答案:B

[解析] 本题中--运算符位于运算变量i右侧,++运算符位于变量j的左侧,所

以先输出i的当前值10,然后i再加 1;j先加1得2,然后输出。

17.

有以下程

序: main() {char al='M'a2='m'; printf("%cn",

(al,a2));} 以下叙述中正确的是 ______。

SSS_SINGLE_SEL

A 程序输出大写字母M

B 程序输出小写字母m

C 格式说明符不足,编译出错

D 程序运行时产生出错信息

分值: 1

答案:B

[解析] 输出项表是一个逗号表达式,它的值为a2,因此输出的是a2的值。

18.

已定义以下函数: fun(int*p) { return *p; } 该函数的

返回值是 ______。

SSS_SINGLE_SEL

A 不确定的值

B 形参p中存放的值

C 形参p所指存储单元中的值

D 形参p的地址值

分值: 1

答案:C

[解析] 函数fun的形参是指针变量,*p的含义是指针变量p所指存储单元的

内容,因此正确答案为C。

19.

以下程序运行后的输出结果是 ______。 main() { char

m; m='B'+32;printf("%cn",m); }

SSS_SINGLE_SEL

A a

B b

C c

D d

分值: 1

答案:B

[解析] 字符参与运算的值是其对应的ASCII码,小写英文字符的ASCII值比大

写英文字符的ASCII值大32,执行语句m='B'+32;得出结果m=66+32=98,以

“%c”的格式输出结果为b。

20.

设有定义: int k=1,m=2; float f=7; 则以下选项中错

误的表达式是 ______。

SSS_SINGLE_SEL

A k=k>=k

B -k++

C k% int(

D k>=f>=m

分值: 1

答案:C

[解析] A、D选项是关系运算表达式,在C语言中,只要关系运算符两边是合

法的表达式就可以了。C选项中,%只能对整型进行运算,其中对f进行了强制

类型转换,但是转换的表达式错了,应为:(int)(f)。

21.

有以下程序: # include<stdio.h> main() {char

c1='1',c2='2'; c1=getchar();c2=getchar();putchar(c1);putchar(c2

); } 当运行时输入:a<回车>后,以下叙述正确的是 ______。

A

B

C

D

变量c1被赋予字符a,c2被赋予回车符

程序将等待用户输入2个字符

变量c1被赋予字符a,c2中仍是原有字符2

变量c1被赋予字符a,c2中将无确定值

SSS_SINGLE_SEL

分值: 2

答案:A

[解析] getchar函数读入字符时,空格、回车符都作为字符读入,因此A正

确。

22.

有以下程序: main() { int

i=1,j=1,k=2; if((j++‖k++)&&i++)printf("%d,%d,%dn",i,

j,k); } 执行后的输出结果是 ______。

SSS_SINGLE_SEL

A 1,1,2

B 2,2,1

C 2,2,2

D 2,2,3

分值: 2

答案:C

[解析] 本题考查“逻辑或”运算的特例。本题中if语句的条件表达式为

(j++||k++)&&i++,首先计算表达式 (j++||k++)的值,++运算符位于右侧,因

此先取j、k当前值进行运算,因j=1,所以表达式(j++||k++)的值为真, k++

表达式不再执行,故执行完表达式(j++||k++)&&i++后,j=2、k=2、i=2。

23.

SSS_SINGLE_SEL

分值: 2

答案:B

[解析] 选项B错误,不符合题意。

24.

有以下程序: main() { char k: int

i; for(i=1:i<

3;i++) { scanf("%c",&k); switch(k)

{ case'0':printf("anothern"); c

ase'1':printf("numbern"); } } } 程序

运行时,从键盘输入:01<回车>,程序执行后的输出结果是 ______。

SSS_SINGLE_SEL

A another number

B another number another

C another number number

D number number

分值: 2

答案:C

[解析] 第一次执行for循环语句时,k='0',故执行case'0'语句输出

another,同时因没有break语句,继续执行case'1',语句,输出number;第

二次执行for循环语句时,k='1',故输出number。所以正确答案为C。

25.

以下程序的功能是进行位运算: main() { unsigned

chara,b; a=7^3;b= ~

4&3; printf("%d %dn",a,b); } 程序运行后的输出结果是

______。

SSS_SINGLE_SEL

A 4 3

B 7 3

C 7 0

D 4 0

分值: 2

答案:A

[解析]

a=7^3=00000111^00000011=00000100=4;

~~

b=4&3=00000100&00000011=11111011&00000011=00000011=3

26.

若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是

______。

A int*i=NULL; scanf("%d",;

B float * f=NULL *f=19.5;

C char t='m',*c=&t; *c=&t;

D long *L; L='0';

分值: 2

答案:A

[解析] 选项C中语句"*C=&t;"错误;选项D中指针"L='0'"不正确,L应指

向确定的地址单元,而不是特定的值;选项B中语句"float*f=NULL"错误,缺少

语句结束符“;”。

27.

SSS_SINGLE_SEL

SSS_SINGLE_SEL

分值: 2

答案:A

[解析] 选项B中不是变量A的地址,错误;选项C是指针pA的地址,错误;

选项D中*pA表示变量A的值,错误。

28.

有以下程序: int f (int a) { return

a%2;} main() { int

s[8]={1,3,5,2,4,6},i,d=0; for(i=0;f(s[i]);i++)d+=s[i];

printf("%dn",d); } 程序运行后的输出结果是 ______。

SSS_SINGLE_SEL

A 9

B 11

C 19

D 21

分值: 2

答案:A

[解析] 本题中d=s[0]+s[1]+s[2]=1+3+5=9。

29.

有以下定义: # include<stdio.h> char a[l0],*b=a; 不

能给a数组输入字符串的语句是 ______。

SSS_SINGLE_SEL

A gets(A)

B gets(a[0]);

C gets(&a[0]);

D gets(;

分值: 2

答案:B

[解析] a[0]是数组元素,不是数组名。

30.

设有定义语句: int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出

x数组6个元素中的值,不能完成此操作的语句是 ______。

A for(i=0;i<6;i++)printf("%2d",*(p++));

B for(i=0;i<6;i++)printf("%2d",*(p+);

C for(i=0;i<6;i++)printf("%2d",*p++);

D for(i=0;i<6;i++)printf("%2d",(*++);

分值: 2

答案:D

[解析] 选项D中(*p)++的意思是将p所指向的存储单元的值加1,与题意不

符,错误。

31.

以下能正确定义二维数组的是 ______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A int a[][3];

B int a[][3]={2*3};

C int a[][3]={};

D int a[2][3]={{1},{2},{3,4}};

分值: 2

答案:B

[解析] (1)二维数组的定义

二维数组的定义方式为:类型说明符数组名[常量表达式][常量表达式]。

二维数组在内存中是按行优先的顺序存放的,即先存放第一行的元素,再

存放第二行的元素,依次类推。

(2)二维数组元素的引用

二维数组元素的表示形式为:数组名[下标][下标],下标可以是整型常量

或整型表达式其范围为:0~(常量表达式 -1)。

(3)二维数组的初始化

可以用以下方法对二维数组元素初始化:

①分行给二维数组赋初值

例如:int a[2][2]={{1,2},{3,4}};

这种赋值方式比较直观,把第1个大括号内的数据赋给第1行的元素,第

2个大括号内的数据赋给第2行的元素,即按行赋值。

②可以将所有数据写在一个大括号内,按数组排列的顺序对各个元素赋初

值。

③可以对部分元素赋初值,没有初始化的元素值为0。

④如果对全部数组元素赋初值,则定义数组时对第一维的长度可以不指

定,但第二维的长度不能省略。

32.

以下叙述中正确的是 ______。

A 用C语言实现的算法必须要有输入和输出操作

B 用C语言实现的算法可以没有输出但必须要有输入

C 用C程序实现的算法可以没有输入但必须要有输出

D 用C程序实现的算法可以既没有输入也没有输出

分值: 2

答案:C

[解析] 根据算法的特性,算法必须有。个或多个输入,和1个或多个输出。

33.

设有定义:int n=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是

______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A p=1;

B *q=2

C q=p

D *p=5

分值: 2

答案:D

[解析] 本题中n是int型变量,p是指向int型的指针变量,q是指向指针的

指针变量,故正确答案为D。

34.

以下4个选项中,不能被看作是一条语句的是 ______。

SSS_SINGLE_SEL

A {;}

B a=0,b=0,c=0;

C if(a>;

D if(b==0)m=1;n=2;

分值: 2

答案:D

[解析] 选项D中有两条语句。

35.

有以下定义语句: double a,b; int w; long c; 若各变量已

正确赋值,则下列选项中正确的表达式是 ______。

SSS_SINGLE_SEL

A a=a+b=b++


本文标签: 选项 输出 程序 变量 数组