2010年3月二级C语言笔试真题

2010年3月二级C语言笔试真题

(考试时间:120分钟,满分100分)

(1)下列叙述中正确的是

A)对长度为n的有序链表进行查找,最坏清况下需要的比较次数为n

B)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2) C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n) D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n) (2)算法的时间复杂度是指 A)算法的执行时间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的基本运算次数 (3)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。

A)编辑软件 B)操作系统 C)教务管理系统 D)浏览器 则由关系K得到关系T的操作是 (4)软件(程序)调试的任务是 A)选择 A)诊断和改正程序中的错误 B)投影 B)尽可能多地发现程序中的错误 C)交 C)发现并改正程序中的所有错误 D)并 D)确定程序中错误的性质

(11)以下叙述正确的是 (5)数据流程图(DFD图)是 A)C语言程序是由过程和函数组成的 A)软件概要设计的工具 B)C语言函数可以嵌套调用,例如:fun(fun(x)) B)软件详细设计的工具 C)C语言函数不可以单独编译 C)结构化方法的需求分析工具 D)C语言中除了main函数,其他函数不可作为单独文件形式存在 D)面向对象方法的需求分析工具 (12)以下关于C语言的叙述中正确的是 6)软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于 A)C语言中的注释不可以夹在变量名或关键字的中间 A)定义阶段 B)C语言中的变量可以在使用之前的任何位置进行定义 B)开发阶段 C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致 C)维护阶段 D)C语言的数值常量中夹带空格不影响常量值的.正确表示 D)上述三个阶段

第1页,共7页

(7)数据库管理系统中负责数据模式定义的语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言

(8)在学生管理的关系数据库中,存取一个学生信息的数据单位是 A)文件 B)数据库 C)字段 D)记录 (9)数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的 A)需求分析阶段 B)逻辑设计阶段 C)概念设计阶段 D)物理设计阶段

(10)有两个关系R和T如下:

(13)以下C语言用户标识符中,不合法的是 (18)以下选项中与if(a==1)a=b; else a++;语句功能不同的switch语句是

A)_1 A)switch(a)

B)AaBc {case:a=b;break;

C)a_b default:a++; D)a-b }

(14)若有定义:double a=22;int i=0,k=18;,则不符合C语言规定的赋值语句是 B)switch(a==1)

A)a=a++,i++; {case 0:a=b;break; B)i=(a+k)<=(i+k); case 1:a++;

C)i=a%11; }

D)i=!a; C)switch(a) (15)有以下程序 {default:a++;break; #includecase 1:a=b; main() } { char a,b,c,d; D)switch(a==1) scanf(“%c%c”,&a,&b); {case 1:a=b;break; c=get); d=get); case 0:a++; printf(“%c%c%c%cn”,a,b,c,d); } (19)有如下嵌套的if语句 }

当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意: if (ac)?b:c); C)k=(a

34 D)k=(a B)若要保存带有多位小数的数据,应使用双精度类型 main() C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型 {in i,j,m=1; D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型 for(i=1;i<3;i++) (17)若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是 {for(j=3;j>O;j--) A)1 {if(i*j)>3)break; B)0 m=i*j; C)2 } D)不知道a的值,不能确定 } 第2页,共7页

printf("m=%dn",m); }

程序运行后的输出结果是

A)m=6

B)m=2

C)m=4

D)m=5 (21)有以下程序

C)定义成void类型的函数中可以有带返回值的return语句

D)没有return语句的自定义函数在执行结束时不能返回到调用处 (25)下列选项中,能正确定义数组的语句是 A)int num[0..2008]; B)int num[]; C)int N=2008; int num[N];

D)#define N 2008 #include(stdio.h>

main() {int a=l;b=2;

for(;a<8;a++) {b+=a;a+=2;} printf("%d,%dn",a,b); } 程序运行后的输出结果是 A)9,18 B)8,11 C)7,11

