文档库 最新最全的文档下载
当前位置:文档库 › C语言程序设计 第六章 函数 试题及答案

C语言程序设计 第六章 函数 试题及答案

C语言程序设计 第六章 函数 试题及答案
C语言程序设计 第六章 函数 试题及答案

C语言程序设计第六章函数试题及答案

1 选择题

*6.1建立函数的目的之一,以下正确的说法是。

A)提高程序的执行效率B)提高程序的可读性

C)减少程序的篇幅D)减少程序文件所占内存

参考答案:B

*6.2 以下正确的说法是。

A)用户若需要调用标准库函数,调用前必须重新定义

B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义

C)用户系统根本不允许用户重新定义标准库函数

D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。

参考答案:B

6.3 以下正确的函数定义形式是。

A)double fun(int x,int y) B)double fun(int x;int y)

C)double fun(int x,int y); D)doubel fun(int x;int y);

参考答案:A

*6.4 以下正确的函数形式是。

A)double fun(int x,int y){z=x+y;return z;}

B)double fun(int x,y){int z;return z;}

C)fun(x,y){int x,y;double z; z=x+y; return z;}

D)double fun(int x,int y){double z;z=x+y;return z;}

参考答案:D

*6.5以下正确的说法是。

A)实参和与其对应的形参占用独立的存储单元

B)实参和与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用一个存储单元

D)形参是虚拟的,不占用存储单元

参考答案:A

参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。

6.6 若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。

A)没有返回值B)返回若干个系统默认值

C)返回一个用户所希望的函数值D)返回一个不确定的值

参考答案:D

参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。

6.7 以下不正确的说法是,C语言规定。

A)实参可以是常量、变量或表达式

B)形参可以是常量、变量或表达式

C)实参可以是任意类型

D)实参应与其对应的形参类型一致

参考答案:B

6.8 以下正确的说法是。

A)定义函数时,形参的类型说明可以放在函数体内

B)return后面的值不能为表达式

C)如果函数的类型与返回值类型不一致,以函数类型为准

D)如果形参与实参的类型不一致,以实参类型为准

参考答案:C

6.9 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是。

A)地址传递B)单向值传递

C)由实参传给形参,再由形参传回实参D)由用户指定传递方式

参考答案:B

6.10 以下程序有语法性错误,有关错误原因的正确说法是。

main()

{int G=5,k;

void prt_char();

......

k=prt_char(G);

......

}

A)语句void prt_char();有错,它是函数调用语句,不能用void说明

B)变量名不能使用大写字母

C)函数说明和函数调用语句之间有矛盾

D)函数名不能使用下划线

参考答案:C

6.11 C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。

A)float型B)int型C)long型D)double型

参考答案:B

6.12 C语言规定,函数返回值的类型是由所决定。

A)return语句中的表达式类型

B)调用该函数时的主调函数类型

C)调用该函数是系统临时指定

D)在定义该函数时所指定的函数类型

参考答案:D

*6.13 下面函数调用语句含有实参的个数为。

fun((exp1,exp2),(exp3,exp4,exp5));

A)1 B)2 C)4 D)5

参考答案:B

参考分析:该函数的实参是两个逗号表达式。

6.14 以下错误的描述是。

函数调用可以

A)出现在执行语句中B)出现在表达式中

C)作为函数的实参D)作为函数的形参

参考答案:D

6.15 以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。

#include

#include

float f(float,float);

main()

{float x,y,z,sum;

scanf("%f%f%f",&x,&y,&z);

sum=f(【1】)+f(【2】);

printf("sum=%f\n",sum);

}

float f(float a,float b)

{float value;

falue=a/b;

return(value);

}

【1】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

【2】A)x-y,x+y B)x+y,x-y C)z+y,z-y D)z-y,z+y

参考答案:【1】B 【2】C

6.16以下正确的描述是________。

A)函数的定义可以嵌套,但函数的调用不可以嵌套

B)函数的定义不可以嵌套,但函数的调用可以嵌套

C)函数的定义和函数的调用均不可嵌套

D)函数的定义和函数的调用均可以嵌套

参考答案:B

6.17 以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有的这样的数及其个数。请选择填空。

sub(int k,int n)

