习题3及其解答06级2版.docx
- 文档编号:6447479
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:14
- 大小:34.26KB
习题3及其解答06级2版.docx
《习题3及其解答06级2版.docx》由会员分享,可在线阅读,更多相关《习题3及其解答06级2版.docx(14页珍藏版)》请在冰豆网上搜索。
习题3及其解答06级2版
习题3及其解答
3.1选择题
1.以下正确的函数原型为(d)。
(a)?
f1(intx;inty);(b)voidf1(?
x,?
y);
(c)voidf1(intx,?
y);(d)voidf1(int,int);
2.有函数原型voidfun2(int);下面选项中,不正确的调用是(c)。
(a)doublex=2.17;fun1(x);
(b)inta=15;fun2(a*3.14);
(c)intb=100;fun2(&b);
(d)fun2(256);
3.有函数原型voidfun3(int*);下面选项中,正确的调用是(c)。
(a)doublex=2.17;fun3(&x);?
?
?
(b)inta=15;fun3(a*3.14);
(c)intb=100;fun3(&b);
(d)fun2(256);
4.有函数原型voidfun4(int&);下面选项中,正确的调用是(c)。
(a)intx=2.17;fun4(&x);
(b)inta=15;fun4(a*3.14);
(c)intb=100;fun4(b);
(d)fun4(256);
5.有声明intfun5(int);int(*pf)(int)=fun5;
下面选项中,正确的调用是(c)。
(a)inta=15;intn=fun5(&a);(b)inta=15;cout<<(&pf)(a);
(c)cout<<(*pf)(256);(d)cout<<*pf(256);
6.在VC中,若定义一个函数的返回类型为void,以下叙述正确的是(c)。
(a)函数返回值需要强类型转换(b)函数不执行任何操作
(c)函数本身没有返回值(d)函数不能修改实际参数的值
7.函数参数的默认值不允许为(c)。
(a)全局常量(b)直接常量(c)局部变量(d)函数调用
8.使用重载函数编程序的目的是(a)。
(a)使用相同的函数名调用功能相似的函数(b)共享程序代码
(c)提高程序的运行速度(d)节省存贮空间
9.下列的描述中(b)是错误的。
(a)使用全局变量可以从被调用函数中获取多个操作结果
(b)局部变量可以初始化,若不初始化,则系统默认它的值为0
(c)当函数调用完后,静态局部变量的值不会消失
(d)全局变量若不初始化,则系统默认它的值为0
10.下列变量中,(c)的具有文件作用域。
(a)语句标号(b)局部变量(c)全局变量(d)静态变量
3.2阅读下列程序,写出执行结果
1.
#include
#include
intf(int);
voidmain()
{inti;
for(i=0;i<3;i++)
cout< } intf(inta) {intb=0,c=1; b++;c++;//b=b+1=0+1=1,c=c+1=1+1=2 return(a+pow(b,2)+c);//a=0,1,2,pow(b,2)==b*b,b=0+1=1*1=1,c=2 } 答案: 3 4 5 2. voidfunc(inta,intb,intc=3,intd=4);//默认参数intc=3,intd=4 #include voidmain() {func(10,15,20,30);//传值结果: a=10,b=15,c=20,d=30 func(10,11,12);//传值结果: a=10,b=11,c=12,d=4 func(12,12);//传值结果: a=12,b=12,c=3,d=4 } voidfunc(inta,intb,intc,intd) {cout< 答案: 10152030 1011124 121234 3.#include voidfunc(int,int,int*); voidmain() {intx,y,z; func(5,6,&x); func(7,x,&y); func(x,y,&z); cout< } voidfunc(inta,intb,int*c) {b+=a;//b=b+a *c=b–a;//*c=b-a=b,即返回时: *c=b } 答案: 6,6,6 4.#include voidfunc(int,int,int&); voidmain() {intx=0,y=1,z=2; func(1,2,x); func(x+y,y,y); func(z,x+y,z); cout< } voidfunc(inta,intb,int&c) {b+=a;c=b–a;} 答案: 2,1,3 5.#include intf2(int,int); intf1(inta,intb)//a=3,b=4 {intc; a+=a;b+=b;//a=a+a=6;b=b+b=8 c=f2(a+b,b+1);//f2(14,9) returnc; } intf2(inta,intb)//a=14,b=9 {intc; c=b%2;//c=9%2=1 returna+c; } voidmain() {inta=3,b=4; cout< } 答案: 15 6.#include intage(intn) {intf; if(n==1)f=10; elsef=age(n-1)+2;//age(n-1)递归调用 returnf; } voidmain() {cout<<"age: "< 答案: age: 18 7.#include intf1(inta,intb){returna+b;}//①return4+8;12 intf2(inta,intb){returna–b;}//②return8-4;4 intf3(int(*t)(int,int),inta,intb) {return(t)(a,b);}/*①intf3(intf1(int,int),a=4,b=8); {returnf1(4,8)}; ②intf3(intf2(int,int),a=8,b=4); {returnf2(8,4)};*/ voidmain() {int(*p)(int,int); p=f1;cout< p=f2;cout< } 答案: 12 4 8.#include intsub(int,int); inta=1;//a为全局变量 voidmain() {intm=1,n=2,f;//m,n为main的局部变量 f=sub(m,n); cout< f=sub(m,n); cout< } intsub(intc,intd)//c=1,d=2 {staticintm=2,n=5;//m,n为sub的静态局部变量 cout< //③36 a=++a;c=m++;d=n++; //①a=a+1=1+1=2;c=m=2,m=m+1=3;d=5,n=n+1=6; //②a=a+1=2+1=3;c=m=3,m=m+1=4;d=6,n=n+1=7 returnc+d;//①return2+5;7 //②return3+6;9 } 答案: 已知inti,x,y;在下列选项中错误的是(c)。 25① 27② 36③ 39④ 3.4编程题 3.输入a,b和c的值,编写一个程序求这三个数的最大值和最小值。 要求把求最大值和最小值编写成函数,并使用指针或引用作为形式参数把结果返回main函数。 解答: (1)使用指针 #include voidfmaxmin(float,float,float,float*,float*); voidmain() { floata,b,c,max,min; cout<<"a,b,c="; cin>>a>>b>>c; fmaxmin(a,b,c,&max,&min); cout<<"max="< cout<<"min="< } voidfmaxmin(floatx,floaty,floatz,float*p1,float*p2) {floatu,v; if(x>y){u=x;v=y;} else{u=y;v=x;}; if(z>u)u=z; if(z *p1=u;*p2=v; } (2)使用引用 #include voidfmaxmin(float,float,float,float&,float&); voidmain() { floata,b,c,max,min; cout<<"a,b,c="; cin>>a>>b>>c; fmaxmin(a,b,c,max,min); cout<<"max="< cout<<"min="< } voidfmaxmin(floatx,floaty,floatz,float&p1,float&p2) {floatu,v; if(x>y){u=x;v=y;} else{u=y;v=x;}; if(z>u)u=z; if(z p1=u;p2=v; } 4.用线性同余法生成随机数序列的公式为: rk=(multiplier*rk-1+increment)%modulus 序列中的每一个数rk,可以由它的前一个数rk-1计算出来。 例如,如果有: rk=(25173*rk-1+13849)%65536 可以产生65536个各不相同的整型随机数。 设计一个函数作随机数生成器,生成一位或两位数的随机数。 利用这个随机数生成器,编写一个小学生四则运算的练习程序: ●可以进行难度选择。 一级难度只用一位数,二级难度用两位数; ●可以选择运算类型,包括加、减、乘、除等; ●给出错误提示; ●可以统计成绩。 解答: #include intf();intw1();intw2(); voidmain() {intw,i,r,t=0;charop;floata,b,d; l1: cout<<"请输入难度(1或2): ";cin>>w; if(w! =1&&w! =2) {cout<<"输入难度错误,重新输入! "< gotol1;} l2: cout<<"请输入运算类型(+,-,*,/): ";cin>>op; if(op! ='+'&&op! ='-'&&op! ='*'&&op! ='/') {cout<<"输入运算符错误,重新输入! "< gotol2;} //出10道题,每题10分 for(i=1;i<=10;i++) {l3: if(w==1){a=w1();b=w1();} if(w==2){a=w2();b=w2();} if(op=='-') if(a if(op=='/') if(int(a/b)! =(a/b)) gotol3;//只做结果为整数的除法 cout<>d; switch(op) {case'+': r=a+b;break; case'-': r=a-b;break; case'*': r=a*b;break; case'/': r=a/b;break; } if(r==d){ cout<<"你算对了,加10分! "< t=t+10;} elsecout<<"你算错了! "< } cout<<"你的成绩是: "< } intf() {staticintr; r=(25173*r+13849)%65536; returnr; } intw1() {intrand; do {rand=f(); }while(rand<0||rand>10); returnrand; } intw2() {intrand; do {rand=f(); }while(rand<10||rand>=100); returnrand; } 5.已知勒让德多项式为 编一程序,从键盘上输入x和n的值,使用递归函数求p (x)的值。 解答: #include floatp(floatx,intn); voidmain() {intn; floatx; cout<<"pleaseinputxandn: "; cin>>x>>n; cout<<"p("< } floatp(floatx,intn) {floatt1,t2; if(n==0)return1; elseif(n==1)returnx; else {t1=(2*n-1)*p(x,n-1); t2=(n-1)*p(x,n-2); cout< return(t1-t2)/n; } } 6.把以下程序中的print()函数改写为等价的递归函数。 #include voidprint(intw) {for(inti=1;i<=w;i++) {for(intj=1;j<=i;j++) cout< cout< } } voidmain() {print(5);} 运行显示: 1 22 333 4444 55555 解答: #include voidprint(intw) {inti; if(w) {print(w-1); for(i=1;i<=w;i++) cout< cout< } voidmain() {print(5);} 7.已知用梯形法求积分的公式为: ,其中h=(b-a)/n,n为积分区间的等分数,编程序求如下积分的值。 要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。 调用该函数时,给定不同的被积函数作为实际参数求不同的积分。 ① ② ③ (例: a=0,b=1,n=10000) 解答: #include #include doublef1(doublex) {return4/(1+x*x);} doublef2(doublex) {returnsqrt(1+x*x);} doublef3(doublex) {returnsin(x);} doubletrap(double(*fun)(doublex),doublea,doubleb,longn) {doublet,h;inti; t=((*fun)(a)+(*fun)(b))/2.0; h=(b-a)/n; for(i=1;i<=n-1;i++)t+=(*fun)(a+i*h); t*=h; returnt; } voidmain() {doublet1,t2,t3; t1=trap(f1,0,1,10000); cout<<"t1="< t2=trap(f2,1,2,10000); cout<<"t2="< t3=trap(sin,0,3.14159265/2,10000); cout<<"t3="< } 10.给定求组合数公式为: ,编一程序,输入m和n的值,求 的值。 注意优化算法,降低溢出可能。 要求主函数调用以下函数求组合数: intFabricate(intm,intn);//返回 的值 Fabricate函数内又须调用Multi函数: intMulti(intm,intn);//返回m×m-1×…×n 程序由4个文件组成。 头文件存放函数原型作为调用接口;其他3个cpp文件分别是main、Fabricate和Multi函数的定义。 解答: Fabricate.h头文件: intFabricate(intm,intn); intMulti(intm,intn); main.cpp文件: #include #include"Fabricate.h" voidmain() {intm,n; cout<<"inputmandn: "; cin>>m>>n; cout<<"Fabricate("< } Fabricate.cpp文件: #include"Fabricate.h" intFabricate(intm,intn) { returnMulti(m,m-n+1)/Multi(n,1); } Multi.cpp文件: intMulti(intm,intn) {inti,t=1; for(i=n;i<=m;i++) t=t*i; returnt; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 及其 解答 06