C++学习笔记(Day3 函数调用例题)

本文通过多个实例展示了C++中函数的应用,包括幂运算、二进制转十进制、求π值、寻找回文数、计算分段函数及模拟骰子游戏。这些实例涵盖了数学计算、逻辑判断和随机数生成等多个方面。

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值