二级C语言130.docx
- 文档编号:9249932
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:17
- 大小:22.68KB
二级C语言130.docx
《二级C语言130.docx》由会员分享,可在线阅读,更多相关《二级C语言130.docx(17页珍藏版)》请在冰点文库上搜索。
二级C语言130
二级C语言-130
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
100.00)
1.数据库系统的核心是______。
(分数:
2.50)
A.数据模型
B.数据库管理系统 √
C.数据库
D.数据库管理员
解析:
[解析]本题考查对数据库系统的理解。
数据库系统由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台5个部分构成。
其中数据库管理系统是数据库系统的核心,它负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等工作。
2.以下选项中正确的实型常量是______。
(分数:
2.50)
A.0
B.3.1415 √
C.0.329×102
D.871
解析:
[解析]实型常量又称实数或浮点数。
在C语言中可以用两种形式表示一个实型常量。
一是小数形式。
二是指数形式。
因此正确答案为B。
3.为了提高软件的独立性,模块之间最好是______。
(分数:
2.50)
A.控制耦合
B.公共耦合
C.内容耦合
D.数据耦合 √
解析:
[解析]在模块耦合性类型中,模块之间独立性最差的类型是内容耦合,在实际编程中一定要避免出现,为了提高模块的独立性,模块之间最好是数据耦合。
模块耦合越弱,则说明模块的独立性越强。
4.下列叙述中正确的是______。
(分数:
2.50)
A.算法的执行效率与数据存储结构无关
B.算法的空间复杂度是指算法程序中指令(或语句)的条数
C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 √
D.以上3种描述都不对
解析:
[解析]在程序设计中,算法执行效率与数据的存储结构密切相关。
算法的空间复杂度是指算法执行过程中所需存储空间。
5.有下列二叉树:
进行中序遍历的结果是______。
(分数:
2.50)
A.ABCDFEG √
B.ACBDFGE
C.ABDCGEF
D.FCADBEG
解析:
[解析]有3种遍历方法:
前序、中序和后序。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
结果为ACBDFEG。
6.下列标识符不是关键字的是______。
(分数:
2.50)
A.break
B.char
C.Swithch √
D.return
解析:
[解析]在C语言中,字母区分大小,所以break、char、return、switch都是C语言中的关键字,而Swithch不是。
7.下列运算符中优先级最低的算符是______。
(分数:
2.50)
A.|| √
B.!
=
C.<=
D.+
解析:
[解析]C语言中规定运算符的优先顺序:
一元算术运算符→二元算术运算符→关系运算符→逻辑运算符→赋值运算符,A项中为逻辑运算符,B项和C项都为关系运算符,D项为一元运算符。
因此最低的是A项。
8.C语言结构体类型变量在程序执行期间,______。
(分数:
2.50)
A.所有成员一直驻留在内存中 √
B.没有成员驻留在内存中
C.部分成员驻留在内存中
D.只有一个成员驻留在内存中
解析:
[解析]C语言的结构体类型变量在程序执行期间所有成员一直驻留在内存中。
9.下列4个关于C语言的结论中错误的是______。
(分数:
2.50)
A.可以用do-while语句实现的循环一定可以用while语句实现
B.可以用for语句实现的循环一定可以用while语句实现
C.可以用while语句实现的循环一定可以用for语句实现
D.do-while语句与while语句的区别仅是关键字“while”出现的位置不同 √
解析:
[解析]本题考查对各个循环语句的理解。
①do-while语句、for语句、while语句所实现的循环可以相互替代;②do-while语句至少执行一次,而while是符合条件执行,不符合不执行。
10.有下列函数定义:
intfun(doublea,doubleb)
{returna*b;}
若下列选项中所用变量都已经正确定义并赋值,错误的函数调用是______。
(分数:
2.50)
A.if(fun(x,y)){……}
B.z=fun(fun(x,y),fun(x,y));
C.z=fun(fun(x,y)x,y); √
D.fun(x,y);
解析:
[解析]本题考查函数在函数调用时参数的传递形式,形参与实参参数个数类型要一致。
11.下列叙述中正确的是______。
(分数:
2.50)
A.break语句只能用于switch语句体中
B.continue语句的作用是使程序的执行流程跳出包含它的所有循环
C.break语句只能用在循环体内和switch语句体内 √
D.在循环体内使用break语句和continue语句的作用相同
解析:
[解析]break只能在循环体内和switch语句内。
如果break出现在循环体的switch语句体内时,表示跳出该switch语句体,但并不能中止循环体的执行。
12.已知大写字母A的ASCII码是65,小写字母a的ACSII码是97。
下列能将变量c中的大写字母转换为对应小写字母的语句是______。
(分数:
2.50)
A.c=(c-"A")%26+"A"
B.c=c+32 √
C.c=c-"A"+"A"
D.c=("A"+C)%26-"a"
解析:
[解析]根据ASCII码选项可知大写字符A与小写字符a的ASCII码相差32,而选项D中应该是加上"a",选项A和C左侧的表达式都是大写字符C与大写字符A的差与"a"的ASCII代码的和就是小写字符c的ASCII代码。
13.下列叙述中正确的是______。
(分数:
2.50)
A.在赋值表达式中,赋值号的左边既可以是变量,也可以是任意表达式
B.实型变量中允许存放整型数
C.若a和b类型相同,在执行赋值a=b后,b中的值将放入a中,但b中的值不变
D.在C程序中,求取余运算符“%”两边的类型相同时才能进行运算 √
解析:
[解析]选项A,在赋值表达式中,赋值号的左边只能是变量或者是代表某个存储单元的表达式,不能是任意表达式,右边也不得出现表达式;选项B中,整型变量中只能存放整型数,但实型变量中能存放实型数,也能存放整型数;选项C,表达式a=b的意思是把变量b的值赋给变量a,从而覆盖a中原来值;选项D,要求取余运算符"%"两边的类型相同。
14.若有说明“chars1[30]="abc",s2[]="defghi";",则在使用函数stcat(s1,s2)后,结果是______。
(分数:
2.50)
A.s1的内容更新为abcdefghi
B.s1的内容更新为defghi/0
C.s1的内容更新为defghiabc/0
D.s1的内容更新为abcdefghi/0 √
解析:
[解析]strcat(s1,s2)函数的功能是把s2字符串连接到s1字符串的末尾,要保证s1有足够的空间容纳下连接后的字符串。
15.在16位编译系统上,若有定义“inta[]={10,20,30},*p=&a;”,当执行“p++;”后,下列说法错误的是______。
(分数:
2.50)
A.p向高地址移了一个字节 √
B.p向高地址移了一个存储单元
C.p向高地址移了两个字节
D.p与a+1等价
解析:
[解析]因为p是整型的指针变量,因此其移动一个位置即两个字节,故选择A选项。
16.下列程序的执行结果是______。
#include<stdio.h>
main()
{inta,b,c;
a=b=2,c=1;
c=(a++)-1;printf("%d,%d",a,c);
c+=-a+++(++b);printf("%d,%d",a,c);
}
(分数:
2.50)
A.3,14,1 √
B.3,14,2
C.2,04,1
D.2,14,1
解析:
[解析]本题主要考查自加减运算符(++,--)的使用。
①如果作为前缀变量“++a,--a”,在使用a之前,先使a的值加1或者减1,再使用表达式的值参与运算;②后缀变量“a++,a--”,先使用表达式的值参与运算,在使用a之后,再使i的值加1或者减1。
在本题中计算表达式c=(a++)-1时先使用a的值进行计算,结果为c=2-1=1,然后将a的值加1,即执行完此句后a的值是3;表达式c+=-a+++(++b)也可写成c=c+(-a++)+(++b),c=1+(-3)+3=1,此时a=4,b=3。
17.若有定义“doublea;”,则正确的输入语句是______。
(分数:
2.50)
A.scanf("%1f",a);
B.scanf("%f",&a);
C.scanf("%1f",&a)
D.scanf("%1e",&a); √
解析:
[解析]本题考查scanf函数的调用形式:
scanf(格式字符串,输入项地址表)。
题中定义变量a为双精度型变量,双精度变量的格式符为“le”;变量的地址用取地址符“&”加变量名表示,所以选项D正确。
18.若有以下程序:
#include<stdio.h>
voidfun(float*a,float*b)
{floatw;
*a=*a+*a;w=*a;*a=*b;*b=w;
}
main()
{floatx=2..0,y=3.0,*px=&x,*py=&y;
fun(px,py);printf("%2.0f,%2.0f/n",x,y);
}
程序的输出结果是______。
(分数:
2.50)
A.4,3
B.2,3
C.3,4 √
D.3,2
解析:
[解析]#include<stdio.h>
voidfun(float*a,float*b)//a即指向px的指针,b即指向py的指针,则*a指向x,*b指向y
{
floatw;
*a=*a+*a;//将x地址存放的数据自加,x变为4
w=*a;
*a=*b;
*b=w;//将x和y地址里面的数据互换,则x变为3,y变为4
}
main()
{
floatx=2.0,y=3.0,*px=&x,*py=&y;//px和py分别是指向x和y地址的指针
fun(px,py);
printf("%2.0f,%2.0f/n",x,y);//%2.0f表示结果前面有2个空格,小数点后有0位,即保留到个位
}
19.有以下程序:
main()
{inta=0,b=10,c=0,d=0;
if(a=1)b=1;c=2;
elsed=3;
printf("%d,%d.%d,%d/n",a,b,c,d);
}
程序输f¨______。
(分数:
2.50)
A.0,1,2,0
B.0,0,0,3
C.1,1,2,0
D.编译有错 √
解析:
[解析]语法错误。
else与if之间不应再用其他语句,如果满足if条件,则继续执行if后面的语句;不满足就执行else语句。
20.若有以下程序:
#include<stdio.h>
voidsub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);
printf("%d,%d,%d/n",a,b,c);
}
程序的输出结果是______。
(分数:
2.50)
A.5,2,3
B.-5,-12,-7 √
C.-5,-12,-17
D.5,-2,-7
解析:
[解析]sub里的三个变量,x,y是传的值,也就是传的一个值的副本。
而z则是传的地址,sub函数体里对z的操作会影响到传递进来的那个变量。
b是指的变量本身,&b是指的变量的地址。
21.以下程序的输出结果是______。
voidprt(int*m,intn)
{inti;
for(i=0;i<n;i++)m[i]++;}
main()
{inta[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]);}
(分数:
2.50)
A.1,2,3,4,5
B.2,3,4,5,6 √
C.3,4,5,6,7
D.2,3,4,5,1
解析:
[解析]函数调用时,prt函数的作用是为使m数组中的数自增1,因此数组下标从0开始,每个元素都自加1。
22.有以下程序:
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);
}
程序执行后的输出结果是______。
(分数:
2.50)
A.Prohsbn √
B.Prphsbn
C.Progsbn
D.Program
解析:
[解析]本题中使用了函数的调用,由fun1函数中的while循环可知,循环的作用是为了把q所指向的内容增加1,而从主函数传到函数时是从下标为3开始传,因此当调用函数执行完后,传过去的字符串为"hsbn",前面不变。
23.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是______。
intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][0];
(分数:
2.50)
A.t[2][0]
B.t[2][2]
C.t[1][2] √
D.t[2][1]
解析:
[解析]从for循环可知,pt是指向行的首地址的指针变量,因此由指针的表示方法可知:
*(*(pt+1)+2)=pt[1][2]=t[1][2]。
24.有以下程序:
main()
{union
{charch[2];
intd;
}s;
s.d=0x4321;
printf("%x,%x/n",s.ch[0],s.ch[1]);
}
在16位编译系统上,程序执行后的输出结果是______。
(分数:
2.50)
A.21,43 √
B.43,21
C.43,00
D.21,00
解析:
[解析]s是一个公用体,d的值分别与ch中的两个元素的值相同,d的高位放在ch[1]中、低位放在ch[0]中,因此输出的结果为21,43。
25.以下四个程序中不能对两个整型值进行交换的是______。
(分数:
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;
}
26.有以下程序:
main()
{intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12,},{13,14,15,16}},i,j;
for(i=0;i<74;i++)
{for(j=0;j<i;j++)printf("%4c","");
for(j=______;j<4;j++)printf("%4d",num[i][j]);
printf("n");}}
若要按以下形式输出数组有上半三角
1234
678
1112
16
则在程序下划线处应填入的是______。
(分数:
2.50)
A.i-1
B.i √
C.i+1
D.4-i
解析:
[解析]本题中要求输出右上半角的数,对角线上的数的下标相同,所以j=i。
27.设有以下定义和语句:
charstr[20]=”Program”,*p;
p=str;
则以下叙述中正确的是______。
(分数:
2.50)
A.*p与str[0]的值相等 √
B.str与p的类型完全相同
C.str数组长度和p所指向的字符串长度相等
D.数组str中存放的内容和指针变量p中存放的内容相同
解析:
[解析]本题中的str为一个字符型数组,p为字符型指针变量,其指向str的首地址,*p的值为str[0]中的字符,其类型、长度不同,但字符第一个相同,故答案选择A。
28.有下列程序:
#include<stdio.h>
main()
{intx=0;
inty=0;
while(x<77&&++y)
{y--;
x++;}
printf("%d,%d",y,x);
}
程序的输出结果是______。
(分数:
2.50)
A.0,7 √
B.7,7
C.0,6
D.1,6
解析:
[解析]本题考查while循环。
在while循环中,y自加每次循环都加1,在循环体内y--每次减1,所以总的y值不变,当x自加到7时,不满足循环条件,循环结束。
29.有以下程序:
#include<stdio.h>
main()
{inta[]={2,4,6,8,10},y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)y+=*(p+x);
printf("%d/n",Y);
}
程序的输fH结果是______。
(分数:
2.50)
A.17
B.18
C.19 √
D.20
解析:
[解析]p=&a[1]则p指向元素为4,y+=*(p+x);相当于y=1+4+6+8=19。
30.#define能做简单的替代,用宏来替代计算多项式5*x*x+5*x+5的值的函数f,正确的宏定义语句为______。
(分数:
2.50)
A.#definef(x)5*x*x+5*x+5
B.#definef5*x*x+5*x+5
C.#definef(a)(5*a*a+5*a+5) √
D.#define(5*x*x+5*x+5)f(x)
解析:
[解析]本题考查带参数宏的格式:
#define标识符(形参表)形参表达式。
其功能是:
把预处理程序中出现的所有带实参的宏名,展开形成由实参组成的表达式。
故C正确。
31.函数调用strcat(strcpy(str1,str2),str3)的功能是______。
(分数:
2.50)
A.将字符串str1复制到字符串str2中后再连接到字符串str3之后
B.将字符串str1连接到字符串str2之后再复制到字符串str3之后
C.将字符串str2复制到字符串str1之后再将字符串str3连接到字符串str1之后 √
D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中
解析:
[解析]strcat(s1,s2)函数的功能是把s2字符串连接到s1字符串末尾,strcpy(s1,s2)是把s2字符串复制到s1字符串,要保证s1的容量。
32.有以下程序:
main()
{inta=0,b=0;
a=10;/*给a赋值
b=20;给b赋值*/
printf("a+b=%d/n",a+b);//输出计算机结果
}
程序运行后的输出结果是______。
(分数:
2.50)
A.a+b=10 √
B.a+b=30
C.30
D.出错
解析:
[解析]本题中/*……*/为多行注释,所以可知b=20为注释语句,在程序运行时不起作用,b仍为0,所以本题中选项A正确。
33.若希望下列的程序运行后输出25,程序空白处的正确选项是______。
main()
{inti,j=50,a[]={7,4,10,5,8};
for______
j+=a[i];
printf("%d",j-40);
}
(分数:
2.50)
A.i=1;i<4;++i
B.i=1;i<3;++i
C.i=4;i>2;i--
D.i=2;i<4;++i √
解析:
[解析]要想使程序输出是25,则在printf中,j-40=25,j=65,而j初值是50,“j+=a[i];”也可写成i=j+a[i];,j=50+a[i]=65,当a[i]=15,条件满足,数组下标由0开始,当i=2时,指向元素10,i=3时,10+5=15,退出循环体,所以选项D正确。
34.下列程序的输出结果是______。
#include<stdio.h>
main()
{inta=0,i;
for(i=1;i<5;i++)
{switch(i)
{case0:
case3:
a+=1;
case1:
case2:
a=2;
default:
a+=3;
}
}
printf("%d",a);
}
(分数:
2.50)
A.19 √
B.18
C.6
D.8
解析:
[解析]本题考查switchcase开关语句,default退出继续循环。
当i=1时,执行case1,因为没有break语句,所以依次往下运行,a=a+2=2,a=a+3=5;当i=2时,执行case2,没有break语句,所以依次往下运行,a=a+2=7,a=a+3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 130