D)10,14 (22)有以下程序,其中k的初值为八进制数 #includemain() {int k=011; printf("%dn",k++); } 程序运行后的输出结果是 A)12 B)11

C)10 D)9 23)下列语句组中,正确的是 A)char *s;s="Olympic"; B)char s[7];s="Olympic"; C)char *s;s={"Olympic"}; D)char s[7];s={"Olympic"}; (24)以下关于return语句的叙述中正确的是 A)一个自定义函数中必须有一条return语句 B)一个自定义函数中可以根据不同情况设置多条return语句 int num[N];

(26)有以下程序 #include

void fun(char *c,int d) {*c=*c+1;d=d+1;

printf("%c,%c,",*c,d); main()

{char b=a,a=A;

fun(&b,a);printf("%e,%en",b,a); }

程序运行后的输出结果是 A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B

(27)若有定义int(*Pt)[3];,则下列说法正确的是 A)定义了基类型为int的三个指针变量

B)定义了基类型为int的具有三个元素的指针数组pt C)定义了一个名为*pt、具有三个元素的整型数组

D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组

(28)设有定义double a[10],*s=a;,以下能够代表数组元素a[3]的是 A)(*s)[3] B)*(s+3) C)*s[3] D)*s+3

(29)有以下程序 #include(stdio.h) main()

{int a[5]={1,2,3,4,5},b[5]={O,2,1,3,0},i,s=0; for(i=0;i<5;i++) s=s+a[b[i]]);

第3页,共7页

printf("%dn", s); }

程序运行后的输出结果是

A)6

B)10

C)11

D)15 (30)有以下程序

程序运行后的输出结果是 A)1313 B)2234 C)3234 D)1234

(33)有以下程序 #include#include

main() {int b [3][3]={O,1,2,0,1,2,O,1,2},i,j,t=1;

for(i=0;i<3;i++) for(j=ij<=1;j++) t+=b[i][b[j][i]]; printf("%dn",t); } 程序运行后的输出结果是 A)1 B)3

C)4 D)9 31)若有以下定义和语句 char s1[10]="abcd!",*s2="n123"; printf("%d %dn", strlen(s1),strlen(s2)); 则输出结果是 A)5 5 B)10 5 C)10 7 D)5 8

(32)有以下程序 #include#define N 8 void fun(int *x,int i) {*x=*(x+i);} main() {int a[N]={1,2,3,4,5,6,7,8},i; fun(a,2); for(i=O;i

{ int a[4]={1,2,3,4},s;

s=f(a,4); printf("%dn",s); }

int f(int t[],int n)

{ if(n>0) return t[n-1]+f(t,n-1); else return 0; }

程序运行后的输出结果是 A)4 B)1O C)14 D)6

(34)有以下程序 #includeint fun() { static int x=1; x*2; return x; }

main() {int i,s=1,

for(i=1;i<=2;i++) s=fun(); printf("%dn",s); }

程序运行后的输出结果是 A)O B)1 C)4 D)8

(35)有以下程序 #include

第4页,共7页

#define SUB(a) (a)-(a) main()

{ int a=2,b=3,c=5,d;

d=SUB(a+b)*c;

printf("%dn",d);

}

程序运行后的输出结果是 A)0

{int day; int month; int year;} s; };

struct workers w,*pw; pw=&w;

能给w中year成员赋1980的语句是 A)*=198O; B)=1980; C)pw->year=1980; B)-12

C)-20 D)10

(36)设有定义: struct complex { int real,unreal;} data1={1,8},data2; 则以下赋值语句中错误的是 A)data2=data1; B)data2=(2,6); C)=;

