1、二级 C语言笔试-315 及答案解析(总分:90.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.不合法的 main函数命令行参数表示形式是(分数:1.00)A.main(int a,char*c)B.main(int arc,char*arv)C.main(int argc,char *argv)D.main(int argv,char *argc)2.有如下程序段int *p,a=10,b=1;p=n;j+)if(aiaj)t=ai;ai=aj;aj=t; main()int aa10=1,2,3,4,5,6,7,8,9,10,i;sort(n;j+)if(ai
2、aj)t=ai;ai=aj;aj=t; main()int aa10=1,2,3,4,5,6,7,8,9,10,i;sort(&aa3,5);for(i=0;i10;i+)printf(“%d,“,aai);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.1,2,3,8,7,6,5,4,9,10, D.1,2,10,9,8,7,6,5,4,3,解析:解析 C 语言中,实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参也要遵循这一规则,调用函数不可能改变实参指针
3、变量的值,但可以改变实参指针变量所指变量的值。47.算法的空间复杂度是指(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.执行算法需要的内存空间 解析:解析 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间。48.若变量已正确定义,以下 while循环不断输出读入的字符,当读入回车换行符时结束循环。正确的程序段是(分数:1.00)A.while(ch=getchar()=/N)putchar(ch);B.while(ch=getchar()=/
4、N)putchar(ch);C.whle(ch=getchar()!=/N)putchaf(ch);D.while(ch=getchar()!=/N)putchar(ch); 解析:解析 换行符是一个转义字符,应该是/n,而不是/N。选项 B)中,因为关系运算符“= =”的优先级高于赋值运算符“=”,所以 ch得到的值是关系运算 getchar()=/n的结果而不是从键盘输入的字符,因而不正确,故正确答案为选项 D)。49.下列程序的运行结果为#includestdio.hvold abc(char*str)int a,b;for(a=b=0;stra! =/0;a+)if(stra!=c)s
5、trb+=stra;strb=/0;void main()char str=“abcdef“;abc(str);printf(“str=%s“,str);(分数:1.00)A.str=abdef B.str=abcdefC.str=aD.str=ab解析:解析 本题考查了用字符指针引用字符数组中的字符及对字符的操作。函数 abc()的 for语句执行过程是:丛字符指针 str所指向的字符数组的第一个元素开始,逐一判断字符是否为c,若不是就执行一次数组元素的赋值过程,若字符为c就不执行,所以答案为 A)。50.以下描述中正确的是(分数:1.00)A.由于 do-while循环中循环体语句只能是一
6、条可执行语句,所以循环体内不能使用复合语句B.do-while循环由 do开始,用 while结束,在 while(表达式)后面不能写分号C.在 do-while循环体中,是先执行一次循环,再进行判断 D.do-while循环中,根据情况可以省略 while解析:解析 do-while 语句的一般形式为:do 循环体语句 while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while 后必须要有分号作为语句的结束,在 do-while循环中,不可以省略 while。二、填空题(总题数:18,分数:40.00)51.数据的逻辑结构有线性结构和 【1】 两大类。(分数:2
7、.00)填空项 1:_ (正确答案:非线性结构)解析:解析 数据的逻辑结构有线性结构和非线性结构两大类。52.顺序存储方法是把逻辑上相邻的结点存储在物理位置 【2】 的存储单元中。(分数:2.00)填空项 1:_ (正确答案:相邻)解析:解析 常用的存储表示方法有 4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。53.一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的 【3】 。(分数:2.00)填空项 1:_ (正确答案:可重用性)解析:解析 本题考查了继承的优点:相似的对象可以共享程序代码和数据结
8、构,从而大大减少了程序中的冗余,提高软件的可重用性。54.软件工程研究的内容主要包括: 【4】 技术和软件工程管理。(分数:2.00)填空项 1:_ (正确答案:软件开发)解析:解析 基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。软件开发技术包括:软件开发方法学;开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件工程管理包括:软件管理学、软件工程经济学,以及软件心理学等内容。55.关系操作的特点是 【5】 操作。(分数:2.00)填空项 1:_ (正确答案:集合)解析:解析 在关系操作中,所有操作对象与操作结果都是关系。而关系定义为元
9、数相同的元组的集合。因此,关系操作的特点是集合操作。56.以下程序的输出结果是 【6】 。main()int i=010,j=10;printf(“%d,%d/n“,i,j);(分数:2.00)填空项 1:_ (正确答案:8,10)解析:解析 以 0开头的是八进制数,输出时将其转换成十进制数。57.若从键盘输入 58,则以下程序输出的结果是 【7】 。main()int a;scanf(“%d“,&a);if(a50)printf(“%d“,a);if(a40)printf(“%d“,a);if(a30)printf(“%d“,a);(分数:2.00)填空项 1:_ (正确答案:585858)
10、解析:解析 本题考查对 if语句的掌握,当输入 58以后,程序中的 3个 if语句都成立,所以分别输出58。58.现有如下定义:struct aaint a;float b;char c;*p;现需用 malloc函数动态的申请一个 struct aa类型大小的空间(由 p指向),则定义的语句为: 【8】 。(分数:2.00)填空项 1:_ (正确答案:p=(struct aa *)malloc(sizeof(struct aa);)解析:解析 ANSI C 标准规定 malloc函数的返回值类型为 void*,函数的调用形式为:malloc(size)要求 size的类型为 unsigned
11、 int。由于返回类型为 void*,所以在调用函数时,必须利用强制转换将其转换为所需要的类型。59.下列程序的输出结果是 16.00,请填空。main()int a=9,b=2;float x= 【9】 ,y=1,1,z;z=a/2+b*x/y+1/2;printf(“%5.2f/n“,z);(分数:2.00)填空项 1:_ (正确答案:6.6)解析:解析 本题最后一条语句,表示以浮点格式输出 z的值,宽度为 5,其中包含 2位小数,应该注意的是,两个整型运算结果仍为整型,如 1/2的结果为 0,对本题可逐步求解:16.00=9/2+2*x/1.1+1/216.00=4+2*x/1.1+01
12、2.00=2*x/1.1所以,x 的值为 6.6。60.下面程序的功能是:计算 110 之间的奇数之和与偶数之和,请填空。#includestdio.hmain()int a,b,c,i;ac0;for(i0;i10;i+2)a+=i;【10】 ;c+=b; printf(“偶数之和=%d/n“,a);printf(“奇数之和=%d/n“,c-11);(分数:2.00)填空项 1:_ (正确答案:b=i+1)解析:解析 本题考查了 for循环语句的执行过程。i+ =2 是修正表达式,执行一次循环体后 i的值就增加 2,i 的初始值为 0,每次加 2之后和累加至 a,所以 a的值就是 110 之
13、间的偶数之后;b 的值是111 之间的奇数和,但在输出 b值时 c去掉多加的 11,即为 110 之间的奇数之和。61.下面程序的运行结果是 【11】 。#includestdio.h#define SIZE 12main()char sSIZE;int i;for(i=0;iSIZE;i+) si=A+i+321;sub(s,7,SIZE-1);for(i=0;iSIZE;i+) printf(“%c“,si);printf(“/n“);sub(char*a,int tl,int t2)char ch;while(t1t2)ch=*(a+t1);*(a+t1)=*(a+t2);*(a+t2)=ch;