{int a1,a2;

a2=【1】;

a1=k-【2】;

if((k%3==0&&a2==5)||(k%3==0&&a1==5))

{printf("%4d",k);n++;return n;}

else return -1;

}

main()

{int n=0,k,m;

for(k=10;k<100;k++)

{m=sub(k,n);

if(m!=-1) n=m;

}

printf("\nn=%d",n);

}

【1】A)k*10 B)k%10 C)k/10 D)k*10%10

【2】A)a2*10 B)a2 C)a2/10 D)a2%10

参考答案:【1】C 【2】A

6.18 以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A','B','C');则符合程序段运行结果的选项是。

void move(char getone,char putone)

{printf("%c-->%c\n",getone,putone);}

void hanoi(int n,char one,char two,char three)

{if(n==1) move(one,three);

else

{hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

A)A-->C B)A-->C C)A-->C D)A-->C

A-->B A-->B A-->B A-->B

C-->B C-->A C-->B C-->B

B-->A A-->B A-->C A-->C

C-->B B-->C B-->A A-->B

A-->C A-->C B-->C B-->C

A-->B A-->B A-->C A-->C

参考答案:C

6.19 若用数组名作为函数调用的实参,传递给形参的是。

A)数组的首地址B)数组第一个元素的值

C)数组中全部元素的值D)数组元素的个数

参考答案:A

6.20 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式为。

int a[3][4];

f(a);

A)f(int array[][6]) B)f(int array[3][]) C)f(int array[][4]) D)f(int array[2][5])

参考答案:B

6.21 若使用一位数组名作为函数实参,则以下正确的说法是。

A)必须在主调函数中说明此数组的大小

B)实参数组类型与形参数组类型可以不匹配

C)在被调函数中,不需要考虑形参数组的大小

D)实参数组名与形参数组名必须一致

参考答案:C

6.22 以下函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请选择填空。

int binary(int a[],int m)

{int low=0,high=9,mid;

while(low<=high)

{mid=(low+high)/2;

if(m

else if(m>a[mid]) 【2】;

else return(mid);

}

return(-1);

}

A)high=mid-1 B)high=mid+1 C)low=mid-1 D)low=mid+1

参考答案:【1】A 【2】D

6.23如果在一个复合语句中定义了一个变量,则有关该变量正确的说法是。

A)只在该复合语句中有效B)只在该函数中有效

C)在本程序范围内均有效D)为非法变量

参考答案:A

6.24 以下不正确的说法为。

A)在不同函数中可以使用相同名字的变量

B)形式参数是局部变量

C)在函数内定义的变量只在本函数范围内有效

D)在函数内的复合语句中定义的变量在本函数范围内有效

参考答案:D

6.25 以下程序的正确运行结果是。

#define MAX 10

int a[MAX],i;

main()

{printf("\n");sub1();sub3(a);sub2();sub3(a);}

sub2()

{int a[MAX],i,max;

max=5;

for(i=0;i

}

sub1()

{for(i=0;i

sub3(int a[])

{int i;

for(i=0;i

printf("\n");

}

A) 0 2 4 6 8 10 12 14 16 18 B) 0 1 2 3 4

0 1 2 3 4 0 2 4 6 8 10 12 14 16 18

C) 0 1 2 3 4 5 6 7 8 9 D) 0 2 4 6 8 10 12 14 16 18

0 1 2 3 4 0 2 4 6 8 10 12 14 16 18

参考答案:D

*6.26 以下程序的正确运行结果是。

#include

void num()

{extern int x,y;

int a=15,b=10;

x=a-b;

y=a+b;

}

int x,y;

main()

{int a=7,b=5;

x=a+b;

y=a-b;

num();

printf("%d,%d\n",x,y);

}

A)12,2 B)12,25 C)5,25 D)5,2

参考答案:C

6.27 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为。

A)auto B)static C)extern D)register

参考答案:A

6.28 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是。

A)extern B)register C)auto D)static

参考答案:D

*6.29 以下程序的正确运行结果是。

main()

{int a=2,i;

for(i=0;i<3;i++) printf("%4d",f(a));

}

int f(int a)

{int b=0;

static int c=3;

b++;c++;

return(a+b+c);

}

A) 7 7 7 B) 7 10 13

C) 7 9 11 D) 7 8 9

参考答案:D

