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