1、二级 C 语言笔试-293 及答案解析(总分:90.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.下列函数的运行结果是main ( )int i=2,p;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=-1;return(c);(分数:1.00)A.-1B.1C.2D.编译出错,无法运行2.阅读下面程序,则执行后的结果是#include“stdio.h“main()char str=“tomeetme“,*p;for
2、(p=str;pstr+7;p+=2)putchar(*p);printf(“/n“); (分数:1.00)A.tomeetmeB.tmemC.oeteD.tome3.下列关于字符串的说法中错误的是(分数:1.00)A.在 C 语言中,字符串是借助于字符型一维数组来存放的,并规定以字符/0作为字符串结束标志B./0作为标志占用存储空间,计入串的实际长度C.在表示字符串常量的时候不需要人为在其末尾加入/0D.在 C 语言中,字符串常量隐含处理成以/0结尾4.下面四个选项中,均是不正确的 8 进制数或 16 进制数的选项是(分数:1.00)A.016 0x8f 018B.0abc 017 0xaC
3、.010 -0x11 0x16D.0a12 7ff -1235.有以下程序#includestdlib.hstruct NODEint num;struct NODE*next;main()struct NODE*p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE);q=(struct NODE*)malloc(sizeof(struct NODE);r=(struct NODE*)malloc(sizeof(struct NODE);p-num=10;q-num=20;r-num=30;p-next=q;q-next=r;printf(“%d/
4、n“,p-num+q-next-num);程序运行后的输出结果是(分数:1.00)A.10B.20C.30D.406.以下程序有错,错误原因是main()int*p,i;char*q,ch;p= p= scanf(“%c, p=(char*)malloc(1) scanf(“%c“,p);C.char *p *p=getchar( );D.char *p,ch;p=*p=getchar( );13.以下叙述中正确的是(分数:1.00)A.程序应尽可能短B.为了编程的方便,应当根据编程人员的意图使程序的流程随意转移C.虽然注释会占用较大篇幅,但程序中还是应有尽可能详细的注释D.在 TURBO C
5、 环境下,运行的程序就是源程序14.下列数据模型中,具有坚实理论基础的是(分数:1.00)A.层次模型B.网状模型C.关系模型D.以上 3 个都是15.线性表 L=(a1,a2,a3,ai、an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件16.软件开发离不开系统环境资源的支持,其中必要的测试数据属于(分数:1.00)A.硬件资源B.通信资源C.支持软件D.辅助资源17.有如下程序:long fib(int
6、n)if(n2)return(fib(n-1)+fib(n-2);else return(2);main()printf(“%d/n“,fib(3);该程序的输出结果是(分数:1.00)A.2B.4C.6D.818.下面函数的功能是char*fun(char*strl,char*str2)while(*strl)(分数:1.00)A.求字符串的长度B.比较两个字符串的大小C.将字符串 str1 复制到字符串 str2 中D.将字符串 str1 接续到字符串 str2 中19.阅读以下程序及对程序功能的描述,其中正确的描述是#includestdio.hmain()FILE*in,*out;ch
7、ar 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(“cannot open infile/n“);exit(0);if(out=fopen(outfile,“w“)=NULL)printf(“cannot open outfile/n“);exit(0);while(!feof(in)fputc(fgetc
8、(in),out);fclose(in);fclose(out);(分数:1.00)A.程序完成将磁盘文件的信息在屏幕上显示的功能B.程序完成将两个磁盘文件合二为一的功能C.程序完成将一个磁盘文件复制到另一个磁盘文件中D.程序完成将两个磁盘文件合并并在屏幕上输出20.对以下说明语句的正确理解是int a10=6,7,8,9,10;(分数:1.00)A.将 5 个初值依次赋给 a1至 a5B.将 5 个初值依次赋给 a0至 a4C.将 5 个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确21.设 p1 和 p2 是指向一个 int 型一维数组的指针变量,k 为
9、int 型变量,则不能正确执行的语句是(分数:1.00)A.k=*p1+*p2B.p2=k;C.p1=p2;D.k=*p1*(*p2);22.在位运算中,操作数右移一位,其结果相当于(分数:1.00)A.操作数乘以 2B.操作数除以 2C.操作数乘以 4D.操作数除以 423.设变量 a 是 int 型,f 是 float 型,i 是 double 型,则表达式 10+a+i*f 值的数据类型为(分数:1.00)A.intB.floatC.doubleD.不确定24. (分数:1.00)A.B.C.D.25.设有如下定义:struct skint n;float x; data,*p;若要使
10、p 指向 data 中的 n 域,正确的赋值语句是(分数:1.00)A.p=iM;i+)for(j=0;jN;j+)aij=i+j-(i-j);fun((分数:1.00)A.;A) 3B) 4C) 5D40.设有程序段int k=10;while(k=0)k=k-1;则下面描述中正确的是(分数:1.00)A.while 循环执行 10 次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次41.软件工程的出现是由于(分数:1.00)A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展42.若运行以下程序时,从键盘输入 ADescriptorCR(CR表示
11、回车),则下面程序的运行结果是#includestdio.hmain()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+=1default: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,
12、v2=1243.设 x,y 和 z 都是 int 型变量,且 x=3,y=4,z=5,则下面表达式中,值为 0 的表达式是(分数:1.00)A.xwhile(strcmp(s,“End“)printf(“Input a string:“);gets(s);while(*p)putchar(*p+);(分数:1.00)A.此程序循环接收字符串并输出,直到接收字符串“End“为止B.此程序循环接收字符串,接收到字符串“End“则输出,否则程序终止C.此程序循环接收字符串并输出,直到接收字符串“End“为止,但因为代码有错误,程序不能正常工作D.此程序循环接收字符串并将其连接在一起,直到接收字符串“
13、End“为止,输出连接在一起的字符串47.在单链表中,增加头结点的目的是(分数:1.00)A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现48.假设线性表的长度为 n,则在最坏情况下,冒泡排序需要的比较次数为(分数:1.00)A.log2nB.n2C.O(n1.5)D.n(n-1)/249.以下程序的输出结果是#includestdio.hmain()union un int i;long k;char c;struct byteint a;long b;union un c;r;printf(“%d/n“,sizeof(r);(分数
14、:1.00)A.10B.13C.7D.850.函数的值通过 return 语句返回,下面关于 return 语句的形式描述错误的是(分数:1.00)A.return 表达式;B.return(表达式);C.一个 return 语句可以返回多个函数值D.一个 return 语句只能返回一个函数值二、填空题(总题数:16,分数:40.00)51.在算法正确的前提下,评价一个算法的两个标准是 【1】 。(分数:2.00)填空项 1:_52.将代数式 (分数:2.00)填空项 1:_53.软件危机出现于 60 年代末,为了解决软件危机,人们提出了 【3】 的原理来设计软件,这就是软件工程诞生的基础。(
15、分数:2.00)填空项 1:_54. 【4】 是数据库设计的核心。(分数:2.00)填空项 1:_55.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【5】 。(分数:2.00)填空项 1:_56.下列程序的输出结果是 【6】 。#define PR(a)printf(“%d/t“,(int)(a)#define PRINT(a)PR(a);printf(“ok!“)main()int i,a=1;for(i=0;i3;i+)PRINT(a+i);printf(“/n“);(分数:2.00)填空项 1:_57.关系表达式 xyz,用 C 语言的表达式为 【7】 。(分数:2.00)
16、填空项 1:_58.下面程序的功能是将一个字符串 str 的内容颠倒过来,请填空。#includestring.hmain()inti,j, 【8】 ;char str=“1234567“;for(i=0,j=strlen(str) 【9】 ;ij;i+,j-)k=stri;stri=strj;strj=k;printf(“%s/n“,str);(分数:4.00)填空项 1:_59.以下函数用来求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。请填空。#includeconio.h#includestdio.hint fun(int*s,int t,int*k)int i;*k=
17、0;【10】 if(s*ksi)*k=i;return 【11】 ;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:_64.下面函数要求计算两个整数 x,y 之和,并通过形参返回该值,请填空。add(int x,int y, 【16】 z)【17】 =x+y;(分数:4.00)填空项 1:_65.若用 0 至 9 之间不同的三个数构成一个
18、三位数,下面程序将统计出共有多少种方法。请填空。#includestdio.hmain()int i,j,k,count=0;for(i=0;i=9;i+)for(j=0;i=9;j+)if( 【18】 )continue;else for(k=0;k=9;k+)if( 【19】 )count+;printf(“%d“,count);(分数:4.00)填空项 1:_66.以下定义的结构体类型拟包含两个成员,其中成员变量 info 用来存入整形数据;成员变量 link 是指向自身结构体的指针,请将定义补充完整。struct nodeint info;【20】 link;(分数:2.00)填空项
19、1:_二级 C 语言笔试-293 答案解析(总分:90.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.下列函数的运行结果是main ( )int i=2,p;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=-1;return(c);(分数:1.00)A.-1 B.1C.2D.编译出错,无法运行解析:解析 函数调用相当于 f(2,3),程序运算应得结果为“-1”。2.阅读下面程序,则执行后的结果是#include“st
20、dio.h“main()char str=“tomeetme“,*p;for(p=str;pstr+7;p+=2)putchar(*p);printf(“/n“); (分数:1.00)A.tomeetmeB.tmem C.oeteD.tome解析:解析 存放字符串的字符数组的名字就是这个字符串的首地址。本题的功能是对于字符串“tomeetme”进行选择式输出,从第一个字母开始,每输出一个字符即跳过一个。3.下列关于字符串的说法中错误的是(分数:1.00)A.在 C 语言中,字符串是借助于字符型一维数组来存放的,并规定以字符/0作为字符串结束标志B./0作为标志占用存储空间,计入串的实际长度 C
21、.在表示字符串常量的时候不需要人为在其末尾加入/0D.在 C 语言中,字符串常量隐含处理成以/0结尾解析:解析 /0作为标志占用存储空间,但是不计入串的实际长度。当给一个字符型指针赋值时,赋给这个指针的是这个字符串的地址。4.下面四个选项中,均是不正确的 8 进制数或 16 进制数的选项是(分数:1.00)A.016 0x8f 018B.0abc 017 0xaC.010 -0x11 0x16D.0a12 7ff -123 解析:解析 8 进制中,不可能包括 8 以上的数字,它的范围只在 07 之间,以 0 开头。同样,+六进制是以 0x 开头,数字在 09 和 af 之间。5.有以下程序#i
22、ncludestdlib.hstruct NODEint num;struct NODE*next;main()struct NODE*p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE);q=(struct NODE*)malloc(sizeof(struct NODE);r=(struct NODE*)malloc(sizeof(struct NODE);p-num=10;q-num=20;r-num=30;p-next=q;q-next=r;printf(“%d/n“,p-num+q-next-num);程序运行后的输出结果是(分数:1.0
23、0)A.10B.20C.30D.40 解析:解析 该题中考查的是简单的单链表,下图就是赋完值后的示意图:容易看到 p-num=10,而 q-next 就是 r,所以 q-next-num=30,故答案为 40。*6.以下程序有错,错误原因是main()int*p,i;char*q,ch;p= p= scanf(“%c, p=(char*)malloc(1) scanf(“%c“,p);C.char *p *p=getchar( ); D.char *p,ch;p=*p=getchar( );解析:解析 本题考查了字符的输入函数 getchar 和利用 scanf 函数输入一个字符。用 scan
24、f 输入字符时,格式说明字符应该为%c。本题选项 C)因为指针 p 没有赋初值,所以是一个不定值,不能直接将getchar 读入的字符赋给指针 p 所指向的字符,所以选项 C 错误。13.以下叙述中正确的是(分数:1.00)A.程序应尽可能短B.为了编程的方便,应当根据编程人员的意图使程序的流程随意转移C.虽然注释会占用较大篇幅,但程序中还是应有尽可能详细的注释 D.在 TURBO C 环境下,运行的程序就是源程序解析:解析 本题主要考查了 C 程序编译、运行等基本概念。选项 A)、C)程序的长度没有什么限制,所以不正确;选项 B)程序应该遵循结构化程序设计的理念,不能使程序流程任意的转移,这
25、样不利于程序的理解和执行;选项 D)运行的程序是经过编译后的二进制文件,而不是源程序。14.下列数据模型中,具有坚实理论基础的是(分数:1.00)A.层次模型B.网状模型C.关系模型 D.以上 3 个都是解析:解析 关系模型较之格式化模型(网状模型和层次模型)有以下方面的优点,即数据结构比较简单、具有很高的数据独立性、可以直接处理多对多的联系,以及有坚实的理论基础。15.线性表 L=(a1,a2,a3,ai、an),下列说法正确的是(分数:1.00)A.每个元素都有一个直接前件和直接后件B.线性表中至少要有一个元素C.表中诸元素的排列顺序必须是由小到大或由大到小D.除第一个元素和最后一个元素外
26、,其余每个元素都有一个且只有一个直接前件和直接后件 解析:解析 线性表可以为空表;第一个元素没有直接前件,最后一个元素没有直接后件;线性表的定义中,元素的排列并没有规定大小顺序。16.软件开发离不开系统环境资源的支持,其中必要的测试数据属于(分数:1.00)A.硬件资源B.通信资源C.支持软件D.辅助资源 解析:解析 软件测试过程中,辅助资源包括测试用例(测试数据)、测试计划、出错统计和最终分析报告等。17.有如下程序:long fib(int n)if(n2)return(fib(n-1)+fib(n-2);else return(2);main()printf(“%d/n“,fib(3);
27、该程序的输出结果是(分数:1.00)A.2B.4 C.6D.8解析:解析 本题考查函数的递归调用。fib(3) =fib(2)+fib(1),而 fib(2)的返回值为 2,fib(1)的返回值也为 2,故输出的 fib(3)的值为 4。18.下面函数的功能是char*fun(char*strl,char*str2)while(*strl)(分数:1.00)A.求字符串的长度B.比较两个字符串的大小C.将字符串 str1 复制到字符串 str2 中 D.将字符串 str1 接续到字符串 str2 中解析:解析 while 语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为
28、循环体, while 语句的语义是:计算表达式的值,当值为真(非 0)时,执行循环体语句。本题中逻辑与符号连接的表达式值为真,*str2+=*strl+语句是将 strl 的内容逐个复制到 str2 字符串。19.阅读以下程序及对程序功能的描述,其中正确的描述是#includestdio.hmain()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
29、);if(in=fopen(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);(分数:1.00)A.程序完成将磁盘文件的信息在屏幕上显示的功能B.程序完成将两个磁盘文件合二为一的功能C.程序完成将一个磁盘文件复制到另一个磁盘文件中 D.程序完成将两个磁盘文件合并并在屏幕上输出解
30、析:解析 本题中,最主要的是掌握几个有关文件的函数的应用。函数名:fopen 功能:打开一个文件调用方式 FILE *fp;fp=fopen(文件名,使用文件方式);函数名:feof 功能:检查文件是否结束调用方式: feof(FILE *fp);函数名:fputc 功能:把一个字符写到磁盘文件上去调用方式:fputc(ch,fp)(ch 是要输出的字符,fp是从指定的文件读入一个字符,该文件必须是以读或读写方式打开的调用方式:ch=fgetc(fp)(ch 是字符变量,fp 是文件指针变量);函数名:fclose 功能:关闭一个文件调用方式: fclose(文件指针)。20.对以下说明语句的
31、正确理解是int a10=6,7,8,9,10;(分数:1.00)A.将 5 个初值依次赋给 a1至 a5B.将 5 个初值依次赋给 a0至 a4 C.将 5 个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确解析:解析 本题中,表达式将 5 个初值赋给 a 0至 a4,后面的部分,将自动会被依次补零处理。21.设 p1 和 p2 是指向一个 int 型一维数组的指针变量,k 为 int 型变量,则不能正确执行的语句是(分数:1.00)A.k=*p1+*p2B.p2=k; C.p1=p2;D.k=*p1*(*p2);解析:解析 本题主要考查了一维数组指针的赋值和
32、用指针引用数组元素进行运算。选项 B)中 p2 为指向 int 型变量的指针。而 k 为 int 型变量,不能将 int 型变量直接赋值给指向 int 型变量的指针,所以选项 B)错误。22.在位运算中,操作数右移一位,其结果相当于(分数:1.00)A.操作数乘以 2B.操作数除以 2 C.操作数乘以 4D.操作数除以 4解析:解析 右移运算符“”是双目运算符。其功能是把“”左边的运算数的各二进位全部右移若干位,“”右边的数指定移动的位数。例如:设 a =15,a2 表示把 000001111 右移为00000011(+进制 3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正
33、数时,最高位补 0,而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。Turbo C 和很多系统规定为补 1,右移 1 位相当于除以 2。23.设变量 a 是 int 型,f 是 float 型,i 是 double 型,则表达式 10+a+i*f 值的数据类型为(分数:1.00)A.intB.floatC.double D.不确定解析:解析 根据混合运算规则,如果有一个数据是 float 型或 double 型,则其他数据类型先转化为 double 型,运算的结果最终也是 double 型。24. (分数:1.00)A.B.C.D. 解析:解析 若在 scarf 的
34、格式化控制串中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符。格式化输入函数必须严格按照双引号里面的格式进行输入。在格式化输出函数中,格式控制串中除了合法的格式说明外,可以包含任意的合法字符。25.设有如下定义:struct skint n;float x; data,*p;若要使 p 指向 data 中的 n 域,正确的赋值语句是(分数:1.00)A.p=iM;i+)for(j=0;jN;j+)aij=i+j-(i-j);fun((分数:1.00)A.;A) 3B) 4C) 5D解析:解析 若有以下定义:int a34,i,j;且当 0= i3,0=j4,则可以有以下几种方式
35、来引用数组中的第 i 行,第 j 列的元素:aij,*(ai+j),*(*(a+i)+j),(*(a+i) j,*(do switch(c=getchar()casea:caseA:case e:case E:case i:case I:case o:case O:case u:case U:v1+=1default: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=1
36、2 解析:解析 本题考查 switch 语句的掌握。必须撑握以下内容:首先应该明白 switch 语句的语法格式:switch 语句的语法格式为:switch(表达式)case 常量表达式 1:语句组 1;case 常量表达式 2:语句组 2;case 常量表达式 n:语句组 n;default:语句组 n+1;另外,注意以下几点关于 switch 语句的重点:系统在执行时计算开关表达式的值;根据所得的值在各个 case 标号表达式中寻找匹配,直到发现与表达式匹配的标号(本例中匹配的是 case B:);找到匹配后执行后面相应的语句表,顺序往下执行;如果无相匹配的标号,若存在 default
37、标号,则执行该语句标号后面的语句表 n+1;当不存在 default标号时,不执行 switch 中的任何一个语句表。一般而言,在多分支结构中总会出现“意外”的情况,这时均可归入 default:程序段,作统一的处理;default 标号是可选性的,不必每次都有,视需要而定。 switch 语句中还可以包含 switch 语句,形成switch 的嵌套。43.设 x,y 和 z 都是 int 型变量,且 x=3,y=4,z=5,则下面表达式中,值为 0 的表达式是(分数:1.00)A.xwhile(strcmp(s,“End“)printf(“Input a string:“);gets(s)
38、;while(*p)putchar(*p+);(分数:1.00)A.此程序循环接收字符串并输出,直到接收字符串“End“为止B.此程序循环接收字符串,接收到字符串“End“则输出,否则程序终止 C.此程序循环接收字符串并输出,直到接收字符串“End“为止,但因为代码有错误,程序不能正常工作D.此程序循环接收字符串并将其连接在一起,直到接收字符串“End“为止,输出连接在一起的字符串解析:解析 此题考查了字符串输入函数 gets 和字符串比较函数 strcmp,另外还有字符输出函数 putchar。Gets 从标准输入设备中读入全部字符,包括空格,直到遇到回车符为止。strcmp 是字符串比较函
39、数,strcmp(字符串 1,字符串 2),如果字符串 1 =字符串 2,则函数值为 0;如果字符串 1字符串 2,则函数值为一正整数;如果字符串 1字符串 2,则函数值为一负整数。putchar(c)函数将字符 c 输出到标准输出设备上。47.在单链表中,增加头结点的目的是(分数:1.00)A.方便运算的实现 B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现解析:解析 头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。48.假设线性表的长度为 n,则在最坏
40、情况下,冒泡排序需要的比较次数为(分数:1.00)A.log2nB.n2C.O(n1.5)D.n(n-1)/2 解析:解析 假设线性表的长度为 n,则在最坏情况下,冒泡排序要经过 n/2 遍的从前往后的扫描和 n/2 遍的从后往前的扫描,需要的比较次数为 n(n-1)/2。49.以下程序的输出结果是#includestdio.hmain()union un int i;long k;char c;struct byteint a;long b;union un c;r;printf(“%d/n“,sizeof(r);(分数:1.00)A.10 B.13C.7D.8解析:解析 本题主要考查了结构
41、体和共用体数据的存储形式。共用体的一个特点是所有数据成员共用一段存储单元,而结构体每个数据成员都单独占据一段存储单元。共用体所占存储单元的大小由长度最长的数据成员的长度决定。题中共用体变量 c 占据 4 个字节的长度,结构体 r 所占存储空间的大小为 int(2个字节)+long(4 个字节)+共用体 c(4 个字节)=10 个字节,所以答案为 A)。50.函数的值通过 return 语句返回,下面关于 return 语句的形式描述错误的是(分数:1.00)A.return 表达式;B.return(表达式);C.一个 return 语句可以返回多个函数值 D.一个 return 语句只能返回
42、一个函数值解析:解析 return 语句中的表达式的值就是所求的函数值,此表达式值的类型必须与函数首部所说明的类型一致。如果类型不一致,则以函数值的类型为准,由系统自动进行转换。一个 return 语句只能返回一个值。二、填空题(总题数:16,分数:40.00)51.在算法正确的前提下,评价一个算法的两个标准是 【1】 。(分数:2.00)填空项 1:_ (正确答案:时间复杂度和空间复杂度)解析:52.将代数式 (分数:2.00)填空项 1:_ (正确答案:SQRT(x2+y2)/(a+b))解析:53.软件危机出现于 60 年代末,为了解决软件危机,人们提出了 【3】 的原理来设计软件,这就
43、是软件工程诞生的基础。(分数:2.00)填空项 1:_ (正确答案:软件工程学)解析:54. 【4】 是数据库设计的核心。(分数:2.00)填空项 1:_ (正确答案:数据模型)解析:解析 数据模型是对客观事物及联系的数据描述,它反映了实体内部及实体与实体之间的联系。因此,数据模型是数据库设计的核心。55.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【5】 。(分数:2.00)填空项 1:_ (正确答案:关系)解析:解析 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组
44、,相当于记录值。56.下列程序的输出结果是 【6】 。#define PR(a)printf(“%d/t“,(int)(a)#define PRINT(a)PR(a);printf(“ok!“)main()int i,a=1;for(i=0;i3;i+)PRINT(a+i);printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:1 2 3 ok!)解析:解析 本题主要考查了 printf 函数用在了宏替换中。宏替换不是函数调用,只是一种简单的字符替代。所以本题中 PRINT(a+i)展开为:printf(“%d/t”,(int) (a+i),当 i=0 时,输出 1;当 i=
45、1 时,输出 2;当 i=2 时;输出 3;for 循环结束后输出 ok!。57.关系表达式 xyz,用 C 语言的表达式为 【7】 。(分数:2.00)填空项 1:_ (正确答案:(xy)ij;i+,j-)k=stri;stri=strj;strj=k;printf(“%s/n“,str);(分数:4.00)填空项 1:_ (正确答案:8k 9-1)解析:解析 颠倒一个字符串中的字符,就是首尾对应的元素两两交换。简单地可用两个游标变量 i 和j,i 是前端元素的下标,j 是后端元素的下标,交换以这两个变量值为下标的元素 stri和 strj。开始时,i 的值为 0,j 的值为字符串末元素的下
46、标(字符串长度减 1)。每次交换后,i 增 1,j 减 1。继续交换的条件是 stri还位于 strj的前面,即 ij。字符串末元素的下标是它的长度减 1,所以在第二个空框处应填入-1。程序为了交换 stri和 strj,使用了变量 k,该变量应在程序的变量定义部分中一起定义,所以在第一个空框处应填入 k。59.以下函数用来求出数组的最大元素在数组中的下标并存放在 k 所指的存储单元中。请填空。#includeconio.h#includestdio.hint fun(int*s,int t,int*k)int i;*k=0;【10】 if(s*ksi)*k=i;return 【11】 ;ma
47、in()int a10=876,675,896,101,301,401,980,431,451,777,k;clrscr();fun(a,10,&k);printf(“%d,%d/n“,k,ak);(分数:4.00)填空项 1:_ (正确答案:10for(i=0;it;i+) 110)解析:解析 本题中直接使用指针变量 k,但在使用时要注意对 k 的指针运算,此外,一开始应使*k 的值为数组中的某一下标值,即*k=0。60.下述程序的输出结果是 【12】 。#includestdio.hint fun(int x)int p;if(x=0|x=1)return 3;elsep=x-fun(x-2);return p;void main()printf(“/n%d“,fun(9);(分数:2.00)填空项 1:_ (正