*6.30 以下程序的正确运行结果是。

#include

main()

{int k=4,m=1,p;

p=func(k,m); printf("%d,",p);

p=func(k,m); printf("%d"\n",p);

}

func(int a,int b)

{static int m=0,i=2;

i+=m+1;

m=i+a+b;

return(m);

}

A)8,17 B)8,16 C)8,20 D)8,8

参考答案:A

2 填空题

6.31 C语言规定,可执行程序的开始执行点是【】。

参考答案:main函数

6.32 在C语言中,一个函数一般由两个部分组成,它们是【1】和【2】。参考答案:【1】函数声明【2】函数体

*6.33 若输入的值是-125,以下程序的执行结果是。

#include

main()

{int n;

scanf("%d",&n);

printf("%d=",n);

if(n<0) printf("-");

n=abs(n);

fun(n);

}

fun(int n)

{int k,r;

for(k=2;k<=sqrt(n);k++)

{r=n%k;

while(r==0)

{printf("%d",k);

n=n/k;

if(n>1)printf("*");

r=n%k;

}

}

if(n!=1) printf("%d\n",n);

}

参考答案:-125=-5*5*5

参考分析:本程序用来将整数分解为素数因子的乘积。

6.34 下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是【1】;改正后为【2】。

void add(float a,float b)

{float c;

c=a+b;

return c;

}

参考答案:【1】void add(float a,float b) 【2】float add(float a,float b)

6.35 以下程序的运行结果是。

main()

{int i=2,x=5,j=7;

fun(j,6);

printf("i=%d;j=%d;x=%d\n",i,j,x);

}

fun(int i,int j)

{int x=7;

printf("i=%d;j=%d;x=%d\n",i,j,x);

}

参考答案:

i=7;j=6;x=7

i=2;j=7;x=5

6.36 以下程序的运行结果是。

main()

{increment();

increment();

increment();

}

increment()

{int x=0;

x+=1;

printf("%d",x);

}

参考答案:1 1 1

6.37 以下程序的运行结果是。

#include

main()

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

c=max(a,b);

printf("max is %d\n",c);

}

max(int x,int y)

{int z;

z=(x>y)?x:y;

return(z);

}

参考答案:max is 2

6.38 以下程序的功能是根据输入的"y"("Y")与"n"("N"),在屏幕上分别显示出"This is YES."与"This is NO."。请填空。

#include

void YesNo(char ch)

{switch(ch)

{case 'y':

case 'Y':printf("\nThis is YES.\n");【1】;

case 'n':

case 'N':printf("\nThis is NO.\n");

}

}

main()

{char ch;

printf("\nEnter a char 'y','Y' or 'n','N':");

ch=【2】;

printf("ch:%c",ch);

YesNo(ch);

}

参考答案:【1】break 【2】getchar()

6.39 以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示"WELL DONE!!",否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。

void Check(int ponse,float value)

{int val;

val=【1】;

printf("计算后的值:%d",val);

if(【2】) printf("\nWELL DONE!!!\n");

else printf("\nSorry the correct answer is %d\n",val);

}

参考答案:【1】value+0.5 【2】ponse==val

6.40 以下程序的功能是。

#include

f(int n)

{int i,j,k;

i=n/100;j=n/10-i*10;k=n%10;

if (i*100+j*10+k==i*i*i+j*j*j+k*k*k) return n;

else return 0;

}

main()

{int n,k;

printf("Output");

for(n=100;n<1000;n++)

{k=f(n);

if(k!=0)

printf("%d ",k);

}

printf("\n");

}

参考答案:输出所有的水仙花数。

6.41 以下程序的功能是用二分法求方程2x3-4x2+3x-6=0的根,并要求绝对误差不超过0.001。请填空。

#include

float f(float x)

{return (2*x*x*x-4*x*x+3*x-6);}

main()

{float m=-100,n=90,r;

r=(m+n)/2;

while(f(r)*f(n)!=0)

{if(【1】) m=r;

else n=r;

if(【2】) break;

r=(m+n)/2;

}

printf("方程的解是%6.3f\n",r);

}

参考答案:【1】f(r)*f(n)<0或f(r)*f(m)>0【2】n-m<0.001

6.42 若输入一个整数10,以下程序的运行结果是。

int sub(int a)

{int c;

c=a%2;

return c;

}

main()

{int a,e[10],c,i=0;

printf("Input a number:");

scanf("%d",&a);

while(a!=0)

{c=sub(a);

a=a/2;

e[i]=c;

i++;

}

for(;i>0;i--) printf("%d",e[i-1]);

}

参考答案:1010

6.43 以下程序的功能是计算下面函数的值。请填空。

sin(x) sin(y) sin(z)

F(x)= + +

sin(x-y)*sin(x-z) sin(y-z)*sin(y-x) sin(z-x)*sin(z-y)

#include

#include

float f(float,float,float);

main()

{printf("input x,y,z:\n");

scanf("%f%f%f",&x,&y,&z);

sum=【1】;

printf("sum=%f\n",sum);

}

float f(float a,float b,float c)

{float value;

value=【2】;

return(value);

}

参考答案:【1】f(x,y,z)+f(y,z,x)+f(z,x,y) 【2】sin(a)/sin(a-b)/sin(a-c)

参考分析:本题答案非常不严谨,完全可以写成多种方式,比如

【1】f(x,x-y,x-z)+f(y,y-z,y-x)+f(z,z-x,z-y) 【2】sin(a)/sin(b)/sin(c)

【1】f(x,y,z) 【2】sin(a)/sin(a-b)/sin(a-c)+sin(b)/sin(b-c)/sin(b-a)+sin(c)/sin(c-a)/sin(c-b) 6.44 已有函数pow,现要求取消变量i后pow函数的功能不变。请填空。

修改前的pow函数:

int pow(int x,int y)

{int i,j=1;

for(i=1;i<=y;i++) j=j*x;

return j;

}

修改后的函数:

int pow(int x,int y)

{int j;

for(【1】;【2】;【3】) j=j*x;

return j;

}

参考答案:【1】j=1【2】y>0或y>=1【3】y--或--y

6.45 以下程序的运行结果是输出如下图形。请填空。

*

***

*****

*******

*****

***

*

#include

void a(int i)

{int j,k;

for(j=0;j<=7-i;j++) printf(" ");

for(k=0;k<【1】;k++) printf("*");

printf("\n");

}

main()

{int i;

for(i=0;i<3;i++) 【2】;

for(i=3;i>=0;i--) 【3】;

}

参考答案:【1】2*i+1 【2】a[i] 【3】a[i]

参考说明:最长的一行前面有5个空格。

6.46 以下程序的功能是求三个数的最小公倍数,请填空。

#include

int max(int x,int y,int z)

{if(x>y&&x>z) return(x);

else if(【1】) return(y);

else return(z);

}

main()

{int x1,x2,x3,i=1,j,x0;

printf("Input three number:");

scanf("%d%d%d",&x1,&x2,&x3);

x0=max(x1,x2,x3);

while(1)

{j=x0*i;

if(【2】) break;

i++;

}

printf("zuixiaogongbeishu=%d\n",j);

}

参考答案:【1】y>x&&y>z 【2】j%x1==0&&j%x2==0&&j%x3==0

参考分析:本题有错误,若x=z>y这种条件下max函数不能正确返回最大值。若将所有条件均改为>=就可以了。

6.47函数gongyue的作用是求整数num1和num2的最大公约数。请填空。

int gongyue(int num1,int num2)

{int temp,a,b;

if(num1【1】num2)

{temp=num1;num1=num2;num2=temp;}

a=num1;b=num2;

while(【2】)

{temp=a%b;a=b;b=temp;}

return(a);

}

参考答案:【1】< 【2】b

参考分析:本题需要修改,作为函数,没有必要将num1赋值给a,另外,不必须要num1大,num2小,还有【2】可以为b!=0

6.48以下程序的运行结果是。

main()

{int x=2,y=3,z=0;

printf("(1)x=%d y=%d z=%d\n",x,y,z);

add(x,y,z);

printf("(3)x=%d y=%d z=%d\n",x,y,z);

}

add(int x,int y,int z)

{z=x+y; x=x*x; y=y*y;

printf("(2)x=%d y=%d z=%d\n",x,y,z);

}

参考答案:

(1)x=2 y=3 z=0

(2)x=4 y=9 z=5

(3)x=2 y=3 z=0

6.49 下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π值,请填空。

