1、二级 C语言笔试-424 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:64.00)1.栈和队列的共同点是( )。A) 都是先进先出 B) 都是先进后出C) 只允许在端点处插入和删除元素 D) 没有共同特点(分数:2.00)A.B.C.D.2.数据库设计的根本目标是要解决( )。A) 数据共享问题 B) 数据安全问题 C) 大量数据存储问题 D) 简化数据维护(分数:1.00)A.B.C.D.3.在数据库设计中,将 E-R图转换成关系数据模型的过程属于A) 需求分析阶段 B) 逻辑设计阶段 C) 概念设计阶段 D) 物理设计阶段(分数:2.00)A.B.C
2、.D.4.关系代数运算是以_为基础的运算。A) 关系运算 B) 谓词运算 C) 集合运算 D) 代数运算(分数:2.00)A.B.C.D.5.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是_。A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:2.00)A.B.C.D.6.以下程序段的输出结果是 _。int a=1234;printf(“% 2d/n“,a);A) 12 B) 34C) 1234 D) 提示出错、无结果(分数:1.00)A.B.C.D.7.以下叙述中错误的是 A) C程序在运行过程中所有计算都以二进制方式进行 B) C程序在运行过程中所有计算都以十进
3、制方式进行 C) 所有 C程序都需要编译链接无误后才能运行 D) C程序中整型变量只能存放整数,实型变量只能存放浮点数(分数:1.00)A.B.C.D.8.下列选项中,不能用做标识符的是_。A) _1234_ B) _1_2 C) int_2_ D) 2_int_(分数:1.00)A.B.C.D.9.若在定义语句:int a,b,c,*p=之后,接着执行以下选项中的语句,则能正确执行的语句是( )。A) scanf(“%d“,a,b,c); B) scanf(“%d%d%d“,a,b,c);C) scanf(“%d“,p); D) scanf(“%d“,(分数:1.00)A.B.C.D.10.
4、若变量 a、i 已正确定义,且 i已正确赋值,下面合法的语句是A) a=1 B) +i; C) a=a+=5; D) a=int(i);(分数:1.00)A.B.C.D.11.设有定义:“long x=123450L;”,则以下能够正确输出变量 x的是( )。 A) printf(“x=%d/n“,x); B) printf(“x=%id/a“,x); C) printf(“x=%dL/n”,x); D) printf(“x=%ld/n“,x);(分数:1.00)A.B.C.D.12.下列程序的运行结果是( )。#includestdio.hmain()int a=0,b=4,c=0,d=10
5、,x;if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printf(“%d/n“,d);A) 5 B) 3 C) 20 D) 10(分数:1.00)A.B.C.D.13.下列 4个关于 C语言的结论中错误的是( )。A) 可以用 dowhile语句实现的循环一定可以用 while语句实现B) 可以用 for语句实现的循环一定可以用 while语句实现C) 可以用 while语句实现的循环一定可以用 for语句实现D) dowhile语句与 while语句的区别仅是关键字“while”出现的位置不同(分数:1.00)A.B.C.D.14.在以下给出的表达式中,
6、与 while(E)中的(E)不等价的表达式是( )。A) (! E=0) B) (E0 EO) C) (E=0) D) (E! =0)(分数:1.00)A.B.C.D.15.有下列程序段: typedef struct NODE int num;struct NODE*next; OLD; 下列叙述中正确的是( )。 A) 以上的说明形式非法 B) NODE 是一个结构体类型 C) OLD是一个结构体类型 D) OLD 是一个结构体变量(分数:2.00)A.B.C.D.16.有以下程序: #includestdio.h main() int a=6,b=7,m=I; switch(a%2)
7、case 0:m+;break; case 1:m+; switch(b%2) defaut:m+; case 0:m+;break; printf(“%d/n“,m); 程序运行后的输出结果是( )。 A) 1 B) 2 C) 3 D) 4(分数:2.00)A.B.C.D.17.设有如下程序段,则执行 p=s;语句后,以下叙述中正确的是char s20=“Bejing“,*p;p=s:A) 可以用*p 表示 s0B) s数组中元素的个数和 p所指字符串长度相等C) s和 p都是指针变量D) 数组 s中的内容和指针变量 p中的内容相同(分数:2.00)A.B.C.D.18.C语言规定,函数返回
8、值的类型是( )。 A) 由调用该函数时的主调函数类型所决定 B) 由 return语句中的表达式类型所决定 C) 由调用该函数时系统临时决定 D) 由定义该函数时所指定的数值类型决定(分数:2.00)A.B.C.D.19.设有下列程序段:char s20=“Beijing“,*p;p=s;则执行 p=s;语句后,下列叙述正确的是( )。A) 可以用*p 表示 s0B) s数组中元素的个数和 p所指字符串长度相等C) s和 p都是指针变量D) 数组 s中的内容和指针变量 p中的内容相同(分数:2.00)A.B.C.D.20.请读程序:#includestdio.h#includestring.
9、hmain()char*s1=“AbCdEf“,“*s2=“aB“;s1+;s2+;printf(“%d/n“,strcmp(s1,s2);上面程序的输出结果是_。A) 正数 B) 负数 C) 零 D) 不确定的值(分数:2.00)A.B.C.D.21.以下程序的输出结果是_。main()int a44=1,3,5,2,4,6,3,5,7printf(“%d%d%d%d/n“,a03,a12,a21,a30);A) 0650 B) 1470 C) 5430 D) 输出值不定(分数:2.00)A.B.C.D.22.有以下程序#include stdio.hmain()int m=1,n=2,*p
10、=voidmain()int y3;p(A) 3 B) 4 C) 2 D) 5(分数:2.00)A.B.C.D.24.下列程序的输出结果是( )。#include stdiohvoid p(int *x)printf(“%d“,+*x);void main()int y=3;p(;)i+=k:if(ij)printf(“%d“,s);break;s+=i:A) 4 B) 7 C) 5 D) 6(分数:2.00)A.B.C.D.30.当说明一个结构体变量时系统分配给它的内存是( )。A) 各成员所需要内存量的总和B) 结构中第一个成员所需的内存量C) 成员中占内存最大者所需的容量D) 结构中最后
11、一个成员所需要的内存量(分数:2.00)A.B.C.D.31.以下正确的说法是( )。A) 定义函数时,形参的类型说明可以放在函数体内B) return后边的值不能为表达式C) 如果函数值的类型与返回值类型不一致,以函数值类型为准D) 如果彩参与实参类型不一致,以实参类型为准(分数:1.00)A.B.C.D.32.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct nodeint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:2.00)A.B.C.D.33.下列
12、说法错误的是( )。A) 下列结构体定义时,占据了 5个字节的空间struct studentint num;int age;char sex;B) 结构体的成员名可以与程序中的变量名相同C) 对结构体中的成员可以单独使用,它的作用相当于普通变量D) 结构体可以嵌套定义(分数:2.00)A.B.C.D.34.有以下程序:int f(int b4)int i, j, s=0;for(j=0; j4; j+)i=j;if(i2)i=3-j;S+=bij;return s;main()int a44=1, 2, 3, 4, 0, 2, 4, 6, 3, 6, 9, 12, 3, 2, 1, 0;pr
13、intf(“%d/n“, f(a);执行后的输出结果是_。A) 12 B) 11 C) 18 D) 16(分数:2.00)A.B.C.D.35.有以下程序#includemain()FILE *fp; int i, k, n;fp=fopen(“data.dat“, “w+“);for(i=1; i6; i+)fprintf(fp,“%d “,i);if(i%3=0) fprintf(fp,“/n“);rewind(fp);fscanf(fp, “%d%d“, k, n); printf(“%d %d/n“, k, n);fclose(fp);程序运行后的输出结果是_。(A) 0 0(B) 1
14、23 45(C) 1 4(D) 1 2(分数:2.00)A.B.C.D.36.阅读以下程序及对程序功能的描述,其中正确的是#includestdio.hmain()FILE*in,*out;charch,infile10,outfile10;printf(“Enter the infile name:/n“);scanf(“%s“,infile);printf(“Enter the outfile name:/n“);scanf(“%s“,outfile);if(in=foen(infile,“r“)=NULL)printf(“cannot open infile/n“);exit(0);if
15、(out=fopen(outfile,“w“)=NULL)printf(“cannot open outfile/n“);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);A) 程序完成将磁盘文件的信息在屏幕上显示的功能B) 程序完成将两个磁盘文件合二为一的功能C) 程序完成将一个磁盘文件复制到另一个磁盘文件中D) 程序完成将两个磁盘文件合并并在屏幕上输出(分数:2.00)A.B.C.D.37.有以下程序#include stdio.hmain()FILE*pf,char *s1=“China“,*s2=“Be
16、ijing“;pf=fopen(“abc.dat“,“wb+“);fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf); fclose(pf);以上程序执行后 abc.dat文件的内容是_。A) China B) Chinang C) ChinaBeijing D) BeijingChina(分数:2.00)A.B.C.D.38.有以下程序main()int a=1,b;for(b=1;b=10;b+)if(a=8)break;if(a%2=1)(a+=5;continue;a-=3;printf(“%d/n“,b);程
17、序运行后的输出结果是_。A) 3 B) 4 C) 5 D) 6(分数:1.00)A.B.C.D.39.有以下程序#includestdio.hvoid fun(int n,int*p)int f1,f2;if(n=1|n=2)*p=1;elsefun(n=1,puts(ps+4);*(ps+4)=0;puts(s);程序运行后的输出结果是(选项 D中的第一行是空行)_。A) n/NoYes/NoB) /NOYes C) n/NoYes/NoD) /NoYes(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:34.00)41.软件生命周期分为软件定义期、软件开发期和软件维护期,详
18、细设计属于 1 中的一个阶段。(分数:2.00)填空项 1:_42. 1的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。(分数:2.00)填空项 1:_43.一个关系表的行称为 1。(分数:2.00)填空项 1:_44.一个模块直接调用的其他模块的模块个数称为 1。(分数:2.00)填空项 1:_45.队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。允许删除的一端称作 1。(分数:2.00)填空项 1:_46.与二维表中的“行”的概念最接近的概念是 1。(分数:2.00)填空项 1:_47.诊断和改正程序中错误的工作通常称为 1。(分数:2.00)填空项 1:_4
19、8.要求使下列程序输出 5个整数,请填空。for(i=0;i=_;printf(“%d/n“,i+=2);(分数:2.00)填空项 1:_49.若有下列定义:int a=1,2,3,4,5,6,7,8,9,10,*p=a;,则值为 3的表达式为: 1。(分数:2.00)填空项 1:_下面程序的功能是将一个字符串 str的内容倒序。请填空。#includestring.hmain( )int i,j, (14) ;char str=“1234567“;for(i=0,j=strlen(str) (15) ;ij;i+,j-)k=stri;stri=strj;strj=k;printf(“%s/n
20、“, str):(分数:4.00)填空项 1:_填空项 1:_50.以下程序用以删除字符串中所有的空格,请填空。#includestdio.hmain()char s100=(“Our teacher teach C language!“);int i,j;for(i=j=0;si!=/0;i+)if(si!=)(sj)=si;i+;)sj=_;printf(“%s/n“,s);(分数:4.00)填空项 1:_51.以下程序段打开文件后,先利用 fseek函数将文件位置指针定位在文件末尾,然后调用 ftell函数返回当前文件位置指针的具体位置,从而确定文件长度。请填空。FILE *myf;lo
21、ng f1;myf=_(“test.t“,“rb“);fseek(myf,0,SEEK_END);f1=ftell(myf);fclose(myf);printf(“%d/n“,f1);(分数:2.00)填空项 1:_52.本程序用冒泡法对数组 a的元素从大到小排序,请在程序空白处填空。 void bubble(int a,int n) int i,j,max,temp; max=n-1; doj=0; for(i=0;imax;i+) if(aiai+1) temp=ai;ai=ai+1;ai+1=temp; j=i; max=j; while(_); (分数:2.00)填空项 1:_53.
22、下面的程序把从终端读入的文本(用作为文本结束标志)输出到一个名为 bi.dat的新文件中,请填空。#include stdioh#includestdlibhFILE*fp;main()charch;if(fp=fopen(U /U)=NULL)exit(0);while(ch=getchar()!=) fputc(ch,fp);fclose(fp);(分数:2.00)填空项 1:_54.数据结构分为线性结构与非线性结构,带链的栈属于_。(分数:2.00)填空项 1:_二级 C语言笔试-424 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:40,分数:64.00)1.栈
23、和队列的共同点是( )。A) 都是先进先出 B) 都是先进后出C) 只允许在端点处插入和删除元素 D) 没有共同特点(分数:2.00)A.B.C. D.解析:解析 栈和队列都是操作受限制的线性表,只允许在端点插入和删除。不同点是:栈只允许在表的一端进行插入和删除操作,而队列允许在表的一端进行插入操作,而在另一端进行删除操作。2.数据库设计的根本目标是要解决( )。A) 数据共享问题 B) 数据安全问题 C) 大量数据存储问题 D) 简化数据维护(分数:1.00)A. B.C.D.解析:解析 数据的集成性使得数据可为多个应用所共享,尤其是数据库与网络的结合扩大了数据关系的应用范围。数据的共享又可
24、极大地减少数据冗余性,不仅减少了不必要的存储空间,并且可以避免数据的不一致性。因此,数据库设计的根本目标是要解决数据共享问题。3.在数据库设计中,将 E-R图转换成关系数据模型的过程属于A) 需求分析阶段 B) 逻辑设计阶段 C) 概念设计阶段 D) 物理设计阶段(分数:2.00)A.B. C.D.解析:解析 E-R 模型即实体联系模型,是将现实世界的要求转化成实体、联系、属性等几个基本概念,以及它们之间的两种连接关系。数据库逻辑设计阶段包括以下几个过程:从 E-R图向关系模式转换,逻辑模式规范化及调整、实现规范化和 RDBMS,以及关系视图设计。4.关系代数运算是以_为基础的运算。A) 关系
25、运算 B) 谓词运算 C) 集合运算 D) 代数运算(分数:2.00)A.B.C. D.解析:评析 关系代数运算是以关系代数作为运算对象的组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。5.按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是_。A) 大写字母 B) 连接符 C) 数字字符 D) 下划线(分数:2.00)A.B. C.D.解析:解析 C 语言规定的标识符只能由字母、数字和下划线 3种字符组成,且第一个字母必须为下划线或字母。6.以下程序段的输出结果是 _。int a=1234;printf(“%
26、2d/n“,a);A) 12 B) 34C) 1234 D) 提示出错、无结果(分数:1.00)A.B.C. D.解析:解析 本题考查 printf函数中附加格式字符的用法。本题中的“2”是附加格式字符,其作用是指定变量 a的输出宽度为两列,而本题中 a的值为 1234,已经超过两列,所以按实际值输出,正确答案为选项 C。7.以下叙述中错误的是 A) C程序在运行过程中所有计算都以二进制方式进行 B) C程序在运行过程中所有计算都以十进制方式进行 C) 所有 C程序都需要编译链接无误后才能运行 D) C程序中整型变量只能存放整数,实型变量只能存放浮点数(分数:1.00)A.B. C.D.解析:
27、解析 所有的 C程序都必须经过编译链接无误后才能运行。在运行过程中,由计算机完成程序中所有的运算。由于计算机只能识别二进制,所以所有的运算都以二进制方式进行,而不是十进制。8.下列选项中,不能用做标识符的是_。A) _1234_ B) _1_2 C) int_2_ D) 2_int_(分数:1.00)A.B.C.D. 解析:解析 合法标识符的命名规则是:标识符可以由字母、数字、下画线三种字符组成,并且第一个字符必须为字母或者是下画线,同时,标识符不可以与任意一个关键字同名。在选项 D中,以数字 2开头,不符合标识符的命名规则。9.若在定义语句:int a,b,c,*p=之后,接着执行以下选项中
28、的语句,则能正确执行的语句是( )。A) scanf(“%d“,a,b,c); B) scanf(“%d%d%d“,a,b,c);C) scanf(“%d“,p); D) scanf(“%d“,(分数:1.00)A.B.C. D.解析:解析 程序语句 int a,b,c,*p=if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printf(“%d/n“,d);A) 5 B) 3 C) 20 D) 10(分数:1.00)A.B.C.D. 解析:解析 本题考查 if else语句。第 1个 if语句,先判断条件,发现 a=0条件不成立,则执行与其配对的 else语
29、句;第 2个 if语句,先判断条件,发现 b=4,则!b 条件不成立,又没有与其配对的 else语句,所以执行 printf语句,输出 d。13.下列 4个关于 C语言的结论中错误的是( )。A) 可以用 dowhile语句实现的循环一定可以用 while语句实现B) 可以用 for语句实现的循环一定可以用 while语句实现C) 可以用 while语句实现的循环一定可以用 for语句实现D) dowhile语句与 while语句的区别仅是关键字“while”出现的位置不同(分数:1.00)A.B.C.D. 解析:解析 本题考查几个循环语句的关系。dowhile 语句、while 语句、for
30、 语句所实现的循环可以相互替代;dowhile 语句和 while 语句的区别是 dowhile语句至少执行一次。14.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是( )。A) (! E=0) B) (E0 EO) C) (E=0) D) (E! =0)(分数:1.00)A.B.C. D.解析:解析 while(表达式)语句用来实现“当型”循环结构,当表达式为非 0值时,执行 while循环体语句。选项 A)若 E非。即为 1,选项 B)与选项 D)的结果也为 1,只有选项 C)为 0。15.有下列程序段: typedef struct NODE int num;str
31、uct NODE*next; OLD; 下列叙述中正确的是( )。 A) 以上的说明形式非法 B) NODE 是一个结构体类型 C) OLD是一个结构体类型 D) OLD 是一个结构体变量(分数:2.00)A.B.C. D.解析:解析 C 语言允许用 typedef说明一种新类型名,其一般形式为:typedef 类型名 标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用使 typedef定义了新的类型 OLD结构,所以 OLD为结构体类型。16.有以下程序: #includestdio.h main() int a=
32、6,b=7,m=I; switch(a%2) case 0:m+;break; case 1:m+; switch(b%2) defaut:m+; case 0:m+;break; printf(“%d/n“,m); 程序运行后的输出结果是( )。 A) 1 B) 2 C) 3 D) 4(分数:2.00)A.B. C.D.解析:解析 本题考查 switch语句。因为 a=6,所以 a%2=0,因此第一个 switch语句,执行 case 0,将 m加 1,遇到 break语句跳出 switch语句,输出 m值为 2。17.设有如下程序段,则执行 p=s;语句后,以下叙述中正确的是char s2
33、0=“Bejing“,*p;p=s:A) 可以用*p 表示 s0B) s数组中元素的个数和 p所指字符串长度相等C) s和 p都是指针变量D) 数组 s中的内容和指针变量 p中的内容相同(分数:2.00)A. B.C.D.解析:解析 语句 p=s的作用是把字符数组 s的首地址作为初值赋给了指针变量 p,并且使 p指向了字符数组 s的第一个字符 s0,因此,*p 与 s0等价。18.C语言规定,函数返回值的类型是( )。 A) 由调用该函数时的主调函数类型所决定 B) 由 return语句中的表达式类型所决定 C) 由调用该函数时系统临时决定 D) 由定义该函数时所指定的数值类型决定(分数:2.
34、00)A.B.C.D. 解析:解析 本题考查函数调用时的数值类型。函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由 return语句中的表达式类型所决定,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。19.设有下列程序段:char s20=“Beijing“,*p;p=s;则执行 p=s;语句后,下列叙述正确的是( )。A) 可以用*p 表示 s0B) s数组中元素的个数和 p所指字符串长度相等C) s和 p都是指针变量D) 数组 s中的内容和指针变量 p中的内容相同(分数:2.00)A. B.C.D.解析:解析 程序定义了字符数组 s和字符型指针变量 p,并且使
35、得 p指向数组,执行 p=s;语句后,*p即表示 s0;s 数组中元素的个数和 p 所指字符串长度不相等,因为 s数组中元素的个数包括字符串结束标志“/0”,而 p所指字符串长度不包括“/0”;s 是字符型数组,p 是指针变量;数组 s中的内容和指针变量 p中的内容不相同,数组中存放的是字符串,而指针变量 p存放的是数组的首地址。20.请读程序:#includestdio.h#includestring.hmain()char*s1=“AbCdEf“,“*s2=“aB“;s1+;s2+;printf(“%d/n“,strcmp(s1,s2);上面程序的输出结果是_。A) 正数 B) 负数 C)
36、 零 D) 不确定的值(分数:2.00)A. B.C.D.解析:评析 函数 strcmp的功能是比较字符串 s1和 s2,如果 s1s2,则返回个正数:如果 s1s2,则返回负数,否则返回零。由于本题中小写字母 b的 ASCII码值大于大写字母 B,故 s1s2,所以函数的值为正数。21.以下程序的输出结果是_。main()int a44=1,3,5,2,4,6,3,5,7printf(“%d%d%d%d/n“,a03,a12,a21,a30);A) 0650 B) 1470 C) 5430 D) 输出值不定(分数:2.00)A. B.C.D.解析:评析 对未给出初始值的整数数组元素,被默认初
37、始化为零。22.有以下程序#include stdio.hmain()int m=1,n=2,*p=voidmain()int y3;p(A) 3 B) 4 C) 2 D) 5(分数:2.00)A.B. C.D.解析:解析 本题考查函数调用时的参数传递。在函数调用时,形参是指向实参的指针变量,则 printf的执行结果为 3+14。24.下列程序的输出结果是( )。#include stdiohvoid p(int *x)printf(“%d“,+*x);void main()int y=3;p(;)i+=k:if(ij)printf(“%d“,s);break;s+=i:A) 4 B) 7
38、C) 5 D) 6(分数:2.00)A.B.C.D. 解析:解析 本题涉及 break语句,重点是循环次数的判定。本题的循环由于无出口,只能借助 break语句终止。题目要求说明判断 ij 的执行次数,只需考查经过 i+=k运算如何累计 i的值,i 值分别是i=2,4,6,8,10,12 时,判断 ij 为真,程序输出 s的值并结束,共循环 6次。30.当说明一个结构体变量时系统分配给它的内存是( )。A) 各成员所需要内存量的总和B) 结构中第一个成员所需的内存量C) 成员中占内存最大者所需的容量D) 结构中最后一个成员所需要的内存量(分数:2.00)A. B.C.D.解析:解析 本题主要考
39、查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。31.以下正确的说法是( )。A) 定义函数时,形参的类型说明可以放在函数体内B) return后边的值不能为表达式C) 如果函数值的类型与返回值类型不一致,以函数值类型为准D) 如果彩参与实参类型不一致,以实参类型为准(分数:1.00)A.B.C. D.解析:解析 定义函数时,形参的类型说明放在形参表列内说明,或放在函数定义的第二行,函数体花括号“”之前,所以选项 A) 错;return 后面的值可以是一个表达式,选项 B) 错;
40、实参与形参的类型应相同或赋值兼容,如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准,选项 D) 错。32.有以下结构体说明和变量定义,如图所示, 指针 p、q、r 分别指向此链表中的三个连续结点。Struct nodeint data; struct node *next;*p,*q,*r;现要将 q所指结点从链表中删除,同时要保持链表的连续,(分数:2.00)A.B.C.D. 解析:33.下列说法错误的是( )。A) 下列结构体定义时,占据了 5个字节的空间struct studentint num;int age;char sex;B) 结构体的成员
41、名可以与程序中的变量名相同C) 对结构体中的成员可以单独使用,它的作用相当于普通变量D) 结构体可以嵌套定义(分数:2.00)A. B.C.D.解析:解析 本题主要考查定义结构体的几个特点:结构的定义明确了结构的组成形式,定义了一种C语言中没有而用户需要的新的数据类型。与其他的数据类型不同,在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;结构体的成员名可以与程序中的变量名相同:结构体中的成员可以单独使用,它的作用相当于普通变量;结构体可以嵌套定义。34.有以下程序:int f(int b4)int i, j, s=0;for(j=0; j4; j
42、+)i=j;if(i2)i=3-j;S+=bij;return s;main()int a44=1, 2, 3, 4, 0, 2, 4, 6, 3, 6, 9, 12, 3, 2, 1, 0;printf(“%d/n“, f(a);执行后的输出结果是_。A) 12 B) 11 C) 18 D) 16(分数:2.00)A.B.C.D. 解析:解析 f(a)=a00+a11+a22+a03=1+2+9+4=16。35.有以下程序#includemain()FILE *fp; int i, k, n;fp=fopen(“data.dat“, “w+“);for(i=1; i6; i+)fprintf
43、(fp,“%d “,i);if(i%3=0) fprintf(fp,“/n“);rewind(fp);fscanf(fp, “%d%d“, k, n); printf(“%d %d/n“, k, n);fclose(fp);程序运行后的输出结果是_。(A) 0 0(B) 123 45(C) 1 4(D) 1 2(分数:2.00)A.B.C.D. 解析:36.阅读以下程序及对程序功能的描述,其中正确的是#includestdio.hmain()FILE*in,*out;charch,infile10,outfile10;printf(“Enter the infile name:/n“);sca
44、nf(“%s“,infile);printf(“Enter the outfile name:/n“);scanf(“%s“,outfile);if(in=foen(infile,“r“)=NULL)printf(“cannot open infile/n“);exit(0);if(out=fopen(outfile,“w“)=NULL)printf(“cannot open outfile/n“);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);A) 程序完成将磁盘文件的信息在屏幕上显示的功能B) 程序完成
45、将两个磁盘文件合二为一的功能C) 程序完成将一个磁盘文件复制到另一个磁盘文件中D) 程序完成将两个磁盘文件合并并在屏幕上输出(分数:2.00)A.B.C. D.解析:解析 本题中,最主要的是掌握几个有关文件的函数的应用。函数名:fopen功能:打开一个文件调用方式 FILE*fp;fp=fopen(文件名,使用文件方式);函数名:feof功能:检查文件是否结束调用方式:feof(FILE*fP);函数名:fPutc功能:把一个字符写到磁盘文件上去调用方式:fputc(ch,fp)(ch 是要输出的字符,fp 是从指定的文件读入一个字符,该文件必须是以读或读写方式打开的调用方式:ch=fgetc
46、(fp)(ch 是字符变量,fp 是文件指针变量);函数名:fclose功能:关闭一个文件调用方式:felose(文件指针)。37.有以下程序#include stdio.hmain()FILE*pf,char *s1=“China“,*s2=“Beijing“;pf=fopen(“abc.dat“,“wb+“);fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf); fclose(pf);以上程序执行后 abc.dat文件的内容是_。A) China B) Chinang C) ChinaBeijing D) Beij
47、ingChina(分数:2.00)A.B. C.D.解析:评析 fwrite(buffer,size,count,fp);:buffer 是一个指针,用于指向输出数据存放的内存区域的起始地址,size 是要输出的字节数,count 是要输出大小为 size个字节的数据块的个数。fp 是文件指针。fwrite 函数的功能是对中所指向的文件存入 count 次,每次存放一个大小为 size的数据块,将存入的数据块存到 buffer指向的内存区,如果 buffer内存区有数据,则将其覆盖。本题中第一次调用fwrite函数是向文件中写入 s2的值“Beijing”,第二次调用 fwrite函数是向文件中写入 s1的值“China”,并将先前的“Beijing”的前几个字符覆盖,得到“Chinang”。38.有以下程序main()int a=1,b;for(b=1;b=10;b+)if(a=