二级C语言模拟652.docx
《二级C语言模拟652.docx》由会员分享,可在线阅读,更多相关《二级C语言模拟652.docx(15页珍藏版)》请在冰豆网上搜索。
![二级C语言模拟652.docx](https://file1.bdocx.com/fileroot1/2023-1/5/8d32dff4-56f7-44d5-b687-3ddcb92bac34/8d32dff4-56f7-44d5-b687-3ddcb92bac341.gif)
二级C语言模拟652
二级C语言模拟652
(总分:
136.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
58.00)
1.设变量x为longint型并已正确赋值,以下表达式中能将x的百位上的数字提取出的是______。
(分数:
1.00)
A.x/10%100
B.x%10/100
C.x%100/10
D.x/100%10 √
解析:
[解析]x/100的个位数是x的百位数上的数字,所以再进行除10取余运算即可得到该数字。
2.有以下程序:
#include<stdio.h>
main()
{unsignedchara=2,b=4,c=5,d;
d=a|b;d&=c;printf("%d/n",d);}
程序运行后的输出结果是______。
(分数:
1.00)
A.3
B.4 √
C.5
D.6
解析:
[解析]&按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
1按位或,两个相应的二进制位中只要有一个为1,该位的结果值为1。
2的二进制为00000010,4的二进制为00000100,所以两个数做或运算结果为00000110,该数与5的二进制00000101做与操作结果为00000100,即4。
所以选择B选项。
3.有以下程序:
#include<stdio.h>
main()
{
structSTU
{
charname[9];
charsex;
doublescore[2];
};
structSTUa={"Zhao","m",85.0,90.0},b={"Qian","f",95.0,92.0};
b=a;
printf("%s,%c,%2.0f,%2.0f/n",b.name,b.sex,b.score[0],b.score[1]);
}
程序的运行结果是______。
(分数:
2.00)
A.Qian,m,85,90
B.Zhao,m,85,90 √
C.Zhao,f,95,92
D.Qian,f,95,92
解析:
[解析]本题考查结构体初始化操作。
本题中可以直接将结构体a赋值给b,所以输出的结果和a一样,B选项正确。
4.有以下程序:
#include<stdio.h>
main()
{inti=0,a=0;
while(i<20)
{for(;;)
{if((i%10)==0)break;
elsei--;}
i+=11;a+=i;}
pfintf("%d/n",a);}
程序的输出结果是______。
(分数:
2.50)
A.62
B.63
C.33
D.32 √
解析:
5.有以下程序:
#include<stdio.h>
main()
{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=1;j<=i;j++)t+=b[i][b[j][i]];
printf("%d/n",t);
}
程序运行后的输出结果是______。
(分数:
1.00)
A.1
B.3
C.4 √
D.0
解析:
[解析]本题考查了两层for循环。
外层循环增量i的值作为内层循环执行次数的值使用。
6.以下关于C语言的叙述中正确的是______。
(分数:
1.00)
A.C语言的数值常量中夹带空格不影响常量值的正确表示
B.C语言中的变量可以在使用之前的任何位置进行定义
C.在C语言算术表达式的书写中、运算符两侧的运算数类型必须一致
D.C语言中的注释不可以夹在变量名或关键字的中间 √
解析:
[解析]C语言的数值常量中不能夹带空格,所以A选项错误。
C语言中的变量都必须先定义再使用,对变量的定义通常放在函数体内的前部,但也可以放在函数外部或复合语句的开头,不能随便放置,所以B选项错误。
在C语言中运算符两侧的运算数据类型可以不一致,且结果与精度较高的保持一致,所以C选项错误。
7.在软件设计中不使用的工具是______。
(分数:
1.00)
A.系统结构图
B.PAD图
C.数据流图(DFD图) √
D.程序流程图
解析:
[解析]系统结构图是对软件系统结构的总体设计的图形显示。
在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。
PAD图是在详细设计阶段用到的。
程序流程图是对程序流程的图形表示,在详细设计过程中用到。
数据流图(DFD图)是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,因此它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以本题答案为C。
8.有以下程序:
#include<stdio.h>
main()
{intk=5;
while(--k)printf("%d",k-=3);
printf("/n");
}
程序执行后的输出结果是______。
(分数:
1.00)
A.1 √
B.2
C.4
D.死循环
解析:
[解析]--k先自减再使用,所以第一次判断条件即为while(4),条件为真,执行打印k的值k=4-3,结果为1;第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符。
所以选择A选项。
9.下列叙述中正确的是______。
(分数:
1.00)
A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的 √
B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C.顺序存储结构能存储有序表,链式存储结构不能存储有序表
D.链式存储结构比顺序存储结构节省存储空间
解析:
[解析]链式存储结构既可以针对线性结构也可以针对非线性结构,所以B选项与C选项错误。
链式存储结构中每个节点都是由数据域与指针域两部分组成,增加了存储空间,所以D选项错误。
10.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为____
(分数:
1.00)
A.a<>0
B.!
a
C.a=0
D..a √
解析:
11.以下叙述中,正确的是______。
(分数:
1.00)
A.局部变量说明为static的存储类,其生存期将得到延长 √
B.全局变量说明为static的存储类,其作用域将被扩大
C.任何存储类的变量在未赋初值时,其值都是不确定的
D.形参可以使用的存储类说明符与局部变量完全相同
解析:
[解析]选项A,局部静态变量的存储空间在程序整个运行期间都不释放,所以比局部动态变量的生存期长。
选项B,全局变量说明为静态存储时,作用域不会扩大。
选项C,局部静态变量未赋初值时,系统编译时会自动赋初值0或空字符。
选项D,在未调用函数时,函数的形参不占内存的存储单元,只有调用时才动态分配存储空间,所以形参不能说明为静态存储,而局部变量可以说明为静态存储。
12.以下结构体说明和变量定义中,正确的是______。
(分数:
1.00)
A.typedefstructabc{intn;doublem;}ABC;ABCx,y; √
B.structabc{intn;doublem};structabcx,y;
C.structABC{intn;doublem;}structABCx,y;
D.structabc{intn;doublem;};abcx,y;
解析:
[解析]本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。
13.在软件开发过程中,软件结构设计是描述______。
A.数据存储结构
B.软件体系结构 √
C.软件结构测试
D.软件控制过程
解析:
[解析]从工程管理角度来看,软件设计分两步完成:
概要设计和详细设计。
概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。
14.设有定义:
char*c;
以下选项中能够使c正确指向一个字符串的是______。
(分数:
1.00)
A.charstr[]="string";c=str; √
B.scanf("%s",c);
C.c=getchar();
D.*c="string";
解析:
[解析]选项A定义字符数组str,然后将str赋值给c,c便指向字符串str,符合题意,所以选择A。
15.以下四个程序中不能对两个整型值进行交换的是______。
(分数:
2.50)
A.#include<stdio.h>voidswap(int*p,int*q){int*t,a;t=&a;*t=*p;*p=*q;*q=*t;}main(){inta=10,b=20;swap(&a,&b);printf("%d%d/n",a,b);}
B.#include<stdio.h>voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inta=10,b=20;swap(&a,&b);printf("%d%d/n",a,b);}
C.#include<stdio.h>voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){int*a,*b;*a=10,*b=20;swap(a,b);printf("%d%d/n",*a,*b);} √
D.#include<stdio.h>voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inta=10,b=20,*x=&a,*y=&h;swap(x,y);printf("%d%d/n",a,b);}
解析:
[解析]main()
{int*a=0,*b=0;
*a=10,*b=20;//有错误,a与b没有指向任何对象,但却给对象赋值。
swap(a,b);printf("%d%d/n",*a,*b);
}
swap(int*p,int*q)
{intt;
t=*p;*p=*q;*q=t;
}
16.若有以下程序:
#include<stdio.h>
main()
{inta=0,b=0,c=0
c=(a+=++b,b+=4);
printf("%d,%d,%d/n",a,b,c);
}
则程序的输出结果是______。
(分数:
2.00)
A.1,5,1
B.1,5,5 √
C.-1,4,4
D.-1,4,-1
解析:
[解析]逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。
且逗号运算符的优先级最低。
先计算a+=++b,结果a为1,b为1,然后计算b+=4,b的值为5。
逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,即a为1,b为5,c为5。
所以选择B。
17.以下有4组用户标识符,其中合法的一组是______。
(分数:
2.00)
A.For-subCase
B.4dDOSize
C.f2_G3IFabc √
D.WORDvoiddefine
解析:
[解析]选项A中有非法标识符-sub,选项B中有非法标识符4d,选项D中有C语言保留字void。
18.以下选项中,不能对主函数中变量i和j的值进行交换的程序是______。
(分数:
1.00)
A.#include<stdio.h>voidswap(int*p,int*q){int*t;*t=*p;*p=*q;*q=*t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d/n",i,j);} √
B.#include<stdio.h>voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d/n",i,j);}
C.#include<stdio.h>#include<stdlib.h>voidswap(int*p,int*q){int*t;t=(int*)malloc(sizeof(int));*t=*p;*p=*q;*q=*t;free(t);}main(){inti=10,j=20;swap(&i,&j);printf("i=%dj=%d/n",i,j);}
D.#include<stdio.h>voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*x=&i,*y=&j;swap(x,y);printf("i=%dj=%d/n",i,j);}
解析:
[解析]选项A,定义了一个临时指针,实现两个指针地址的交换,而传入了参数是二个指针的副本,即a、b地址的副本,故交换了副本地址,对a、b无影响,故选择A选项。
B选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型变量,能实现i与j值交换。
C选项调用函数传入的是i与j地址,函数体内交换是地址内元素,临时变量为整型指针,且已正确开辟内存,能实现i与j值交换。
D选项与B选项相同,能实现i与i值交换。
19.有以下程序:
#include<stdio.h>
structS{inta;intb;};
main()
{structSa,*p=&a;
a.a=99;
printf("%d/n",______);
}
程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是______。
(分数:
1.00)
A.a
B.*p.a √
C.p->a
D.(*p).a
解析:
[解析]本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,*p为结构体变量,那么*p.a可以表示为结构体中成员a的数据。
20.以下叙述中正确的是______。
(分数:
2.50)
A.a是实型变量,C允许进行赋值a=10,但不可以这样说:
实型变量中允许存放整型值 √
B.在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式
C.执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0
D.已有a=3,b=5,当执行了表达式a=b,b=a之后,使a中的值为5,b中的值为3
解析:
[解析]C语言中语法上规定实型变量是不能存放整型类型的数据的,整型数据也不能存放实型数据。
是为了避免类型转换之间可能会发生的错误。
21.有以下程序:
#include<stdio.h>
main()
{chars1[]="programe",s2[]="Language";
char*p1=s1,*p2=s2;
intk;
for(k=0;k<8;k++)
if(*(p1+k)==*(p2+k))
printf("%s/n",*(p1+k));
}
程序的运行结果是______。
(分数:
1.00)
A.grameamee √
B.gae
C.programe
D.无输出字符
解析:
[解析]定义两个指针变量p1、p2,分别指向数组s1、s2首地址,在for循环中,比较两个指针所指地址的元素是否相等,如果相等,则输出当前指针指向地址的字符串。
22.循环队列的存储空间为Q(1:
50),初始状态为front=rear=50。
经过一系列正常的入队与退队操作后,front=rear=25,此后又正常地插入了一个元素,则循环队列中的元素个数为______。
(分数:
1.00)
A.51
B.50
C.49
D.1 √
解析:
[解析]循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
入队运算时,队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。
当front=rear=25时可知队列空或者队列满,此后又正常地插入了一个元素说明之前队列为空,所以插入操作之后队列里只有一个元素。
故D选项正确。
23.有以下程序
#include<stdio.h>
main()
{
inta=1,b=2,c=3,x;
x=(a^b)&c;
printf("%d/n",x);
}
程序的运行结果是______。
(分数:
1.00)
A.2
B.1
C.3 √
D.0
解析:
[解析]a^b后值为3,3&c值为3,所以选择C。
24.在软件开发中,需求分析阶段产生的主要文档是______。
(分数:
1.50)
A.软件集成测试计划
B.软件详细设计说明书
C.用户手册
D.软件需求规格说明书 √
解析:
[解析]需求分析阶段的工作可以概括为:
需求获取、需求分析、编写需求规格说明书、需求评审四个方面,因此本题答案为D。
25.设a、b和c都是int型变量,且a=3,b=4,c=5,则以下的表达式中值为0的表达式是
(分数:
2.00)
A.a&&b
B.a<=b
C.a‖b+c&&b-c
D.!
((a<b)&&!
c‖1) √
解析:
26.以下叙述错误的是______。
(分数:
2.00)
A.C语言区分大小写
B.C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改
C.整数和实数都能用C语言准确无误地表示出来 √
D.在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示
解析:
27.有下列程序:
main()
{inty=10
do{y--;}while(--y);
printf("%d/n",--y);
}
当执行程序时,输m的结果是______。
(分数:
2.50)
A.-1
B.1
C.4
D.0 √
解析:
[解析]本题考查do-while循环。
当--y是0(即y是0)时结束循环,输出--y,先将y的值减1再输出y的值。
28.若有以下定义和语句:
chars[10]="abcd!
",*s2="/n123/";
printf("%d%d/n",strlen(s1),strlen(s2));
则输出结果是______。
(分数:
1.00)
A.55 √
B.105
C.107
D.58
解析:
[解析]/n和//分别为转义字符,各占据一个字符的位置。
29.在软件开发中,需求分析阶段产生的主要文档是______。
(分数:
1.00)
A.软件集成测试计划
B.软件详细设计说明书
C.用户手册
D.软件需求规格说明书 √
解析:
[解析]需求分析阶段的工作可以概括为:
需求获取、需求分析、编写需求规格说明书、需求评审四个方面。
所以选择D。
30.有如下嵌套的if语句
if(a<b)
if(a<c)k=a;
elsek=c;
else
if(b<c)k=b;
elsek=c;
以下选项中与上述if语句等价的语句是______。
(分数:
2.50)
A.k=(a<b)?
((a<c)?
a:
c):
((b<c)?
h:
c); √
B.k=(a<b)?
((b<c)?
a:
b):
((h>c)?
b:
c);
C.k=(a<b)?
a:
b;k=(b<c)?
b:
c;
D.k=(a<b)?
a:
h:
k=(a<c)?
a:
c;
解析:
[解析]ifelse语句和?
:
可以互换,?
前语句相当于if后括号内容,?
号后语句相当于if后的执行语句,冒号后语句相当于else后语句,综合以上可以看出A符合题意。
31.有以下程序
#include<stdio.h>
main()
{inti;
for(i=1;i<=40;i++)
{if(i++%5==0)
if(++i%8==0)printf("%d",i);
}
printf("/n");
}
执行后的输出结果是______。
(分数:
2.00)
A.32 √
B.24
C.5
D.40
解析:
[解析]本题考查了白增运算符。
自增运算符“++”分为前缀和后缀两种形式。
两种形式的作用效果是一样的,都是使运算分量的值加1,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加1之后的值,而后缀形式表达式的值为运算分量加1之前的值。
题目中使用了一个for循环,循环变量i从1递增到40。
在循环体中有两条嵌套的if吾句,首先判断i++%5==0,即判断i++的值(i加1之前的值)是否能被5整除(判断后i被加1),然后再判断++i的值(i加1之后的值)是否能被8整除(判断后i被加1),若两个条件都满足了,就输出i的值,只有i=30时,满足i++%5==0,此时i=31,++i%8==0成立,此时i=32。
32.下列程序的运行结果是______。
main()
{intx=1,y=3,a=0;
while(x++!
=(y-=1))
{a+=1;
if(y<x)break;
}
printf("%d,%d,%d/n",x,y,a);
}
(分数:
2.50)
A.2,3,2
B.2,3,1
C.1,3,3
D.3,1,2 √
解析:
[解析]本题考查while循环。
第一次循环,y=y-1,y=2。
循环条件成立,x=1,x++后值为1,x自加变成2,进入循环,a=a+1=1,判断if语句条件是否成立,y<x不成立,接着执行下一次循环。
第二次循环,x=2,y-1=1,循环条件成立,进入循环,a=a+1=2,判断if语句的控制条件是否成立,y<x成立,执行break语句,退出循环。
结果为D。
33.数据库系统的三级模式不包括______。
(分数:
1.00)
A.概念模式
B.内模式
C.外模式
D.数据模式 √
解析:
[解析]数据库系统的三级模式是概念模式、外模式和内模式,不包括数据模式,因此选择D。
34.下面不能作为结构化方法软件需求分析工具的是______。
(分数:
1.00)
A.系统结构图 √
B.数据字典(DD)
C.数据流程图(DFD图)
D.判定表
解析:
[解析]结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。
35.有以下程序段:
intk=0;
while(k=)k++;
while循环执行的次数是______。
(分数:
2.50)
A.无限次 √
B.有语法错,不能执行
C.一次也不执行
D.执行一次
解析:
36.有以下程序
#include<stdio.h>
main()
{int