admin 管理员组

文章数量: 1086019


2024年12月30日发(作者:switch语句中default子句可以没有)

全国计算机等级考试《二级C语言程序设计》模拟试卷二

[单选题]1.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是

( (江南博哥))。

A.外模式

B.内模式

C.概念模式

D.逻辑模式

参考答案:B

参考解析:数据库管理系统的三级模式包括:①外模式,也称子模式、用户模

式,是指数据库用户所看到的数据结构,是用户看到的数据视图;②模式,也

称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所

见到的数据视图的总和;③内模式,也称存储模式、物理模式,是指数据在数

据库系统内的存储介质上的表示,是对数据的物理结构和存取方式的描述。答

案选择B选项。

[单选题]4.下面不属于需求分析阶段任务的是()。

A.确定软件系统的功能需求

B.确定软件系统的性能需求

C.需求规格说明书评审

D.制定软件集成测试计划

参考答案:D

参考解析:需求分析阶段的工作主要包括4个方面:①需求获取,其目的是确

定对目标系统的各方面需求;②需求分析,对获取的需求进行分析和综合,最

终给出系统的解决方案和目标系统的逻辑模型;③编写文档,编写需求规格说

明书,编写初步用户使用手册;④确认测试计划,修改完善软件开发计划,需

求评审。制定软件集成测试计划属于概要设计阶段的任务。答案选择D选项。

[单选题]5.结构化程序的三种基本控制结构是()。

A.顺序、选择和重复(循环)

B.过程、子程序和分程序

C.顺序、选择和调用

D.调用、返回和转移

参考答案:A

参考解析:结构化程序设计中三种基本控制结构为顺序、选择和重复(循

环)。答案选择A选项。

[单选题]6.构成计算机软件的是()。

A.源代码

B.程序和数据

C.程序和文档

D.程序、数据及相关文档

参考答案:D

参考解析:计算机软件的定义为:与计算机系统的操作有关的计算机程序、规

程、规则,以及可能有的文件、文档及数据。答案选择D选项。

[单选题]7.在黑盒测试方法中,设计测试用例的主要根据是()。

A.程序内部逻辑

B.程序外部功能

C.程序数据结构

D.程序流程图

参考答案:B

参考解析:黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序

的需求和功能规格说明,检查程序的功能是否符合它的功能规格说明。答案选

择B选项。

[单选题]8.在数据库中,数据模型包括数据结构、数据操作和()。

A.数据约束

B.数据类型

C.关系运算

D.查询

参考答案:A

参考解析:在数据库系统中的数据模型有三个要素:数据结构、数据操作和数

据的约束条件。答案选择A选项。

[单选题]9.有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是

()。

A.自然连接

B.交

C.除

D.并

参考答案:C

参考解析:A项,自然连接的条件是两关系间有公共域,通过公共域的相等值进

行连接,R与S的公共域为A和B;B项,R与S进行交运算后得到的关系是由

既在R内又在S内的元素组成的,显然T不在S内;C项, R与S除运算后的

域由R中不出现在S中的域组成;D项,R与S进行并运算得到的关系由属于R

或属于S的元组组成。答案选择C选项。

[单选题]10.在关系模型中,每一个二维表称为一个()。

A.关系

B.属性

C.元组

D.主码(键)

参考答案:A

参考解析:关系模型采用二维表来表示,一个二维表表示一个关系。答案选择A

选项。

[单选题]11.以下叙述中正确的是()。

A.我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令

B.程序必须包含所有三种基本结构才能成为一种算法

C.如果算法非常复杂,则需要使用三种基本结构之外的语句结构,才能准确表

D.只有简单算法才能在有限的操作步骤之后结束

参考答案:A

参考解析:顺序、选择、循环是C语言程序的三个基本结构,一个C语言算法

可以由其中一种或者多种构成,选项B错误;这三种结构能解决所有的问题,

而且C语言只有这三种结构,选项C错误;C语言算法的特点之一就是有穷性,

任何一个算法都必须能在有限的操作步骤和有限的时间之后结束,选项D错

误;C语言程序编译时将每条可执行语句转换为二进制的机器指令,答案选择A

选项。

[单选题]12.以下叙述正确的是()。

A.计算机只接收由0和1代码组成的二进制指令或数据

B.计算机只接收由0和1代码组成的十进制指令或数据

C.计算机可直接接收并运行C源程序

