华南理工大学C习题3及其解答Word格式文档下载.docx
- 文档编号:17320436
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:17
- 大小:37.58KB
华南理工大学C习题3及其解答Word格式文档下载.docx
《华南理工大学C习题3及其解答Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《华南理工大学C习题3及其解答Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
(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<
iostream.h>
#include<
math.h>
intf(int);
voidmain()
{inti;
for(i=0;
i<
3;
i++)
f(i)<
endl;
}
intf(inta)
{intb=0,c=1;
b++;
c++;
return(a+pow(b,2)+c);
答案:
3
4
5
2.voidfunc(inta,intb,intc=3,intd=4);
{func(10,15,20,30);
func(10,11,12);
func(12,12);
voidfunc(inta,intb,intc,intd)
{cout<
a<
'
\t'
<
b<
c<
d<
}
答案:
10152030
1011124
121234
3.#include<
voidfunc(int,int,int*);
{intx,y,z;
func(5,6,&
func(7,x,&
y);
func(x,y,&
z);
x<
"
"
y<
"
z<
voidfunc(inta,intb,int*c)
{b+=a;
*c=b–a;
6,6,6
4.#include<
voidfunc(int,int,int&
);
{intx=0,y=1,z=2;
func(1,2,x);
func(x+y,y,y);
func(z,x+y,z);
voidfunc(inta,intb,int&
c)
c=b–a;
2,1,3
5.#include<
intf2(int,int);
intf1(inta,intb)
{intc;
a+=a;
b+=b;
c=f2(a+b,b+1);
returnc;
intf2(inta,intb)
c=b%2;
returna+c;
{inta=3,b=4;
f1(a,b)<
15
6.#include<
intage(intn)
{intf;
if(n==1)f=10;
elsef=age(n-1)+2;
returnf;
age:
age(5)<
age:
18
7.#include<
intf1(inta,intb){returna+b;
intf2(inta,intb){returna–b;
intf3(int(*t)(int,int),inta,intb){return(*t)(a,b);
{int(*p)(int,int);
p=f1;
cout<
f3(p,4,8)<
p=f2;
f3(p,8,4)<
12
8.#include<
intsub(int,int);
inta=1;
{intm=1,n=2,f;
f=sub(m,n);
f<
intsub(intc,intd)
{staticintm=2,n=5;
m<
n<
a=++a;
c=m++;
d=n++;
returnc+d;
25
27
36
39
3.3编程题
1.已知
,其中sh为双曲正弦函数,即
。
编一程序,输入x的值,求y的值。
解答:
doublesh(doublet);
{doublex,y;
x="
;
cin>
>
x;
y=sh(1+sh(x))/(sh(2*x)+sh(3*x));
y="
endl;
doublesh(doublet)
{
return(exp(t)-exp(-t))/2;
2.输入m、n和p的值,求s=
的值。
注意判运算中的溢出。
doublef(longk,longnum);
{longm,n,p;
doubles;
m,n,p="
m>
n>
p;
s=(f(1,m)+f(3,n))/f(5,p);
s="
s<
doublef(longk,longnum)
{longi;
doublesum=0;
for(i=1;
i<
=num;
i++)
{
sum=sum+pow(i,k);
returnsum;
3.输入a,b和c的值,编写一个程序求这三个数的最大值和最小值。
要求把求最大值和最小值编写成函数,并使用指针或引用作为形式参数把结果返回main函数。
(1)使用指针
#include<
voidfmaxmin(float,float,float,float*,float*);
floata,b,c,max,min;
a,b,c="
a>
b>
c;
fmaxmin(a,b,c,&
max,&
min);
max="
max<
min="
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<
v)v=z;
*p1=u;
*p2=v;
(2)使用引用
voidfmaxmin(float,float,float,float&
float&
fmaxmin(a,b,c,max,min);
min<
voidfmaxmin(floatx,floaty,floatz,float&
p1,float&
p2)
p1=u;
p2=v;
4.用线性同余法生成随机数序列的公式为:
rk=(multiplier*rk-1+increment)%modulus
序列中的每一个数rk,可以由它的前一个数rk-1计算出来。
例如,如果有:
rk=(25173*rk-1+13849)%65536
可以产生65536个各不相同的整型随机数。
设计一个函数作随机数生成器,生成一位或两位数的随机数。
利用这个随机数生成器,编写一个小学生四则运算的练习程序:
●可以进行难度选择。
一级难度只用一位数,二级难度用两位数;
●可以选择运算类型,包括加、减、乘、除等;
●给出错误提示;
●可以统计成绩。
intf();
intw1();
intw2();
{intw,i,r,t=0;
charop;
floata,b,d;
l1:
请输入难度(1或2):
"
w;
if(w!
=1&
&
w!
=2)
{cout<
输入难度错误,重新输入!
gotol1;
l2:
请输入运算类型(+,-,*,/):
;
op;
if(op!
='
+'
&
op!
-'
*'
/'
)
{cout<
输入运算符错误,重新输入!
gotol2;
//出10道题,每题10分
=10;
l3:
if(w==1){a=w1();
b=w1();
if(w==2){a=w2();
b=w2();
if(op=='
if(a<
b)gotol3;
//使被减数大于减数
if(int(a/b)!
=(a/b))gotol3;
//只做结果为整数的除法
op<
d;
switch(op)
{case'
:
r=a+b;
break;
case'
r=a-b;
case'
r=a*b;
r=a/b;
}
if(r==d){
cout<
你算对了,加10分!
t=t+10;
elsecout<
你算错了!
你的成绩是:
t<
分"
intf()
{staticintr;
r=(25173*r+13849)%65536;
returnr;
intw1()
{intrand;
do
{rand=f();
}while(rand<
0||rand>
10);
returnrand;
intw2()
10||rand>
=100);
5.已知勒让德多项式为
编一程序,从键盘上输入x和n的值,使用递归函数求p
(x)的值。
floatp(floatx,intn);
{intn;
floatx;
pleaseinputxandn:
x>
n;
p("
"
)="
p(x,n)<
endl;
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);
t1<
t2<
return(t1-t2)/n;
6.把以下程序中的print()函数改写为等价的递归函数。
voidprint(intw)
{for(inti=1;
=w;
{for(intj=1;
j<
=i;
j++)
voidmain()
{print(5);
运行显示:
1
22
333
4444
55555
voidprint(intw)
if(w)
print(w-1);
=w;
i++)cout<
w<
print(5);
7.已知用梯形法求积分的公式为:
,其中h=(b-a)/n,n为积分区间的等分数,编程序求如下积分的值。
要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。
调用该函数时,给定不同的被积函数作为实际参数求不同的积分。
①
②
③
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;
=n-1;
i++)t+=(*fun)(a+i*h);
t*=h;
returnt;
{doublet1,t2,t3;
t1=trap(f1,0,1,10000);
t1="
t2=trap(f2,1,2,10000);
t2="
t3=trap(sin,0,3.14159265/2,10000);
t3="
t3<
8.编写一个程序,包含三个重载的display函数和一个主函数。
要求第一个函数输出double值,前面用字符串“adouble:
”引导,第二个函数输出一个int值,前面用字符串“aint:
”引导,第三个函数输出一个char字符值,前面用字符串“achar:
”引导,在主函数中分别用double、int和char型变量作为实参调用display函数。
voiddisplay(doubled)
adouble:
voiddisplay(inti)
aint:
voiddisplay(charc)
achar:
{
doubled=1.5;
inti=100;
charc='
a'
display(d);
display(i);
display(c);
9.使用重载函数编程序分别把两个数和三个数从大到小排列。
voidsort(floatx,floaty);
voidsort(floatx,floaty,floatz);
sort(5.6,79);
sort(0.5,30.8,5.9);
voidsort(floatx,floaty)
y)cout<
voidsort(floatx,floaty,floatz)
floatt;
if(y<
z){t=y;
y=z;
z=t;
if(x<
z){t=x;
x=z;
y){t=x;
x=y;
y=t;
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"
Fabricate.h"
{intm,n;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华南理工大学 习题 及其 解答