第3章 函式(1)
阿新 • • 發佈:2018-12-18
函式呼叫
函式定義的語法形式
例題
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;
}
編寫程式求 的值
#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;
}