D.计算机可直接接收并运行任意高级语言编写的源程序

参考答案:A

参考解析:二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器

件。例如,电路中有无电流,有电流用1表示,无电流用0表示。类似的还比

如电路中电压的高低,晶体管的导通和截止等;二进制数运算简单,大大简化

了计算中运算部件的结构,故选项A正确、B错误。计算机能直接执行的只有机

器语言程序。选项C、D错误。答案选择A选项。

[单选题]13.以下叙述中错误的是()。

A.C程序在运行过程中所有计算都以十进制方式进行

B.C程序在运行过程中所有计算都以二进制方式进行

C.所有C程序都需要编译链接无误后才能运行

D.C程序中字符变量存放的是字符的ASCⅡ值

参考答案:A

参考解析:C程序在运行过程中所有计算都以二进制方式进行。答案选择A选

项。

[单选题]14.若有定义语句:

int a=3,b=2,c=1;

以下选项中错误的赋值表达式是()。

A.a=(b=4)+c;

B.a=b=c+1;

C.a=(b=4)=3;

D.a=1+(b=c=4);

参考答案:C

参考解析:对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一

个C语言合法的表达式。A项,等价于语句“b=4;a=b+c=5;”;B项,等价于语

句“c=1;b=c+1=2;a=b=2;”;D项,等价于语句“c=4;b=c=4;a=1+b=5;”。答案

选择C选项。

[单选题]15.有以下程序

#include

main()

{

int x,y,z;

x=y=1;

z=x++,y++,++y;

printf("%d,%d,%dn",x,y,z);

}

程序运行后的输出结果是()。

A.2,3,2

B.2,3,3

C.2,3,1

D.2,2,1

参考答案:C

参考解析:考查逗号表达式。注意区分,z=x++是先将x的值赋给z,在令x自

增;z=++x是先将x自增,再将自增后的值赋给z;而无论是++x还是x++,都

会完成x自增的运算。对于表达式“z=x++,y++,++y;”,因为赋值运算符的优

先级高于逗号运算符的优先级,所以可以将上式改成

“(z=x++),(y++),(++y);”。然后从左向右先计算表达式z=x++,后缀自增运算

先进行其他运算,再执行自增运算,所以z的值为1,x的值为2,再计算逗号

表达式第二个表达式y++,此时y的值为1,y++的值为2,最后计算第三个表达

式++y,y的值为3。答案选择C选项。

[单选题]16.若想给已定义为int型的变量a、b、c、d赋整数1,以下选项中错

误的语句是()。

A.a=b,b=c,c=d,d=1;

B.a=b=c=d=1;

C.a=1,b=a,c=b,d=c;

D.d=1,c=d,b=c,a=b;

参考答案:A

参考解析:由于C语言逗号表达式的的执行顺序是从左向右,赋值运算符是自

右向左,A选项先执行a=b时,b为空值,故不正确;所以在连续赋值时一定要

保证赋值运算符的右项有确定的值。答案选择A选项。

[单选题]17.以下能正确输出字符a 的语句是()。

("%s", "a");

("%s",'a');

("%c", "a");

("%d",'a');

参考答案:A

参考解析:输出函数printf()的一般形式为“printf("格式控制字符串",输出

项1,输出项2,…)”,输出项的形式要和格式控制字符串中的格式控制符保持

一致,"%s"为输出字符串,"%c"为输出单个字符,"%d"为以十进制形式输出带

符号整数,答案选择A选项。

[单选题]18.有以下程序段

int m=33,n=66;

m=m^n; n=n^m; m=m^n;

执行上述语句后,m和n的值分别是()。

A.m=66,n=33

B.m=33,n=66

C.m=66,n=66

D.m=33,n=33

参考答案:A

参考解析:^为按位异或运算,是双目运算符,参与运算的两个二进制位相同,

则结果的该位为0;参与运算的两个二进制位不同,则结果的该位为1。首先将

m和n表示成对应的二进制,33 = 00100001B,66 = 01000010B,执行m=m^n,

得m = 00100001 ^ 01000010 = 01100011B;执行 n=n^m,得n = 01000010 ^

01100011 = 00100001B = 33;执行 m=m^n,得m = 01100011 ^ 00100001 =

01000010B = 66;因此语句实现了m和n的交换。答案选择A选项。

[单选题]19.有以下程序段,若变量已正确定义并赋值

if(a>b)printf("x=%d,",x);

else printf("y=%d,",y);

if(a<=b)i++;

else j++;

则与此程序段功能相同的选项是()。

(a>b)

{

printf("x=%d,",x);

j++

}

else

{

printf("y=%d,",y);

i++

}

(a>b)

{

printf("x=%d,",x);

i++

}

else

{

printf("y=%d,",y);

j++

}

(a<=b)

{

printf("x=%d,",x);

i++

}

else

{

printf("y=%d,",y);

j++

}

(a>=b)

{

printf("x=%d,",x);

i++

}

else

{

printf("y=%d,",y);

j++

}

参考答案:A

参考解析:程序段执行过程为:如果a>b,输出x,否则输出y;如果a<=b,i

加1,否则j加1。A项如果a>b,输出x且j加1,否则输出y且i加1,与题

目中功能相同,A项正确。B项如果a>b,输出x且i加1,否则输出y且j加

1,与题目中功能不相同,B项错误。C项如果a<=b,输出x且i加1,否则输

出y且j加1,与题目中功能不相同,C项错误。D项判断条件为a>=b,多了

a=b,D项错误。答案选择A选项。

[单选题]20.有以下程序

#include

main()

{

int x=1, y=0;

if (!x) y++;

else if (x==0)

if (x) y+=2;

else y+=3;

printf("%dn", y);

}

程序运行后的输出结果是()。

A.0

B.2

C.1

D.3

参考答案:A

参考解析:在该题中,选择结构的表达式都不成立,所以整个选择语句都没有

执行,y值没有发生改变,答案选择A选项。

[单选题]21.有以下程序

#include

main()

{

char b,c;

int i;

b='a';

c='A';

for(i=0;i<6;i++)

{

if (i%2) putchar(i+b);

else putchar(i+c);

}

printf("n");

}

程序运行后的输出结果是()。

参考答案:B

参考解析:本题中,当i为偶数时,即0、2、4,执行putchar(i+c)会依次输

出ACE;当i为奇数时,即1、3、5,执行putchar(i+b)会依次输出bdf,所以

最终输出AbCdEf。答案选择B选项。

[单选题]22.有以下程序

#include

main()

{

int y=9;

for(;y>0;y--)

if(y%3==0) printf("%d",--y);

}

程序的运行结果是()。

A.875421

B.963

C.741

D.852

参考答案:D

参考解析:该程序的运行过程是y从9开始自减,每次判定y是否能被3整

除,若是,则输出--y后的值,能被3整除的y值分别为9、6、3,对应输出

8、5、2,所以答案选择D选项。

[单选题]23.以下叙述中正确的是()。

A.程序的算法只能使用流程图来描述

B.结构化程序的三种基本结构是循环结构、选择结构、顺序结构

C.N-S流程图只能描述简单的顺序结构的程序

D.计算机可以直接处理C语言程序,不必进行任何转换

参考答案:B

参考解析:程序的算法可以用流程图、程序语句、伪代码和流程图以及文字进

行描述,选项A错误;N-S能完整描述程序的所有结构,不仅仅包括简单的顺序

结构,选项C错误;C语言的源文件需要经过编译、链接生成可执行文件后才可

以被计算机执行,选项D错误;循环结构、选择结构、顺序结构是结构化程序

的三种基本结构,答案选择B选项。

[单选题]24.以下叙述中正确的是()。

A.语句 int a[][3] = {1,2,4,5}; 是错误的初始化形式

B.语句 int a[4][3] = {1,2,4,5}; 是错误的初始化形式

C.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

D.语句 int a[4][3] = {{1,2},{4,5}}; 是错误的初始化形式

参考答案:C

参考解析:考查二维数组的初始化。初始化二维数组的时候可以对其部分元素

赋初值,选项B错。还可以对数组的全部元素赋初值,此时第一维的元素个数

可以不指定,也可以分行赋值,只对部分元素赋初值,选项A、D错。C的描述

正确,答案选择C选项。

[单选题]25.在以下给出的表达式中,与while(E)中的(E)不等价的表达式是

()。

A.(E==0)

B.(E>0‖E<0)

C.(!E==0)

D.(E!=0)

参考答案:A

参考解析:BCD三项都是E不等于零时执行while循环,A项是E等于零时执行

while循环。答案选择A选项。

[单选题]26.以下数组定义中错误的是()。

