}
第五章习题
一、选择题
1。
下列叙述错误的是____A_____。
(A)主函数中定义的变量在整个程序中都是有效的。
(B)复合语句中定义的变量只在该复合语句中有效。
(C)其它函数中定义的变量在主函数中不能使用.
(D)形式参数是局部变量。
2.若函数的形参为一维数组,则下列说法中错误的是__B、C_______.
(A)形参数组可以不指定大小。
(B)调用函数时的对应实参必须是数组名.
(C)调用函数时,系统会为形参数组分配存储单元.
(D)函数中对形参的修改将会影响实参值。
3。
若函数的类型和return语句中的表达式的类型不一致,则____D_____。
(A)编译时出错。
(B)运行时出现不确定结果。
(C)不会出错,且返回值的类型以return语句中表达式的类型为准。
(D)不会出错,且返回值的类型以函数类型为准.
4.在函数调用语句f(g(x,y),z=x+y,(x,y));中,实参的个数是____A_____。
(A)3(B)4(C)5(D)7
5.以下关于定义重载函数的要求中,错误的是_____D_____。
(A)要求参数个数不同。
(B)要求至少有一个参数类型不同。
(C)要求参数个数相同时,参数类型不同。
(D)要求函数的返回值不同。
6.下面的函数定义正确的是_____D____。
(A)floatf(floatx;floaty)(B)floatf(floatx,y)
{returnx*y;}{returnx*y;}
(C)floatf(x,y)(D)floatf(intx,inty)
{intx,y;{returnx*y;}
returnx*y;}
7。
下面函数头的定义格式正确的是____C_____。
(A)voidsort(inta[n],intn)(B)voidsort(inta[][],intn)
(C)voidsort(inta[],intn)(D)voidsort(inta[],n)
8。
以下几种模板函数的定义错误的是____C_____。
(A)templateTfun1(Ta,intb)
{……}
(C)template〈classT>
voidfun1(inta,intb)
{Ti;……}
9.下面4个程序中输出结果是125的有____C_____个。
(1)。
#include”iostream.h”
voidcube(intx)
{x=x*x*x;}
voidmain()
{
intx=5;cube(x);
cout〈〈x;
}
(3)。
#include”iostream。
h"
intcube(intx)
{x=x*x*x;return(x);}
voidmain()
{
intx=cube(5);//将x改为5
cout〈〈x;
}
(A)1(B)2(C)3(D)4
10.下面函数说明正确的是____C_____。
(A)voidf1(inta=3,intb,intc);
(B)voidf2inta,intb=3,intc);
(C)voidf3(inta,intb,intc=3);
(D)voidf4(inta,intb,int3);
11。
设函数m()的说明形式为voidm(int,int*);利用函数m()对数5和整数j作函数m()定义的计算,正确的调用形式为_____C_____。
(A)m(&5,&j)(B)m(5,j)(C)m(5,&j)(D)m(&5,j)
12。
设函数的说明为:
intfun(inta[],int&x);则下面调用该函数正确的是____B_____.
(A)fun(a,n);(B)x=fun(a,n);
(C)fun(a[10],n);(D)x=fun(a[],n);
二、写运行结果
1、
2、
3、
4、
5、
6、
三.程序填空
1。
【程序说明】
分段函数为
【程序段】
floaty(floatx)
{if(x〈=0)
return(x*x—x+1);
elsereturnx*x*x+x+3;
}
2.【程序说明】
函数backmove()是把字符指针x所指长度为n的字符串后移动m个位置,移出的字符移到串首.m、n为非负整数.如“abcdefghij”,后移动3个位置,成“hijabcdefg”。
【程序段】
voidbackmove(char*x,intn,intm)
{
inti,j;charw;
for(j=0;j〈m;j++)
{w=*(x+n-1);
for(i=0;i*x=w;
}
}
3。
【程序说明】
函数index()为查找字符串sub是否是字符串st的子串。
若是,返回sub在st中首次出现的下标,否则返回-1。
字符串sub和st非空.如sub:
”cd",st:
"abcdefcd”,返回2。
【程序】
#include“iostream。
h”
#includeh>
voidmain()
{chars1[80],s2[80];
intindex(char[],char[]);
gets(s1);gets(s2);
if(index(s1,s2))
cout〈<”子串在字符串中首次出现的下标:
"〈〈index(s1,s2);
else
cout<<”找不到”;
}
intindex(charst[],charsub[])
{inti,j,k;
for(i=0;st[i]!
=’\0’;i++)
{for(j=i,k=0;sub[k]!
=’\0’&&st[j]==sub[k];k++,j++);
if(sub[k]=='\0')return(i);
}
return(0);
}
4。
【程序说明】
函数root为用二分法求方程f(x)=0在[x1,x2]的实根,精度为eps。
二分法求根的基本思想为f(x)在区间[a,b]上连续,f(a)与f(b)异号,区间中点c=(a+b)/2的f(c)符号和f(a)符号确定c代替a或b,使根所在区间每次减半,直到|a—b|下面程序为求方程在[1,7]区间的实根,精度取10—6。
【程序】
#include“math。
h”
#includeh〉
doubleroot(doublex1,doublex2,doubleeps=1e-6)
{doublef(doublex);
doublex,y,y1;
y1=f(x1);
do{x=0.5*(x1+x2);
y=f(x);
if(y1*y>0。
0)x1=x;
elseif(y1*y<0。
0)x2=x;
}while(fabs(y)〉=eps&&fabs(x2-x1)>=eps);
return(x);
}
doublef(doublex)
{returnx*x*x—5*x*x+16*x—80;}
voidmain()
{cout〈5。
【程序说明】下面程序的功能是求出二维数组中最大的元素所在的行号和列号.
【程序】
#defineSIZE13
#defineSIZE24
#include“iostream.h"
floatmax_value(floatx[][SIZE2],int&ii,i