计算机类 二级 C
2006年4月全国计算机等级考试二级C语言笔试试卷 66 题 含答案 C
1 单选题 1 / 66
下列选项中不属于结构化程序设计方法的是
A 自顶向下 B 逐步求精 C 模块化 D 可复用
查看答案 D. 可复用
2 单选题 2 / 66
两个或两个以上模块之间关联的紧密程度称为
A 耦合度 B 内聚度 C 复杂度 D 数据传输特性
查看答案 A. 耦合度
3 单选题 3 / 66
下列叙述中正确的是
A 软件测试应该由程序开发者来完成 B 程序经调试后一般不需要再测试 C 软件维护只包括对程序代码的维护 D 以上三种说法都不对
查看答案 D. 以上三种说法都不对
4 单选题 4 / 66
按照“后进先出”原则组织数据的数据结构是
A 队列 B 栈 C 双向链表 D 二叉树
查看答案 B. 栈
5 单选题 5 / 66
下列叙述中正确的是
A 线性链表是线性表的链式存储结构 B 栈与队列是非线性结构 C 双向链表是非线性结构 D 只有根结点的二叉树是线性结构
查看答案 A. 线性链表是线性表的链式存储结构
6 单选题 6 / 66
对如下二叉树
ABDECF
进行后序遍历的结果为
A ABCDEF B DBEAFC C ABDECF D DEBFCA
查看答案 D. DEBFCA
7 单选题 7 / 66
在深度为7的满二叉树中,叶子结点的个数为
A 32 B 31 C 64 D 63
查看答案 C. 64
8 单选题 8 / 66
“商品”与“顾客”两个实体集之间的联系一般是
A 一对一 B 一对多 C 多对一 D 多对多
查看答案 D. 多对多
9 单选题 9 / 66
在E-R图中,用来表示实体的图形是
A 矩形 B 椭圆形 C 菱形 D 三角形
查看答案 A. 矩形
10 单选题 10 / 66
数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是
A DB包含DBS和DBMS B DBMS包含DB和DBS C DBS包含DB和DBMS D 没有任何关系
查看答案 C. DBS包含DB和DBMS
11 单选题 11 / 66
以下不合法的用户标识符是
A j2_KEY B Double C 4d D _8_
查看答案 C. 4d
12 单选题 12 / 66
以下不合法的数值常量是
A 011 B 1e1 C 8.0E0.5 D 0xabcd
查看答案 C. 8.0E0.5
13 单选题 13 / 66
以下不合法的字符常量是
A ′\018′ B ′\"′ C ′\\′ D ′\xcc′
查看答案 A. ′\018′
14 单选题 14 / 66
表达式3.6-5/2+1.2+5%2的值是
A 4.3 B 4.8 C 3.3 D 3.8
查看答案 D. 3.8
15 单选题 15 / 66
以下能正确定义字符串的语句是
A char str[]={′\064′}; B char str="kx43"; C char str="; D char str[]="\0";
查看答案 D. char str[]="\0";
16 单选题 16 / 66
以下数组定义中错误的是
A int x[][3]={0}; B int x[2][3]={{l,2},{3,4},{5,6}}; C int x[][3]={{l,2,3},{4,5,6}}; D int x[2][3]={l,2,3,4,5,6};
查看答案 B. int x[2][3]={{l,2},{3,4},{5,6}};
17 单选题 17 / 66
若要求从键盘读入含有空格字符的字符串,应使用函数
A getc() B gets() C getchar() D scanf()
查看答案 B. gets()
18 单选题 18 / 66
以下四个程序中,完全正确的是
A #include <stdio.h> B #include <stdio.h> main();main() {/*programming*/{/*/ programming /*/ printf("programming!\n");} printf("programming!\n");} C #include <stdio.h> D include <stdio.h> main()main() {/*/*programming*/*/{/*programming*/ printf("programming!\n");} printf("programming!\n");}
查看答案 B. #include <stdio.h> main();main() {/*programming*/{/*/ programming /*/ printf("programming!\n");} printf("programming!\n");}
19 单选题 19 / 66
若有定义:float x=1.5;int a=1,b=3,c=2;则正确的switch语句是
A switch(x) B switch((int)x); {case 1.0:printf("*\n"); {case 1:printf("*\n"); case 2.0:printf("**\n");} case 2:printf("**\n");} C switch(a+b) D switch(a+b) {case 1:printf("*\n");{case 1:printf("*\n"); case 2+1:printf("**\n");}case c:printf("**\n");}
查看答案 C. switch(a+b)
20 单选题 20 / 66
若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是
A main() B float fun(int a,int b){……} {……x=fun(2,10);……}main() float fun(int a,int b){……} {……x=fun(i,j);……} C float fun(int,int); D main() main() {float fun(int i,int j); {……x=fun(2,10);……} ……x=fun(i,j); ……} float fun(int a,int b){……}float fun(int a,int b){……}
查看答案 A. main()
21 单选题 21 / 66
在以下给出的表达式中,与while( )中的(E)不等价的表达式是
A (!E==0) B (E>0‖E<0) C (E==0) D (E!=0)
查看答案 C. (E==0)
22 单选题 22 / 66
要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是
A while((ch=getchar())!=′N′)printf("%c",ch); B while(ch=getchar()!=′N′)printf("%c",ch); C while(ch=getchar()==′N′)printf("%c",ch); D while((ch=getchar())==′N′)printf("%c",ch);
查看答案 A. while((ch=getchar())!=′N′)printf("%c",ch);
23 单选题 23 / 66
已定义以下函数 int fun(int *p) {return *p;) fun函数返回值是
A 不确定的值 B 一个整数 C 形参P中存放的值 D 形参P的地址值
查看答案 B. 一个整数
24 单选题 24 / 66
若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是
A *p=&a; scanf("%1f",p); B *p=&a; scanf("%f",p); C p=&a; scanf("%1f",*p); D p=&a; scanf("%1f",p);
查看答案 D. p=&a; scanf("%1f",p);
25 单选题 25 / 66
现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中连续的三个结点。
struct node
{char data;
struct node *next;
}*p,*q,*r;
现要将q和r所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句是
A q->next=r->next;p->next=r;r->next=q; B p->next=r;q->next=r->next;r->next=q; C q->next=r->next;r->next=q;p->next=r; D r->next=q;p->next=r;q->next=r->next;
查看答案 D. r->next=q;p->next=r;q->next=r->next;
26 单选题 26 / 66
有以下程序段 struct st {int x;int *y;)*pt; int a[]={l,2},b[]={3,4}; struct st c[2]={10,a,20,b}; pt=c; 以下选项中表达式的值为11的是
A *pt->y B pt->x C ++pt->x D (pt++)->x
查看答案 C. ++pt->x
27 单选题 27 / 66
设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为
A EOF B 非0值 C 0 D NULL
查看答案 B. 非0值
28 单选题 28 / 66
设有以下语句 int a=1,b=2,c; c=a^(b<<2); 执行后,C的值为
A 6 B 7 C 8 D 9
查看答案 D. 9
29 单选题 29 / 66
有以下程序 #include <stdio.h> main() {char c1,c2,c3,c4,c5,c6; scanf("%c%c%c%c",&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1);putchar(c2); printf("%c%c\n",c5,c6); } 程序运行后,若从键盘输入(从第1列开始) 123<回车> 45678<回车> 则输出结果是
A 1267 B 1256 C 1278 D 1245
查看答案 D. 1245
30 单选题 30 / 66
有以下程序 main() {int y=10; while(y--);printf("y=%d\n",y); } 程序执行后的输出结果是
A y=0 B y=-1 C y=1 D while构成无限循环
查看答案 B. y=-1
31 单选题 31 / 66
有以下程序 main() {int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf("%d,%d,%d,%d\n",a,b,c,d); } 程序输出
A 0,1,2,0 B 0,0,0,3 C 1,1,2,0 D 编译有错
查看答案 D. 编译有错
32 单选题 32 / 66
有以下程序 main() {int i,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2)continue; x++; } x++; } printf("x=%d\n",x); } 程序执行后的输出结果是
A x=4 B x=8 C x=6 D x=12
查看答案 B. x=8
33 单选题 33 / 66
有以下程序 int fun1(double a){return a*=a;} int fun2(double x,double y) {double a=0,b=0; a=fun1(x);b=fun1(y);return(int)(a+b); } main() {double w;w=fun2(1.1,2.0);……} 程序执行后变量w中的值是
A 5.21 B 5 C 5.0 D 0.0
查看答案 C. 5.0
34 单选题 34 / 66
有以下程序 main() {int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf("%d",t[2-i][i]); } 程序执行后的输出结果是
A 7 5 3 B 3 5 7 C 3 6 9 D 7 5 1
查看答案 B. 3 5 7
35 单选题 35 / 66
有以下程序 fun(char p[][10]) {int n=0,i; for(i=0;i<7;i++) if(p[i][0]==′T′)n++; return n; } main() {char str[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"}; printf("%d\n",fun(str)); } 程序执行后的输出结果是
A 1 B 2 C 3 D 0
查看答案 B. 2
36 单选题 36 / 66
有以下程序 main() {int i,s=0,t[]={l,2,3,4,5,6,7,8,9}; for(i=0;i<9;i+=2)s+=*(t+i); printf("%d\n",s); } 程序执行后的输出结果是
A 45 B 20 C 25 D 36
查看答案 C. 25
37 单选题 37 / 66
有以下程序 void fun1(char *p) {char *q; q=p; while(*q!=′\0′) { (*q)++; q++; ) } main() {char a[]={"Program"), *p; p=&a[3];fun1(p);printf("%s\n",a); } 程序执行后的输出结果是
A Prohsbn B Prphsbn C Progsbn D Program
查看答案 A. Prohsbn
38 单选题 38 / 66
有以下程序 void swap(char *x,char *y) {char t; t=*x; *x=*y; *y=t; } main() {char *s1="abc",*s2="123"; swap(s1,s2);printf("%s,%s\n",s1,s2); } 程序执行后的输出结果是
A 123,abc B abc,123 C 1bc,a23 D 321,cba
查看答案 C. 1bc,a23
39 单选题 39 / 66
有以下程序 int fun(int n) {if(n==1)return 1; else return(n+fun(n-1)); } main() {int x; scanf("%d",&x); x=fun(x);printf("%d\n",x); } 执行程序时,给变量X输入10,程序的输出结果是
A 55 B 54 C 65 D 45
查看答案 A. 55
40 单选题 40 / 66
有以下程序 int fun(int x[],int n) {static int sum=0,i; for(i=0;i<n;i++) sum+=x[i]; return sum; } main() {int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0; s=fun(a,5)+fun(b,4);printf("%d\n",s); } 程序执行后的输出结果是
A 45 B 50 C 60 D 55
查看答案 C. 60
41 单选题 41 / 66
有以下程序 main() {union {char ch[2]; int d; }s; s.d=0x4321; printf("%x,%x\n",s.ch[0],s.ch[1]); } 在16位编译系统上,程序执行后的输出结果是
A 21,43 B 43,21 C 43,00 D 21,00
查看答案 A. 21,43
42 单选题 42 / 66
有以下程序 main() {char *p[]={"3697","2584"}; int i,j;long num=0; for(i=0;i<2;i++) {j=0; while(p[i][j]!=′\0′) {if((p[i][j]-′0′)%2)num=10*num+p[i][j]-′0′; j+=2; } } printf("%d\n",num); } 程序执行后的输出结果是
A 35 B 37 C 39 D 3975
查看答案 C. 39
43 单选题 43 / 66
执行以下程序后,test.txt文件的内容是(若文件能正常打开) #include <stdio.h> main() {FILE *fp; char *s1="Fortran",*s2="Basic"; if((fp=fopen("test.txt","wb”))==NULL) {printf("Can′t open test.txt file\n");exit(1);} fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/ fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); }
A Basican B BasicFortran C Basic D FortranBasic
查看答案 A. Basican
44 单选题 44 / 66
以下叙述中错误的是
A C语言源程序经编译后生成后缀为.obj的目标程序 B C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 C 用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
查看答案 D. C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
45 单选题 45 / 66
以下叙述中错误的是
A 算法正确的程序最终一定会结束 B 算法正确的程序可以有零个输出 C 算法正确的程序可以有零个输入 D 算法正确的程序对于相同的输入一定有相同的结果
查看答案 B. 算法正确的程序可以有零个输出
46 单选题 46 / 66
以下叙述中错误的是
A C程序必须由一个或一个以上的函数组成 B 函数调用可以作为一个独立的语句存在 C 若函数有返回值,必须通过return语句返回 D 函数形参的值也可以传回给对应的实参
查看答案 D. 函数形参的值也可以传回给对应的实参
47 单选题 47 / 66
设有以下定义和语句 char str[20]="Program",*p; p=str; 则以下叙述中正确的是
A *p与str[0]的值相等 B str与p的类型完全相同 C str数组长度和p所指向的字符串长度相等 D 数组str中存放的内容和指针变量p中存放的内容相同
查看答案 A. *p与str[0]的值相等
48 单选题 48 / 66
以下叙述中错误的是
A C程序中的#include和#define行均不是C语句 B 除逗号运算符外,赋值运算符的优先级最低 C C程序中,j++;是赋值语句 D C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
查看答案 D. C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算
49 单选题 49 / 66
以下叙述中正确的是
A 预处理命令行必须位于C源程序的起始位置 B 在C语言中,预处理命令行都以"#"开头 C 每个C程序必须在开头包含预处理命令行:#include<stdio.h> D C语言的预处理不能实现宏定义和条件编译的功能
查看答案 B. 在C语言中,预处理命令行都以"#"开头
50 单选题 50 / 66
以下叙述中错误的是
A 可以通过typedef增加新的类型 B 可以用typedef将已存在的类型用一个新的名字来代表 C 用typedef定义新的类型名后,原有类型名仍有效 D 用typedef可以为各种类型起别名,但不能为变量起别名
查看答案 A. 可以通过typedef增加新的类型
51 填空题 51 / 66
对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为__ 。
查看答案 45
52 填空题 52 / 66
在面向对象方法中,__ 描述的是具有相似属性与操作的一组对象。
查看答案 类
53 填空题 53 / 66
在关系模型中,把数据看成是二维表,每一个二维表称为一个__ 。
查看答案 关系
54 填空题 54 / 66
程序测试分为静态分析和动态测试。其中__ 是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。
查看答案 静态分析(静态测试)
55 填空题 55 / 66
数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为__ 。
查看答案 物理独立性
56 填空题 56 / 66
若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的的输出语句__ 。
查看答案 printf("a=%d,b=%d",a,b);
57 填空题 57 / 66
以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当给a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。 main() {float a,b,c; scanf("%f%f%f",&a,&b,&c); if(__ )printf("YES\n");/*a、b、c能构成三角形*/ else printf("NO\n");/*a、b、c不能构成三角形*/ }
查看答案 (a+b>c)&&(a+c>b)&&(b+c>a)
58 填空题 58 / 66
以下程序的输出结果是__ 。 main() {int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0; for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1]; printf("%d\n",s); }
查看答案 30
59 填空题 59 / 66
当运行以下程序时,输入abcd,程序的输出结果是:__ 。 insert(char str[]) {int i; i=strlen(str); while(i>0) {str[2*i]=str[i];str[2*i-1]=′*′;i--;} printf("%s\n",str); } main() {char str[40]; scanf("%s",str);insert(str); }
查看答案 a*b*c*d*
60 填空题 60 / 66
下面程序的运行结果是:__ 。 fun(int t[],int n) {int i,m; if(n==1)return t[0]; else if(n>=2){m=fun(t,n-1); return m; } } main() {int a[]={11,4,6,3,8,2,3,5,9,2}; printf("%d\n",fun(a,10)); }
查看答案 11
61 填空题 61 / 66
现有两个C程序文件T18.c和myfun.c同在TC系统目录(文件夹)下,其中T18.c文件如下: #include <stdio.h> #include "myfun.c" main() {fun();printf("\n");} myfun.c文件如下: void fun() {char s[80],c; int n=0; while((c=getchar())!=′\n′) s[n++]=c; n--; while(n>=0) printf("%c",s[n--]); } 当编译连接通过后,运行程序T18时,输入Thank!则输出结果是:__ 。
查看答案 !knahT
62 填空题 62 / 66
以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如:str所指字符串为:Hello!,c中的字符为e,则函数返回字符串:ello!的首地址。若str所指字符串为空串或不包含c中的字符,则函数返回NULL。请填空。 char *fun(char *str,char c) { int n=0; char *p=str; if(p!=NULL) while(p[n]!=c&&p[n]!=′\0′)n++; if(p[n]==′\0′) return NULL; return(__ ); }
查看答案 p+n
63 填空题 63 / 66
以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。 main() (int i,j; for(i=0;__ ;i++) {j=i*10+6; if(__ )continue; printf("%d",j); } }
查看答案 64 填空题 64 / 66
以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填空 int isprime(int a) {int i; for(i=2;i<=a/2;i++) if(a%i==0)__ ;__ ; }
查看答案 65 填空题 65 / 66
以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下: A B C D E F G H I J K L M N O 请填空完成该程序。 main() {int i,j,n; char ch=′A′; scanf("%d",&n); if(n<11) {for(i=1;i<=n;i++) {for(j=1; j<=n-i+1;j++) {printf("%2c",ch);__ ; }__ ; } } else printf("n is too large!\n") printf("\n"); }
查看答案 66 填空题 66 / 66
以下程序中函数fun的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。
#include <stdio.h>
typedef struct node/*链表结点结构*/
{char sub[3];
struct node *next;
}Node;
Node fun(char s) /*建立链表*/
{…… }
void disp(Node *h)
{Node *p;
p=h->next;
while(
__ )
{printf("%s\n",P->sub); p=
__ ; }
}
main()
{Node *hd;
hd=fun();disp(hd);printf("\n");
}
查看答案