1、二级 C 语言笔试-385 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.下面程序输出的结果是 main() int i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) printf(“%d“,a2-ii);(分数:2.00)A.1 5 9B.7 5 3C.3 5 7D.5 9 12.若有说明:int*p,m=5,n;,以下正确的程序段是(分数:2.00)A.p=&n;scanf(“%d“,&;B.p=&n;scanf(“%d“,*C.scanf(“%d“,&;*p=n;D.p=&n;*p=m;
2、3.已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ASCII 码是 97。以下不能将变量 c 中的大写字母转换为对应小写字母的语句是(分数:2.00)A.c=(c-A)%26+aB.c=c+32C.c=c-A+aD.a=(A+%26-a4.有以下程序 void f(int *q) inti=0; for(;i5;i+) (*q)+; main() int a5=1,2,3,4,5,i; f(a); for(i=0;i5;i+)printf(“%d,“,ai); 程序运行后的输出结果是(分数:2.00)A.2,2,3,4,5,B.6,2,3,4,5,C.1,2,3,4,5,D.
3、2,3,4,5,6,5.算法的空间复杂度是指(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.执行算法需要的内存空间6.下列叙述中,不属于测试的特征的是(分数:2.00)A.测试的挑剔性B.完全测试的不可能性C.测试的可靠性D.测试的经济性7.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:2.00)A.acbedB.decabC.deabcD.cedba8.下列有关数据库的描述,正确的是(分数:2.00)A.数据处理是将信息转化为数据的过程B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C.
4、关系中的每一列称为元组,一个元组就是一个字段D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字9.下列关于队列的叙述中正确的是(分数:2.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表10.下列选项可以正确表示字符型常量的是(分数:2.00)A./rB.“a“C.“/897“D.29611.以下叙述中错误的是(分数:1.00)A.计算机不能直接执行用 C 语言编写的源程序B.C 程序经 C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件C.后缀为.obj 的文件,经连接程
5、序生成后缀为.exe 的文件是一个二进制文件D.后缀为.obj 和.exe 的二进制文件都可以直接运行12.有以下程序 main() int k=5,n=0; do switch(k) case 1: case 3:n+=1;k-;break; default:n=0;k-; case 2: case 4:n+=2;k-;break; printf(“%d“,n); whUe(k0 &n5); 程序运行后的输出结果是(分数:1.00)A.235B.0235C.02356D.235613.以下程序的输出结果是 #includestdio.h int a33=1,2,3,4,5,6,7,8,9,*
6、p; main() p=(int*)malloc(sizeof(int); f(p,a); printf(“%d/n”,*p); free(p); f(int *s,intp 3) *s=p11;(分数:1.00)A.1B.4C.7D.514.下面关于对象概念的描述中,错误的是(分数:1.00)A.对象就是 C 语言中的结构体变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的15.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6,7,8,9,*p=a;(分数:1.00)
7、A.ap-B.*(&C.pD.*(*(a+)16.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“,&a1,&c1,&a2,&c2);语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 X 和 Y。以下所示的输入形式中正确的是(注:代表空格字符)(分数:1.00)A.10X20Y回车B.10X20Y回车C.10X回车 20Y回车D.10X回车 20Y回车17.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为(分数:1.00)A.n+1B.n-1C.2nD.n/218.下面程序段的运行结果是 char a=“lanuage“,*p;
8、p=a; while(*p!=u)printf(“%c“,*p-32);p+;(分数:1.00)A.LANGUAGEB.languageC.LAND.langUAGE19.有以下程序 #includestdio.h main() int c; while(c=getchar()!=/n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:putchar(c+3);break; printf(“/n“) 从第一列开始输入以下数据CR代表一个回车符。 274
9、3CR 程序的输出结果是(分数:1.00)A.66877B.668966C.6677877D.668876620.以下叙述中正确的是(分数:1.00)A.构成 C 程序的基本单位是函数B.可以在一个函数中定义另一个函数C.main()函数必须放在其他函数之前D.C 函数定义的格式是 K&R 格式21.以下程序的输出结果是 main() int c=35;printf(“%d/n“,c&c);(分数:2.00)A.0B.70C.35D.122.以下合法的字符型常量是(分数:2.00)A./x13B./081C.65D.“/n“23.有以下程序 #includestring.h main() ch
10、ar p20=a,b,c,d,q=“abc“,r=“abcde“; strcat(p,r);strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是(分数:2.00)A.9B.6C.11D.724.有以下程序 #includestdio.h main() FILE *fp;int i=20,j=30,k,n; fp=fopen(“d1.dat“,“w“); fprintf(fp,“%d/n“,i;fprintf(fp,“%d/n“,j); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“
11、%d%d“,&k,&n);printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是(分数:2.00)A.20 30B.20 50C.30 50D.30 2025.在执行下述程序时,若从键盘输入 6 和 8,则结果为 main() int a,b,s; scanf(“%d%d“,&a,&b); S=a if(ab) s=b; S*=S; printf(“%d“,s);(分数:2.00)A.36B.64C.48D.以上都不对26.若执行下面的程序时,从键盘输入 5 和 2,则输出结果是 main() int a,b,k; scanf(“%d,%d“,&a,&b);
12、 k=a; if(ab)k=a%b; else k=b%a; printf(“%d/n“,k);(分数:2.00)A.5B.3C.2D.027.设有如下三个关系表Amn(分数:2.00)A.B.C.D.28.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度29.C 语言规定,在一个源程序中,main 函数的位置(分数:2.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意D.必须在最后30.有以下程序 main() int a44=1,4,3,2,8
13、,6,5,7,3,7,2,5,4,8,6,1,i,j,k,t; for(i=0;i4;i+) for(j=0;j3;j+) for(k=j+1;k4;k+) if(ajiaki)t=aji;aji=aki;aki=t;/*按列排序*/ for(i=0;i4;i+)printf(“%d,“,aii); 程序运行后的输出结果是(分数:2.00)A.1,6,5,7,B.8,7,3,1,C.4,7,5,2,D.1,6,2,1,31.有以下程序 main() int x=0,y=0,i; for(i=1;+i) if(i%2=0) x+;continue; if(i%5=0)y+;break; prin
14、tf(“%d,%d“,x,y); 程序的输出结果是(分数:2.00)A.2,1B.2,2C.2,5D.5,232.当运行以下程序时,从键盘输入 AhaMA(空格)AhaCR,则下面程序的运行结果是 #includestdio.h main() char s80,c=a; int i=0; scanf(“%s“,s); while(si!=/n/) if(si=c)si-32; else if(si=c-32)si=si+32; i+; puts(s);(分数:2.00)A.ahaMaB.AbAMaC.A11AMa空格ahaD.ahAMa空格ahA33.有如下程序 main() int n=9;
15、 while(n6)n-;printf(“%d“,n); 该程序的输出结果是(分数:2.00)A.987B.876C.8765D.987634.以下选项中,当 x 为大于 1 的奇数时,值为 0 的表达式是(分数:2.00)A.x%2=1B.x/2C.x%21=0D.x%2=035.在 C 语言中,函数返回值的类型最终取决于(分数:2.00)A.函数定义时在函数首部所说明的函数类型B.return 语句中表达式值的类型C.调用函数时主调函数所传递的实参类型D.函数定义时形参的类型36.在 C 语言中,变量的隐含存储类别是(分数:2.00)A.autoB.staticC.extemD.无存储类别
16、37.有以下程序 int f(int n) if(n=1)return 1; else return f(n-1)+1; main() int i,j=0; for(i=1;i3;i+)j+=f(i); printf(“%d/n“,j); 程序运行后的输出结果是(分数:2.00)A.4B.3C.2D.138.下列叙述中,正确的是(分数:2.00)A.用 E-R 图能够表示实体集间一对一的联系、一对多的联系和多对多的联系B.用 E-R 图只能表示实体集之间一对一的联系C.用 E-R 图只能表示实体集之间一对多的联系D.用 E-R 图表示的概念数据模型只能转换为关系数据模型39.请选出正确的程序段
17、(分数:2.00)A.int*p; scanf(“%d“,; B.int *s,k; *s=100; C.int *s,k; char *p,c; s=&k; p=&c; *p=a; D.int *s,k; char *p,e; s=&k; p=&c; s=p; *s=1; 40.现有如下程序段 #include“stdio.h“ main() int a56=23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21, 1; int i=0,j=5; printf(“%d/n“,*(&a00+2*i+j-2); 则
18、程序的输出结果为(分数:2.00)A.21B.78C.23D.28二、B填空题/B(总题数:13,分数:30.00)41.设一棵完全二叉树共有 700 个结点,则在该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_42.常用的黑箱测试有等价类划分法、 1 和错误推测法 3 种。(分数:2.00)填空项 1:_43.数据库管理系统常见的数据模型有层次模型、网状模型和 13 种。(分数:2.00)填空项 1:_44.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 1。(分数:2.00)填空项 1:_45.数据库保护分为:安全性控制、 1、并发性控制和数据的恢复。(分数:
19、2.00)填空项 1:_46.执行以下程序后的输出结果是_。 main() inta=10; a=(3*5,a+4);printf(“a=%d/n“,a); (分数:2.00)填空项 1:_47.以下程序的输出结果是_。 #includestring.h main() printf(“%d/n“,strlen(“IBM/n012/1/“);(分数:2.00)填空项 1:_48.已定义 char ch=$;int i=1,j;,执行 j!=ch&i+以后,i 的值为 1。(分数:2.00)填空项 1:_49.以下程序的运行结果是_。 #includestdio.h long fib(int g)
20、 switch(g) case 0:return 0; case 1: case 2:return 1; return(fib(g-1)+fib(g-2); main() long k; k=fib(5); printf(“k=%51d/n“,k);(分数:2.00)填空项 1:_50.下面程序的功能是输出数组 s 中最大元素的下标,请填空。 main() int k,p,s=1,-9,7,2,-10,3; for(p=0,k=p;p6;p+) if(spsk)_ printf(“%d/n“,k);(分数:2.00)填空项 1:_51.以下程序的功能是:求出数组 x 中各相邻两个元素的和依次存
21、放到 a 数组中,然后输出。请填空。 main() int x10,a9,i; for(i=0;i10;i+)scanf(“%d“,&xi); for(U 11 /U;i10;i+) ai-1=xi+U 12 /U; for(i=0;i9;i+)printf(“%d“,ai); printf(“); (分数:4.00)填空项 1:_52.设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me()函数在a:/myfile.txt 中有定义。) _ main() printf(“/n“); try_me(); printf(“/n“);(分数:2.00)填空项 1:_53.
22、以下程序的功能是建立个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1 时,表示输入结束(链表头结点的 data 域不放数据,表空的条件是 ph-next=NULL),请填空。 #includestdio.h struct list int data;struct list *next; struct list * creatlist() struct list *p,*q,*ph;int a;ph=(struct list *)malloc(sizeof(struct list); p=q=ph;printf(“Input an integer number;entre-
23、1 to end:/n“); scanf(“%d“,&a); while(a!=-1) p=(struct list*)malloc(sizeof(struct list); U 14 /U=a;q-next=p;U 15 /U=p;scanf(“%d“,&a); p-next=/0;return(ph); main() stuct list * head;head=creatlist();(分数:4.00)填空项 1:_二级 C 语言笔试-385 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:40,分数:70.00)1.下面程序输出的结果是 main() in
24、t i; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) printf(“%d“,a2-ii);(分数:2.00)A.1 5 9B.7 5 3 C.3 5 7D.5 9 1解析:解析 本题用循环的方法考查对数组概念的掌握。首先,当 i=0 时,数组中的位置是 a20=7,当然,如果用排除法,就不用考虑后面的循环,因为在 4 个选项中,第 1 个数为 7 的选项只有 B)。本题执行第 2 次循环时,i 的值为 1,则 pfintf 函数中的数组指向为 a11=5,依次循环,可求出答案。2.若有说明:int*p,m=5,n;,以下正确的程序段是(分数:2.00)
25、A.p=&n;scanf(“%d“,&;B.p=&n;scanf(“%d“,*C.scanf(“%d“,&;*p=n;D.p=&n;*p=m; 解析:解析 “&”是求址运算符,“*”是指变量说明符。选项 A)、B)应改为 scanf(“%d“,p);选项 C)中指针变量 p 未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。3.已知大写字母 A 的 ASCII 码是 65,小写字母 a 的 ASCII 码是 97。以下不能将变量 c 中的大写字母转换为对应小写字母的语句是(分数:2.00)A.c=(c-A)%26+aB.c=c+32C.c=c-A+aD.a=(A+%26-a
26、解析:解析 C 语言中,字符数据参加运算时,实际上是其 ASCII 码参与运算。大写字母的 ASCII 码比其对应的小写字母的 ASCII 码小 32。因此大写字母转化为小写字母只需将其加上 32 即可。所以选项 B)、C)都符合条件,因为变量 c 中存储的是大写字母,所以“c-A”的值一定小于 26,故选项 A)与选项 C)的含义相同。4.有以下程序 void f(int *q) inti=0; for(;i5;i+) (*q)+; main() int a5=1,2,3,4,5,i; f(a); for(i=0;i5;i+)printf(“%d,“,ai); 程序运行后的输出结果是(分数:
27、2.00)A.2,2,3,4,5,B.6,2,3,4,5, C.1,2,3,4,5,D.2,3,4,5,6,解析:解析 调用函数 f()时,将数组 a 的地址传递给了指针 q,此时 q 指向的就是数组 a 的第一个元素a0。在 5 次循环过程中,q 始终指向 a0,因此 a0的值增加了 5。最后的输出结果为“6,2,3,4,5”。5.算法的空间复杂度是指(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.执行算法需要的内存空间 解析:解析 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间
28、复杂度是指执行这个算法所需要的内存空间。6.下列叙述中,不属于测试的特征的是(分数:2.00)A.测试的挑剔性B.完全测试的不可能性C.测试的可靠性 D.测试的经济性解析:解析 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有 3 个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。7.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:2.00)A.acbedB.decabC.deabcD.cedba 解析:解析 依据后序遍历序列可确定根结点为 c;再依据中序遍历
29、序列可知其左子树由 deba 构成,右子树为空;又由左子树的后序遍历序列可知其根结点为 e,由中序遍历序列可知其左子树为 d,右子树由ba 构成,如下图所示,求得该二叉树的前序遍历序列为选项 D)。 8.下列有关数据库的描述,正确的是(分数:2.00)A.数据处理是将信息转化为数据的过程B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C.关系中的每一列称为元组,一个元组就是一个字段D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 解析:解析 数据处理是指将数据转换成信息的过程,故选项 A)叙述错误;数据的物理独立性是指数据
30、的物理结构的改变,不会影响数据库的逻辑结构,故选项 B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项 C)叙述错误。9.下列关于队列的叙述中正确的是(分数:2.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表 D.队列是先进后出的线性表解析:解析 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。10.下列选项可以正确表示字符型常量的是
31、(分数:2.00)A./r B.“a“C.“/897“D.296解析:解析 C 语言中,一个字符常量代表 ASCII 字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是 0127。由于字符常量用单引号括起来,所以选项 B),C)错误,选项 D)超过了字符常量的表示范围。11.以下叙述中错误的是(分数:1.00)A.计算机不能直接执行用 C 语言编写的源程序B.C 程序经 C 编译程序编译后,生成后缀为.obj 的文件是一个二进制文件C.后缀为.obj 的文件,经连接程序生成后缀为.exe 的文件是一个二进制文件D.后缀为.obj 和.exe 的二进制文件都可以直接运行
32、解析:解析 一个 C 语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。12.有以下程序 main() int k=5,n=0; do switch(k) case 1: case 3:n+=1;k-;break; default:n=0;k-; case 2: case 4:n+=2;k-;break; printf(“%d“,n); whUe(k0 &n5); 程序运行后的输出结果是(分数:
33、1.00)A.235 B.0235C.02356D.2356解析:解析 因为变量的初始值分别为“k=5,n= 0”,所以程序第一次进入循环时,执行 default 语句,这时 k=4,执行“case 4:”这个分支,结果是“n=2,k=3”,打印出 2;程序然后进行第二次循环,这时“n=2,k=3”,执行“case 3:”这个分支,结果是“n=3,k=2”,打印出 3;程序进行第三次循环,这时“n=3,k=2”,执行“case 2:case 4:”这两个分支,结果是“n=5,k=1”,打印出 5,这时因为n=5 不满足 n5 的循环条件,因此退出循环,程序运行结束,故输出结果为 235。13.
34、以下程序的输出结果是 #includestdio.h int a33=1,2,3,4,5,6,7,8,9,*p; main() p=(int*)malloc(sizeof(int); f(p,a); printf(“%d/n”,*p); free(p); f(int *s,intp 3) *s=p11;(分数:1.00)A.1B.4C.7D.5 解析:解析 本题考查了二维数组元素引用的方法。题中用动态存储分配函数 malloc 分配了一个 int 型数据长度大小的内存,然后指针 p 指向了这段内存,函数 f()中对 p 所指向的数据进行了赋值,p11为二维数组第二行第二列的元素,对应于实参 a
35、 的元素 5,所以输出结果为 5。14.下面关于对象概念的描述中,错误的是(分数:1.00)A.对象就是 C 语言中的结构体变量 B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的解析:解析 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于 C+、Java 等语言中,因此 A)错误。15.有以下语句,则对 a 数组元素的引用不正确的是(0i9) int a10=0,1,2,3,4,5,6,7,
36、8,9,*p=a;(分数:1.00)A.ap-B.*(&C.pD.*(*(a+) 解析:解析 本题考查数组指针的应用。选项 D)第一层括号中为数组 a 中第 i 项元素的值,外面再加指针运算符没有意义。16.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“,&a1,&c1,&a2,&c2);语句为变量 a1 和 a2 赋数值 10 和 20,为变量 c1 和 c2 赋字符 X 和 Y。以下所示的输入形式中正确的是(注:代表空格字符)(分数:1.00)A.10X20Y回车B.10X20Y回车C.10X回车 20Y回车D.10X回车 20Y回车 解析:解析 本题中,scanf 函数的
37、格式控制没有空格,所以,对于选项 A)、B)、C),输入的第一个空格会作为字符赋值给变量 c1,而不会被解释成分隔符。17.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为(分数:1.00)A.n+1 B.n-1C.2nD.n/2解析:解析 对于任何一棵二叉树 T,如果其终端结点(叶子)数为 n1,度为 2 的结点数为 n2,则n1=n2+1,所以该二叉树的叶子结点数等于 n+1。18.下面程序段的运行结果是 char a=“lanuage“,*p; p=a; while(*p!=u)printf(“%c“,*p-32);p+;(分数:1.00)A.LANGUAGEB.lang
38、uageC.LAN D.langUAGE解析:解析 本段程序的作用是输出字符串“lanu-age”中字母 u 之前的字符,并将其转化为大写字母。 注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放/0。19.有以下程序 #includestdio.h main() int c; while(c=getchar()!=/n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); case 4:put
39、char(c+3);break; printf(“/n“) 从第一列开始输入以下数据CR代表一个回车符。 2743CR 程序的输出结果是(分数:1.00)A.66877 B.668966C.6677877D.6688766解析:解析 本题主要考查了字符输入输出函数 getchar 和 putchar 的使用。getchar 函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量 c 中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。20.以下叙述中正确的是(分数:1.00)A.构成 C 程序的基本单位是函数 B.可以在一个函数中定义另一个函数C.main()函数必
40、须放在其他函数之前D.C 函数定义的格式是 K&R 格式解析:解析 本题考查 C 语言的综合基础知识。构成 C 程序的基本单位是函数,不论 main 函数在整个程序中的位置如何,一个 C 程序总是从 main 函数开始执行,C 语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C 函数定义的一般格式有两种:传统格式和现代格式。传统格式也称 K&R 格式,是早期编译系统使用的格式;现代格式又称 ANSI 格式,是现代编译系统使用的格式。21.以下程序的输出结果是 main() int c=35;printf(“%d/n“,c&c);(分数:2.00)A.0B.70C
41、.35 D.1解析:解析 本题考查按位与“&”。因为 1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。22.以下合法的字符型常量是(分数:2.00)A./x13 B./081C.65D.“/n“解析:解析 C 语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在 C 语言中还允许用一个“/”开头的字符序列来表示字符常量。其中,形式“/ddd“表示 1 到 3 位 8 进制数所代表的字符;形式“/xhh“表示 1 到 2 位 16 进制数所代表的字符。在本题中,/x13表示回车符,是一个字符常量;/081用 8 进制数所代表的字符,但形式不正确,因为 8 进
42、制数所代表的字符中不会出现数字“8”;5不是一个字符,而是一个十进制数字;/n是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。23.有以下程序 #includestring.h main() char p20=a,b,c,d,q=“abc“,r=“abcde“; strcat(p,r);strcpy(p+strlen(q),q); printf(“%d/n“,strlen(p); 程序运行后的输出结果是(分数:2.00)A.9B.6 C.11D.7解析:解析 strcpy()函数的功能是将字符串 q 复制到从 p3位置开始的存储单元,同时复制字符串结束标志 /0到 P6中。函数 s
43、trlen()返回的是字符串中不包括/0在内的实际长度,故本题答案为 B)。24.有以下程序 #includestdio.h main() FILE *fp;int i=20,j=30,k,n; fp=fopen(“d1.dat“,“w“); fprintf(fp,“%d/n“,i;fprintf(fp,“%d/n“,j); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d%d“,&k,&n);printf(“%d%d/n“,k,n); fclose(fp); 程序运行后的输出结果是(分数:2.00)A.20 30 B.20 50C.30 50
44、D.30 20解析:解析 本题中,最主要的是掌握几个有关文件函数的应用。 函数名:fopen 功能:打开一个文件 调用方式 FILE*fP; fP=fopen(文件名,使用文件方式); 函数名:fprintf 功能:传送格式化输出到一个文件中 调用方式:fprintf(文件指针,格式字符串,输出表列); 函数名:fclose 功能:关闭一个文件 调用方式:fclose(文件指针); 函数名:fscanf 功能:从磁盘文件执行格式化输入 调用方式:fscanf(文件指针,格式字符串,输入列表)。25.在执行下述程序时,若从键盘输入 6 和 8,则结果为 main() int a,b,s; sca
45、nf(“%d%d“,&a,&b); S=a if(ab) s=b; S*=S; printf(“%d“,s);(分数:2.00)A.36B.64 C.48D.以上都不对解析:解析 本题中 a 的值为 6,b 的值为 8,最后 s 的值为 8,s*=s 等价于 s=s*s。26.若执行下面的程序时,从键盘输入 5 和 2,则输出结果是 main() int a,b,k; scanf(“%d,%d“,&a,&b); k=a; if(ab)k=a%b; else k=b%a; printf(“%d/n“,k);(分数:2.00)A.5B.3C.2 D.0解析:解析 本题考查简单的 ifelse 语句
46、。先执行条件 if(ab),显然不成立,在执行 else 语句。27.设有如下三个关系表Amn(分数:2.00)A.B.C. D.解析:解析 对于两个关系的合并操作可以用笛卡尔积表示。设有 n 元关系 R 和 m 元关系 S,它们分别有 p 和 q 个元组,则 R 与 S 的笛卡尔积记为 RS,它是一个 m+n 元关系,元组个数是 pq,由题意可得,关系 T 是由关系 R 与关系 S 进行笛卡尔积运算得到的。28.在结构化程序设计中,模块划分的原则是(分数:2.00)A.各模块应包括尽量多的功能B.各模块的规模应尽量大C.各模块之间的联系应尽量紧密D.模块内具有高内聚度、模块间具有低耦合度 解析:解析 在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。29.C 语言规定,在一个源程序中,main 函数的位置(分数:2.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意 D.必须在最后解析:解析 不论 main 函数在整个过程中的位置如何,一个 C