第6章习题及解答0315Word文件下载.docx
《第6章习题及解答0315Word文件下载.docx》由会员分享,可在线阅读,更多相关《第6章习题及解答0315Word文件下载.docx(52页珍藏版)》请在冰点文库上搜索。
B.双向值传递
C.单向值传递
D.地址传递
10.实参用数组名,则传递给对应形参的是()。
A.数组的地址
B.数组的长度
C.数组中每一个元素的地址
D.数组中每一个元素的值
【答】A
11.下列关于函数调用的描述中,错误的是()。
A.在函数调用中,形参是变量名,实参可以是变量、常量和表达式
B.在函数调用中,形参是指针时,实参必须是地址值
C.在传址调用方式中,可以在被调用函数中改变调用函数的参数值
D.在传值调用方式中,可以在被调用函数中改变调用函数的参数值
12.下列关于函数返回值的论述中,错误的是()。
A.函数返回值能够实现函数间的数据传递
B.函数返回值是由return<
表达式>
实现的
C.函数返回的值和值的类型是由返回语句中表达式的值和类型决定的
D.一个函数可有多条返回语句,但只可有一个返回值
【答】C
13.函数返回值的类型由()。
A.调用该函数的函数类型决定B.return语句中表达式的类型决定
C.主函数决定D.该函数的函数类型决定
14.下列关于函数的论述中正确的是()。
A.不允许函数嵌套定义,但允许函数嵌套调用
B.不允许函数嵌套调用,但允许函数嵌套定义
C.函数的定义和调用都允许嵌套
D.函数的定义和调用都不允许嵌套
15.下列关于函数调用的论述中不正确的是()。
A.函数间允许嵌套调用B.函数间允许间接递归调用
C.函数间允许直接递归调用D.函数间不允许直接递归调用
16.以下说法不正确的是()。
A.所有的形式参数都是局部变量
B.不同函数中允许说明并使用相同名字的变量
C.函数内定义的变量其有效范围不超出该函数
D.函数内的复合语句中说明的变量在该函数范围内有效
17.在本程序中能被所有函数使用的变量,其存储类别是()。
A.auto(自动)B.static(静态)C.register(寄存器)D.exern(外部)
【答】D
18.在函数中未说明存储类别的局部变量,其隐含的存储类别是()。
19.下列关于变量的论述中,不正确的是()。
A.外部变量定义与外部变量声明,两者的含义不同
B.外部变量与静态外部变量的存储类型不同(即它们被分配的存储区不同)
C.在同一函数中,既可使用本函数中的局部变量又可使用与局部变量不同名的全局变量
D.在同一程序中,外部变量与局部变量同名时,则在局部变量作用范围内外部变量不起作用
【答】B
20.运行以下程序,其输出结果是()。
voidswap28(intn0,intn1)
{
inttemp;
temp=n0;
n0=n1;
n1=temp;
}
voidswapl4(intn[])
{
inttemp;
temp=n[0];
n[0]=n[1];
n[1]=temp;
}
voidmain()
inta[2]={2,8},b[2]={1,4};
swap28(a[0],a[1]);
swapl4(b);
printf(“%d%d%d%d\n”,a[0],a[1],b[0],b[1]);
A.2814B.2841C.8241D.8214
【答】B
二、填空题
1.若自定义函数要求返回一个值,则在该函数体中应有一条【1】语句;
若自定义函数要求不返回值,则在该函数说明时加一类型说明符【2】。
【答案】
【1】带有表达式的return
【2】void
2.函数调用时的实参与对应的形参都是数组时,参数传递方式为【1】;
都是普通变量时,参数传递方式为【2】。
【1】传地址
【2】传值
3.静态局部变量的作用域是【1】。
【1】定义它的函数或复合语句的内部
4.函数形参的作用域是【1】。
全局的外部变量与函数体内定义的局部变量同名时,在函数体内,【2】变量起作用。
【1】整个函数体内
【2】局部
5.下列函数sub()的功能是求两个参数的差,并将差值返回调用函数。
该函数中错误的部分是【1】,改正后应为【2】。
voidsub(doublex,doubley)
doublez;
z=x–y;
returnz;
【1】voidsub(doublex,doubley)
【2】doublesub(doublex,doubley)
6.为了使下面程序能够正确运行,程序的第2行应填写的内容是【1】,当输入的数值为66和99时,该程序输出的结果是【2】。
#include<
stdio.h>
【1】
main()
doublex1,x2;
scan(“%lf,%lf”,&
x1,&
x2);
printf(“%lf\n”,max(x2,x1));
getch();
doublemax(doubley1,doubley2)
return(y1>
y2?
y1–y2:
y2-y1);
【1】doublemax(double,double);
【2】33.000000
7.下面程序,在函数sum()中求(m+n)/3+(m-n)/3的值,在主函数中为m、n
输入10、7,并输出计算结果,请填空。
intm,n;
printf(“Pleaseinputm,n:
”);
scanf(“%d,%d”,【2】);
printf(”Thesum=%d\n”,sum(m,n));
intsum(inti,intj)
intk;
k=【3】;
returnk;
【1】intsum();
【2】&
m,&
n
【3】
(i+j)/3+(i-j)/3
8.下面程序功能是求两个浮点数的和,程序内容如下,请填空。
doubleadd(doublex,doubley,doublep)
p=x+y;
doublea=55.44,b=44.55;
doublek;
add(a,b,【2】);
printf(“%.2lf\n”,k);
【1】return(p);
【2】k
注:
输出的k值是不确定的!
9.下面程序的运行结果是【1】。
voidfunc(intbr[])
{inti=1;
while(br[i]<
=10)
{
printf("
%5d"
br[i]);
i++;
intar[]={2,4,8,10,8,4,11,9,7};
func(ar+1);
\n"
);
getch();
【1】81084
10.函数acopyb将整型数组aarra的内容逆序复制到整型数组barra中(-32768作为数组
元素值的结束标志),请填空。
voidacopyb(intaa,intba)
inti=0,j=0;
while(aa[j]!
=-32768)j++;
ba[j]=aa[j];
j--;
while(aa[i]!
=-32768)
【2】
staticintaarra[]={1,3,5,7,9,2,4,6,8,10,-32768};
intbarra[20];
inti=0;
acopyb(【1】);
while(barra[i]!
=-32768)
%3d"
【3】);
printf("
【1】aarra,barra
【2】ba[j]=aa[i];
【3】barra[i++]
11.在【1】处填写适当内容,使下面程序的输出结果为264。
intfunc(intm,intn)
return(m*n);
inta=3,b=11,c=8,d;
d=func(func(【1】),c);
%d\n"
d);
【1】a,b或者b,a
12.下面程序的输出结果为【1】。
#include<
#defineN10
voidoutput(int*p,intn)
inti;
for(i=0;
i<
n;
i++)
*p++);
intx[N],i,*q;
N;
i++)x[i]=2*i;
q=x;
output(q,N);
for(i=0;
i++)printf("
x[i]);
【1】024681012141618
024681012141618
13.函数small()从5x5矩阵(即从5行、5列二维数组)中,找出主对角线上元素的最小值。
在主函数中为数组输入数据。
请填写适当内容。
intsmall(inta[5][5])
inti,vm;
vm=a[0][0];
for(i=1;
i<
5;
i++)
if(vm>
a[i][i])
vm=【1】
return(vm);
inti,j,vmin;
intarray[5][5];
for(i=0;
i++)
for(j=0;
j<
j++)
scanf(”%d”,【2】);
vmin=small(array);
printf(”vmin=%d\n”,vmin);
【1】a[i][i];
array[i][j]
14.函数max_value()求3x4矩阵所有元素中的最大值。
请在下面程序中【1】、【2】处填写适当内容。
voidmain()
intmax_value(intarray[][4]);
inta[3][4]=({1,3,5,7},{2,4,6,8},{15,17,34,12});
printf(”maxvalueis%d\n”,【1】);
intmax_value(intarray[][4])
inti,j,max;
max=array[0][0];
for(i=0;
3;
4;
if(array[i][j]>
max)
【2】=array[i][j];
return(max);
【1】max_value(a)
【2】max
15.下面程序的功能是调用选择排序法函数select(),对数组中的整数按从小到大的顺序排列,请填写适当内容。
voidmain()
voidselect(inta[],intn);
intb[10],i;
Input10numbers:
"
10;
scanf("
%d"
【1】);
select(【2】,10);
b[i]);
}
voidselect(inta[],intn)
inti,j,k,temp;
n-1;
k=i;
for(j=i+1;
n;
if(a[j]<
a[k]).
k=j;
if(k【3】i)
temp=a[k];
a[k]=【4】;
a[i]=temp;
【1】&
b[i]
【2】b
【3】!
=
【4】a[i]
16.下面程序的运行结果是【1】,函数sort()采用的算法是【2】。
#defineM5
#defineN6
voidsort(inta[],intn)
{inti,j,temp;
n-1;
for(j=i+1;
j<
if(a[i]<
a[j])
temp=a[i];
a[i]=a[j];
a[j]=temp;
a[i]);
inti;
intx[]={7,3,9,5,1};
inty[]={46,55,91,64,82,73};
sort(x,M);
sort(y,N);
M;
y[i]);
【1】97531
918273645546
97531
【2】函数sort()采用的是冒泡排序法。
17.下面程序的功能是利用函数的递归调用求1!
+2!
+3!
+……+9!
,请填写适当内容。
longintfracsum(intn)
if(n==1)
return
(1);
else
return(n*【1】);
inti=1;
longintsum;
sum=【2】
while(i<
=9)
sum+=【3】;
i++;
%ld\n"
sum);
【1】fracsum(n-1)
【2】0
【3】fracsum(i)
18.下面程序的功能是【1】,程序运行结果是【2】。
{intfib(intn);
10;
{if(i%5==0)printf("
);
%10d"
fib(i));
intfib(intn)
{if(n==0||n==1)returnn;
else
returnfib(n-2)+fib(n-1);
【1】计算斐波那契(Fibonacci)数列前10项的值。
【2】01123
58132134
19.运行下面程序,函数func()中输出的结果是【1】,主函数中输出的结果是【2】。
intn=10;
intfunc(intp)
n+=p;
p+=n;
%d,%d\n"
p,n);
return(n);
intm=6,pand=8;
pand=func(m);
\n%d,%d,%d\n"
m,pand,n);
【1】2216
【2】61616
20.运行下面程序,输出的结果是【1】。
intm,n;
intfun()
m=88;
n=99;
return(n);
intm=55,n=66;
\n%d,%d,%d,%d\n"
m,fun(),m,n);
【1】55,99,55,66
21.运行下面程序,输出的结果是【1】。
intm=9;
intfunc(inta,intb)
intm=1;
\n%d\n"
++m);
return(a*b-m);
intx=2,y=35;
func(x,y)/m);
【1】2和7
22.运行下面程序,函数fun()中输出的结果是【1】,主函数中输出的结果是【2】。
voidfun(ints[])
{staticinti=0;
intj;
do
s[i]+=s[i+1];
}while(++i<
3);
for(j=0;
5;
j++)printf("
s[j]);
inti,a[10]={0,1,2,3,4};
for(i=1;
3;
i++)fun(a);
i++)printf("
【1】13534
13574
【2】13574
23.运行下面程序,输出的结果是【1】。
intn=98;
intfun()
staticintn=1;
n+=2;
return(n);
\n%d,%d\n"
++n,fun());
n++,fun());
【1】101,3
101,5
三、程序设计题
1.输入任意3个整数,利用函数的嵌套调用,求出3个数中的最小值。
参考程序代码如下:
intmintwo(int,int);
/*函数声明*/
intminthree(int,int,int);
/*函数声明*/
intx,y,z,min;
\nPleaseinputthreeinteger:
%d,%d,%d"
&
x,&
y,&
z);
min=minthree(x,y,z);
\nMinis%d"
min);
intmintwo(inta,intb)
return(a<
b?
a:
b);
/*使用条件表达式,并将计算结果返回*/
intminthree(inta,intb,intc)
intz;
z=mintwo(a,b);
/*嵌套调用函数mintwo()*/
z=mintwo(z,c);
return(z);
2.由键盘输入两个整数,编写两个函数,分别求这两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。
longintgcd(longint,longint);
/*函数声明*/
lo