D)=al; 37)有以下程序 #include#includestruct A { int a; char b[10]; double c;}; void f(struct A t); main() { struct A a={1001,"ZhangDa",1098.0}; f(a); printf("%d,%s,%6.1fn",a.a,a.b,a.c);

} void f(struct A t) { t.a=1002; strcpy(t.b,"ChangRong");t.c=1202.0;} 程序运行后的输出结果是 A)1001,zhangDa,1098.0 B)1002,changRong,1202.0 C)1001,ehangRong,1098.O D)1002,ZhangDa,1202.0 (38)有以下定义和语句 struct workers { int num;char name[20];char c; struct D)=1980; (39)有以下程序 #includemain()

{ int a=2,b=2,c=2;

printf("%dn",a/b&c); }

程序运行后的输出结果是 A)O B)1 C)2 D)3

(40)有以下程序 #includemain()

{ FILE *fp;char str[10];

fp=fopen("","w"); fputs("abc",fp);fclose(fp); fpfopen("","a++"); fprintf(fp,"%d",28); rewind(fp);

fscanf(fp,"%s",str); puts(str); fclose(fp); }

程序运行后的输出结果是 A)abc B) 28c C) abc28

D)因类型不一致而出错

第5页,共7页

else if(c!=3) d=3;

else d=4;

(1)一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2, else d=5; 【1】 。 printf(“%dn”,d);

(2)设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位 }

rear=10(指向队尾元素),则该循环队列中共有 【2】 个元素。 程序运行后的输出结果是 【7】 。

(3)设二叉树如下: (8)有以下程序

#include

main()

{ int m,n;

scanf("%d%d",&m,&n); while(m!=n) { while(m>n) m=m-n; while(m

printf(“%dn”,m); }

程序运行后,当输入14 63 <回车> 时,输出结果是(9)有以下程序

#includemain()

{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) for(j=i;j<3;j++) printf(“%d%,a[i][j]); 对该二叉树进行后序遍历的结果为 【3】 。 printf("n"); (4)软件是 【4】 、数据和文档的集合。 }

5)有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级, 程序运行后的输出结果是 【9】 。 (10)有以下程序 【5】 ,成绩)。 #include(6)设x为int型变量,请写出一个关系表达式 【6】 ,用以判断x同时为 main()

7的倍数时,关系表达式的值为真。 { int a[]={1,2,3,4,5,6},*k[3],i=0; (7)有以下程序 while(i<3) #include { k[i]=&a[2*i]; main() printf("%d",*k[i]); { int a=1,b=2,c=3,d=0; i++;

if(a==1) }

if(b!=2) }

if(c==3) d=1; 程序运行后的输出结果是 【10】 。 else d=2; (11)有以下程序 #include第6页,共7页

8】 。 【

main() (15)以下程序的功能是:借助指针变量找出数组元素中的最大值及其元素的 { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; 下标值。请填空。

int b[3]={0},i; #include

for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i]; main() for(i=0;i<3;i++) printf("%d",b[i]); { int a[10],*p,*s;

printf("n"); for(p=a;p-a<10;p++) scanf("%d",p);

} for(p=a,s=a;p-a<10;p++) p="">*s) s= 【15】 ; 程序运行后的输出结果是 【11】 。 printf(“index=%dn”,s-a);

12)有以下程序

#include

#include

void fun(char *str)

{ char temp;int n,i;

n=strlen(str);

temp=str[n-1];

for(i=n-1;i>0;i--) str[i]=str[i-1];

str[0]=temp;

}

main()

{ char s[50];

scanf("%s",s); fun(s); printf("%sn",s);}

程序运行后输入:abcdef<回车>,则输出结果是 【12】 。

(13)以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十

#include

main()

{ int x=256;

printf("%d-%d-%dn", 【13】 ,x/10%10,x/100);

}

(14)以下程序用以删除字符串所有的空格,请填空。

#include

main()

{ char s[100]={"Our teacher teach C language!"};int i,j;

for(i=j=0;s[i]!=’’;i++)

if(s[i]!= ) {s[j]=s[i];j++;}

s[j]= 【14】

printf(“%sn”,s);

}

第7页,共7页

}