函数定义的语法形式
例题
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;
}