C++程序设计基础(第4版)习题解答(7)

2019-08-30 18:12

if-else语句中分别出现变量a的说明语句,是作用域为if分支和else分支的两个变量。在if-else语句之后,这两个变量都是没有定义的,因此出现编译错误。正确的程序是:

#include using namespace std; int main() { char c; int a; cin>>c; if(c=='y'||c=='Y') a=1; else a=0;

cout<<\}

10.有函数原型

double function(int,double);

函数function的返回值类型是什么?函数的类型是什么?使用typedef定义函数的类型。 有函数调用语句

x=function(10,(2? (0.314+5));

其中的括号―()‖与函数原型中括号有什么语义区别?

【解答】

函数function的返回值类型是double 函数类型是: double (int,double) 可以定义为: 表达式运算。

11.请分析以下各语句的意义。

int ? fun(); int ? (?pf)(); fun(); pf = fun; pf(); 【解答】 int * fun() ; int * (*pf)(); fun() ; pf = fun ; pf() ;

//函数原型声明。fun是返回int*类型,没有参数的函数 //声明指针变量。pf是指向函数的指针,函数类型为int*() //调用函数语句

//向指针变量赋值。函数指针pf指向函数fun //用指针变量间址调用函数 typedef double funType (int,double);

函数调用function(10,(2*(0.314+5)) 中,外层括号表示调用函数匹配的实际参数表,里面的两层括号是

3.4 编程题

sh(?1xsh)et?e?t1.已知 y?,其中,sh为双曲正弦函数,即sh(t)?。编写一个程序,输入x的

sh2x?shx32值,求y的值。 【解答】

#include #include

using namespace std; double sh( double t ); int main() {

double x,y; cout << \ cin >> x;

y = sh( 1+sh(x) )/( sh( 2*x )+sh( 3*x ) ); cout << \}

double sh( double t )

{ return ( exp( t )-exp( -t ) )/2; } 2.输入m、n和p的值,求s = 【解答】

using namespace std; double f( long k,long num ); int main() {

long m,n,p; double s,f1,f2,f3; cout << \ cin>>m>>n>>p; f1=f( 1,m ); f2=f( 3,n ); f3=f( 5,p ); if (f1 && f2 && f3 ) {

s = ( f1 + f2) /f3;

cout << \} else

cout<<\溢出!\\n\}

double f( long k,long num ) { long i;

1?2??m?13?23?15?25??p5?n3的值。注意判断运算中的溢出。

double sum=0;

for( i=1; i<=num && sum<2147483647; i++ ) {

sum = sum + pow( double (i),double (k) ); } if (i<=num)

return 0; //溢出时返回 return sum;

}

3.输入a、b和c的值,编写一个程序求这三个数的最大值和最小值。要求:把求最大值和最小值操作分别编写成一个函数,并使用指针或引用做为形式参数把结果返回main函数。 【解答】

(1)使用指针参数 #include using namespace std;

void fmaxmin( double,double ,double ,double *,double * ); int main() {

double a,b,c,max,min; cout << \cin >> a >> b >> c;

fmaxmin( a,b,c,&max,&min ); cout << \cout << \}

void fmaxmin( double x,double y,double z,double *p1,double *p2 ) {

double u,v; if ( x>y )

{ u = x; v = y; } else

{ u = y; v = x; }; if ( z>u ) u = z; if ( z

(2)使用引用参数 #include using namespace std;

void fmaxmin( double,double ,double ,double& ,double& ); int main() {

double a,b,c,max,min; cout << \

}

cin >> a >> b >> c; fmaxmin( a,b,c,max,min ); cout << \cout << \

void fmaxmin( double x,double y,double z,double &p1,double &p2 ) {

double u,v; if ( x>y )

{ u = x; v = y; } else

{ u = y; v = x; }; if ( z>u ) u = z; if ( z

}

4.用线性同余法生成随机数序列的公式为:

rk = ( multiplier × rk?1 + increment ) % modulus

序列中的每一个数rk都可以由它的前一个数rk?1计算出来。例如,如果有:

rk = ( 25 173 × rk?1 + 13 849 ) % 65 536

则可以产生65 536个各不相同的整型随机数。设计一个函数作随机数生成器,生成1位或2位数的随机数。

利用这个随机数生成器,编写一个小学生学习四则运算的练习程序,要求:

? ? ? ?

可以进行难度选择,一级难度只用1位数,二级难度用2位数; 可以选择运算类型,包括加、减、乘、除等; 可以给出错误提示; 可以统计成绩。

【解答】

#include using namespace std; int Rand(int,int); int main() {

int w,i,r,t = 0; char op,answer; int a,b,d; while(1) {

cout<<\现在开始?( Y 或 N )\\n\ cin>>answer;

if (answer=='N'||answer=='n') break;

while(1) {

cout << \请输入难度( 1或2 ):\ cin >> w;

//练习开始

//生成指定范围的随机数

if ( w != 1 && w != 2 )

cout << \输入难度错误,重新输入!\ else

break ; }

while(1)

{

cout << \请输入运算类型( +,-,*,/ ):\ cin >> op;

if ( op != '+' && op != '-' && op != '*' && op != '/' ) cout << \输入运算符错误,重新输入!\ else

break; }

//出10道题,每题10分 t=0;

for( i=1; i<=10; i++ ) { while(1) { if( w == 1 )

{

a = Rand(0,10); b = Rand(0,10); }

else

if( w == 2 ) {

a = Rand(10,100); b = Rand(10,100); } if ( op == '-' )

if ( a

if ( int( a/b ) != (a / b) ) continue; //只做结果为整数的除法 break; }

cout << a << op << b << '='; cin >> 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分!\


C++程序设计基础(第4版)习题解答(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: