Part3 函数 3.1函数定义 3.2函数调用
第三章 函数
函数:程序的功能模块
3.1函数定义
函数:定义好的可重用的功能模块
函数定义:将一个模块的算法用C++描述出来
3.2函数调用
函数调用之前要先声明,因为函数定义的位置可能在调用的位置之后,或不在一个文件中。
//3-1编写一个求x的n次方的函数 #include<iostream> using namespace std; double power(double x, int n){ double val = 1.0; while(n--) val *= x; return val; } int main(){ cout << "5 to the power 2 is " << power(5,2) << endl; return 0; }
//3-2输入一个8位二进制数,将其转换为十进制数输出 #include<iostream> using namespace std; double power(double x, int n); int main(){ int value = 0; cout << "Enter an 8 bit binary number "; for(int i = 7; i >= 0; i--){ char ch; cin >> ch; if(ch == '1') value += static_cast<int>(power(2,i)); } cout << "Decimal value is " << value << endl; return 0; } double power(double x, int n){ double val = 1.0; while(n--) val *= x; return val; }
//3-3求圆周率π的值 //π的计算公式如下: //π = 16 * arctan(1/5) - 4 * arctan(1/239) //其中acrtan用如下的级数计算: //arctan(x) = x - x^3/3 + x^5/5 - x^7/7 + ... //直到级数某项绝对值不大于10^-15为止;π和x均为double型。 #include<iostream> using namespace std; double arctan(double x){ double sqr = x*x; double e = x; double r = 0; int i = 1; while(e/i > 1e-15){ double f = e/i; r = (i%4 == 1) ? r + f : r - f; e = e * sqr; i += 2; } return r; } int main(){ double a = 16.0 * arctan(1/5.0); double b = 4.0 * arctan(1/239.0); cout << "PI = " << a - b << endl; return 0; }
//3-4寻找并输出11~999之间的数m,它满足m、m^2和m^3均为回文数。 #include<iostream> using namespace std; bool symm(unsigned n){ unsigned i = n; unsigned m = 0; while(i > 0){ m = m * 10 + i % 10; i /= 10; } return m == n; } int main(){ for(unsigned m = 11; m < 1000; m++) if(symm(m) && symm(m*m) && symm(m*m*m)){ cout << "m = " << m; cout << " m*m = " << m*m; cout << " m*m*m = " << m*m*m << endl; } return 0; }
//3-5计算分段函数: //k = sqrt(sin(r)^2 + sin(s)^2) when r^2 <= s^2 // = 1/(2 * sin(rs)) when r^2 > s^2 //其中r、s的值由键盘输入。sin(x)的近似值按如下公式计算,计算精度为10^-10: //sin(x) = x/1! - x^3/3! + x^5/5!... #include<iostream> #include<cmath> using namespace std; const double TINY_VALUE = 1e-10; double tsin(double x){//叫tsin 为了和系统中的sin区别 double g = 0; double t = x; int n = 1; do{ g += t; n++; t = -t*x*x / (2 * n - 1) / (2 * n - 2); } while (fabs(t) >= TINY_VALUE); return g; } int main(){ double k, r, s; cout << "r = "; cin >> r; cout << "s = "; cin >> s; if (r*r <= s*s) k = sqrt(tsin(r)*tsin(r) + tsin(s)*tsin(s)); else k = tsin(r*s) / 2; cout << k << endl; return 0; }
//3-6c投骰子的随机游戏 //每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。 //每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束; //和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。 //void srand(unsigned int seed) //功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初始化rand() #include<iostream> #include<cstdlib> using namespace std; enum GameStatus{WIN, LOSE, PLAYING}; int main(){ int sum, myPoint; GameStatus status; unsigned seed; int rollDice(); cout << "Please enter an unsinged integer:"; cin >> seed; srand(seed); sum = rollDice(); switch(sum){ case 7: case 11: status = WIN; break; case 2: case 3: case 12: status = LOSE; break; default: status = PLAYING; myPoint = sum; cout << "point is " << myPoint << endl; break; } while(status == PLAYING){ sum = rollDice(); if(sum == myPoint) status = WIN; else if(sum == 7) status = LOSE; } if(status == WIN){ cout << "player wins" << endl; }else{ cout << "player loses" << endl; } return 0; } int rollDice(){ int die1 = 1 + rand()%6; int die2 = 1 + rand()%6; int sum = die1 + die2; cout << "player rolled " << die1 << " + " << die2 << " = " << sum << endl; return sum; }
浙公网安备 33010602011771号