第七章第五章函数作业

来源:互联网 发布:赵一涵淘宝店铺 编辑:程序博客网 时间:2024/04/30 04:24

1.1调试课本例题

//例5.6值调用,例5.9引用调用合集//By Tin Lin# include <iostream>using namespace std ;int max(int x , int y) ;void swap(int &u , int &v) ;int main (){int a , b ;cout << "输入两个整数:" ;cin >> a >> b ;cout << "这两的数的最大值为:" << max(a , b) << endl ;swap(a , b) ;cout << "这两个数交换顺序后为:" << a << "\t" << b << endl ;return 0 ;}int max (int x , int y){int w ;w = x >= y ? x : y ;return w ;}void swap(int &u , int &v){int temp ;temp = u ;u = v ; v = temp ;}


1.2递归函数

//递归方法求n!# include <iostream>using namespace std ;double fun (int n) ;int main (){int a ;double f ;cout << "input a integer :" ;cin >> a ;f = fun (a) ;cout << a << "! = " << f << endl ; return 0 ;}double fun (int n){double temp ;if (n == 0)temp = 1 ;else temp = n * fun (n - 1) ;return temp ;}


2课本习题

//习题1,说明下列程序的执行过程和运算结果# include <iostream># include <cmath>using namespace std ;double squ(double x) ;//函数原型int main (){double x ;cout << "input x , please " ;cin >> x ;cout << "the square root of " << x << " is " << squ(x) << endl ;//在输出结果里调用函数squreturn 0 ;}double squ(double x)//定义返回值类型为double 函数名为squ 形参为double x的函数{double s1 , s2 ;//定义s1,s2为double型s1 = 0.5 * (1 + x) ;//对s1赋初值do {s2 = s1 ;s1 = (s2 + x / s1) * 0.5 ; } while (fabs(s2 - s1) > 1.0e-6) ;//循环体 直到s2 - s1 的绝对值<= 1.0E-6 时跳出循环return s1 ;//调用函数squ的返回值s1,返回到main函数中调用squ函数的地方,即输出}


//习题2,整数次幂的函数long intPower(int base , int exponent)//求base的exponent次幂# include <iostream>using namespace std ;long intPower(int base , int exponent) ;int main(){int base , exponent ;cout << "请分别输入不小于0的整数base和exponent的值" ;cin >> base >> exponent ;cout << base << "的" << exponent << "次幂为:" << intPower(base , exponent) << endl ;return 0 ;}long intPower(int base , int exponent){int i , result ;if (exponent == 0){result = 1 ;}else {for (i = 1 , result = 1 ; i <= exponent ; i++)result = result * base ;}return result ;}



//习题3 判断一个正整数是否是素数// By Tin Lin# include <iostream>using namespace std ;void fun (int num) ;int main (){int num ;cout << "请输入一个正整数" ;cin >> num ;fun(num) ;return 0 ;}void fun (int num ){int i , temp , count = 0 ;if (num == 1)cout << "这个数既不是素数也不是合数" << endl ;if (num == 2)cout << "这个数既2是素数" << endl ;for (i = 2 ; i < num ; i++){temp = num % i ;if (temp == 0)count++ ;}if (count > 0)cout << "这个数不是素数" << endl ;elsecout << "这个数是素数" << endl ;}

//习题4 编写一个函数,返回十进制正整数数字顺序相反的整数//By Tin Lin# include <iostream>using namespace std ;int backco(int num) ;int main(){int num  , result ;cout << "输入一个正整数:" ;cin >> num ;cout << "与正整数" << num << "数字顺序相反的整数";result = backco(num) ; cout << endl ;return 0 ;}int backco(int num){int temp ;do{temp = num % 10 ;num = num / 10 ;cout << temp ;} while (num > 0) ;cout << "\t" ;return temp ;}

//习题5 按说给的百分制分数,返回该分数对应的等级字符// By Tin Lin# include <iostream>using namespace std ;char grade(float num) ;int main (){float num ;char result ;cout << "请输入该分数(无需输入百分号):" ;cin >> num ;result = grade(num) ;cout << num << "%对应的等级为:" << result << endl ;return 0 ;}char grade (float num){char temp ;if (num >= 80 && num <= 100 )temp = 'A' ;else if (num >= 60)temp = 'B' ;else if (num >= 30)temp = 'C' ;else if (num < 30)temp = 'D' ;return temp ;}


//习题6;10个学生成绩平均分//By Tin Lin# include <iostream>using namespace std ;float average(int a1 , int a2 , int a3 , int a4 , int a5 , int a6 , int a7 , int a8 , int a9 , int a10) ;int main (){int a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10 ;int aver ;cout << "请输入这十个学生的而成绩:" ;cin >> a1 >> a2 >> a3 >> a4 >> a5 >> a6 >> a7 >> a8 >> a9 >> a10 ;aver = average(a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9 , a10) ;cout << "10个学生成绩平均分为:" << aver << endl ;return 0 ;}float average(int a1 , int a2 , int a3 , int a4 , int a5 , int a6 , int a7 , int a8 , int a9 , int a10){float temp ;temp = (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) / 10 ;return temp ;}


