二级C语言分类模拟题542.docx
- 文档编号:26614506
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:19
- 大小:23.77KB
二级C语言分类模拟题542.docx
《二级C语言分类模拟题542.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题542.docx(19页珍藏版)》请在冰豆网上搜索。
二级C语言分类模拟题542
二级C语言分类模拟题542
(总分:
55.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
55.00)
1.关于字符常量,以下叙述正确的是______。
(分数:
2.00)
A.空格不是一个字符常量
B.字符常量能包含大于一个的字符
C.单引号中的大写字母和小写字母代表的是相同的字符常量
D.所有的字符常量都可以作为整型量来处理 √
解析:
2.以下数组定义中错误的是______。
(分数:
2.00)
A.intx[2][3]={1,2,3,4,5,6};
B.intx[][3]={0};
C.intx[][3]={{1,2,3},{4,5,6}};
D.intx[2][3]={{1,2},{3,4},{5,6}}; √
解析:
3.有以下程序
#include<stdio.h>
voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/
{intt,i,j;
for(i=0;i<n-1;i++)
for0=i+l;j<n;j++)
if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{intc[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for(i=0;i<10;i++)printf("%d,",c[i]);
printf("/n");
}
(分数:
1.00)
A.1,2,3,4,5,6,7,8,9,0,
B.0,9,8,7,6,5,1,2,3,4,
C.0,9,8,7,6,5,4,3,2,1,
D.1,2,3,4,9,8,7,6,5,0, √
解析:
[解析]本题考查的知识点是:
for循环的简单应用。
题目中fun()函数的作用是排序,从形参指针a所指位置开始,对其后n个int型元素进行从大到小排序。
主函数中,调用fun()函数传入的两个实参分别为c+4和6,即从数组c的第5个元素开始,对其后连续的6个元素进行从大到小排序。
所以,最后通过for循环输出数组c的值为“1,2,3,4,9,8,7,6,5,0,”,故应该选择D。
4.有以下程序:
#include<stdio.h>
main()
{intk=-3;
if(k<=0)printf("****/n")
elseprintf("&&&&/n");
}
程序的输出结果是
(分数:
2.00)
A.输出####
B.输出&&&&
C.输出####&&&&
D.有语法错不能通过编译 √
解析:
5.以下叙述中错误的是______。
(分数:
1.00)
A.gets函数用于从终端读入字符串
B.getehar函数用于从磁盘文件读入字符 √
C.fputs函数用于把字符串输出到文件
D.fwrite函数用于以二进制形式输出数据到文件
解析:
[解析]本题考查字符处理函数和文件操作函数,属于基础知识。
其中B选项getchar()函数是用于从终端读入一个字符。
所以选择B选项。
6.有以下程序:
#include<stdio.h>
main()
{intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];
for(i=0;i<2;i++)
{if(i==0)aa[i][i+1]=*p+1;
else++p;
printf("%d",*p);
}
printf("/n");
}
程序的输出结果是
(分数:
1.00)
A.23 √
B.26
C.33
D.36
解析:
7.有以下程序:
#include<stdio.h>
main()
{ints,t,A=10;doubleB=6;
s=sizeof(A);t=sizeof(B);
printf("%d,%d/n",s,t);
}
在VC6平台上编译运行,程序运行后的输出结果是______。
(分数:
1.00)
A.2,4
B.1,4
C.4,8 √
D.10,6
解析:
[解析]函数sizeof()的参数为C中定义或者用户自定义的数据,作用是返回参数所指的数据类型所占用的内存空间的字节数。
本题中A是整型,B是双精浮点数,分别占4个字节和8个字节。
所以选C。
8.以下程序的运行结果是______。
main()
{charch="A";
intnum1=ch;
floatnum2=num1;
printf("%f",num2);
}
(分数:
1.00)
A..A
B.65
C.65.00000 √
D..a
解析:
[解析]A的ASCII码为65,赋值语句num1=ch把char类型的变量转换成int类型的变量num1;赋值语句num2=num1把类型为int的变量转换为类型为float的变量num2,最后printf打印出num2的值为65.00000。
9.设变量均已正确定义并赋值,以下与其他三组输出结果不同的一组语句是______。
(分数:
1.00)
A.x++;printf("%d/n",x);
B.n=++x;printf("%d/n",n);
C.++x;printf("%d/n",x);
D.n=x++;printf("%d/n",n); √
解析:
[解析]本题考查++运算操作符,当++在变量前面时,是先加1再赋值,当++在变量后面时,是先赋值再加1,所以答案选择D。
10.有以下程序:
#include<stdio.h>
#include<string.h>
main()
{charstr[][10]={"One","Three","Five"},*p=str[0];
printf("%s,",p+10);
printf("%d/n",strlen(p+=10));
}
执行后的输出结果是______。
(分数:
1.00)
A.Three,4
B.出错
C.Three,5 √
D.Five,5
解析:
[解析]本题中定义一个二维字符数组str,它包含3个字符串,每个字符串存放在一个长度为10的一维数组中,指针变量p指向strp[0],即第一个字符串“One”,由于“One”存放在长度为10的一维数组,p+10指向下一个字符串“Three”,长度为5。
故本题答案为C选项。
11.面向对象方法中,继承是指______。
(分数:
1.00)
A.一组对象所具有的相似性质
B.一个对象具有另一个对象的性质
C.各对象之间的共同性质
D.类之间共享属性和操作的机制 √
解析:
[解析]继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。
广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。
12.若有以下程序:
#include<stdio.h>
main()
{charc1,c2;
c1="C"+"8"-"3";c2="9"-"0";
printf("%c%d/n",c1,c2);
}
则程序运行后的输出结果是______。
(分数:
1.00)
A.H"9"
B..H9 √
C.F"9"
D.表达式不合法输出无定值
解析:
[解析]本题考查字符变量以及print()函数相关知识。
字符变量c1被赋值为"C"+"8"-"3",即ASCII码的运算,67+54-49=72,即H;字符变量c2被赋值为"9"-"0",但输出时,需要注意的是c1以字符变量输出,而c2是以十进制整型变量输出。
因此B选项正确。
13.以下叙述中正确的是______。
(分数:
1.00)
A.在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上 √
B.在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔
C.在printf函数中,各个输出项只能是变量
D.使用printf函数无法输出百分号“%”
解析:
[解析]scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,所以A正确。
scanf函数的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可以,所以B错误。
printf函数可以输出常量,也可以输出变量,所以C错误。
printf函数可以用“/%”来输出百分号“%”,所以D错误。
14.假定已建立以下链表结构,且指针p和q已指向如图所示的结点:
则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是______。
(分数:
1.00)
A.p->next=q->next;free(q); √
B.p=q->next;free(q);
C.p=q;free(q);
D.(*p).next=(*q).next;free(p);
解析:
[解析]本题考查删除链表中的结点操作,其方法是将要删除结点的上个结点指向要删除结点的下个结点,然后释放该要删除结点,所以选项A正确。
15.有以下程序:
#include<stdio.h>
#defineF(x)2.84+x
#definePR(a)printf("%d",(int)(a))
#definePRINT(a)PR(a);putehar("/n")
main()
{
PRINT(F(5)*2);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.12 √
B.13
C.15
D.11
解析:
[解析]带参数的宏的调用格式:
宏名(实参表),替换过程是,用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
将PRINT(F(5)*2)用PR(F(5)*2);putchar("/n")替换,将PR(F(5)*2)用printf(“%d”,(int)(F(5)*2))替换,再将F(5)用2.84+5替换,最后替换结果为printf(“%d”,(int)(2.84+5*2));putchar("/n"),运行结果为:
12<回车>。
故A选项正确。
16.有以下程序
#include<stdio.h>
main()
{intx=1,y=2,z=3;
if(x>y)
if(y<z)printf("%d",++z);
elseprintf("%d",++y);
printf("%d/n",x++);
}
程序的运行结果是______。
(分数:
1.00)
A.1 √
B.41
C.2
D.331
解析:
[解析]x>y不成立,之后的if和else都不执行,输出x++表达式值为1。
17.若有以下程序:
#include<stdio.h>
voidsub(doublex,double*y,double*z)
{*y=*y-1.0;*z=*z+x;}
main()
{doublea=2.5,b=9.0,*pa,*pb;
pa=&a;pb=&b;
sub(b-a,pa,pa);printf("%f/n",a);
}
程序的输出结果是
(分数:
1.00)
A.9.000000
B.1.500000
C.8.000000 √
D.10.500000
解析:
18.有以下程序:
#include<stdio.h>
main()
{inta=0,b=0;
for(;a<7;a++)
{if(a%2==0)continue;
b+=a;
continue;
}
printf("%d/n",b);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.0
B.4
C.1
D.9 √
解析:
[解析]由程序可知,for循环中a的取值为0~6,其中若if条件满足,即a取值为2,4,6时,b+=a不会执行,所以当a取值为1,3,5时,b+=a才会被执行。
所以循环结束后b=1+3+5,输出结果为9。
故答案选择D选项。
19.以下叙述中正确的是______。
(分数:
2.00)
A.不能用字符串常量对字符数组名进行整体赋值操作 √
B.字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素
C.charstr[7]="string!
";在语法上是合法的,运行也是安全的
D.char*str;str="Hello";与charstr[];str="Hello";效果是一样的
解析:
[解析]字符数组在定义时可以用字符串赋初值,其后就不可以再用字符串常量进行赋值。
答案选择A。
20.下列选项中可作为C语言合法常量的是______。
(分数:
2.50)
A.-80 √
B.-080
C.-8e1.0
D.-80.0e
解析:
[解析]所谓常量是指在程序运行的过程中,其值不能被改变的量。
在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。
选项B中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C和D也不正确。
21.有以下程序:
#include<stdio.h>
main()
{intm=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
printf("%d,%d,%d,%d/n",m,n,*p,*q);
程序运行后的输出结果是______。
(分数:
1.00)
A.2,1,1,2
B.1,2,1,2
C.2,1,2,1
D.1,2,2,1 √
解析:
[解析]intm=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q的指向交换。
因此最后输出1,2,2,1。
所以选择D选项。
22.有以下程序:
#include<stdio.h>
main()
{inta=1,b=0;
printf("%d,",b=a+b);
printf("%d/n",a=2+b);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.0,0
B.1,0
C.3,2
D.1,2 √
解析:
[解析]本题输出两个值:
第一个printf语句输出b的值,b=a+b=1;第二个printf语句输出了a的值,a=2+b,此时b的值为1,所以a的值为2。
23.下列不属于软件调试技术的是______。
(分数:
2.00)
A.强行排错法
B.集成测试法 √
C.回溯法
D.原因排除法
解析:
[解析]调试的关键在于推断程序内部的错误位置及原因。
主要的调试方法有强行排错法、回溯法和原因排除法。
24.软件设计中划分模块的一个准则是______。
(分数:
1.00)
A.低内聚低耦合
B.高内聚低耦合 √
C.低内聚高耦合
D.高内聚高耦合
解析:
[解析]一般较优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性,因此本题答案为B。
25.已知char*p,*q;,正确的语句是______。
(分数:
1.00)
A.p*=3;
B.p/=q;
C.p+=3; √
D.p+=q;
解析:
26.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量"/101"是()。
(分数:
1.00)
A.字符A √
B.字符a
C.字符e
D.非法的常量
解析:
[解析]本题的关键是八进制101的十进制是多少。
八进制的101转换为十进制为65,也就是字符A的ASCII码。
故应该选择A。
27.数据流程图(DFD)是______。
(分数:
1.00)
A.软件概要设计的工具
B.软件详细设计的工具
C.结构化方法的需求分析工具 √
D.面向对象方法的需求分析工具
解析:
[解析]数据流程图是一种结构化分析描述模型,用来对系统的功能需求进行建模。
28.某系统结构图如下图所示:
该系统结构图的宽度是______。
(分数:
1.00)
A.2
B.3
C.4
D..n √
解析:
[解析]宽度又称扇入是指最大模块数的层的控制跨度。
题目中系统第一层只有1个模块,第二层有n(n>3)个模块,第三层有4个模块,控制跨度为n,故D选项正确。
29.有以下程序:
#include<stdio.h>
main()
{
charc[2][5]={"6938","8254"},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)p[i]=c[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-"0";
printf("%d/n",s);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.6938
B.9824
C.4528
D.6385 √
解析:
[解析]本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。
30.以下选项中,能用做数据常量的是______。
(分数:
2.00)
A.115L √
B.0118
C.1.5e1.5
D.o115
解析:
[解析]A选项中115L表示115是长整型数据,合法。
B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B错误。
C选项中e后面应该是整数不能是小数1.5,所以C错误。
D选项中八进制常量应该是数字“0”开始,而不是字母“o”开始。
31.以下有关宏替换的叙述不正确的是______。
(分数:
2.50)
A.双引号中出现的宏名不替换
B.使用宏定义可以嵌套
C.宏定义仅仅是符号替换
D.宏名必须用大写字母表示 √
解析:
[解析]本题考查宏替换的规则。
宏替换分为简单的字符替换和带参数的宏替换两类。
使用宏时应注意以下几点:
①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。
32.以下程序段给数组所有元素输入数据:
#include<stdio.h>
main()
{inta[10],i=0;
while(i<10)scanf("%d",______);
}
应在下划线处填入的是
(分数:
1.00)
A.a+(i++) √
B.&a[i+1]
C.a+i
D.&a[++i]
解析:
33.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是______。
(分数:
2.50)
A.c=b=a;
B.(a=c)||(b=c);
C.(a=c)&&(b=c); √
D.a=c=b;
解析:
[解析]选项A是先将a的值赋给变量b,再将变量b的值赋给变量c,不合题意;B选项中由于c的值不为0,在将c的值赋给变量a后,表达式a=c的值为1,不再对表达式b=c计算;对于C选项,表达式a=c的值为1,再求表达式b=c的值为1,然后进行逻辑与运算;D选项将b的值赋给c后再赋给a,故选择C选项。
34.有以下程序:
#include<string.h>
structSTU
{charname[10];
intnum;
}
voidf(char*name,intnum)
{structSTUs[2]={{"SunDan",20044},{"Penghua",20045}};
num=s[0].num;
strcpy(name,s[0].name);
}
main()
{structSTUs[2]={{"YangSan",20041},{"LiSiGuo",20042}},*p;
p=&s[1];f(p->name,p->num);
printf("%s%d/n",p->name,p->num);
}
程序运行后的输出结果是
(分数:
2.00)
A.SunDan20042 √
B.SunDan20044
C.LiSiGuo20042
D.YangSan20041
解析:
[解析]本题考查的是结构体。
主函数中定义了结构体类型的指针变量p,并使其指向结构体类型的数组s[1],并通过调用函数f改变指针变量p所指向的结构体中成员变量name的值,但并未改变其num的值。
这是因为函数f中的形参nam。
是一个字符型指针变量,它指向主函数中指针变量p所指向的结构体的成员变量name,所以对函数f中的形参*name。
的改变也就是对主函数中p->name的改变,而函数f中对形参num的改变并不会影响主函数中p->num的值,因为此时传递给num的是一个值,而不是地址。
35.若有定义:
floatx=1.5;
inta=1,b=3,c=2;
则正确的switch语句是______。
(分数:
1.00)
A.switch(a+b){case1:
printf("*/n");case2+1:
printf("**/n");} √
B.switch((int)x);{case1:
printf("*/n");case2:
printf("**/n");}
C.switch(x){case1.0:
printf("*/n");case2.0:
printf("**/n");}
D.switch(a+b){case1:
printf("*/n");casec:
printf("**/n");}
解析:
[解析]switch语句的一般形式为:
switch(表达式){
case常量表达式1:
语句1;
case常量表达式2:
语句2;
default:
语句n;
}
其中switch后的表达式只能是整型或字符型,故C选项错误;case后面必须是常量表达式,故D选项错误;switch()右括号后面不能有分号,故选项B错误,因此答案选A选项。
36.有以下程序
#include<stdio.h>
voidfun(int*p,int*q)
{intt;
t=*p;*p=*q;*q=t;
*q=*p;
}
main()
{inta=0,b=9;
fun(&a,&b);
printf("%d%d/n",a,b);
}
程序的输出结果是__
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 分类 模拟 542