admin 管理员组

文章数量: 1184232


2024年4月21日发(作者:alert词源)

二级C语言分类模拟题546

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

选择题

1.

有以下程序

#include<stdio.h>

struct S

{int a,b;}data[2]={10,100,20,200};

main()

{ struct S p=data[1];

printf("%dn",++(p.a));

}

程序运行后的输出结果是______。

SSS_SINGLE_SEL

A 21

B 11

C 20

D 10

分值: 2

答案:A

[解析] 声明 data 是结构体型S的数组。初始化时data[0].a=10;

data[0].b=100;data[1].a=20;data[1].b=200。主函数中p=data[1] ; 即

p.a=data[1].a;p.b=data[1].b;执行语句printf("%dn",++(p.a)); 打印输

出时 p.a 先增1再打印。即p.a = data[1].a=20,先增1等于21,因此程序

运行结果是21。

2.

有以下程序(说明:字母A的ASCII码值是65):

#include<stdio.h>

void fun(char*s)

{ while(*s)

{ if(*s%2)printf("%c",*s);

s++;

}

}

main()

{ char a()="BYTE";

fun(a);

printf("n");

}

程序运行后的输出结果是______。

SSS_SINGLE_SEL

A BT

B YE

C YT

D BY

分值: 1

答案:B

[解析] 本题中执行fun(a)时,会取字符串a的第一个字母B,因为字母B的

ASCII码值为66,所以不会输出字母B,函数只会输出ASCII码值为奇数的字

母,字母Y的ASClI码值为89,字母T的ASCII码值为84,字母E的ASCII码

值为69,因此B选项正确。

3.

可在C程序中用作用户标识符的一组标识符是______。

SSS_SINGLE_SEL

A void define WORD

B as_b3 _123 If

C For —abc case

D 2c DO SIG

分值: 2

答案:B

4.

下面for语句的循环次数为______。

for(x=1, y=0; (y!=19)&&(x<6); x++);

SSS_SINGLE_SEL

A 是无限循环

B 循环次数不定

C 最多执行6次

D 最多执行5次

分值: 2.5

答案:D

[解析] 本题考查for循环的使用。根据条件考虑x的取值变化,x从1取到

5,可以循环5次,但并不知道y如何变化,有可能出现y=19提前跳出循环的

情况,所以最多执行5次。

5.

下面描述中,不属于软件危机表现的是______。

SSS_SINGLE_SEL

A 软件过程不规范

B 软件开发生产率低

C 软件质量难以控制

D 软件成本不断提高

分值: 1.5

答案:A

[解析] 软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进

度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成

本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。因

此本题答案为A。

6.

下列叙述中正确的是______。

A 对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n

B 对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)

C 对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为

(log2n)

D 对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为

(nlog2n)

分值: 1

答案:C

[解析] 二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,

最坏情况只需比较log

2

n次。

7.

以下选项中不能用作C程序合法常量的是______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A 1,234

B 123

C 123

D "x7G"

分值: 2

答案:A

[解析] 选项A中的1,234在两侧加双引号才是C程序的合法常量。

8.

若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是

______。

A 函数的实参和其对应的形参共占同一存储单元

B 形参只是形式上的存在,不占用具体存储单元

C 同名的实参和形参占同一存储单元

D 函数的形参和实参分别占用不同的存储单元

分值: 2.5

答案:D

[解析] 在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单

元。

9.

对关系S和关系R进行集合运算,结果中既包含关系S中的所有元组也包含关

系R中的所有元组,这样的集合运算称为______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A 并运算

B 交运算

C 差运算

D 除运算

分值: 2.5

答案:A

[解析] 关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,

其中包含两个关系中的所有元组。

10.

有以下程序

#include<stdio.h>

main()

{

int i,j,x=0;

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

{

x++;

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

{

if(j%2)continue;

x++;

}

x++;

}

printf("x=%dn",x);

}

程序执行后的输出结果是______。

SSS_SINGLE_SEL

A x=8

B x=4

C x=6

D x=12

分值: 2

答案:A

[解析] 本题考查的是for循环的嵌套。外循环的循环变量i从0递增到1会循

环2次,内循环的循环变量j从0递增到3会循环4次。但是内循环中有一条

if语句,每当j%2为真,即j为奇数时会跳过下面的x++;语句,所以4次内循

环只有2次执行到x++;语句,再加上外循环中包含的2条x++;语句,所以每次

外循环会使x自增4次,2次外循环下来x的值为8。故应该选择A。

11.

设有条件表达式:(EXP)?i++;j-,则以下表达式中(EXP)完全等价的是______。

SSS_SINGLE_SEL

A (EXP==0)

B (EXP!=0)

C (EXP==1)

D (EXP!=1)

分值: 2

答案:B

12.

以下定义语句中正确的是______。

SSS_SINGLE_SEL

A char a="A"b="B";

B flo at a=b=10.0;

C int a=10,*b=&a;

D float *a,b=&a;

分值: 1

答案:C

[解析] 在A选项中,定义了两个char型的变量,但是在这两个变量之间应该

加上逗号;在B选项中,没有对b进行定义,只是对b进行了赋值,因此是错

误的;在D选项中,把一个指针赋值给了一个float型的变量,因此是错误

