二级C语言笔试337
(总分:100.00,做题时间:90分钟)
一、{{B}}选择题{{/B}}(总题数:40,分数:70.00)
1.若有程序 fun(int a,int b} { static int c=0; c+=a+b; return c; } main() { int x=5,y=3,z=7,r, r=fun(y,x+y),z); r=fun(xy); printf("%d/n",r); } 上面程序的输出结果是_____。
(分数:2.00)
 A.23 
 B.15
 C.19
 D.18
解析:[评析] static声明的外部变量只限于彼本文件引用,而不能被其他文件引用。用static来
声明一个变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。调用第一个fun,其两个实参的值为(3,5+3)与7即8与7,在函数fun执行结束返回15。第二次调用fun时,由于static为静态类型,其值保留,执行fun(5,3)后,其返回值为23,故选A。
2.字符(char)型数据在微机内存中的存储形式是______。
(分数:2.00)
 A.反码
 B.补码
 C.EBCDIC码
 D.ASCII码 
解析:[评析] 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。
3.以下对枚举类型名的定义中正确的是______。
(分数:2.00)
&um a={one,two,three};
&um a {one=9,two=1,three}; 
&um a={"one","two","three"};
&um a{"one","two","three"};
解析:[评析] 声明枚举类型用enum开头。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat); 说明:1、在C编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。
4.数据库设计包括两个方面的设计内容,它们是______。
(分数:2.00)
 A.概念设计和逻辑设计 
 B.模式设计和内模式设计
 C.内模式设计和物理设计
 D.结构特性设计和行为特性设计
