2007年9月二级c答案出来了吗

如题所述

二级C笔试选择题题目和个人答案见解

发这个帖子只是想知道我的答案对不对,最后统计分数,因为大家都知道二级C等成绩出来这时间……我不是什么高手,也犯了一些低级错误,凡是我看得出来的都在下面的题里改正了(下面写“应该选……”都是改了的……),答案不能保证全对,所以把试题也放在上面,有什么意见我们一起讨论下。
PS:题目来自同论坛转贴的考试吧的试题,答案是我自己做的,难点的题都有解释,有些题太简单就没写解释。另外,那个网站的38到40题帖错了,所以我这里没有那些题,希望有这些题的朋友回帖补充下,或者发个链接也行。

选择题
1) 软件是指
A) 程序 B)程序和文档 C)算法加数据结构 D)程序,数据和相关文档的完整集合
我选的D,就冲人家说的这么专业……

2) 软件调试的目的是
A) 发现错误
B) 改正错误
C) 改善软件性能
D) 验证软件正确性
我选的B,测试的目的是发现错误,调试的目的是发现和改正错误

3) 在面向对象方法中,实现信息隐蔽是靠
A) 对象的继承
B) 对象的多态
C) 对象的封装
D) 对象的分类
我选的C,这题应该不会疑问吧?

4) 下列叙述中,不符合良好程序设计风格的是
A) 程序的效率第一,清晰第二
B) 程序的可读性号
C) 程序中要有必要的注释
D) 输入数据前要有提示信息
我选的A,它正好说反了

5) 下列叙述中正确的是
A) 程序执行效率与数据的存储结构密切相关
B) 程序执行效率只取决于程序的控制结构
C) 程序的执行效率只取决于所处理的数据量
D) 以上三种说法都不对
我选的A,蒙的,望解答

6) 下列叙述中正确的是
A)数据的逻辑结构与存储结构必定是一一对应的
B)由于计算机存储空间是向量式存储结构,因此,数据的存储结构一定是线性结构
C)程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构
D)以上三种说法都不对
我选的D,没把握,望解答

7) 冒泡排序在最坏的情况下比较次数是
A)n(n+1)/2 B)nlog2n C)n(n-1)/2 D)n/2
我选的C,计算过程(1+n-1)*(n-1)/2=n(n-1)/2

8) 一颗二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为
A)219 B)221 C)229 D)231
我选的A,画图猜规律猜出来的,二叉树中度为2的结点比度为0的结点数目多一个,所以这棵树中度为2的结点有69个,然后增加一个度为1的结点,发现不会影响度为2的结点和叶子结点的数目,所以二叉树总结点为69+70+80=219,不过我有个同学说他把整个树都画了出来……数量好像是C,请告人解答

9) 下列叙述中正确的是
A) 数据库系统是一个独立的系统,不需要操作系统的支持
B) 数据库技术的根本目标是要解决数据的共享问题
C) 数据库管理系统就是数据库系统
D) 以上三种说法都不对
我选的B,这句话是绝对正确的,其他选项没看……

10)下列叙述中正确的是
A)为了建立一个关系,首先要构造数据的逻辑关系
B)表示关系的二维表中各元组的每一个分量还可以分成若干数据项
C)一个关系的属性名表称为关系模式
D)一个关系可以包括多个二维表
我选的C,答案不确定,B和D肯定错了,A不肯定,C在三级数据库中没有原句,不过意思是那个意思……
11)C语言源程序名的后缀是
A) .exe B) .C C) .obj D) .cp
我选的B

12)可在C程序中用作用户标志符的一组是
A) and B) Date C) Hi D) case
_2007 y-m-d Dr.Tom Big1
我选的A,and不是关键字,B中出现了-,C中出现了 . ,D中case是关键字,都不合法

13)以下选项中,合法的一组C语言数值常量是
A)028 B)12. C).177 D)0x8A
.5e-3 0Xa23 4e1.5 10,000
-0xf 4.5e0 0abc 3.e5
应该选B。A中028是八进制,不该出现8,C中4e1.5错了,e后面不该是小数,D中10,000错误,没有这种写法。(此题原先答案错误,已改正)