π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…

#include

#include

#include

double pi(double eps)

{double s,t;

int n;

for(【1】;t>eps;n++)

{s+=t;

t=n*t/(2*n+1);

}

return (【2】);

}

main()

{double x;

printf("\nPlease enter a precision:");

scanf("%lf",&x);

printf("\neps=%lf,π=%lf",x,pi(x));

}

参考答案:【1】s=0,t=1,n=1 【2】2*s

6.50 下面是一个计算阶乘的程序。程序中错误的语句是【1】,应改为【2】。

#include

double fac(int);

main()

{int n;

printf("Enter an integer:");

scanf("%d",&n);

printf("\n\n%d!=%lg\n\n",n,fac(fac(n));

}

double fac(int n)

{double result=1.0;

while (n>1||n<170) result *=--n;

return result;

}

参考答案:【1】while(n>1||n<170) result *=--n 【2】while (n>1&&n<170) result *=n--;

***6.51函数f的形参a为一个10×10的二维数组,n的值为5,以下程序段的运行结果为。

f(int a[][20], int n)

{int i,j,k;

j=n/2+1;

a[1][j]=1;

i=1;

for(k=2;k<=n*n;k++)

{i=i-1;j=j+1;

if(i<1&&j>n) {i=i+2;j=j-1;}

else

{if(i<1) i=n;

if(j>n) j=1;

}

if(a[i][j]==0) a[i][j]=k;

else {i=i+2; j=j-1; a[i][j]=k;}

}

}

main()

{int a[20][20]={0},n,i,j;

scanf("%d",&n);

f(a,n);

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

{for(j=1;j<=n;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

参考答案:

17 24 1 8 15

23 5 7 14 16

4 6 13 20 22

10 12 19 21 3

11 18 25 2 9

参考说明:这是幻方题目

6.52 下面函数func的功能是。

#include

long func(long num)

{long k=1;

num=labs(num);

do

{k*=num%10;

num/=10;

}while(num);

return k;

}

main()

{long n;

printf("\nPlease enter a number:");

scanf("%ld",&n);

printf("\nThe product of its digits is %ld.",func(n));

}

参考答案:计算一个数的各位数字之积。

6.53以下程序的运行结果是。

#include

main()

{printf("FACT(5):%d\n",fact(5));

printf("FACT(1):%d\n",fact(1));

fact(-5);

}

fact(int value)

{if(value<0) {printf("FACT(<0):Error!\n"); return (-1);}

else if(value==1||value==0) return(1);

else return(value*fact(value-1));

}

参考答案:

FACT(5):120

FACT(1):1

FACT(<0):Error!

6.54 以下程序的功能是用递归方法计算学生的年龄,已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。请填空。

递归公式如下:

10 n=1

age(n)=age(n-1)+2 n>1

#include

age(int n)

{int c;

if(n==1) c=10;

else c=【1】;

return c;

}

main()

{int n=5;

printf("age:%d\n",【2】);

}

参考答案:【1】age(n-1)+2 【2】age(n)

6.55 下面程序的功能是【1】,运行结果是【2】。

long fib(int g)

{switch(g)

{case 0: return 0;

case 1: case 2: return 1;

}

return(fib(g-1)+fib(g-2));

}

main()

{ long k;

k=fib(7);

printf("k=%d\n",k);

}

参考答案:【1】计算斐波那契数列第7项的值【2】k=13

6.56以下程序的运行结果是。

main()

{int i=5;

printf("%d\n",sub(i));

}

sub(int n)

{int a;

if(n==1) return 1;

a=n+sub(n-1);

return a;

}

参考答案:15

参考分析:利用递归的方法计算1+2+3+4+5

6.57 以下程序是应用递归函数算法求某数a的平方根,请填空。求平方根的迭代公式如下:

x1=1/2(x0+a/x0)

#include

double mysqrt(double a,double x0)

{double x1,y;

x1=【1】;

if(fabs(x1-x0)>0.00001) y=mysqrt(【2】);

else y=x1;

return y;

}

main()

{double x;

printf("Enter x:"); scanf("%lf",&x);

printf("The sqrt of %f=%f\n",x,mysqrt(x,1.0));

}

参考答案:【1】1.0/2*(x0+a/x0) 【2】a,x1

6.58以下程序的运行结果是。

#include

f(int a[])

{int i=0;

while(a[i]<=10)

{printf("%3d",a[i]);

i++;

}

}

main()

{int a[]={1,5,10,9,11,7};

f(a+1);

}

参考答案:5 10 9

6.59以下程序的运行结果是。

main()

{int a[3][3]={1,3,5,7,9,11,13,15,17},sum;

sum=func(a);

printf("\nsum=%d\n",sum);

}

func(int a[][3])

{int i,j,sum=0;

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

for(j=0;j<3;j++)

{a[i][j]=i+j;

if(i==j) sum=sum+a[i][j];

}

return (sum);

}

参考答案:sum=6

6.60 阅读下面程序,完成下列问题中的填空。

问题(1)此程序在调用函数f后的运行结果是【1】。

(2)若将函数f中的for(j=i+1;j<4;j++)改为for(j=0;j<3-i;j++),则程序的运行结果是【2】。

f(int s[][4])

{int i,j,k;

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

for(j=i+1;j<4;j++)

{k=s[i][j];s[i][j]=s[j][i];s[j][i]=k;}

}

main()

{int s[4][4],i,j;

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

for(j=0;j<4;j++)

s[i][j]=i-j;

f(s);

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

{printf("\n");

for(j=0;j<4;j++)

printf("%4d",s[i][j]);

}

}

参考答案:

【1】0 1 2 3 【2】0 -1 -2 -3

-1 0 1 2 1 0 -1 -2

-2 -1 0 1 2 1 0 -1

-3 -2 -1 0 3 2 1 0

6.61 以下search函数的功能是利用顺序查找法从数组的10个元素中对关键字m进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或找到数组尾部时结束。若找到,返回此元素的下标;若未找到,则返回-1。请填空。

#include

int search(int a[10],int m)

{int i;

for(i=0;i<=9;i++) if(【1】) return (i);

return -1;

}

main()

{int a[10],m,i,no;

no=search(【2】);

if(【3】) printf("\nOK FOUND!",no);

else printf("\nSorry Not Found!");

}

参考答案:【1】a[i]==m 【2】a,m 【3】no>=0

6.62 已定义一个含有30个元素的数组s,函数fav1的功能是按顺序分别赋给各元素从2开始的偶数,函数fav2则按顺序每5个元素求一个平均值,并将该值存放在数组w中。请填空。

#define SIZE 30

fav1(float s[])

{int k,i;

for(k=2,i=0;i

{【1】;

k+=2;

}

}

fav2(float s[],float w[])

{float sum,k,i;

sum=0.0;

for(k=0,i=0;i

{sum+=s[i];

if((i+1)%5==0)

{w[k]=sum/5;

【2】;

k++;

}

}

}

main()

{float s[SIZE],w[SIZE/5],sum;

int i,k;

fav1(s);

fav2(s,w);

}

参考答案:【1】s[i]=k 【2】sum=0.0

6.63 以下程序的运行结果是【1】,其算法是【2】。

main()

{int a[5]={5,10,-7,3,7},i,t,j;

sort(a);

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

printf("%3d",a[i]);

}

sort(int a[])

{int i,j,k;

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

for(j=0;j<4-i;j++)

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

参考答案:【1】-7 3 5 7 10 【2】冒泡法排序

6.64以下程序的运行结果是【1】,其算法是【2】。

main()

{int a[5]={9,6,8,3,-1},i,j,t,p;

sort(a);

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

printf("%3d",a[i]);

}

sort(int a[])

{int i,j,t,p;

for(j=0;j<4;j++)

{p=j;

for(i=j;i<=4;i++)

if(a[i]

t=a[p];a[p]=a[j];a[j]=t;

}

}

参考答案:【1】-1 3 6 8 9 【2】选择法排序

6.65 函数del的作用是删除有序数组a中的指定元素x。已有调用语句n=del(a,n,x);其中实参n为删除数组元素的个数,赋值号左边的n为删除后数组元素的个数。请填空。

del(int a[],int n,int x)

{int p,i;

p=0;

while (x>=a[p]&&p

【1】;

for(i=p-1;i

【2】;

n=n-1;

return n;

}

参考答案:【1】p++ 【2】a[i]=a[i+1]

6.66以下程序的运行结果是。

#include

func(int array[][4],int m)

{int i,j,k;

k=0;

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

for(j=0;j<4;j++)

if(array[i][j]

k=k+array[i][j];

return k;

}

main()

{static int a[3][4]={{1,13,5,7},{2,4,26,8},{10,1,3,12}};

int i,j,m;

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

{for(j=0;j<4;j++)

printf("%4d",a[i][j]);

printf("\n");

}

m=10;

printf("\nthe value is %d\n",func(a,m));

}

参考答案:1 13 5 7

2 4 26 8

10 1 3 12

the value is 31

6.67 函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1,a[1]=2;

swap(a[0],a[1]);

参考答案:【1】1,2 【2】单向传值不能完成对实参数据的交换

6.68函数swap(arr,n)可完成对arr数组从第一个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为【1】,原因是【2】。

a[0]=1,a[1]=2;

swap(a,2);

参考答案:【1】2,1 【2】地址传递对形参的改变能改变实参的值

6.69 以下程序可计算10名学生1门课成绩的平均分,请填空。

float average(float array[])

{int i;float aver,sum=array[0];

for(i=1;【1】;i++)

sum+=【2】;

aver=sum/10;

return aver;

}

main()

{float score[10],aver;

int i;

printf("\ninput 10 scores:");

for(i=0;i<10;i++) scanf("%f",&score[i]);

aver=【3】;

printf("\naverage score is %5.2f\n",aver);

}

参考答案:【1】i<10 【2】array[i] 【3】average(score)

6.70 函数yahui能够按以下形式构成一个杨辉三角形,请填空。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

………..

#define N 11

yahui(int [][N])

{int i,j;

for(i=1;i

{a[i][1]=1;a[i][i]=1;}

for(【1】;i

for(j=2;【2】;j++)

a[i][j]=【3】+a[i-1][j];

}

参考答案:【1】i=3 【2】j

6.71 下面程序的功能是:从键盘输入一个整数m(4≤m≤20),则输出如下的整数方阵(存入二维数组aa)。例如,若输入4则会输出左边的方阵,若输入5,则会输出右边的方阵。

16 9 4 1 25 16 9 4 1

9 4 1 16 16 9 4 1 25

4 1 16 9 9 4 1 2

5 16

1 16 9 4 4 1 25 16 9

请改正程序中的错误语句,使它能得出正确的结果。改正后的语句是【1】和【2】。

#define M 20

void aMatrix(int n, int x[][M])

{int i,j;

for(j=0;j

x[0][j]=(n-j)*(n-j);

for(i=1;i

{for(j=0;j

x[i][j]=x[i-1][j+1];

x[i][n-1]=x[i-1][0];

}

}

main()

{int a[M][M],i,j,m;

printf("\nPlease enter an integer number between 4 and 20:");

scanf("%d",&m);

aMatrix(m,a);

printf("\nThe %d*%d matrix generated:",m,m);

for(i=0;i

{printf("\n");

for(j=0;j

printf("%4f",(*(a+i))[j]); /*错误语句【2】*/

}

}

参考答案:【1】for(j=0;j

6.72以下程序的运行结果是。

main()

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

++a;

c+=++b;

{int b=4,c;

c=b*3;

a+=c;

printf("first:%d,%d,%d\n",a,b,c);

a+=c;

printf("second:%d,%d,%d\n",a,b,c);

}

printf("third:%d,%d,%d"\n",a,b,c);

}

参考答案:

first:14,4,12

second:26,4,12

third:26,3,6

6.73以下程序的运行结果是。

int k=1;

main()

{int i=4;

fun(i);

printf("(1)%d,%d\n",i,k);

}

fun(int m)

{m+=k;

k+=m;

{char k='B';

printf("(2)%d\n",k-'A');

}

printf("(3)%d,%d\n",m,k);

}

参考答案:

(2)1

(3)5,6

(1)4,6

6.74 以下程序的运行结果是。

int x1=30,x2=40;

main()

{int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1);

printf("%d,%d,%d,%d\n",x3,x4,x1,x2);

}

int sub(int x,int y)

{x1=x;x=y;y=x1;}

参考答案:10,20,40,40

6.75以下程序的运行结果是。

int i=0;

main()

相关文档