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.
版权声明:本文标题:二级C语言分类模拟题546_真题(含答案与解析)-交互 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713697593a647476.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论