解析:[评析] 数据库设计可分为概念设计与逻辑设计。概念设计的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。逻辑设计的主要工作是将ER图转换为指定的RDBMS中的关系模型。
5.设有以下语句,其中不是对a数组元素的正确引用的是:______(其中O≤i<10) int a[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;
(分数:2.00)
 A.a[p-a]
 B.*(&
 C.p
 D.*(*(a+) 
解析:[评析] 观察程序可知,a实际上就是数组a的首地址,所以“*(a+i)”表示的就是数组a中的第i个元素的值,进而,我们可以知道*(*(a+i))必然不是对a数组元素的正确引用。
6.不能把字符串"Hello!"赋给数组b的语句是______。
(分数:2.00)
 A.char b[10]={'H','e','l','l','o','!'};
 B.char b[10]={'h','e','l','l','o','!'}; 
 C.char b[10];strcpy(b,"Hello!");
 D.char b[10]="Hello!":
解析:[评析] 在C语言中,大写字母和小写字母被认为是两个不同的字符,因此,“hello!”和“Hello!”是两个不同的字符串。
7.下列叙述中正确的是______。
(分数:2.00)
 A.线性表是线性结构 
 B.栈与队列是非线性结构
 C.线性链表是非线性结构
 D.二叉树是线性结构
解析:[评析] 一般将数据结构分为两大类型:线性结构与非线性结构。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。
8.下述关于数据库系统的叙中正确的是______。
(分数:2.00)
 A.数据库系统减少了数据冗余 
 B.数据库系统避免了一切冗余
 C.数据库系统中数据的一致性是指数据类型的一致
 D.数据库系统比文件系统能管理更多的数据
解析:[评析] 由于数据的集成性使得数据可为多个应用所共享,特别是在网络发达的今天,数据库与网络的结合扩大了数据关系的应用范围。数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据的不同出现应保持相同的值,而数据的不一致性指的是同一个数据在系统的不同拷贝处有不同的值。
9.设有如下程序 #inclide<stdio.h> main() { int **k,*j,i=100; j=&i; k=&j; printf("%d/n,"**k); } 上述程序的输出结果是______。
(分数:2.00)
 A.运行错误
 B.100 
 C.i的地址
 D.j的地址
解析:[评析] j=&i,j的值就是i的地址,*j=100,将j的地址赋给k,这时*k=j,那么,**k=*j,而*j=100,所以**k=100,最后的打印结果应当为100。
10.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。
(分数:2.00)
 A.概要设计
 B.详细设计
 C.可行性分析
 D.需求分析 
解析:[评析] 需求分析是对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。
11.以下叙述中正确的是______。
(分数:1.00)
 A.C语言比其他语言高级
 B.C语言可以不用编译就能被计算机识别执行
 C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 
 D.C语言出现的最晚,具有其他语言的一切优点
解析:[评析] 计算机语言分为低级语言、汇编语言和高级语言,C语言属于高级语言,但并不是说C语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;C语言出现在1972年到1973年间,并不是出现最晚的语言,所以选项D也是错误的。
12.设整型数i=5,则printf("%d",i+++++i);的输出为______。
(分数:1.00)
 A.10
 B.11
 C.12
 D.语法错误 
解析:[评析] C语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、-),在C语言解析表达式时,它总是进行贪婪咀嚼,边样,该表达式就被解析为i+++++i,显然该表达式不合C语言语法。
13.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是______。
(分数:1.00)
 A.控制流 
 B.加工
 C.数据存储
 D.源和潭
解析:[评析] 数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要图形元素有:加工(转换)、数据流、存储文件(数据源)、源和潭。
14.下面程序的输出是______。 main() {int k=11; printf("k=%d,k=%x/n",k,k,k); }
(分数:1.00)
 A.k=11,k=12,k=11
 B.k=-11,k=13,k=13
 C.k=11,k=013,k=0xb
 D.k=11,k=13,k=B 
解析:[评析] 在C语言格式字符的输出中,“%d”是以带符号的十进制形式输出整数;“%o”是
以8进制无符号形式输出整数(不输出前导符0);“%x”是以16进制无符号形式输出整数(不输出前导符0x)。
15.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______。
(分数:1.00)
 A.地址传递
 B.单向值传递 
 C.由实参传递给形参,再由形参传递给实参
 D.传递方式由用户指定
解析:[评析] 语言规定,实参变量对形参变量的数据传递是“单向值传递”,只由实参传给形参。在内存中,实参单元与形参单元是不同的单元。调用结束后,实参单元仍保留并维持原值。
enum c++
16.以下程序的输出结果是______。 #include<stdio.h> #define FUDGE(y) 2.84+y #define
PR(a) printf("%d/n",(int)(a)) #define PRINT1(a) PR(a);putchar('/n') main() { int x=2; PRINT1(FUDGE(5)*x); }
(分数:1.00)
 A.11
 B.12 
 C.13
 D.15
解析:[评析] 在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案为“12”。
17.下面关于完全二叉树的叙述中,错误的是______。
(分数:1.00)
 A.除了最后一层外,每_层上的结点数均达到最大值
 B.可能缺少若干个左右叶子结点 
 C.完全二叉树一般不是满二叉树
 D.具有结点的完全二叉树的深度为[log2n]+1
解析:[评析] 满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干子结点(叶子结点)的二叉树。
18.请选出以下程序的输出结果______。 #include<stdio.h> sub(x,y,z) int x,y*z; {*z=y-x;} main(){ int a,b,c; sub(10,5,&a);sub(7,a,&b);sub(a,b,&c); printf("%d,%d,%d/n",a,b,c); }
(分数:1.00)
 A.5,23
 B.-5,-12,7 
 C.-5,-12,-17
 D.5,2,-7
解析:[评析] sub()函数的作用是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a),10和5属于值传递,a是属于地址传递,也就是a与z指向了同一个存储单元,在执行函数后,a的值随*z变化,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化其值为-5-7=-12,在sub(a,b,&c)后,c的值发生变化,其值为-12-(-5)=-7。
19.有以下程序: #include<stdio.h> main(){ char c[6]; int i=0; for(;i<6;c[i]=getchar(),i++); for(i=0;i<6;i++)putchar(c[i]); printf("/n"); } 如果从键盘上输入: ab<回车> c<回车> def<回车> 则输出结果为______。
(分数:1.00)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。