1、二级 C 语言笔试 21 及答案解析(总分:82.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.阅读以下程序及对程序功能的描述,其中正确的描述是 #includestdio.h main() FILE*in,*out; char ch,infile10,outfile10; printf(“Enter the infile name:/n“); scanf(“%s“,infile); printf(“Enter the outfile name:/n“); scanf(“%s“,outfile); if(in=fopen(infile,“r“)=NULL)
2、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);(分数:1.00)A.程序完成将磁盘文件的信息在屏幕上显示的功能B.程序完成将两个磁盘文件合二为一的功能C.程序完成将一个磁盘文件复制到另一个磁盘文件中D.程序完成将两个磁盘文件合并并在屏幕上输出3.以下叙述中正确的是(分数:1.00)A.预处理命
3、令行必须位于源文件的开头脑B.在源文件的一行上可以多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间4.下列程序的输出结果是 #include“stdio.h“ #define N 3 #define M 3 void fun(int aMN) printf(“%d/n“,*(a1+2); main() int aMN; int i,j; for(i=0;iM;i+) for(j=0;jN;j+) aij=i+j-(i-j); fun(a);(分数:1.00)A.3B.4C.5D.65.分布式数据库系统不具有的特点是(分数:1.00)A.数据分布性和逻辑整体性B.位置透明性
4、和复制透明性C.分布性D.数据冗余6.设有程序段 int k=10; while(k=0)k=k-1; 则下面描述中正确的是(分数:1.00)A.while 循环执行 10 次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次7.执行下面的程序后,a 的值为 main() int a,b; for(a=1,b=1;a=100;a+) if(b=20)break; if(b%3=1) b+=3; continue; b-=5; (分数:1.00)A.7B.8C.9D.108.下面四个选项中,均是不正确的 8 进制数或 16 进制数的选项是(分数:1.00)A.016 0x8f 0
5、18B.0abc 017 0xaC.010 -0x11 0x16D.0a12 7ff -1239.C 语言中的标识符只能由字母、数字和下划线 3 种字符组成,且第一个字符(分数:1.00)A.必须为字母B.必须为下划线C.必须为字母或下划线D.可以是字母,数字和下划线中任一字符10.下列数据模型中,具有坚实理论基础的是(分数:1.00)A.层次模型B.网状模型C.关系模型D.以上 3 个都是11.阅读下面程序,则执行后的结果是 #include“stdio.h“ main() char str=“tomeetme“,*p; for(p=str;pstr+7;p+=2)putchar(*p);
6、printf(“/n“); (分数:1.00)A.tomeetmeB.tmemC.oeteD.tome12.若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是(分数:1.00)A.EOFB.-1C.1D.NULL13.设 x,y 和 z 都是 int 型变量,且 x=3,y=4,z=5,则下面表达式中,值为 0 的表达式是(分数:1.00)A.x int j,k; j=i; k=+i; p=f(j,k); printf(“%d“,p); int f(int a,int b) int c; if(ab)c=1; else if(a=b)c=0; else c=-
7、1; return(c);(分数:1.00)A.-1B.1C.2D.编译出错,无法运行16.设有以下说明语句 struct ex int X;float y;char z;example; 则下面的叙述中不正确的是(分数:1.00)A.struct 结构体类型的关键字B.example 是结构体类型名C.x,y,z 都是结构体成员名D.struct ex 是结构体类型名17.以下程序的输出结果是 #includestdio.h main() union un int i; long k; char c; struct byte int a; long b; union un c;r; prin
8、tf(“%d/n“,sizeof(r);(分数:1.00)A.10B.13C.7D.818.已知各变量的类型说明如下: int k,a,b; unsigned long w=5; double x=1.42; 则以下不符合C 语言语法的表达式是(分数:1.00)A.x%(-3)B.w+=-2C.k=(a=2,b=3,a+D.a+=a-=(b=4)*(a=3)19.以下叙述不正确的是(分数:1.00)A.一个 C 源程序可由一个或多个函数组成B.一个 C 源程序必须包含一个 main 函数C.C 程序的基本组成单位是函数D.在 C 程序中,注释说明只能位于一条语句的后面20.下列说法中错误的是(
9、分数:1.00)A.静态局部变量的初值是在编译时赋予的,在程序执行期间不再赋予初值B.若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽C.静态全局变量可以被其他的编辑单位所引用D.所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失21.线性表 L=(a1,a2,a3,ai、an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接
10、后件22.软件开发离不开系统环境资源的支持,其中必要的测试数据属于(分数:1.00)A.硬件资源B.通信资源C.支持软件D.辅助资源23.算法分析的目的是(分数:1.00)A.找出数据结构的合理性B.找出算法中输入和输出之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进24.以下叙述中正确的是(分数:1.00)A.程序应尽可能短B.为了编程的方便,应当根据编程人员的意图使程序的流程随意转移C.虽然注释会占用较大篇幅,但程序中还是应有尽可能详细的注释D.在 TURBO C 环境下,运行的程序就是源程序25.在位运算中,操作数右移一位,其结果相当于(分数:1.00)A.操作数乘以 2
11、B.操作数除以 2C.操作数乘以 4D.操作数除以 426.对下述程序的判断中,正确的是 void main() char*p,s128; p=s; while(strcmp(s,“End“) printf(“Input a string:“); gets(s); while(*p) putchar(*p+);(分数:1.00)A.此程序循环接收字符串并输出,直到接收字符串“End“为止B.此程序循环接收字符串,接收到字符串“End“则输出,否则程序终止C.此程序循环接收字符串并输出,直到接收字符串“End“为止,但因为代码有错误,程序不能正常工作D.此程序循环接收字符串并将其连接在一起,直到
12、接收字符串“End“为止,输出连接在一起的字符串27.运行下面程序,若从键盘输入字母“b”,则输出结果是 char c; c=getchar(); if(c=a p= scanf(“%c, p=(char*)malloc(1) scanf(“%c“,;C.char *p *p=getchar( );D.char *p,ch; p= *p=getchar( );33.在单链表中,增加头结点的目的是(分数:1.00)A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现34.有以下程序: fun(int i,int j) i+;j+; retu
13、rn i+j; main() int a=1,b=2,c=3; c+=fun(a,b)+a; printf(“%d,%d,%d/n“,a,b,c);(分数:1.00)A.1,2,9B.2,3,10C.1,2,10D.2,3,935.C 语言程序的基本单位是(分数:1.00)A.程序行B.语句C.函数D.字符36.有以下程序 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=(分数:1.00)A.求字符串的长度B.比较两个字符串的大小C.将字符串 str1 复制到字符串 str2 中D.将字符串 str1 接续到字符串 str2 中45.若运行以下程序时,从键盘输入
14、ADescriptorCR(CR表示回车),则下面程序的运行结果是#includestdio.h main() char c; int v0=1,v1=0,v2=0; do switch(c=getchar() casea:caseA: case e:case E: case i:case I: case o:case O: case u:case U:v1+=1 default:v0+=1;v2+=1;while(c!=/n); printf(“v0=%d,v1=%d,v2=%d/n“,v0,v1,v2);(分数:1.00)A.v0=7,v1=4,v2=7B.v0=8,v1=4,v2=8C.
15、v0=11,v1=4,v2=11D.v0=13,v1=4,v2=1246.设 p1 和 p2 是指向一个 int 型一维数组的指针变量,k 为 int 型变量,则不能正确执行的语句是(分数:1.00)A.k=*p1+*p2B.p2=k;C.p1=p2;D.k=*p1*(*p2);47.下面对 C 语言的描述中,正确的是(分数:1.00)A.函数一定有返回值,否则无法使用函数B.C 语言函数既可以嵌套定义又可以递归调用C.在 C 语言中,调用函数时,只能将实参的值传递给形参D.C 语言程序中有调用关系的所有函数都必须放在同一源程序文件中48.关系表中的每一横行称为一个(分数:1.00)A.元组B
16、.字段C.属性D.码49.以下程序有错,错误原因是 main() int*p,i;char*q,ch; p=ij;i+,j-) k=stri;stri=strj;strj=k; printf(“%s/n“,str);(分数:2.00)填空项 1:_59.以下函数用来求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。请填空。 #includeconio.h #includestdio.h int fun(int*s,int t,int*k) int i; *k=0; U 【10】 /U if(s*ksi)*k=i; returnU 【11】 /U; main() int a10=8
17、76,675,896,101,301,401,980,431,451,777,k; clrscr(); fun(a,10, for(i=0;i3;i+)ai+=ai; for(i=0;i3;i+)printf(“%d,“,ai); printf(“/n“);(分数:2.00)填空项 1:_64.下面函数要求计算两个整数 x,y 之和,并通过形参返回该值,请填空。 add(int x,int y,U 【16】 /Uz) U【17】 /U=x+y;(分数:2.00)填空项 1:_65.若用 0 至 9 之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请填空。 #includestd
18、io.h main() int i,j,k,count=0; for(i=0;i=9;i+) for(j=0;i=9;j+) if(U 【18】 /U)continue; else for(k=0;k=9;k+) if(U 【19】 /U)count+; printf(“%d“,count);(分数:2.00)填空项 1:_66.以下定义的结构体类型拟包含两个成员,其中成员变量 info 用来存入整形数据;成员变量 link 是指向自身结构体的指针,请将定义补充完整。 struct node int info; U 【20】 /Ulink;(分数:2.00)填空项 1:_二级 C 语言笔试 2
19、1 答案解析(总分:82.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.阅读以下程序及对程序功能的描述,其中正确的描述是 #includestdio.h main() FILE*in,*out; char ch,infile10,outfile10; printf(“Enter the infile name:/n“); scanf(“%s“,infile); printf(“Enter the outfile name:/n“); scanf(“%s“,outfile); if(in=fopen(infile,“r“)=NULL) printf(“cann
20、ot 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);(分数:1.00)A.程序完成将磁盘文件的信息在屏幕上显示的功能B.程序完成将两个磁盘文件合二为一的功能C.程序完成将一个磁盘文件复制到另一个磁盘文件中 D.程序完成将两个磁盘文件合并并在屏幕上输出解析:解析 本题中,最主要的是掌握几个有关文件的函数的应用。 函数名:fo
21、pen 功能:打开一个文件调用方式 FILE *fp;fp=fopen(文件名,使用文件方式); 函数名:feof 功能:检查文件是否结束调用方式: feof(FILE *fp); 函数名:fputc 功能:把一个字符写到磁盘文件上去调用方式:fputc(ch,fp)(ch 是要输出的字符,fp 是从指定的文件读入一个字符,该文件必须是以读或读写方式打开的调用方式:ch=fgetc(fp)(ch 是字符变量,fp 是文件指针变量); 函数名:fclose 功能:关闭一个文件调用方式: fclose(文件指针)。解析:解析 该题中考查的是简单的单链表,下图就是赋完值后的示意图:容易看到 p-nu
22、m=10,而 q-next 就是 r,所以 q-next-num=30,故答案为 40。 3.以下叙述中正确的是(分数:1.00)A.预处理命令行必须位于源文件的开头脑B.在源文件的一行上可以多条预处理命令C.宏名必须用大写字母表示D.宏替换不占用程序的运行时间 解析:解析 选项 A)预处理命令行通常位于源文件的开头,但不是必须的;选项 B)在源文件的一行上只能有一条预处理命令;选项 C)宏名一般习惯用大写字母表示,以与变量名相区别,但不是必须的;选项 D)宏替换不占用程序的运行时间,只占编译时间。4.下列程序的输出结果是 #include“stdio.h“ #define N 3 #defi
23、ne M 3 void fun(int aMN) printf(“%d/n“,*(a1+2); main() int aMN; int i,j; for(i=0;iM;i+) for(j=0;jN;j+) aij=i+j-(i-j); fun(a);(分数:1.00)A.3B.4 C.5D.6解析:解析 若有以下定义:int a34,i,j;且当 0= i3,0=j4,则可以有以下几种方式来引用数组中的第 i 行,第 j 列的元素: aij,*(ai+j),*(*(a+i)+j),(*(a+i) j,*( int j,k; j=i; k=+i; p=f(j,k); printf(“%d“,p)
24、; int f(int a,int b) int c; if(ab)c=1; else if(a=b)c=0; else c=-1; return(c);(分数:1.00)A.-1 B.1C.2D.编译出错,无法运行解析:解析 函数调用相当于 f(2,3),程序运算应得结果为“-1”。16.设有以下说明语句 struct ex int X;float y;char z;example; 则下面的叙述中不正确的是(分数:1.00)A.struct 结构体类型的关键字B.example 是结构体类型名 C.x,y,z 都是结构体成员名D.struct ex 是结构体类型名解析:解析 本题中,str
25、uct ex 是结构体类型名, example 是结构体变量名。17.以下程序的输出结果是 #includestdio.h main() union un int i; long k; char c; struct byte int a; long b; union un c;r; printf(“%d/n“,sizeof(r);(分数:1.00)A.10 B.13C.7D.8解析:解析 本题主要考查了结构体和共用体数据的存储形式。共用体的一个特点是所有数据成员共用一段存储单元,而结构体每个数据成员都单独占据一段存储单元。共用体所占存储单元的大小由长度最长的数据成员的长度决定。题中共用体变量
26、c 占据 4 个字节的长度,结构体 r 所占存储空间的大小为 int(2个字节)+long(4 个字节)+共用体 c(4 个字节)=10 个字节,所以答案为 A)。18.已知各变量的类型说明如下: int k,a,b; unsigned long w=5; double x=1.42; 则以下不符合C 语言语法的表达式是(分数:1.00)A.x%(-3) B.w+=-2C.k=(a=2,b=3,a+D.a+=a-=(b=4)*(a=3)解析:解析 “%”是求余运算符或模运算符,“%”两侧均应为整型数据,选项 A)中的 x 是 double 型数据。19.以下叙述不正确的是(分数:1.00)A.
27、一个 C 源程序可由一个或多个函数组成B.一个 C 源程序必须包含一个 main 函数C.C 程序的基本组成单位是函数D.在 C 程序中,注释说明只能位于一条语句的后面 解析:解析 本题考查 C 语言的基本基础知识。在 C 程序中,注释用符号“/*”开始,而以符号“*/”结束。程序的注释可以放在程序的任何位置。通常将注释放在程序的开始,以说明本程序的功能;或者放在程序的某个语句后面,以对此语句的功能进行说明。无论将注释放有何处,在程序进行编译时,编译程序不会处理注释的内容,且注释内容也不会出现在目标程序中。20.下列说法中错误的是(分数:1.00)A.静态局部变量的初值是在编译时赋予的,在程序
28、执行期间不再赋予初值B.若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽C.静态全局变量可以被其他的编辑单位所引用 D.所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失解析:解析 静态全局变量只限于本文件所使用。静态全局变量只限于本文件所使用,不能被其他的文件所引用。21.线性表 L=(a1,a2,a3,ai、an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余
29、每个元素都有一个且只有一个直接前件和直接后件 解析:解析 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。22.软件开发离不开系统环境资源的支持,其中必要的测试数据属于(分数:1.00)A.硬件资源B.通信资源C.支持软件D.辅助资源 解析:解析 软件测试过程中,辅助资源包括测试用例(测试数据)、测试计划、出错统计和最终分析报告等。23.算法分析的目的是(分数:1.00)A.找出数据结构的合理性B.找出算法中输入和输出之间的关系C.分析算法的易懂性和可靠性D.分析算法的效率以求改进 解析:解析 算法分析是指对一个算法的运行时间和
30、占用空间做定量的分析,一般计算出相应的数量级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。24.以下叙述中正确的是(分数:1.00)A.程序应尽可能短B.为了编程的方便,应当根据编程人员的意图使程序的流程随意转移C.虽然注释会占用较大篇幅,但程序中还是应有尽可能详细的注释 D.在 TURBO C 环境下,运行的程序就是源程序解析:解析 本题主要考查了 C 程序编译、运行等基本概念。选项 A)、C)程序的长度没有什么限制,所以不正确;选项 B)程序应该遵循结构化程序设计的理念,不能使程序流程任意的转移,这样不利于程序的理解和执行;选项
31、 D)运行的程序是经过编译后的二进制文件,而不是源程序。25.在位运算中,操作数右移一位,其结果相当于(分数:1.00)A.操作数乘以 2B.操作数除以 2 C.操作数乘以 4D.操作数除以 4解析:解析 右移运算符“”是双目运算符。其功能是把“”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。例如:设 a =15,a2 表示把 000001111 右移为00000011(+进制 3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补 0,而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。Turbo C 和很多系统规定为补
32、 1,右移 1 位相当于除以 2。26.对下述程序的判断中,正确的是 void main() char*p,s128; p=s; while(strcmp(s,“End“) printf(“Input a string:“); gets(s); while(*p) putchar(*p+);(分数:1.00)A.此程序循环接收字符串并输出,直到接收字符串“End“为止B.此程序循环接收字符串,接收到字符串“End“则输出,否则程序终止 C.此程序循环接收字符串并输出,直到接收字符串“End“为止,但因为代码有错误,程序不能正常工作D.此程序循环接收字符串并将其连接在一起,直到接收字符串“End
33、“为止,输出连接在一起的字符串解析:解析 此题考查了字符串输入函数 gets 和字符串比较函数 strcmp,另外还有字符输出函数 putchar。Gets 从标准输入设备中读入全部字符,包括空格,直到遇到回车符为止。strcmp 是字符串比较函数,strcmp(字符串 1,字符串 2),如果字符串 1 =字符串 2,则函数值为 0;如果字符串 1字符串 2,则函数值为一正整数;如果字符串 1字符串 2,则函数值为一负整数。putchar(c)函数将字符 c 输出到标准输出设备上。27.运行下面程序,若从键盘输入字母“b”,则输出结果是 char c; c=getchar(); if(c=a
34、p= scanf(“%c, p=(char*)malloc(1) scanf(“%c“,;C.char *p *p=getchar( ); D.char *p,ch; p= *p=getchar( );解析:解析 本题考查了字符的输入函数 getchar 和利用 scanf 函数输入一个字符。用 scanf 输入字符时,格式说明字符应该为%c。本题选项 C)因为指针 p 没有赋初值,所以是一个不定值,不能直接将getchar 读入的字符赋给指针 p 所指向的字符,所以选项 C 错误。33.在单链表中,增加头结点的目的是(分数:1.00)A.方便运算的实现 B.使单链表至少有一个结点C.标识表结
35、点中首结点的位置D.说明单链表是线性表的链式存储实现解析:解析 头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。34.有以下程序: fun(int i,int j) i+;j+; return i+j; main() int a=1,b=2,c=3; c+=fun(a,b)+a; printf(“%d,%d,%d/n“,a,b,c);(分数:1.00)A.1,2,9 B.2,3,10C.1,2,10D.2,3,9解析:解析 本题主要考查了函数的调用作为表达式来使用,同时函数调用是按值传递的,函数中
36、对形参的操作并不能影响到实参。函数 fun(1,2)的返回值为 5,而实参 a 的值保持不变仍为 1,所以 c+=fun (1,2)+1 执行后,c=3+5+1=9。35.C 语言程序的基本单位是(分数:1.00)A.程序行B.语句C.函数 D.字符解析:解析 C 语言是一个函数语言,C 语言的主体就是一个主函数,然后有库函数和用户自定义的函数来配合主函数完成一系列的任务,所以说,C 语言的基本单位是函数。36.有以下程序 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=(分数:1.00)A.求字符串的长度B.比较两个字符串的大小C.将字符串 str1 复制到字符
37、串 str2 中 D.将字符串 str1 接续到字符串 str2 中解析:解析 while 语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体, while 语句的语义是:计算表达式的值,当值为真(非 0)时,执行循环体语句。本题中逻辑与符号连接的表达式值为真,*str2+=*strl+语句是将 strl 的内容逐个复制到 str2 字符串。45.若运行以下程序时,从键盘输入 ADescriptorCR(CR表示回车),则下面程序的运行结果是#includestdio.h main() char c; int v0=1,v1=0,v2=0; do switch(c=
38、getchar() casea:caseA: case e:case E: case i:case I: case o:case O: case u:case U:v1+=1 default:v0+=1;v2+=1;while(c!=/n); printf(“v0=%d,v1=%d,v2=%d/n“,v0,v1,v2);(分数:1.00)A.v0=7,v1=4,v2=7B.v0=8,v1=4,v2=8C.v0=11,v1=4,v2=11D.v0=13,v1=4,v2=12 解析:解析 本题考查 switch 语句的掌握。必须撑握以下内容:首先应该明白 switch 语句的语法格式:switch
39、 语句的语法格式为: switch(表达式) case 常量表达式 1:语句组 1; case 常量表达式 2:语句组 2; case 常量表达式 n:语句组 n; default:语句组 n+1; 另外,注意以下几点关于switch 语句的重点: 系统在执行时计算开关表达式的值;根据所得的值在各个 case 标号表达式中寻找匹配,直到发现与表达式匹配的标号(本例中匹配的是 case B:);找到匹配后执行后面相应的语句表,顺序往下执行;如果无相匹配的标号,若存在 default 标号,则执行该语句标号后面的语句表n+1;当不存在 default 标号时,不执行 switch 中的任何一个语句
40、表。 一般而言,在多分支结构中总会出现“意外”的情况,这时均可归入 default:程序段,作统一的处理;default 标号是可选性的,不必每次都有,视需要而定。 switch 语句中还可以包含 switch 语句,形成 switch 的嵌套。46.设 p1 和 p2 是指向一个 int 型一维数组的指针变量,k 为 int 型变量,则不能正确执行的语句是(分数:1.00)A.k=*p1+*p2B.p2=k; C.p1=p2;D.k=*p1*(*p2);解析:解析 本题主要考查了一维数组指针的赋值和用指针引用数组元素进行运算。选项 B)中 p2 为指向 int 型变量的指针。而 k 为 in
41、t 型变量,不能将 int 型变量直接赋值给指向 int 型变量的指针,所以选项 B)错误。47.下面对 C 语言的描述中,正确的是(分数:1.00)A.函数一定有返回值,否则无法使用函数B.C 语言函数既可以嵌套定义又可以递归调用C.在 C 语言中,调用函数时,只能将实参的值传递给形参 D.C 语言程序中有调用关系的所有函数都必须放在同一源程序文件中解析:解析 函数不一定有返回值(void 类型), C 语言规定,在一个函数的内部不能再定义函数,函数可以递归调用,一个 C 程序允许由多个文件组成,C 语言支持函数的外部调用,不一定有调用关系的所有函数都放在同一个源程序文件中。选项 A)函数不
42、一定有返回值,选项 B)函数不可以嵌套定义,选项 D)函数可以外部调用。48.关系表中的每一横行称为一个(分数:1.00)A.元组 B.字段C.属性D.码解析:解析 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为表中的一个属性,对应表中的一个字段;在二维表中凡能惟一标识元组的最小属性集称为该表的键或码。49.以下程序有错,错误原因是 main() int*p,i;char*q,ch; p=ij;i+,j-) k=stri;stri=strj;strj=k; printf(“%s/n“,str);(分数:2.00)填空项 1:_ (正确答案:8k 9-1)解析:解析 颠倒一个字符串
43、中的字符,就是首尾对应的元素两两交换。简单地可用两个游标变量 i 和j,i 是前端元素的下标,j 是后端元素的下标,交换以这两个变量值为下标的元素 stri和 strj。开始时,i 的值为 0,j 的值为字符串末元素的下标(字符串长度减 1)。每次交换后,i 增 1,j 减 1。继续交换的条件是 stri还位于 strj的前面,即 ij。字符串末元素的下标是它的长度减 1,所以在第二个空框处应填入-1。程序为了交换 stri和 strj,使用了变量 k,该变量应在程序的变量定义部分中一起定义,所以在第一个空框处应填入 k。59.以下函数用来求出数组的最大元素在数组中的下标并存放在 k 所指的存
44、储单元中。请填空。 #includeconio.h #includestdio.h int fun(int*s,int t,int*k) int i; *k=0; U 【10】 /U if(s*ksi)*k=i; returnU 【11】 /U; main() int a10=876,675,896,101,301,401,980,431,451,777,k; clrscr(); fun(a,10, for(i=0;i3;i+)ai+=ai; for(i=0;i3;i+)printf(“%d,“,ai); printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:0,2,4)解析
45、:0,4,8 解析 本题主要考查了 for 循环语句的使用以及静态局部变量的特点。64.下面函数要求计算两个整数 x,y 之和,并通过形参返回该值,请填空。 add(int x,int y,U 【16】 /Uz) U【17】 /U=x+y;(分数:2.00)填空项 1:_ (正确答案:16int * 17* z)解析:解析 函数希望通过形参 z 带回结果,形参 z 必须是指针类型的,由于返回整型结果,所以 z 的说明是 int * z。函数返回前必须先把结果通过形参 z 间接引用(写成* z)传回。65.若用 0 至 9 之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请填空。
46、 #includestdio.h main() int i,j,k,count=0; for(i=0;i=9;i+) for(j=0;i=9;j+) if(U 【18】 /U)continue; else for(k=0;k=9;k+) if(U 【19】 /U)count+; printf(“%d“,count);(分数:2.00)填空项 1:_ (正确答案:18i= =j 19k! i&k!j)解析:本题用双重 for 循环写了一段 09 之间不同的 3 个数构成一个三位数的程序,因为要求三位数各个位数的数不能相同,所以第一个空 if 语句的条件应为 i= =j,即当两个位数上的数相同的时候,不再执行下面的操作,转去执行 for 循环的下一次循环。第二个空,需要判断第三位上的数不能与其他两位的数相同。66.以下定义的结构体类型拟包含两个成员,其中成员变量 info 用来存入整形数据;成员变量 link 是指向自身结构体的指针,请将定义补充完整。 struct node int info; U 【20】 /Ulink;(分数:2.00)填空项 1:_ (正确答案:struct node *)解析:解析 本题中的结构类型名为 struct node,所以空白处应填:struct node *。即定义一个指向自身的结构体指针。