一 、选择题 (1)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为 A)log2n B)n2 C)O(n1.5) D)n(n-1)/2 正确答案: D
(2)算法分析的目的是 A)找出数据结构的合理性 B)找出算法中输入和输出之间的关系 C)分析算法的易懂性和可靠性 D)分析算法的效率以求改进 正确答案: D
(3)线性表L=(a1,a2,a3,…ai,…an),下列说法正确的是 A)每个元素都有一个直接前件和直接后件 B)线性表中至少要有一个元素 C)表中诸元素的排列顺序必须是由小到大或由大到小 D)除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 正确答案: D
(4)在单链表中,增加头结点的目的是 A)方便运算的实现 B)使单链表至少有一个结点 C)标识表结点中首结点的位置 D)说明单链表是线性表的链式存储实现 正确答案: A
(5)软件工程的出现是由于 A)程序设计方法学的影响 B)软件产业化的需要 C)软件危机的出现 D)计算机的发展 正确答案: C
(6)软件开发离不开系统环境资源的支持,其中必要的测试数据属于 A)硬件资源 B)通信资源 C)支持软件 D)辅助资源 正确答案: D
(7)在数据流图(DFD)中,带有名字的箭头表示 A)模块之间的调用关系 B)程序的组成成分 C)控制程序的执行顺序 D)数据的流向 正确答案: D
(8)分布式数据库系统不具有的特点是 A)数据分布性和逻辑整体性 B)位置透明性和复制透明性 C)分布性 D)数据冗余 正确答案: D
(9)关系表中的每一横行称为一个 A)元组 B)字段 C)属性 D)码 正确答案: A
(10)下列数据模型中,具有坚实理论基础的是 A)层次模型 B)网状模型 C)关系模型 D)以上3个都是 正确答案: C
(11)以下叙述不正确的是 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 正确答案: D
(12)在C语言中,int,char和short三种类型数据在内存中所占用的字节数 A)由用户自己定义 B)均为2个字节 C)是任意的 D)由所用机器的机器字长决定 正确答案: D
(13)以下叙述正确的是 A)在C程序中,每行中只能写一条语句 B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 C)在C程序中,无论是整数还是实数,都能被准确无误地表示 D)在C程序中,%是只能用于整数运算的运算符 正确答案: D
(14)C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符 A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母,数字和下划线中任一字符 正确答案: C
(15)已知各变量的类型说明如下: int k,a,b; unsigned long w=5; double x=1.42; 则以下不符合C语言语法的表达式是 A)x%(-3) B)w+=-2 C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3) 正确答案: A
(16)x,y,z被定义为int型变量,若从键盘给x,y,z输入数据,正确的输入语句是 A)INPUT x、y、z; B)scanf("%d%d%d",&x,&y,&z); C)scanf("%d%d%d",x,y,z); D)read("%d%d%d",&x,&y,&z); 正确答案: B
(17)设x、y均为整型变量,且x=10 y=3,则以下语句的输出结果是 printf("%d,%d\n",x--,--y); A)10,3 B)9,3 C)9,2 D)10,2 正确答案: D
(18)以下程序的输出结果是 main() { int a=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\n",d);} A)1 B)0 C)非0的数 D)-1 正确答案: A
(19)执行下列程序时输入:123<空格>456<空格>789<回车> 输出结果是 main() { char s[100]; int c, i; scanf("%c",&c); scanf("%d",&i); scanf("%s",s); printf("%c,%d,%s\n",c,i,s);} A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456 正确答案: D
(20)下面有关for循环的正确描述是 A)for循环只能用于循环次数已经确定的情况 B)for循环是先执行循环体语句,后判断表达式 C)在for循环中,不能用break语句跳出循环体 D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 正确答案: D
(21)以下程序的输出结果是 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
(22)设有以下程序段 int x=0,s=0; while(!x!=0)s+=++x; printf("%d",s); 则 A)运行程序段后输出0 B)运行程序段后输出1 C)程序段中的控制表达式是非法的 D)程序段执行无限次 正确答案: B
(23)对下Ⅰ,Ⅱ两个语句描述正确的是 Ⅰ.while(1)Ⅱ.for(;;) A)都是无限循环 B)Ⅰ是无限循环,Ⅱ错误 C)Ⅰ循环一次,Ⅱ错误 D)以上答案都错 正确答案: A
(24)若有以下定义,则能使值为3的表达式是 int k=7,x=12; A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 正确答案: D
(25)设有: int a=1,b=2,c=3,d=4,m=2,n=2; 执行 (m=a>b)&&(n=c>d)后n的值是 A)1 B)2 C)3 D)4 正确答案: B
(26)以下描述中正确的是 A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C)在do-while循环体中,是先执行一次循环,再进行判断 D)do-while循环中,根据情况可以省略while 正确答案: C
(27)以下函数返回a所指数组中最小的值所在的下标值 fun(int *a, int n) { int i,j=0,p; p=j; for(i=j;iif(a[i]return(p);} 在下划线处应填入的是 A)i=p B)a[p]=a[i] C)p=j D)p=I 正确答案: D
(28)以下叙述正确的是 A)函数可以嵌套定义但不能嵌套调用 B)函数既可以嵌套调用也可以嵌套定义 C)函数既不可以嵌套定义也不可以嵌套调用 D)函数可以嵌套调用但不可以嵌套定义 正确答案: D
(29)若有说明语句 char a[]="It is mine"; char *p="It is mine"; 则以下不正确的叙述是 A)a+1表示的是字符t的地址 B)p指向另外的字符串时,字符串的长度不受限制 C)p变量中存放的地址值可以改变 D)a中只能存放10个字符 正确答案: D
(30)以下程序的运行结果是 sub(int x,int y,int *z) {*z=y-x;} main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("M,M,M\n",a,b,c);} A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7 正确答案: B
(31)若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为 (假设a[0][0]位于数组的第一个位置上) A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1 正确答案: A
(32)下列说法正确的是 int i,x; for(i=0,x=0;i<=9 &&x!=876;i++)scanf("%d",x); A)最多的执行10次 B)最多执行9次 C)是无限循环 D)循环体一次也不执行 正确答案: A
(33)若有下面的程序片段: int[12]={0},*p[3],**pp,i; for(i=0;i<3;i) p[i]=&a[i*4]; pp=p; 则对数组元素的错误引用是 A)pp[0][1] B)a[10] C)p[3][1] D)*(*(p+2)+2) 正确答案: C
(34)若有说明:int a[3][4]={0};则下面正确的叙述是 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 正确答案: D
(35)对下面程序描述正确的一项是 (每行程序前面的数字表示行号) 1 main() 2 { 3 float a[3]={0.0}; 4 int i; 5 for(i=0;i<3;i++)scanf("%d",&a[i]); 6 for(i=1;i<3;i++)a[0]=a[0]+a[i]; 7 printf("%f\n",a[0]); 8 } A)没有错误 B)第3行有错误 C)第5行有错误 D)第7行有错误 正确答案: C
(36)以下不正确的说法是 C语言规定: A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式 C)实参可以为任何类型 D)形参应与其对应的实参类型一致 正确答案: B
(37)已有如下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的正确定义方式为 int a[3][4]; f(a); A)f(array[3][4]) B)f(int array[3][]) C)f(int array[][4]) D)f(int array[][]) 正确答案: C
(38)下面程序的输出结果为 main() { int a,b;b=(a=3*5,a*4,a*5); printf("%d",b);} A)60 B)75 C)65 D)无确定值 正确答案: B
(39)在位运算中,操作数右移一位,其结果相当于 A)操作数乘以2 B)操作数除以2 C)操作数乘以4 D)操作数除以4 正确答案: B
(40)有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是 struct node { char data; struct node *next; } a,b,*p=&a,*q=&b; A)a.next=q; B)p.next=&b; C)p->next=&b; D)(*p).next=q; 正确答案: B
(41)下面程序的输出结果是 struct st { int x; int *y; } *p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=aa; printf("%d\n",++p->x); printf("%d\n",(++p)->x); printf("%d\n",++(*p->y));} A)10 20 20
B)50 60 21
C)51 60 21
D)60 70 31 正确答案: C
(42)下面程序的输出结果是 #include #include main() {char *p1="abc",*p2="ABC",str[50]= "xyz"; strcpy(str+2,strcat(p1,p2)); printf("%s\n",str);} A)xyzabcABC B)zabcABC C)xyabcABC D)yzabcABC 正确答案: C
(43)以下程序的输出结果是 long fun( int n) { long s; if(n==1||n==2)s=2; else s=n-fun(n-1); return s;} main() { printf("%ld\n", fun(3)); } A)1 B)2 C)3 D)4 正确答案: A
(44)以下所列的各函数首部中,正确的是 A)void play(var :Integer,var b:Integer) B)void play(int a,b) C)void play(int a,int b) D)Sub play(a as integer,b as integer) 正确答案: C
(45)不合法的main函数命令行参数表示形式是 A)main(int a,char *c[]) B)main(int arc,char **arv) C)main(int argc,char *argv) D)main(int argv,char *argc[]) 正确答案: C
(46)有如下程序 main() {char ch[2][5]={"6937","8254"},*p[2]; int i,j,s=0; for(i=0;i<2;i++)p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>′\0′;j+=2) s=10*s+p[i][j]-′0′; printf("%d\n",s);} 该程序的输出结果是 A)69825 B)63825 C)6385 D)693825 正确答案: C
(47)以下程序的输出结果是 union myun {struct { int x, y, z; } u; int k;} a; main() {a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf("%d\n",a.u.x);} A)4 B)5 C)6 D)0 正确答案: D
(48)以下程序的输出结果是 main() { char x=040; printf("%o\n",x<<1);} A)100 B)80 C)64 D)32 正确答案: A
(49)C 语言中,系统的标准输入文件是指 A)键盘 B)显示器 C)软盘 D)硬盘 正确答案: A
(50)下面的程序执行后,文件test中的内容是 #include void fun(char *fname,char *st) { FILE *myf; int i; myf=fopen(fname,"w" ); for(i=0;ifclose(myf);} main() { fun("test","new world"); fun("test","hello,");} A)hello, B)new worldhello, C)new world D)hello, rld 正确答案: A
二 、填空题 (1)在算法正确的前提下,评价一个算法的两个标准是 【1】 。 正确答案: 1.(时间复杂度和空间复杂度)
(2)将代数式 Z=x2+y2a+b 转换成程序设计中的表达式为 【2】 。 正确答案: 1.(SQR(x^2+y^2)/(a+b))
(3)软件危机出现于60年代末,为了解决软件危机,人们提出了 【3】 的原理来设计软件,这就是软件工程诞生的基础。 正确答案: 1.(软件工程学)
(4) 【4】 是数据库设计的核心。 正确答案: 1.(数据模型)
(5)在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【5】 。 正确答案: 1.(关系)
(6)以下程序段的输出结果是【6】 。 int x=17,y=26; printf ("%d",y/=(x%=6)); 正确答案: 1.(5)
(7)关系表达式x正确答案: 1.((x(8)若有如下定义,double a[100];则a数组元素的下标上限是【8】 。 正确答案: 1.(99)
(9)下面程序的输出结果【9】 。 main () {enum team {y1=4,y2,y3}; printf ("%d",y3);} 正确答案: 1.(6)
(10)把数学表达式 改写成C语言的表达式是【10】。 正确答案: 1.((cosx)*(cosx)*(m+n)/(m-n) )
(11)若有以下程序段: int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是【11】 。 正确答案: 1.(0)
(12) 若有以下定义: char a;int b; float c; double d; 则表达式a*b+d-c值的类型为【12】 。 正确答案: 1.(double或双精度型)
(13)设有代码"static int a[3][4]={{1}, {2}, {3}};",则a[1][1]和a[2][1]的值为【13】 。 正确答案: 1.(0 0)
(14)以下函数用来在w数组中插入x。n所指向的存储单元中存放w数组中字符个数。数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。 void fun(char *w, char x, int *n) { int i, p; p=0; w[*n]= x; while(x > w[p])p++; for(i=*n; i>p; i--)w[i]=【14】; w[p]=x; ++*n;} 正确答案: 1.(w[i-1])
(15)设int a, b=10;执行a=b<<2+1;后a的值是【15】 。 正确答案: 1.(80)
(16)以下程序的输出结果是【16】。 main() { int x=100, a=10, b=20, ok1=5, ok2=0; if(aelse if(ok2)x=10; else x=-1; printf("%d\n", x);} 正确答案: 1.(-1)
(17)以下程序的输出结果是【17】。 main() { int y=9; for(; y>0; y--) if (y%3==0) {printf("%d", --y); continue;} } 正确答案: 1.(852)
(18)以下函数的功能是【18】。 float av(a, n) float a[]; int n; { int i; float s; for(i=0, s=0; ireturn s/n;} 正确答案: 1.(求出数组元素平均值)
(19)以下程序的输出结果是【19】。 #define PR(ar)printf("%d,",ar) main() { int j, a[]={1, 3, 5, 7, 9, 11, 15}, *p=a+5; for(j=3; j; j--) switch(j) { case 1: case 2: PR(*p++); break; case 3:PR(*(--p)); } printf("\n"); } 正确答案: 1.(9,9,11,)
(20)以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。请填空。 #include #define N 16 typedef struct {char num[10]; int s ; } STREC; int fun (STREC *a, STREC *b) {int i,j=0,max=a[0].s; for(i=0;iif(maxfor(i=0;iif(【20】)b[j++]=a[i]; return j; } main () {STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85}, {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72} }; STREC h[N]; int i, n;FILE *out; n=fun(s,h); printf("The %d highest score :\n",n); for (i=0; iprintf("%s M\n ",h[i].num,h[i].s); printf("\n"); out=fopen("out15.dat", "w"); fprintf(out, "%d\n",n); for(i=0; ifprintf(out, "M\n ",h[i].s); fclose(out); } 正确答案: 1.(max==a[i].s) |