二级C语言分类模拟题528.docx
《二级C语言分类模拟题528.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题528.docx(17页珍藏版)》请在冰豆网上搜索。
二级C语言分类模拟题528
二级C语言分类模拟题528
(总分:
52.50,做题时间:
90分钟)
一、选择题(总题数:
35,分数:
52.50)
1.以下选项中能表示合法常量的是______。
(分数:
2.50)
A."/007" √
B.1.5E2.0
C."/"
D.1,200
解析:
[解析]E前E后有数字,E后数字为整数,B错误;""为转义字符,后面跟特定字符,用来表示ASCII字符,C错误;一个整数之间不能有逗号,D错误。
2.有以下程序:
#include<stdio.h>
main()
{structcmplx{intx;inty;}cnum[2]={1,3,2,7};
printf("%d/n",cnum[0].y/cnum[0].x*cnum[1].x);}
程序的运行结果是
(分数:
2.00)
A.0
B.1
C.3
D.6 √
解析:
3.有以下程序
#include<stdio.h>
intfun(inta,intb)
{if(b==0)returna;
elsereturn(fun(--a,--b));
}
main()
{printf("%d/n",fun(4,2));}
程序的运行结果是______。
(分数:
2.50)
A.1
B.2 √
C.3
D.4
解析:
[解析]由程序可知,函数fun(inta,intb)是一个递归函数。
所以当主函数中调用fun(4,2)时,其执行过程如下“fun(4,2)->fun(3,1)->fun(2,0)”,其返回值为2。
所以正确答案为选项B。
4.有以下程序:
#include<stdio.h>
main()
{
intx=8;
for(;x>0;x--)
{
if(x%3)
{
printf("%d,",x--);
contmue;
}
printf("%d,",-x);
}
}
程序运行后的输出结果是______。
(分数:
1.00)
A.7,4,2,
B.8,7,5,2,
C.9,7,6,4,
D.8,5,4,2, √
解析:
[解析]coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。
第一次循环x的值为8,循环体中if条件成立,打印x的值8后将x减1,再执行continue语句,跳出本次循环。
第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印-x的操作,即打印5后跳出循环。
第三次判断循环条件时x的值为4,满足循环体中if条件,执行打印x--的操作,即打印4,后将x值减一,执行continue语句,跳出本次循环。
第四次判断循环条件时x的为2,满足循环体中if条件,打印x--,即打印2后将x减一,执行continue语句,跳出本次循环。
在进行for条件表达式中第三个表达式c--的操作后x的值为0,不满足条件结束循环。
所以打印结果为“8,5,4,2,”。
5.有以下程序
#include<stdio.h>
main()
{inti,j;
for(i=3;i>=1;i--)
{for(j=1;j<=2;j++)printf("%d",i+j);
printf("/n");
}
}
程序的运行结果是______。
(分数:
1.00)
A.233423
B.432543
C.233445
D.453523 √
解析:
[解析]第一次循环i值为3,i值分别为1和2,所以输出为4和5;第二次循环i值为2,j值分别为1和2,所以输出为3和4;第三次循环i值为1,j值分别为1和2,所以输出为2和3,答案选择D。
6.结构化程序设计主要强调的是______。
(分数:
1.00)
A.程序的规模
B.程序的效率
C.程序设计语言的先进性
D.程序易读性 √
解析:
[解析]本题考查考生的结构化程序设计的思想。
结构化程序设计强调的是程序的易读性。
7.以下错误的定义语句是______。
(分数:
1.00)
A.intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; √
B.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C.intx[][3]={{0},{1},{1,2,3}};
D.intx[][3]={1,2,3,4};
解析:
[解析]二维数组定义行数可以省略,列数不能省略,所以答案选择A。
8.C语言规定,在一个C程序中,main函数的位置______。
(分数:
2.00)
A.必须在系统调用的库函数之后
B.必须在程序的开始
C.必须在程序的最后
D.可以在任意位置 √
解析:
9.以下选项中不能用作C语言程序合法常量的是______。
(分数:
1.00)
A.1,234 √
B."/123"
C.123
D.“/x7G”
解析:
[解析]A选项中逗号是一个操作符。
10.设有如下语句:
intk=0;
k=printf("OK/n");
则以下叙述中正确的是______。
(分数:
1.00)
A.printf必须作为独立语句出现
B.变量k得到的是输出的可见字符个数2
C.变量k得到的是输出字符的总个数3 √
D.变量k仍保持初值0
解析:
[解析]printf()函数的原型如下:
externintprintf(constchar*format,...);
它是有返回值的,返回值是打印出来的字符个数,题意中的字符串“OK/n”输出3个字符,所以k的值为3。
故本题答案为C选项。
11.有以下程序:
#include<stdio.h>
main()
{charch;
ch="A"+"5"-"3";
printf("%d,%c/n",ch,ch);
}
程序的输出结果是______。
(分数:
2.50)
A.67,C √
B.B,C
C.C,D
D.不确定的值
解析:
[解析]charch;ch="A"+"5"-"3";//计算字符"A"+"5"-"3"即"A"+2,因为"5"与"3"ASCL码就差2,得"C"
printf("%d,%c/n",ch,ch);//%d是按整型输出,输出的是ch的ASC码,查表可得67
//%c是按字符型输出,输出为C
所以输出就为67,C。
因此A为正确选项。
12.C语言程序的执行是______。
(分数:
2.00)
A.从程序的主函数开始,到程序的主函数结束 √
B.从程序的主函数开始,到程序的最后一个函数结束
C.从程序的第一个函数开始,到程序的最后一个函数结束
D.从程序的第一个函数开始,到程序的主函数结束
解析:
13.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用尖括号(<>)括起时,寻找被包含文件的方式是______。
(分数:
2.00)
A.仅仅搜索当前目录
B.仅仅搜索源程序所在目录
C.在标准目录下查找指定文件 √
D.先在源程序所在目录搜索,如没找到,再按系统指定的标准目录查找
解析:
14.有表示公司和职员及工作的三张表,职员可在多家公司兼职。
其中公司表C(公司号,公司名,地址,注册资本,法人代表,员工数),职员表S(职员号,姓名,性别,年龄,学历),工作表W(公司号,职员号,工资),则表W的键(码)为______。
(分数:
1.00)
A.公司号,职员号 √
B.职员号,工资
C.职员号
D.公司号,职员号,工资
解析:
[解析]由于职员可以在多家公司兼职,表W的键(码)应为公司关系和职员关系的主码,即公司号和职员号。
15.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是____。
(分数:
1.00)
A.模拟现实世界中不同事物之间的联系
B.强调模拟现实世界中的算法而不强调概念
C.使用现实世界的概念抽象地思考问题从而自然地解决问题 √
D.不强调模拟现实世界中的算法而强调概念
解析:
[解析]面向对象的设计方法的基本原理是:
使用现实世界的概念抽象地思考问题从而自然地解决问题。
它虽强调模拟现实世界中的概念而不强调算法,但它鼓励开发者在软件开发的绝大部分中都应该用领域的概念去思考。
16.将E-R图转换到关系模式时,实体与联系都可以表示成()。
(分数:
1.00)
A.属性
B.关系 √
C..键
D..域
解析:
[解析]把概念模型转换成关系数据模型就是把E-R图转换成一组关系模式,每一个实体型转换为一个关系模式,每个联系分别转换为关系模式。
17.若有定义:
char*ps[]={"aa","bb","cc","dd"};,则以下叙述正确的是______。
(分数:
1.00)
A.ps[0]是字符串"aa"
B.*ps[0]是字符串"aa"的首地址
C.ps[0]是字符串"aa"的首地址 √
D.*ps[0]是字符串"aa"
解析:
[解析]定义一个字符串数组指针ps后,ps是指针变量,ps[0]指向的是数组首个元素的地址,即字符串“aa”的首地址,答案为C选项。
18.有以下函数:
intfun(char*s)
{char*t=s;
while(*t++);
return(t-s);
}
该函数的功能是______。
(分数:
2.50)
A.计算s所指字符串的长度 √
B.比较两个字符串的大小
C.计算s所指字符串占用内存字节的个数
D.将s所指字符串复制到字符串t中
解析:
[解析]首先char*s接受一个字符型数组的首地址,并将这个首地址赋给另—个字符型指针char*t,while(*t++)不断循环直到*t为“/0”,再将t-1,这时字符指针t指向字符串的最后一个字符,又因为s指向字符数组的首地址,即字符串的首地址,所以return(t-s)便是返回字符数组中字符串的长度。
19.以下关于C语言数据类型的叙述中正确的是______。
(分数:
2.50)
A.C基本数据类型包括:
分为整型、实型、浮点型、字符型四种
B.实型常量的表达方式包括十进制形式、十六进制形式、二进制形式、八进制形式、指数形式
C.若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型 √
D.若只处理“真”和“假”两种逻辑值,应使用逻辑类型
解析:
[解析]C基本数据类型包括:
分为整型、实型、枚举型、字符型四种,实型就是浮点型,实型数据只有十进制,没有2,8,16进制表达,在C语言中没有定义逻辑类型,而是一般用0代表假,用非零代表真。
20.有以下程序
#include<stdio.h>
main()
{FILE*pf;
char*s1="China",*s2="Beijing";
pf=fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
rewind(pf);/*文件位置指针回到文件开头*/
fwrite(s1,5,1,pf);
fclose(pf);
}
以上程序执行后abc.dat文件的内容是______。
(分数:
1.00)
A.Chinang √
B.China
C.ChinaBeijing
D.BeijingChina
解析:
[解析]本题考查的是文件操作。
程序首先定义了一个文件指针pf,并使用fopen()函数以“wb+”方式新建一个可读写的二进制文件“123.dat”。
然后使用fwrite()函数写入字符串s2的前7*1个字符。
现在文件中的内容应该为“Beijing”。
接下来程序使用rewind()函数,将文件的读写指针调回起始位置。
并又调用fwrite()函数写入字符串s1的前5*1个字符。
所以文件原内容“Beijing”的前5个字符被覆盖,结果为“Chinang”,故本题应该选择A。
21.若有定义和语句:
()
int**pp,*p,a=10,b=20
pp=&p;p=&a;p=&b;printf("%d,%d”n",*p,**pp);
则输出结果是
(分数:
1.00)
A.10,10
B.10,20
C.20,10
D.20,20 √
解析:
22.数据流图中带有箭头的线段表示的是______。
(分数:
1.50)
A.控制流
B.事件驱动
C.模块调用
D.数据流 √
解析:
[解析]数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流的名称,因此本题答案为D。
23.有如下程序段:
intx=12;
doubley=3.141593;
printf("%d%8.6f",x,y);
其输出结果是______。
(分数:
1.00)
A.123.141593 √
B.123.141593
C.12,3.141593
D.123.1415930
解析:
[解析]printf函数中格式字符“%8.6”的含义是:
变量y的输出宽度为8(包括小数点),小数点后面保留6位小数,且右对齐。
所以选择A。
24.有以下程序:
#include<stdio.h>
main()
{
inti,j,m=55;
for(i=1;i<=3;i++)
for(j=3;j<=i;j++)
m=m%j;
printf("%d/n",m);
}
程序的运行结果是______。
(分数:
2.50)
A.0
B.1 √
C.2
D.3
解析:
[解析]第1次执行外循环i的值为1,满足条件,判断第1次内循环,j的值为3,不满足条件,跳出内循环。
第2次执行外循环i的值为2,同理也不满足内循环条件,跳出内循环。
第3次执行外循环i的值为3,此时进入内循环判断条件时,条件成立,执行m=m%j,m的值为1,跳出内循环,跳出外循环,打印m的值。
25.有以下程序
#include<stdio.h>
main()
{inta=1,b=2;
for(;a<8;a++){b+=a;a+=2;)
printf("%d,%d/n",a,b);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.10,14 √
B.8,11
C.7,11
D.9,18
解析:
[解析]第一次循环后,a为4,b为3,第二次循环后,a为7,b为7,第三次循环后,a为10,b为14,故答案为A。
26.有以下程序:
#include<stdio.h>
voidfun(char*t,char*s)
{while(*t!
=0)t++;
while((*t++=*s++)!
=0);
}
main()
{charss[10]="acc",aa[10]="bbxxyy";
fun(ss,aa);printf("%s,%s",ss,aa);
}
程序运行结果是______。
(分数:
2.50)
A.accxyy,bbxxyy
B.acc,bbxxyy
C.accxxyy,bbxxyy
D.accbbxxyy,bbxxyy √
解析:
[解析]主函数中语句fun(ss,aa)的功能是将字符串aa连接到字符串ss的末尾。
27.有以下程序:
#include<stdio.h>
#include<string.h>
main()
{charx[]="STRING";
x[0]=0;x[1]="/0";x[2]="0";
printf("%d%d/n",sizeof(x),strlen(x));
}
程序运行后的输出结果是______。
(分数:
1.00)
A.61
B.70 √
C.63
D.71
解析:
[解析]字符数组长度为7,因为C语言中系统会在字符串末尾加入一个字符"/0",而x[0]=0的作用是将一个整数0存入字符数组中,系统会自动将整型数0转换成字符"/0"。
所以输出为7,0。
28.有以下程序
#include<stdio.h>
voidfun1(char*P)
{
char*q;
q=p;
while(*q!
="/0")
{
(*q)++;
q++;
}
}
main()
{
chara[]={"Program"},*p;
p=&a[3];
fun1(p);
printf("%s/n",a);
}
程序执行后的输出结果是______。
(分数:
1.00)
A.Prohsbn √
B.Prphsbn
C.Progsbn
D.Program
解析:
[解析]函数fun1功能是将字符串中元素加1,main函数将数组第4个元素的指针传进fun1函数中,所以答案选择A。
29.对于现实世界中事物的特征,在实体——联系模型中使用______。
(分数:
1.00)
A.属性描述 √
B.关键字描述
C.二维表格描述
D.实体描述
解析:
[解析]本题考查对实体——联系模型的理解和掌握。
在实体——联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项A。
30.下列定义变量的语句中错误的是______。
A.int_int;
B.doubleint_;
C.charFor;
D.
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]C语言规定,变量命名必须符合标识符的命名规则。
D选项中包含了非法字符“$”,所以错误。
标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。
大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。
31.有以下程序
#include<stdio.h>
main()
{
chars[]={"012xy"};
inti,n=0;
for(i=0;s[i]!
=0;i++)
if(s[i]>="a"&&s[i]<="z")
n++;
printf("%d/n",n);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.0
B.2 √
C.3
D.5
解析:
[解析]for循环是统计字符串中小写字符的个数,所以输出结果为2。
32.以下关于逻辑运算符两侧运算对象的叙述中正确的是______。
(分数:
1.00)
A.可以是任意合法的表达式 √
B.只能是整数0或非0整数
C.可以是结构体类型的数据
D.只能是整数0或1
解析:
[解析]C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A选项。
33.以下叙述中错误的是
(分数:
2.00)
A.同一个数组中所有元素的类型相同
B.不可以跳过前面的数组元素,给后面的元素赋初值
C.定义语句:
inta[10]={0};,给a数组中所有元素赋初值0
D.若有定义语句:
inta[4]={1,2,3,4,5};,编译时将忽略多余的初值 √
解析:
34.以下4个选项,不能看做一条语句的是______。
(分数:
2.50)
A.{;)
B.intx=0,y=1,z=0;
C.if(!
a);
D.if(b=0)m=1;n-2; √
解析:
35.有以下程序:
#include<stdio.h>
#include<string.h>
typedefstructstu{
charname[10];
chargender;
intscore;
}STU;
voidf(charname[10],chargender,intscore)
{strcpy(name,"Sun");
gender="m";
score=370;
}
main()
{STUb={"Zhao","m",290},a={"Qian","f",350};
b=a;
printf("%s,%c,%d,",b.name,b.gender,b.score);
f(b.name,b.gender,b.score);
printf("%s,%e,%d/n",b.name,b.gender,b.score);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.Qian,f,350,Sun,f,350 √
B.Qian,f,350,Qian,f,350
C.Qian,f,350,Sun,m,370
D.Zhao,m,290,Sun,m,370
解析:
[解析]C语言函数参数传递大致分为
(1)值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。
值传递的特点是被调函数对形参的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值。
(2)地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。
被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。
正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
结构体中name是数组,做实参传递,会退化为指针,因此调用f(),b.name发生修改,其他的成员,传递的是拷贝文件,不会被修改。
因此输出Sun,f,350。
故答案为A选项。