二级C语言分类模拟题529真题含答案与解析交互.docx
- 文档编号:27823627
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:24
- 大小:25.17KB
二级C语言分类模拟题529真题含答案与解析交互.docx
《二级C语言分类模拟题529真题含答案与解析交互.docx》由会员分享,可在线阅读,更多相关《二级C语言分类模拟题529真题含答案与解析交互.docx(24页珍藏版)》请在冰豆网上搜索。
二级C语言分类模拟题529真题含答案与解析交互
二级C语言分类模拟题529
(总分47.5,做题时间90分钟)
选择题
1.
在C语言中,char型数据在内存中的存储形式为______。
A 反码
B 补码
C ASCII码
D 原码
分值:
2
答案:
C
2.
下列叙述中,正确的是______。
A 软件交付使用后还需要进行维护
B 软件一旦交付使用就不需要再进行维护
C 软件交付使用后其生命周期就结束
D 软件维护是指修复程序中被破坏的指令
分值:
1
答案:
A
3.
有下列程序:
#include<stdio.h>
main()
{inta=6,b=7,m=1;
switch(a%2)
{case0:
m++;break;
case1:
m++;
switch(b%2)
{defaut:
m++;
case0:
m++;break;
}
}
printf("%d\n",m);
}
程序运行后的输出结果是____。
A 1
B 2
C 3
D 4
分值:
1
答案:
B
[解析]本题考查switch语句。
第一个switch语句,因为a=6,a%2=0,所以执行case0.将m加1,遇到break语句跳出switch语句,结束循环。
4.
下列合法的声明语句是______。
A int_abc=50;
B doubleint=3+5e2.5;
C longdo=1L;
D float3_asd=3e-3;
分值:
1
答案:
A
[解析]标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线。
B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。
C选项do是C语言的一个关键字。
D选项标识符只能以字母或下划线开始。
5.
以下选项中叙述正确的是______。
A charc1,c2,*c3,c4[40j;是合法的变量定义语句
B 数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
C 数组下标的下限可以是负值
D 若有数组定义floatarray[4];则语句printf("%f",array[3.12]);是合法的
分值:
1
答案:
A
[解析]A选项正确定义了字符变量c1、c2,字符型指针c3,字符型一维数组c4[40],A选项正确。
“[]”是下标运算符,“下标”可以是任何非负整型数据,取值范围是0~(数据元素的个数-1)。
在引用数组元素时,下标运算符内可以是常量也可以是变量或者表达式,B选项错误。
数组下标的下限不可以是负值,C选项错误。
数组下标必须是整型数据,3.12为浮点数,故D选项错误。
6.
有以下程序
main()
{intp[8]=(11,12,13,14,15,16,17,18),i=0,j=0;
while(i++<7)if(p[i]%2)j+=p[i];
printf("%d\n",j);
}
程序运行后的输出结果是______。
A 42
B 45
C 56
D 60
分值:
1
答案:
B
[解析]本题程序中while循环的条件是i++<7,由于在循环体中没有改变i的值,所以循环过程是i从初始值0开始,每次自加1,当i为7再次进行循环条件判断时退出循环。
而在循环体中,i从1到7变化。
循环体是一个if语句,当p[i]%2为真,即p[i]为奇数时执行j+=p[i]。
所以该段程序的实际效果是将p[1]~p[7]中的奇数累加到变量j中。
所以j=13+15+17=45,选B。
7.
下列二维数组初始化语句中,不正确的是____。
A intb[][2]={1,2,3,4,5,6,7};
B intb[3][5]={0,0,0};
C intb[][4]={{1,2},{3,4,5},{6}};
D intb[3][2]={(1,2),(3,4),(5,6)};
分值:
1
答案:
D
[解析]在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0;C语言规定,对于二维数组,只可以省略第1个方括号中的常量表达式,而不能省略第2个方括号中的常量表达式;赋的初值不能多于事先定义好的数组元素个数。
在选项D)赋值表达式中对每一维的元素赋初值应用{},而不是()。
8.
以下程序的输出结果是______。
试题程序
#include<stdio.h>
main()
{inti=2,p;
p=f(i,i+1);
printf("%d\n",p);
}
intf(inta,intb)
{intc;
c=a;
if(a>b)
c=1;
elseif(a==b)
c=0;
else
c=-1;
return(c);
}
A -1
B 0
C 1
D 2
分值:
1
答案:
A
[解析]以上程序中定义了名为f()的整型函数,它有两个int类型的形参。
在main()函数中调用了f()函数,可以很直观地看到,实参的值分别是2和3,2传给函数形参a,3传给函数形参b。
函数返回的值赋给变量p,main()函数中输出的值就是函数中的返回值。
在函数f()中,若a的值大于b,c被赋1;若a的值等于b,c被赋0;若a的值小于b,c被赋-1。
按照实参传送过来的值,a的值小于b,因此c被赋-1,所以函数的返回值为-1。
总结:
本题中没有复杂的算法,但读者必须熟练地掌握if...else分支结构的执行流程,同时建立清晰的有关函数定义和函数调用的基本概念,就可得出正确的答案。
9.
假定x和y为double型,则表达式x=2,y=x+3/2的值是______。
A 3.500000
B 3
C 2.000000
D 3.000000
分值:
1
答案:
D
[解析]在x=2,y=x+3/2中,3/2=1,2+1=3,因此表达式的值为3,因为x、y为double型变量,故选择D选项。
10.
以下叙述中正确的是______。
A int*p1;int**p2;int*p3;都是合法的定义指针变量的语句
B 指针变量只能通过求地址运算符(&)来获得地址值
C 语句p=NULL;与p=\0;是等价的语句
D 语句p=NULL;执行后,指针p指向地址为0的存储单元
分值:
2
答案:
A
[解析]B选项描述不正确,指针变量可以通过求地址运算符(&)来获得地址值,也可以通过指针变量获得地址值,还可以通过标准函数获得地址值;C选项中,p=NuLL;和p=0;或p="\0";等价;D选项中,语句p=NULL;执行后,指针p并不是指向地址为0的存储单元,而是具有一个确定的值-“空”。
因此A选项正确。
11.
定义无符号整数类为UInt,下面可以作为类UInt实例化值的是______。
A -369
B 369
C 0.369
D 整数集合{1,2,3,4,5}
分值:
2.5
答案:
B
[解析]只有B选项369可以用无符号整数来表示和存储。
A选项-369有负号,选项C0.369是小数,它们都不能用无符号整数类存储。
选项D是一个整数集合需要用数组来存储。
12.
若要通过位运算使整型变量a中的各位数字全部清零,以下选项正确的是______。
A a=a&0;
B a=a|0;
C a=a^0;
D a=!
a;
分值:
1
答案:
A
[解析]本题考查位运算符和位运算。
“|”运算符,1|0=1,0|0=0,所以选项B中a变量的各位数字保持不变,故B选项错误;“^”运算符,1^0=1,0^0=1,所以选项C中a变量的各位数字中,1保持不变,0变成1,故C选项错误;“!
”运算符,!
1=0,!
0=1,所以选项D中a变量的个位数字中,1变成0,0变成1,故D选项错误;“&”运算符,1&0=0,0&0=0,所以选项A中各位数字全部清零,故答案为A选项。
13.
一个C语言程序是由______。
A 一个主程序和若干子程序组成
B 函数组成
C 若干过程组成
D 若干子程序组成
分值:
2
答案:
B
14.
下列程序段中完全正确的是______。
A int*p;scanf("%d",&p);
B int*p;scanf("%d",p);
C intk,*p=&k;scanf("%d",p);
D intk,*p;*p=&k;scanf("%d",p);
分值:
1.5
答案:
C
[解析]A选项中错在没有对指针进行初始化,无效指针,并且在scanf("%d",&p)中无须再进行取地址操作;B选项中没有对指针进行初始化,无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。
C选项正确。
15.
某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。
A 10
B 8
C 6
D 4
分值:
2
答案:
C
[解析]根据二叉树的基本性质3:
在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。
16.
设有以下程序段:
structperson
{
floatweight;
charsex;
charname[10];
}rec,*ptr;
ptr=&rec;
从键盘读入字符串给结构体变量rec的name成员,错误的输入语句是______。
A scanf("%s",rec->name);
B scanf("%s",rec.name);
C scanf("%s",(*ptr).name);
D scanf("%s",ptr->name);
分值:
1
答案:
A
[解析]题中声明了—个结构类型person的同时,定义了2个结构变量,一个为rec,另一个为指针变量ptr。
A选项中,rec是一个结构体变量,结构体变量访问结构成员的方式应该为:
"rec.成员名",这里用法错误,答案为A选项。
17.
有以下程序
#include<stdio.h>
intfun()
{staticintx=1;
x*=2;
returnx;
}
main()
{inti,s=1;
for(i=1;i<=3;i++)s*=fun();
printf("%d\n",s);
}
程序运行后的输出结果是______。
A 30
B 10
C 0
D 64
分值:
2
答案:
D
[解析]第一次循环fun函数返回值为2,第二次循环由于x是static类型,x仍保留上次的值2,所以返回值为4,第三次循环由于x是static类型,x仍保留上次的值4,所以返回值为8,对三次返回值乘积值为64,所以答案选择D。
18.
若有定义语句:
charstr1[]="string",str2[8],*str3,str4[10]="string";,库函数strcpy的功能是复制字符串,以下选项中错误的函数调用是______。
A strcpy(str3,"HELLO!
")
B strcpy(str2,"HELLO!
")
C strcpy(str1,"HELLO!
")
D strcpy(str4,"HELLO!
")
分值:
1
答案:
A
[解析]题目中字符指针str3,没有为指针开辟内存,能作为函数参数,选择A选项。
19.
已定义以下函数:
intfun(int*p)
{return*p;}
fun函数的返回值是______。
A 一个整数
B 不确定的值
C 形参p中存放的值
D 形参p的地址值
分值:
1
答案:
A
[解析]返回值为指针变量指向的数据,该数据已被定义为整型。
因此A选项正确。
20.
在面向对象方法中,不属于“对象”基本特点的是______。
A 一致性
B 分类性
C 多态性
D 标识唯一性
分值:
1
答案:
A
[解析]在面向对象方法中,对象的基本特点包括:
标识唯一性、分类性、多态性、封装性、模块独立性好。
一致性不属于对象的基本特点,因此本题答案为A。
21.
以下关于C语言数据类型使用的叙述中错误的是______。
A 若只处理“真”和“假”两种逻辑值,应使用逻辑类型
B 若要保存带有多位小数的数据,可使用双精度类型
C 若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
D 整数类型表示的自然数是准确无误差的
分值:
1
答案:
A
[解析]C语言不存在逻辑类型,所以A错误。
单精度float类型可提供6位有效数字,双精度double类型可提供16位有效数字,所以要保存带有多位小数的数据,要使用双精度类型,所以B选项正确。
结构体类型可以保存不同类型数据,所以C正确,整数的表示是不存在误差的,所以D选项正确。
22.
以下程序的结果是______。
inta,b;
voidfun()
{a=100;b=200;}
main()
{inta=5,b=7;
fun();
printf("%d%d\n",a,b);
}
A 100200
B 57
C 200100
D 75
分值:
1
答案:
B
[解析]全程变量是可以在于函数中对其值作改变,且它也可作为函数间的值传递。
但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。
23.
下面描述中,不属于软件危机表现的是______。
A 软件过程不规范
B 软件开发生产率低
C 软件质量难以控制
D 软件成本不断提高
分值:
2.5
答案:
A
[解析]软件危机主要表现在:
软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。
因此本题答案为A。
24.
若有定义:
inta;floatb;doublec;,程序运行时输入:
a=1,b=2,c=3<回车>,能把值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是______。
A scanf("a=%d,b=%f,c=%lf",&a,&b,&c);
B scanf("%d%f%lf",&a,&b,&c);
C scanf("a=%d,b=%lf,c=%lf",&a,&b,&c);
D scanf("a=%d,b=%f,c=%f",&a,&b,&c);
分值:
1
答案:
A
[解析]格式字符d,输入十进制整数;格式字符f,输入浮点数;格式字符lf,输入双精度浮点数。
除了格式说明字符和附加格式字符外,如果还有其他字符,则在输入数据时要求按照这些字符在一一对应的位置原样输入。
程序运行时输入:
a=1,b=2,c=3,则scanf函数格式控制串应该是“a=%d,b=%f,c=%lf”。
25.
在关系数据库中,用来表示实体之间联系的是
A 树形结构
B 网状结构
C 线性表
D 二维表
分值:
1
答案:
D
[解析]数据库中的关系模型是采用二维表来表示实体与实体之间的联系。
26.
下列叙述中正确的是______。
A 程序执行的效率与数据的存储结构密切相关
B 程序执行的效率只取决于程序的控制结构
C 程序执行的效率只取决于所处理的数据量
D 以上三种说法都不对
分值:
1
答案:
A
[解析]数据的存储结构、程序处理的数据量、程序的算法等都会影响程序执行效率。
27.
以下数组定义中错误的是______。
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};
分值:
2
答案:
A
[解析]本题考核的知识点是二维数组的定义及初始化。
在定义一个二维数组同时初始化时,其第一维的长度可以省略。
二维数组的初始化列表可以只使用一重花括号,其中的每个值依次代表从第1行的第1个元素起,直到第1行满,接着代表第2行、第3行……的每一个元素,若第1维长度没有省略,则这些值总个数不得超过两个维度的乘积。
故选项D是正确的。
二维数组的初始化列表还可以使用二重花括号括起来,其中每一个内花括号代表一行的值,在内花括号中值的个数不得超过数组第二维的长度,若不足第2维长度,则该行多出部分值被初始化为0,若第一维省略,花括号的个数代表行数。
A选项第一维为2,故只有两行,但有三个花括号超出了行的要求,所以本题答案选A。
28.
设变量已正确定义并赋值,以下正确的表达式是______。
A x=y+z+5,++y
B int(15.8%5)
C x=y*5=x+z
D x=25%5.0
分值:
4
答案:
A
[解析]B与D选项中取模运算符%的左右两个操作数均应为整数,所以B、D错误。
C选项中不能将x+y的值赋给表达式y*5,所以C错误。
29.
有以下程序
main()
{inta,b,d=25;
a=d/10%9;b=a&&(-1);
printf("%d,%d\n",a,b);
}
程序运行后的输出结果是______。
A 6,1
B 2,1
C 6,0
D 2,0
分值:
1
答案:
B
[解析]C语言中,若/符号两边都为整数,则返回的是运算结果的整数部分。
%是取余运算,运算对象只能是整数,结果是两数相除后所得的余数,若运算量为负数,则结果的符号与被除数相同。
因此,a=d/10%9=25/10%9=2%9=2。
C语言中没有专门的逻辑值,而是用整型值代替:
非零整数表示逻辑真,零表示逻辑假;逻辑真的值为1,逻辑假的值为0。
所以,b=a&&(-1)=“真”&&“真”=“真”=1。
所以,选项B正确。
30.
有以下程序:
#include<stdio.h>
main()
{
int*p,x=100;
p=&x;x=*p+10;
printf("%d\n",x);
}
程序运行后的输出结果是______。
A 110
B 120
C 100
D 90
分值:
1
答案:
A
[解析]程序执行过程为:
定义指针p,指向变量x,x=(*p)+10=110,输出110,A选项正确。
31.
有以下程序:
#include<stdio.h>
main()
{
inta=1,b=3,c=5;
int*p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d\n",c);
}
程序执行后的输出结果是______。
A 1
B 2
C 3
D 4
分值:
1
答案:
C
[解析]该程序中int*p1=&a,*p2=&b,*p=&c;指定义三个指针变量,并赋值,即使p1指向a、p2指向b、p指向c。
*p=*p1*(*p2);该条语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3。
因此C选项正确。
32.
以下说法正确的是______。
A 由3种基本结构组成的结构化程序只能解决一些简单的问题
B 由3种基本结构组成的结构化程序可以解决任何复杂的问题
C 由3种基本结构组成的结构化程序只能解决那些可以结构化的问题
D 由3种基本结构组成的结构化程序只能解决一些数学上有解析解的问题
分值:
1
答案:
B
[解析]由3种基本结构组成的算法可以解决任何复杂的问题,由3种基本结构所构成的算法称为结构化算法,由3种基本结构所构成的程序称为结构化程序,故本题答案为B选项。
33.
设某二叉树的前序序列为ABC,中序序列为CBA,则该二叉树的后序序列为______。
A BCA
B CBA
C ABC
D CAB
分值:
1
答案:
B
[解析]二叉树遍历可以分为3种:
前序遍历(访问根节点在访问左子树和访问右子树之前)、中序遍历(访问根节点在访问左子树和访问右子树两者之间)、后序遍历(访问根节点在访问左子树和访问右子树之后)。
前序序列为ABC,则A为根节点。
中序序列为CBA,则C和B均为左子树节点或右子树节点,且C为B父节点,可知后序序列为CBA,故B选项正确。
34.
有以下程序
#include<stdio.h>
main()
{FILE*fp;
inta[10]={1,2,3,0,0},i;
fp=fopen("d2.dat","wb");
fwrite(a,sizeof(int),5,fp);
fwrite(a,sizeof(int),5,fp);
fclose(fp);
tp=fopen("d2.dat","rb");
fread(a,sizeof(int),10,fp);
fclose(fp);
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
程序的运行结果是______。
A 1,2,3,0,0,1,2,3,0,0,
B 1,2,3,1,2,3,0,0,0,0,
C 123,0,0,0,0,123,0,0,0,0,
D 1,2,3,0,0,0,0,0,0,0,
分值:
1
答案:
A
[解析]fwrite函数将数组a写入文件,写入两遍,读出后为选项A的值,所以选择A。
35.
设有如下函数定义:
intfun(intk)
{if(k<1)return0;
elseif(k==1)return1;
elsereturnfun(k-1)+1;
}
若执行调用语句:
“n=fun(3);”,则函数fun总共被调用的次数是______。
A 2
B 3
C 4
D 5
分值:
1
答案:
B
[解析]此题考查简单的循环,当执行n=fun(3)时,则函数fun执行3次。
窗体顶端
窗体底端
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 分类 模拟 529 真题含 答案 解析 交互