x[2][3]={1,2,3,4,5,6};

x[][3]={0};

x[][3]={{1,2,3},{4,5,6}};

x[2][3]={{1,2},{3,4},{5,6}};

参考答案:D

参考解析:A项正确,在给二维数组赋初值时可以不用行花括号对;B项正确,

对于二维数组,第一维的大小可以省略,计算规则是元素的个数除以第二维的

大小向上取整,定义1行3列的数组,里面的元素全部是零;C项正确,第一维

的大小由所赋初值的行数来决定,定义2行3列的数组;D项错误,应该是

x[3][2]。答案选择D选项。

[单选题]27.下列定义数组的语句中,正确的是()。

x[];

N=10; int x[N];

x[0..10];

D.#define N 10

int x[N];

参考答案:D

参考解析:一维数组定义格式是:类型名 数组名[整型常量表达式]。D项正

确,它使用预处理宏定义,N可以看做是常量。A项错误,没有指明数组的长

度;B项错误,数组长度不能由变量指明;C项错误,数组长度应该整型常量表

达式。答案选择D选项。

[单选题]28.以下叙述中正确的是()。

A.函数调用时,不必区分函数名称的大小写

B.调用函数时,函数名必须与被调用的函数名完全一致

C.函数名允许用数字开头

D.在函数体中只能出现一次return语句

参考答案:B

参考解析:调用函数的时候只有保证调用语句的函数名和被调函数的函数名、

参数列表一致才能保证调用的正确性,B正确。C语言对大小写敏感,选项A

错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下

划线组成并且第一个字符不能为数字,选项C错。一个函数每次只能使用一个

return语句,但是该函数体中可以有多个返回点,也就是有多条return语句,

每次只从其中一点返回,选项D错。答案选择B选项。

[单选题]29.有以下程序

#include

main()

{

int i,j = 0;

char a[] = "How are you", b[10] = {0};

for (i=0; a[i]; i++)

if (a[i] == ' ')

b[j++] = a[i+1];

printf("%sn",b);

}

程序运行后的输出结果是()。

you

参考答案:A

参考解析:本题的功能是:一旦出现空格,即把空格后面的字符输出。答案选

择A选项。

[单选题]30.以下关于字符串的叙述中正确的是()。

A.C语言中有字符串类型的常量和变量

B.两个字符串中的字符个数相同时才能进行字符串大小的比较

C.可以用关系运算符对字符串的大小进行比较

D.空串比空格打头的字符串小

参考答案:D

参考解析:A项错误,C语言中没有字符串类型,而是通过字符数组的形式保存

字符串。B项错误,字符串比较的方法是:依次对s1和s2中对应位置上的字符

两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的

大小(比较字符大小的依据是其ASCII码值)。空格是一种字符,所以空串肯

定比空格打头的字符串小。C项错误,比较字符串大小时,通过库函数

strcmp(s1,s2)或者自定义函数,不能使用关系运算符。D项正确:空串的长度

为0,而以空格打头的字符串的长度至少为1。答案选择D选项。

[单选题]31.有以下程序

#include

void fun(int *s)

{

static int j=0;

do s[j] += s[j+1]; while(++j<2);

}

main()

{

int i,a[10]={1,2,3,4,5};

for(i=1; i<3; i++) fun(a);

for(i=1; i<5; i++) printf("%d",a[i]);

printf("n");

}

程序运行后的输出结果是()。

A.5745

B.34756

C.5795

D.35745

参考答案:A

参考解析:从main函数开始,第一个for循环:k=1,满足条件k<3,调用

fun(a)。fun()函数中,s为指向数组a的指针,则有s[0]=s[0]+s[1]=3,满足

条件++j(此时j=1)小于2,继续执行do-while循环;s[1]=s[1]+s[2]=5,不

满足条件++j(此时j=2)小于2,退出do-while循环。此时:k=2,满足条件

k<3,再次调用fun(a)。由于j定义为静态变量,所以上次函数调用结束时j=2

仍被保留,则有s[2]=s[2]+s[3]=7,不满足条件++j(此时j=3)小于2,退出

do-while循环。此时,k=3,不再满足循环条件,退出第一个for循环,执行第

二个for循环,输出a[1]~a[4]共4个数,即5745。答案选择A选项。

[单选题]32.有以下程序

#include

main()

