Day3 函数调用例题
1.计算x的n次方
//计算x的n次方
#include <iostream>
using namespace std;
//计算x的n次方
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;
}
2.将二进制数转换为十进制数
#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;
}
//计算x的n次方
double power(double x, int n){
double val = 1.0;
while(n--){
val *= x;
}
return val;
}
3.编写程序求π的值

说明:1e-15(10的负15次方)
#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);//需要注意类型:整数相处结果取整,比如1/5=0
double b = 4.0 * arctan(1/239.0);
double pi = a-b;
cout <<"The value of PI is "<< pi << endl;
return 0;
}
4.寻找并输出11~999中间的回文数
分析:用除10取余的方法,从最低位开始,依次取出该数的各位数字,按反序重构成新的数,与原数进行比较是否相等,相等则为回文。
//寻找并输出11~999中间的回文数
#include <iostream>
using namespace std;
bool huiwen(unsigned x){
unsigned n = x;
unsigned y = 0;
while (n > 0){
y = y * 10 + n % 10;
n/=10;
}
return y == x;//注意返回值,返回的是真假//第一次编写出现错误,返回的是y是否与传入的x相等
}
int main() {
for (unsigned i = 11; i <= 999; i++){
if (huiwen(i) && huiwen(i*i) && huiwen(i*i*i)){
cout << "i "<< i << endl;
cout << "i*i " << i*i << endl;
cout << "i*i*i " << i*i*i << endl;
}//调用函数后,判断真假
}
return 0;
}
5.计算分段函数,并输出结果

//计算分段函数,并输出结果
#include <iostream>
#include <cmath>
using namespace std;
const double TINY_VALUE = 1e-10;
//至少要加上第一项,使用do-while循环
double tsin(double x){
double i = x;
double g = 0;
int n = 1;
do{
g += i;
n++;
i = -i*x*x/(2 * n - 1)/(2 * n - 2);//写步骤,捋逻辑
}while(fabs(i) >= TINY_VALUE);
return g;
}
int main() {
double k, r, s;
cout << " Enter the value of r: ";
cin >> r;
cout << " Enter the value of 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;
}
6.投骰子的随机游戏
描述:
每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。
每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。
分析:函数负责模拟投骰子,计算和数并输出和数

//投骰子的随机游戏
#include <iostream>
#include <cstdlib>
using namespace std;
enum GameStatus{WIN,LOSE,PLAYING};
int main() {
int sum, myPoint;
GameStatus status;
unsigned seed;
int rollDice();
cout << "Enter an unsigned 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://其他情况,没有结果,状态仍为PLAYING,记下点数
status = PLAYING;
myPoint = sum;
cout << "point is " << myPoint << endl;
break;
}
while(status == PLAYING){//状态仍为PLAYING,继续
sum = rollDice();
if(sum == myPoint)
status = WIN;
else if(sum == 7)
status =LOSE;
}
if (status == WIN)//当状态不为PLAYING时循环结束,输出游戏结果
cout << "player wins!" << endl;
else
cout << "player loses!" << endl;
return 0;
}
int rollDice(){
int die1 = 1 + rand() % 6;//每个骰子有六个面,点数范围是1-6
int die2 = 1 + rand() % 6;
int sum = die1 + die2;
cout << "player rolled " << die1 << "+" << die2 << "=" << sum << endl;
return sum;
}
本文通过多个实例展示了C++中函数的应用,包括幂运算、二进制转十进制、求π值、寻找回文数、计算分段函数及模拟骰子游戏。这些实例涵盖了数学计算、逻辑判断和随机数生成等多个方面。
440

被折叠的 条评论
为什么被折叠?