//习题7 求两个数的最大公约数和最小公倍数//by Tin Lin# include <iostream>using namespace std ;int maxi(int x , int y) ;int mini(int x , int y) ;int main (){int x , y ;cout << "请输入两个正整数:" ;cin >> x >> y ;cout << "这两个正整数的最大公约数为:" << maxi (x , y) << endl ;cout << "这两个正整数的最少公倍数为:" << mini (x , y) << endl ;return 0 ;}int maxi(int x , int y){int max , min , z ;      max = x , min = y ;       while ((max % min) != 0)      {          z = max % min ;          max = min ;          min = z ;      }return min ;}int mini (int x , int y) {int result;      result = (x * y) / maxi (x , y) ;      return result ;  }
   

//习题8 编写三个函数以三种不同的方式输出乘法口诀//输出9行9列;输出主对角线以上;输出主对角线以下//by Tin Lin# include <iostream>using namespace std ;void fun1() ;void fun2() ;void fun3() ;int main (){fun1() ; fun2() ;fun3() ;return 0 ;}void fun1 ()//输出9行9列{cout << "输出9行9列" << endl ;for (int i = 1 ; i < 10 ; i++)for (int j = 1 ; j < 10 ; j++){cout << i << "*" << j << "=" << i * j << "\t" ;if (j == 9)cout << endl ;}cout << endl ;}void fun2(){cout << "输出主对角线以上" << endl ;for (int i = 1 ; i < 10 ; i++){int k = 1 ;for (int j = i ; j < 10 ; j++)cout << i << "*" << j << "=" << i * j << "\t" ;cout << endl ;while (k <= i){k++ ;cout << "\t" ;}}cout << endl ;}void fun3(){cout << "输出主对角线以下" << endl ;for (int i = 1 ; i < 10 ; i++){for (int j = 1 ; j <= i ; j++)cout << i << "*" << j << "=" << i * j << "\t" ;cout  << endl ;}}

//习题9 求三个整数的最大值,最小值和平均值//要求三个整数在main函数中输入,最大值,最小值和平均值由函数求出//分别用值调用;引用调用;用全局变量实验主调函数和被调函数间的数据传递# include <iostream>using namespace std ;int maximun(int x , int y , int z) ;void minimun(int &x , int &y , int &z) ;int average(int x , int y , int z) ;float ave ;//全局变量int main (){int x , y , z ;cout << "依次输入三个整数:" ;cin >> x >> y >> z ;cout << "输入的三个整数分别为:" << x << "   " << y << "   " << z << endl ;maximun(x , y , z) ;minimun(x , y , z) ;average(x , y , z) ;return 0 ;}int maximun(int x , int y , int z){int temp ;temp = x > y ? x : y ;temp = temp > z ? temp : z ;cout << "这三个整数的最大值为:" << temp << endl ;return temp ;}void minimun(int &x , int &y , int &z){int t ; if (x > y){t = y ;if (t > z)cout << "这三个整数的最小值为:" << z << endl ;elsecout << "这三个整数的最小值为:" << t << endl ;}else {if (x > z)cout << "这三个整数的最小值为:" << z << endl ;elsecout << "这三个整数的最小值为:" << x << endl ;}}int average(int x , int y , int z) {ave = (x + y + z) / 3 ;cout << "这三个整数的平均值为:" << ave << endl ;return ave ;}

//习题10 下面定义了全局变量,局部变量和静态局部变量,支出该程序的运行结果//By Tin Lin# include <iostream>using namespace std ;void func();//函数func的声明int n = 1 ;//n为全局变量并赋初值1int main (){static int a ;//a为静态局部变量int b = -10 ;//b为局部变量并赋初值-10cout << "a:" << a << "\tb:" << b << "\tn:" << n << endl ;//输出 a:0b:-10n:1b += 4 ;//b = b + 4 = -10 + 4func() ;//调用函数funccout << "a:" << a << "\tb:" << b << "\tn:" << n << endl ;//输出a:0b:-6n:6n += 10 ;//这个n为局部变量, n = 1 + 10 = 11func() ;////输出a:6b:17n:21return 0 ;}void func(){static int a = 2 ;//a为静态局部变量并赋初值2int b = 5 ;//b为局部变量并赋初值5a += 2 ;//a为静态局部变量, a =  2 + 2 = 7n += 5 ;//n为全局变量, n = 1b += 12 ;//b为局部变量, b = 5 + 12 = 17cout << "a:" << a << "\tb:" << b << "\tn:" << n << endl ;//输出a:4b:17n:6}

课外练习

//计算S[n]=1!+21+3!+...n!。要求定义两个函数,一个计算n!,一个计算s[n],//在后一个函数中调用前一个函数。然后在主程序中输入数n的值,//最后调用定义函数输出结果。// By Tin Lin# include <iostream>using namespace std ;int fact(int i) ;int sum(int n) ;int main (){int n ;cout << "输入n的值:" ;cin >> n ;cout << "s[" << n << "]! = " << sum(n) << endl ;return 0 ;}int fact(int j){for (int i = 1, s = 1 ; i <= j ;i++)s = s * i ;return s ;}int sum(int n){int i , sumary = 0 ;for (i = 1 ; i <= n ; i++)sumary = sumary + fact (i) ;return sumary ;}


//输入一个16进制的数,用10进制输出//  By Tin Lin# include <iostream># include <iomanip>using namespace std ;void fun () ;int main (){fun() ;return 0 ;}void fun(){int num ;cout << "请输入一个十六进制的数" << endl ;cin >> hex >> num ;cout << "转化为十进制为:" << endl ;cout << dec << num << endl ;}





0 0
原创粉丝点击