{

int a[10]={11,12,13,14,15,16,17,18,19,20},*p=a,i=9;

printf("%d,%d,%dn",a[p-a],p[i],*(&a[i]));

}

程序运行后的输出结果是()。

A.11,20,20

B.12,20,20

C.11,19,19

D.12,19,20

参考答案:A

参考解析:a表示数组a的第一个元素的地址,*p=a则将p指向了数组a的第

一个元素的地址,p-a=0,所以a[p-a]即为a[0],p[i]相当于a[i]即a[9],输

出第一个结果为11、第二个结果为20。取地址运算符&和取值运算符*互为逆运

算,所以*(&a[i]))的值仍为a[i]即a[9],输出第三个结果为20,答案选择A

选项。

[单选题]33.有以下程序

#include

#include

void fun(double *p1,double *p2,double *s)

{

s = (double *)calloc( 1,sizeof(double) );

*s = *p1 + *( p2+1 );

}

main()

{

double a[2] = { 1.1, 2.2 }, b[2] = { 10.0, 20.0 }, *s=a;

fun(a, b, s);

printf("%5.2fn", *s);

}

程序的输出结果是()。

A.11.10

B.1.10

C.12.10

D.21.10

参考答案:B

参考解析:函数fun()的功能是用calloc()函数重新分配了1个长度为

sizeof(double)的连续空间,并把返回的内存地址赋值给s,之后往新分配的内

存中写入数据。由于函数传递过程中形参指针指向的变化不能影响到实参指针

的指向,所以函数fun()并不能改变s的指向,*s与a[0]等价,格式输出的结

果为 1.10,注意整数1前有一个空格,因为格式输出%5.2f要求输出的浮点数

宽度为5,答案选择B选项。

[单选题]34.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数

feof(fp)的返回值为()。

A.非0值

B.'0'

C.0

参考答案:A

参考解析:本题考查的是文件指针feof的运用。当文件读到结尾时,feof(fp)

为非零值,否则为0。答案选择A选项。

[单选题]35.以下叙述中正确的是()。

A.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息

B.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可

以不同

C.设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL;

D.指针变量之间不能用关系运算符进行比较

参考答案:A

参考解析:空指针意味着该指针没有指向任何具体的变量,所以不能访问一个

存储单元,A正确。指针的赋值运算只能在同一数据类型之间进行,故选项B

错。语句p=0和p=NULL是一样的,都是把一个空指针赋给指针变量p,故选项

C错。指针之间能进行关系运算,比较的是地址值的大小,选项D错。答案选择

A选项。

[单选题]36.若要使用C数学库中的sin函数,需要在源程序的头部加上

#include

关于引用数学库,以下叙述正确的是()。

A.将数学库中sin函数的源程序插入到引用处,以便进行编译链接

B.将数学库中sin函数链接到编译生成的可执行文件中,以便能正确运行

C.通过引用math.h文件,说明sin函数的参数个数和类型,以及函数返回值类

D.实际上,不引用math.h文件也能正确调用sin函数

参考答案:C

参考解析:考查文件包含处理。文件包含命令的功能是把指定的文件添加到预

处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了

程序要调用的函数的声明。由此,选项A、B、D表述错误。答案选择C选项。

[单选题]37.以下叙述中正确的是()。

A.在C语言中,预处理命令行都以“#”开头

B.预处理命令行必须位于C源程序的起始位置

C.#include 必须放在C程序的开头

D.C语言的预处理不能实现宏定义和条件编译的功能

参考答案:A

参考解析:“编译预处理”就是在C编译程序对C源程序进行编译前,由编译

预处理程序对这些编译预处理命令行进行处理的过程。A项正确,在C语言中,

凡是以“#”号开头的行,都称为“编译预处理”命令行。B项错误,预处理命

令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末

尾;C项错误,#include 可以出现在程序的任意一行的开始部位;D项错误,

预处理可以实现宏定义、条件编译和文件包含。答案选择A选项。

[单选题]38.下面结构体的定义语句中,错误的是()。

t ord {int x; int y; int z; } sdivuct ord a;

t ord {int x; int y; int z; }; sdivuct ord a;

t ord {int x; int y; int z; } a;

t {int x; int y; int z; } a;

参考答案:A

参考解析:C语言中结构体变量的定义有三种方法:①定义结构体类型的同时定

义结构体变量,如C项;②使用无名结构体类型定义结构体变量,如D项;③

先定义结构体类型,后定义结构体变量,如B项,A项错在分别定义结构体类型

与结构体变量时需要用“;”隔开。故答案选择A选项。

[单选题]39.有以下程序

#include

typedef sdivuct {int b, p;} A;

void f(A c)

{

int j;

c.b+=1;

c.p+=2;

}

void main()

{

int i;

A a={1,2};

f(a);

printf("%d,%dn", a.b, a.p);

}

程序运行后的输出结果是()。

A.2,4

B.1,2

C.1,4

D.2,3

参考答案:B

参考解析:考查结构体变量作为函数实参整体传递,也是一种值传参,形参的

变化不能影响到实参,所以调用函数f(a)对a中的数据没有影响,输出结果为

1,2,答案选择B选项。

[单选题]40.有以下程序

#include

main()

{

char x=2,y=2,z;

z=(y<<1)&(x>>1);

printf("%dn",z);

}

程序的输出结果是()。

A.4

B.1

C.0

D.8

参考答案:C

参考解析:x、y的ASCII码为2,对应二进制为0010,y<<1的结果为0100,

x>>1的结果为0001,而0100&0001的结果为0,答案选择C选项。

[问答题]1.给定程序中,函数fun的功能是计算下式:

直到

并把计算结果作为函数值返回。

例如:若形参e的值为1e-3,函数的返回值为0.141457。

请在程序的下划线处填入正确的内容并把下划线删除.使程序得出正确的结

果。注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

/**********code.c**********/

#include

double fun(double e)

{

int i,k;

double s,t, x;

s=0;

k=1;

i=2;

x=①______/4;

while(x ②______ e)

{

s=s+k*x;

k=k* (-1);

t=2*i;

x=③______/(t*t);

i++;

}

return s;

}

main()

{

double e=1e-3;

printf("nThe result is: %fn",fun(e));

}

/**********-code.c**********/

参考答案:

①1.0或(double)1

②>

③(t-1)

参考解析: 填空1:变量x定义为double类型,而运算符“/”后面是整型

数,所以给x赋值时,需要注意数据类型,此处不能将1.0写成1。

填空2:while循环语句的循环条件,根据题意确定循环变量应大于1e-3,

因此此处应填“>”。

填空3:表达式的通项是(2*i-1)/(2*i)

2

,由于程序中已定义t=2*i,所以

此处应该填写(t-1)。

[问答题]2.下列给定的程序中,函数fun()的功能是:求出以下分数序列的前n

项和。2/1,3/2,5/3,8/5,13/8,21/13,……和值通过函数值返回main()函

数。例如,若输入n=5,则应输出8.391667。

注意:部分源程序给出如下。

请改正程序中的错误,使它能计算出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

/**********code.c**********/

#include

/**********found**********/

void fun(int n)

{

int a, b, c, k;

double s;

s = 0.0;

a = 2;

b = 1;

for(k = 1; k <= n; k++)

{

/**********found**********/

s = s + (Double)a / b;

c = a;

a = a + b;

b = c;

}

return s;

}

void main()

{

int n = 5;

printf("nThe value of function is: %lfn", fun(n));

}

/**********-code.c**********/

参考答案:

(1)错误:void fun(int n)

正确:double fun(int n)

(2)错误:s = s + (Double)a / b;

正确:s=s+(double)a/b;

参考解析: 错误1:由语句“return(s);”和变量s定义为double数据类

型可知,该函数定义时其类型标识符为double类型。

错误2:注意数据类型double的书写格式。

[问答题]3.请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中

最大元素的值,并将此值返回调用函数。注意部分源程序存在文件PROG1.C文

件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中

埴入你编写的若干语句。

/**********code.c**********/

#include

#define M 4

int fun (int a[][M])

{

}

void main()

{

int arr[2][M]={5,8,3,45,76,-4,12,82};

printf("max =%dn", fun(arr));

}

参考答案:

int fun (int a[][M])

{

int i,j,max=a[0][0];

for(i=0;i<2;i++)

for(j=0;j

if(max

max=a[i][j];

return max;

}

参考解析: 此类求最大值或最小值的问题,我们可以采用逐个比较的方

式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首

先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数

组中的元素,并与max比较,如果元素值大于max,则将该值赋于max,循环结

后max的值即为数组最大值,最后将该值返回。


本文标签: 结构 选择 函数 答案 解析