1. 程式人生 > >第3章 函式(1)

第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。遊戲者在程式開始時輸入一個無符號整數,作為產生隨機數的種子。

每輪投兩次骰子,第一輪如果和數為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;
}