求答案
(1)阅读下列程序,写出其运行结果,并指出其功能。<1>
#include <iostream.h>
int hcf( int u , int v )
{
int a,b,t,r;
if (u > v) {
t = u ;
u = v ;
v = t ;
}
a = u ;
b = v ;
while ( ( r = b % a ) != 0 ){
b = a ;
a = r ;
}
return( a ) ;
}
int lcd( int u , int v , int h )
{
return( u * v / h ) ;
}
void main()
{
int u , v , h , l ;
cin >> u >> v ;
h = hcf ( u , v ) ;
cout << “hcf=” << h << endl ;
l = lcd ( u , v, h ) ;
cout << “lcd=” << l << endl ;
}
输入:48,32
<2>
#include <iostream.h>
longfib ( int g )
{
switch ( g )
{
case 0 : return 0;
case 1 :
case 2 : return 1;
}
return ( fib( g – 1 ) + fib( g – 2 ) ) ;
}
void main ( )
{
long k;
k = fib ( 7 );
cout << “k=” << k << endl ;
}
<3>
#include <iostream.h>
int k = 1 ;
void main()
{
int i = 4 ;
int fun (int);
fun( i ) ;
cout << “(1) “ << i << ‘,’ << k << endl ;
}
fun( int m )
{
m += k;
k += m;
{
char k = ’B’;
cout << “(2)” << char(k-‘A’) << endl ;
}
cout << “(3)” << m << ‘,’ << k << endl ;
}
<4>
# include <iostream.h>
# include <iomanip.h>
void subp ( )
{
static int x = 0 , y = 0 ; /*问题(1)*/
int a, b;
a = x – y ;
b = x + y ;
cout << setw(5) << a << setw(5) << b << endl ;
cout << setw(5) << x << setw(5) << y << endl ;
}
int x , y ;
void main()
{
int a = 9,b = 3;
x = a – b ;
y = a + b ;
subp();
cout << setw(5) << a << setw(5) << b << endl ;
cout << setw(5) << x << setw(5) << y << endl ;
}
1)运行结果是:
2)如果问题(1)处语句改为static int x,y ; ,运行结果会发生改变么?为什么? (1)运行结果:
输入:48,32
输出:
hcf=16
lcd=96
功能:
该程序首先定义了一个计算两个数的最大公约数的函数hcf和一个计算两个数的最小公倍数的函数lcd。然后在主函数中输入两个整数u和v,调用hcf函数计算它们的最大公约数并输出,再调用lcd函数计算它们的最小公倍数并输出。
(2)运行结果:
输出:
k=13
功能:
该程序定义了一个计算斐波那契数列的函数fib,然后在主函数中调用fib函数计算第7个斐波那契数并输出。
(3)运行结果:
输出:
(2)1
(3)4,5
(1) 4,5
功能:
该程序定义了一个全局变量k和一个函数fun,然后在主函数中调用fun函数,fun函数对传入的参数进行处理并输出结果。
(4)运行结果:
输出:
6 12
9 3
9 3
6 12
功能:
该程序定义了一个静态函数subp和全局变量x、y,然后在主函数中对x和y进行赋值,调用subp函数并输出结果,最后输出a、b、x、y的值。
2)如果问题(1)处语句改为static int x,y;,运行结果会发生改变么?为什么?
答:
如果将问题(1)处语句改为static int x,y;,运行结果不会发生改变。因为在函数subp中,x和y是静态变量,无论是否加上static关键字,它们的生命周期都会延长到程序的整个运行期间,所以在这个程序中并没有区别。
页:
[1]