14)以下叙述中正确的是
A)C语言程序将从源程序中第一个函数开始执行
B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C)C语言规定必须用main作为主函数名,程序从此开始执行,在此结束。
D)main可作为用户标志符,所以命名任意一个函数作为主函数
我选的C,这是纯概念

15)若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是
A)scanf(“%d”,a,b,c); B)scanf(“%d%d%d”,a,b,c);
C)scanf(“%d”,p); D)scanf(“%d”,&p);
我选的C,scanf函数输入的需要是地址

16)以下关于long,int和short类型数据占用内存大小的叙述中正确的是
A)均占4个字节 B)根据数据的大小来决定所占内存的字节数
C)由用户自己定义 D)由C语言编译系统决定
我选的D,说简单点就是由软件决定,比如VC++中int类型和C中int类型占的字节数就不同,看是多少位(16位,32位之类)的编译系统。

17)若变量均已正确定义并赋值,以下合法的C语言赋值语句是
A)x=y==5; B)x=n%2.5 C)x+n=I; D)x=5=4+1;
我选的A,A意思是把表达式y==5的值赋给x,B中%后面只能是整数,C中=左边不能写表达式(好像),D中=号左边不能写常量。

18)有以下程序段
int j; float y; char name[50];
scanf(“%2d%f%s”,&j,&y,name);
当执行上述程序段是,从键盘输入55566 7777abc后,y的值为
A)55566.0 B)566.0 C)7777.0 D)566777.0
我选的B,scanf函数最前面的%2d是说j只取前两个数,所以是55,然后y取566,后面空格作为分隔符。

19)若变量已正确定义,有以下程序段
i=0;
do printf(“%d,”,i); while(i++);
printf(“%d”,i);
其输出结果为
A)0,0 B)0,1 C)1,1 D)程序进入无险循环
应该选B,第一次执行while那句时就跳出循环了,因为当时i=0。

20)有以下计算公式(公式就不写了,考过试的应该都知道,用公式编辑器太麻烦)
若程序前面已在命令中包含math.h文件,不能正确计算上述公式的是
A)if(x>=0) y=sqrt(x); B)y=sqrt(x);
else y=sqrt(-x); if(x<0) y=sqrt(-x);
C)if(x>=0) y=sqrt(x); D)y=sqrt(x>=0?x:-x);
if(x<0) y=sqrt(-x);
我选的B,sqrt公式里面不能是负数。
21)设有条件表达式:(EXP)?i++:j--,则以下表达式中与(EXP)完全等价的是
A)(EXP==0) B)(EXP!=0) C)(EXP==1) D)(EXP!=1)
我选的B,这题论坛上有人讨论过了。

22)有以下程序
#include<stdio.h>
main()
{
int y=9;
for( ; y>0; y--)
if(y%3==0) printf(“%d”,--y);
}
程序运行结果是
A)741 B)963 C)852 D)875421
我选的C,这题程序试过

23)已有定义,char c; ,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是
A)isupper(c) B)’A’<=c<=’Z’ C)’A’<=c&&c<=’Z’ D)c<=(‘z’-32)&&(‘a’-32)<=c
我选的B,根本没这种写法……

24)有以下程序
#include<stdio.h>
main()
{
int i,j,m=55;
for(i=1;i<=3;i++)
for(j=3;j<=i;j++) m=m%j;
printf(“%d”,m);
}
程序的运行结果是
A)0 B)1 C)2 D)3
我选的B,应该不用解释吧。

25)若函数调用时的实参为变量,以下关于函数形参和实参的叙述正确的是
A)函数的实参和其对应的形参共占同一个存储单元
B)形参只是形式上的存在,不占存储单元
C)同名的实参和形参占同一存储单元
D)函数的形参和实参分别占不同的存储单元
我选的D

26已知字符’A’的ASCII码值是65,字符变量c1的值是’A’,c2的值是’D’。执行语句
printf(“%d,%d”,c1,c2-2);后输出结果是
A)A,B B)A,68 C)65,66 D)65,68
我选的C

27)以下叙述中错误的是
A)改变函数形参的值,不会改变对应的实参的值
B)函数可以返回地址值
C)可以给指针变量赋一个整数作为地址值
D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
我选的C,改变形参的值不会改变实参的值。函数返回值是指针就等于返回地址值。C没试过,D是二级C书上写的,指针可以指向空值NULL,前提是必须包含stdio.h

28)以下正确的字符串常量是
A)”\\\” B)’abc’ C)Olympic Games D)””
我选的D,A中前两个\\是代表输出\,后面的\”代表输出”,所以这个字符串差一个”,B错误,不能使用单引号,C没有引号也错,D就是空串,””写的字符串末尾会自动赋值NULL

29)设有定义:char p[]={‘1’,’2’,’3’},*q=p;以下不能计算出一个char型数据所占字节数的表达式是
A)sizeof(p) B)sizeof(char) C)sizeof(*q) D)sizeof(p[0])
我选的A

30)有以下函数
int aaa(char *s)
{
char *t=s;
while(*t++);
t--;
return(t-s);
}
以下关于aaa函数的功能的叙述正确的是
A)求字符串s的长度 B)比较两个串的大小
C)将串s复制到串t D)求字符串s所占字节数
我选的A
31)有以下程序
#include<stdio.h>
void fun(char **p)
{
++p; printf(“%s\n”,*p);
}
main()
{
char *a[]={“Morning”,”Afternoon”,”Evening”,”Night”};
fun(a);
}
程序的运行结果是
A)Afternoon B)fternoon C)Morning D)orning
我选的A

33)若有定义语句,int a[2][3],*p[3];则以下语句中正确的是
A)p=a; B)p[0]=a; C)p[0]=&a[1][2]; D)p[1]=&a;
我选的C,*p[3]是指针数组,其中每个元素就是普通的字符型指针。

34)有以下程序
#include<stdio.h>
void fun(int *a,int n)/*fun函数功能是将a所指的数组元素从大到小排序*/
{
int t,i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a<a[j]) { t=a;a=a[j];a[j]=t; }
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for(i=0;i<10;i++) printf(“%d,”,c);
printf(“\n”);
}
程序的运行结果是
A)1,2,3,4,5,6,7,8,9,0 B)0,9,8,7,6,5,1,2,3,4
C)0,9,8,7,6,5,4,3,2,1 D)1,2,3,4,9,8,7,6,5,0
我选的D

35)有以下程序
#include<stdio.h>
int fun(char s[])
{
int n=0;
while(*s<=’9’&&*s>=’0’) { n=10*n+*s-‘0’;s++; }
return(n);
}
main()
{
char s[10]={‘6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};
printf(“%d\n”,fun(s));
}
程序的运行结果是
A)9 B)61490 C)61 D)5
应该选C,while循环在轮到第一个*号不满足条件时就跳出来了。

36)当用户要求输入的字符串中含有空格时,应使用的输入函数是(此题先少打了个串字,已改正)
A) scanf() B)getchar() C)gets() D)getc()
这题应该没疑问吧?选B。scanf()需要按%s格式输入,而%s格式把空格也看作结束符

37)以下关于字符串的叙述正确的是
A)C语言中有字符串类型的常量和变量
B)两个字符串中的字符个数相同时才能进行字符串大小的比较
C)可以用关系运算符对字符串的大小进行比较
D)空串一定比空格打头的字符串小
我选的D,字符串没有变量,这点书上有讲,strcmp()函数又没说字符个数不同就不能比较,如果可以用关系运算符比较还需要函数干什么?空串即是NULL,ASCII码值为最小的0,所以是最小的字符串。

42)有以下程序
#include<stdio.h>
Void fun(int n,int *p)
{
Int f1,f2;
If(n==1||n==2) *p=1;
Else
{
Fun(n-1,&f1); fun(n-2,&f2);
*p=f1+f2;
}
}
main()
{
int s;
fun(3,&s); printf(“%d\n”,s);
}
程序运行的结果为
A)2 B)3 C)4 D)5
我选的A

43)若程序中有宏定义行:#define N 100 则以下叙述中正确的是
A)宏定义行中定义了标志符N的值为整数100
B)在编译程序对C源程序进行编译预处理时用100替换标志符N
C)对C源程序进行编译时用100替换标志符N
D)在运行时用100替换标志符N
应该选B,别问为什么,书上那一章名字就叫“编译预处理”……(此题原先答案有错,已改正)

