第3章 函数(1)

函数定义的语法形式

在这里插入图片描述在这里插入图片描述

例题

x^n次方

//计算x的n次方
#include <iostream>
using namespace std;
double pow(double x, int n){
	double val=1.0;
	while(n--){
		val*=x;
	}
	return val;
}

int main(){
	cout<<pow(2,5);
}

数制转换

输入一个8位二进制数,将其转换为十进制数输出。

例如:从键盘输入1101

11012=1×23+1×22+0×21+1×20=1310

所以,程序应输出13

#include <iostream>
using namespace std;
double power(double x, int n);

int main() {
	int value = 0;
	cout << "enter a 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;
}

编写程序求 π \pi 的值

在这里插入图片描述

#include <iostream>
using namespace std;

double power(double x, int n) {
	double val=1.0;
	while (n--) {
		val *= x;
	}
	return val;
}

double arctan(double x) {
	double result=0.;
	double sqr = x * x;
	double numer = x;
	int denomi = 1.;
	while (numer / denomi > 1e-15) {
		double f = numer / denomi;
		result = (denomi % 4 == 1) ? result + f : result - f;
		denomi += 2;
		numer *= sqr;
	}
	return result;
	
}

int main() {
	double pi;
	pi = 16*arctan(1 / 5.)-4*arctan(1/239.);
	cout << "Pi is " << pi << endl;
	return 0;
}

回文

寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。

#include <iostream>
using namespace std;

bool symm(int x) {
	int newX=0;
	int originalX = x;
	while (x) {
		newX = newX * 10 + x%10;
		x = x / 10;
	}
	return newX == originalX;
}

int main() {
	for (int i = 11; i <= 999; i++) {
		if (symm(i) && symm(i*i) && symm(i*i*i)) {
			cout << "m="<<i << " m*m="<<i*i<<" m*m*m="<<i*i*i<<endl;
		}
	}
	return 0;
}

sinx

在这里插入图片描述

#include <iostream>
#include <cmath>
using namespace std;
const double PRECISION = 1e-10; //计算精度

double mySin(double x) {
	double squared, numer=x, denomi=1, f;
	double results = 0.;
	int n = 1;
	squared = -x * x;
	f = numer / denomi;
	while (fabs(f) >= PRECISION) {
		results += f;

		n++;
		numer *= squared;
		denomi *= (2 * n - 2)*(2 * n - 1);
		f = numer / denomi;
	}
	return results;
}

int main() {
	double r, s, k;
	cout << "please enter r: ";
	cin >> r;
	cout << "please enter s: ";
	cin >> s;
	if (r*r <= s * s) {
		k = sqrt(mySin(r)*mySin(r) + mySin(s)*mySin(s));
	}
	else {
		k = mySin(r*s) / 2;
	}

	cout << k<<endl;
	return 0;
}

投骰子的随机游戏

每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。

扫描二维码关注公众号,回复: 4557270 查看本文章

每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮…直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。

rand函数

  • 函数原型:int rand(void);
  • 所需头文件:<cstdlib>
  • 功能和返回值:求出并返回一个伪随机数

srand函数

  • void srand(unsigned int seed);
  • 参数:seed产生随机数的种子
  • 所需头文件:<cstdlib>
  • 功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()
#include <iostream>
#include <cstdlib>
using namespace std;

//模拟投骰子,输出点数和
int rolldice() {
	int die1, die2;
	die1 = 1 + rand() % 6;
	die2 = 1 + rand() % 6;
	cout << "die1 is " << die1 << endl;
	cout << "die2 is " << die2 << endl;
	return die1 + die2;
}

enum gameStatus {WIN, LOSE, PLAYING};

int main() {
	int sum, myPoint;
	int seed;
	gameStatus status;
	cout << "Please enter an unsigned integer: ";
	cin >> seed; //输入随机数种子
	srand(seed); //将种子传给rand
	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 << "WIN!" << endl;
	else if (status == LOSE)
		cout << "LOSE" << endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/XindiOntheWay/article/details/84474477