的。

13.

以下程序的输出结果是______。

main()

{ int a=3;

printf("%dn", (a+a-=a*a));

}

SSS_SINGLE_SEL

A -6

B 12

C 0

D -12

分值: 2.5

答案:D

[解析] 本题可以写成:a+a+(a-(a*a)),因为*的优先级最高,其次是-=的,+

的优先级最低,所以先求a-=a*a=9,表达式变为a+a+-=9,即a=a-9=-6,再次

变为a+(-6)=-12,故选择D选项。

14.

有三个关系R、S和T如下:

R

A B C

a 1 2

b 2 1

c 3 1

S

A D

c 4

T

A B C D

c 3 1 4

则由关系R和S得到关系T的操作是______。

SSS_SINGLE_SEL

A 自然连接

B .交

C 投影

D .并

分值: 2

答案:A

[解析] 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必

须是相同的属性组,并且在结果中把重复的属性列去掉,因此根据T中元组可

以判断关系R和S做的是自然连接操作,答案为A。

15.

请读程序段:

char str[]="ABCD",*p=str,

printf("%dn",*(p+4));

程序段的输出结果是______。

SSS_SINGLE_SEL

A 68

B 0

C 字符"D"的地址

D 不确定的值

分值: 1

答案:B

[解析] 在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符

串结束标志“0”,故指向字符数组的指针p的*(p+4)的值为“0”。由于

“0”的编码值就是0,所以本题输出为0。

16.

以下程序段中有语法错误的是______。

A fun(char aa[1()]){while(*aa)printf("%c",*aa++);}

B fun(chatr*aa){while(aa[0])printf("%c",*aa++);}

C main(){char*aa="Hello!";}while(*aa)printf("%c",*aa++);}

D main(){char aa[10]="Hello!";}while(*aa)printf("%c",*aa++); }

分值: 2

答案:D

17.

有以下程序:

main()

{int e[]={2,4,6,8,10},y=0,x,*p;

p=&a[1];

for(x=1;x<3;x++)y+=p[x];

printf("%dn",y);

}

程序运行后的输出结果是______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A 10

B 11

C 14

D 15

分值: 2

答案:C

[解析] 指针变量p指向数组元素a[1],则p[1]即为a[2],p[2]即为a[3],执

行第一次for循环时,y=y+p[1]=0+a[2]=6,第二次执行for循环,

y=y+p[2]=6+a[3]=14,此时x为3,for循环条件不满足,退出循环,输出y的

值为14。

18.

有以下程序:

#include <stdio.h>

int a =4;

int f(int n)

{int t = 0; static int a=5;

if (n%2) {int a=6; t + = a+ +; }

else {int a=7; t + = a+ +;}

return t + a+ +;

{

main( )

{int s=a, i=0;

for (; i<2;i+ +) s + = f(i);

printf("%dn", s) ;

}

程序运行后的输出结果是______。

SSS_SINGLE_SEL

A 36

B 24

C 32

D 28

分值: 2.5

答案:D

[解析] 在主函数main( )中定义了两个变量s和i,同时给s赋初值。a=4,i

赋初值0。当i=0时。执行“s+=f(i);”语句,调用f()并将i的初值0传递

给形参n。首先执行if语句中的条件:n%2,若条件为假,则执行else下的语

句,a=7,t=7+0=7,使用return返回t,t=7+(a++)=7+5=12,此时a运算完后

自增1,变为6;返回主函数中,s=4+12=16。当i=1时,执行“s+=f(i);”语

句,调用f()并将i的初值传递给形参n。首先执行if语句中的条件:n%2,条

件为真,执行if下面的语句,t=0,a=6 t=0+6=6,使用return返回t,

t=6+6=12,返回主函数中,s=16+12=28。最后输出的结果为28。因此D选项正

确。

19.

有以下程序段:

FILE*fp;

if((fp=fopen("","w"))==NULL)

{printf("不能打开文件!");

exit(0);}

else

printf("成功打开文件!");

若指定文件不存在,且无其他异常,则以下叙述错误的是______。

A 输出“不能打开文件!”

B 输出“成功打开文件!”

C 系统将按指定文件名新建文件

D 系统将为写操作建立文本文件

分值: 1

答案:A

[解析] fopen函数以一定方式打开指定文件,返回一个指向文件的文件指针,

如果不能实现打开指定文件的操作,则返回一个空指针NULL。如果指定文件不

存在则创建一个文件名为指定文件名的新文件,然后打开它。程序中,文件

不存在,但无其他异常,表示可以建立新文件,命名为,C

项正确,并以只写方式打开它,D项正确,返回指向文件的指针,if条件不成

立,输出“成功打开文件!”,B项正确。

20.

有以下程序:

#include <stdio.h>

main( )

{

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

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

a[i]=*p++;

printf("%dn",a[2]);

}

程序的输出结果是______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A 2

B 8

C 4

D 6

分值: 1

答案:D

[解析] 本题通过语句“*p=a”将一维数组a的首地址的值赋值给变量p,即p

的值为2。执行for循环,a[i]=*p++,指将p的值赋给a[i]后,再进行自增操

作,因此4次循环后a[2]的值为6。因此D选项正确。

21.


本文标签: 文件 循环 输出 软件 关系