44)以下关于typedef的错误是
A)用typedef可以增加新类型
B)typedef只是将已存在的类型用一个新的名字代表
C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D)用typedef为类型说明一个新名,通常可以增加程序的可读性
应该选A。书上定义,用户定义类型(typedef):对已有的类型,另外说明一个新的类型标志符。(此题原先答案有错,已改正)

45)有以下程序
#include<stdio.h>
struct tt
{
int x; struct tt *y;
}*p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{
int I;
p=a;
for(i=1;i<=2;i++) printf(“%d”,p->x); p=p->y;
}
程序的运行结果是
A)20,30 B)30,17 C)15,30 D)20,15
我选的D,这题就是一个循环链表。(这题原先错打成C,已改正)

46)有以下程序
#include<stdio.h>
#include<string.h>
typedef struct {char name[9]; char sex; float score[2];}STU;
STU f(STU a)
{
STU b={“Zhao”,’m’,85.0,90.0}; int I;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++) a.score=b.score;
return a;
}
main()
{
STU c={“Qian”,’f’,95.0,92.0},d;
d=f(c);
printf(“%s,%c,%2.0f,%2.0f\n”,d.name,d.sex,d.score[0], d.score[1]);
}
程序的运行结果是
A) Qian,f,95,92 B)Qian,m,85,90 C)Zhao,m,85,90 D)Zhao,f,95,92
我选的C

47)设有以下定义
union data
{int d1; float d2;}demo;
则下面叙述中错误的是
A) 变量demo与成员d2所占的内存字节数相同
B) 变量demo中个成员的地址相同
C) 变量demo和各成员的地址相同
D) 若给demo.d1赋值99,demo.d2的值是99.0
我选的D,共用体中数据是右对齐的,所以D中demo.d2应该是小数

48)有以下程序
#include <stdio.h>
main()
{
int a=1,b=2,c=3,x;
x=(a^b)&c; printf(“%d\n”,x);
}
程序运行结果是
A)0 B)1 C)2 D)3
我选的D,a和b按位异或是3,再和c按位与是3

49)读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);其中buffer代表的是
A)一个文件指针,指向待读取的文件
B)一个整形变量,代表待读取的数据的字节数
C)一个内存快的首地址,代表读入数据存放的地址
D)一个内存块的字节数
我选的C

50)有以下程序
#include<stdio.h>
main()
{
FILE *fp; it a[10]={1,2,3,0,0};
fp=fopen(“d2.dat”,”wb”);
fwrite(a,sizeof(int),5,fp);
fwrite(a,sizeof(int),5,fp);
fclose(fp);
fp=fopen(“d2.dat”,”rb”);
fread(a,sizeof(int),10,fp);
for(i=0;i<10;i++) printf(“%d”,a);
}
程序运行结果是
A)1,2,3,0,0,0,0,0,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,1,2,3,0,0
我选的D,程序测试过。数组a的后面5位默认是0,执行两次fwrite把十个数存放进文件,再取出来赋给a,所以是D,注意两次fwrite并不会覆盖。
二级C(仅供参考,怎么没见你的填空题答案呢)
1-5 DBCAA
6-10 DCABC
11-15 BABCC
16-20 DABBB
21-25 BCBBD
26-30 CCDAA
31-35 BACDC
36-40 CDDDD
41-45 AABAD
46-50 CDDCD
填空
1.正确性
2.白盒
3.链式
4.ACBDFEHGP
5.实体
6.12 34
7.a:b
8.c:t1
9.54321
10.k<=n
11.k++
12.ACE
13.efgh
14.x[0]
15.x[0]
16.c=getchar()
17.1
18.3715
19.55
20.p->next
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-09-22
1--10 DBCAD CCABD
11-20 BABCC DABBB
21-30 BCBBD CCDAA
31-40 BDCDC CDDDD
41-50 AABAD CDDCD
填空:
4. ACBDFEHGP
6. 12 34
7. a:b
8. c:t1
9. 54321
10. k<=n
11. k++
12. ACE
13. efgh
14. x[0]
15. x[0]
16. getchar(c)
17. 1
18. 3715
19. 55
20. p->next
第2个回答  2007-09-23
16. c=getchar()
相似回答