C++ 入门学习(练习+代码)—— 05

一、实验目的

1.理解“处理某一或某些操作需要被有条件地重复执行”的编程思路和方法;

2.掌握循环结构的程序设计,以及while、do-while和for语句的使用方法。

二、实验任务

1.一只猴子摘了N个桃子,第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天准备吃时发现还有一个。编程计算并输出猴子一共摘了多少个桃子。输入输出格式参见样张:(两个样张二选一)

 C++ 入门学习(练习+代码)—— 05 C++ 入门学习(练习+代码)—— 05

示例代码:

//桃子数量
#include<iostream>
using namespace std;
int main()
{
    double s=1;
    int i;
    cout<<"请输入还剩一个桃子时已吃桃天数:";
    cin>>i;
    for(i;i>0;i--)
    {
        s=(s+1)*2;
        cout<<"第"<<i<<"天桃子总数为"<<s<<endl;
        if(i==1) 
        {
            cout<<endl;
            cout<<"原有桃子数量为"<<s<<"个"<<endl;
        }

    }
    return 0;
}

 

2.  编程实现十进制整数和八进制整数之间的转换(即将10进制数转换为8进制数,或将8进制数转换为10进制数)。输入输出格式参见样张:(两个样张二选一)

C++ 入门学习(练习+代码)—— 05   C++ 入门学习(练习+代码)—— 05C++ 入门学习(练习+代码)—— 05

示例代码:

//进制转换
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
int f1(int x)
{
    int wq=1,k,r=0;
    while(x!=0)
    {
        k=x%10;
        r=r+k*wq;
        wq=wq*8;
        x=x/10;
    }
    return r;
}//8进制转10进制
int f2(int x)
{
    int wq=1,k,r=0;
    while(x!=0)
    {
        k=x%8;
        r=r+k*wq;
        wq=wq*10;
        x=x/8;
    }
    return r;
}//10进制转8进制
int main()
{
    int n,b;
    char a;
    a='y';
    cout.fill('*');
    while(a=='y')
    {
        cout<<setw(21)<<"*"<<endl;
        cout<<"    进制转换系统"<<endl;
        cout<<"1、 八进制转换为十进制"<<endl;
        cout<<"2、 十进制转换为八进制"<<endl;
        cout<<setw(21)<<"*"<<endl;
        cout<<"请选择序号1或2:";
        cin>>b;
        cout<<"请输入欲转换的数据:";
        cin>>n;
        if(b==1)
        {
            cout<<"转换为:"<<f1(n)<<endl;
        }
        if(b==2)
        {
            cout<<"转换为:"<<f2(n)<<endl;
        }
        cout<<"是否继续转换?y/n:";
        cin>>a;
        if(a=='n')
        {
            cout<<"谢谢使用!再见!"<<endl;
        }

    }
    return 0;
}

 

3. 计算由键盘输入的两个数的最大公约数和最小公倍数。输入输出格式参见样张:

C++ 入门学习(练习+代码)—— 05

示例代码:

 

//最大公倍数和最小公约数
#include<iostream>
using namespace std;
int f(int x,int y)
{
    int r=1;
    if(x<y)
    {
        x=x+y;
        y=x-y;
        x=x-y;
    }
    while(r!=0)
    {
        r=x%y;
        x=y;
        y=r;
        if(x<y)
        {
            x=x+y;
            y=x-y;
            x=x-y;
        }
    }
    return x;
}
int main()
{  
    int a,b,s;
    cout<<"请输入两个正整数:";
    cin>>a>>b;
    cout<<a<<"和"<<b<<"的最大公约数为:"<<f(a,b)<<endl;
    cout<<a<<"和"<<b<<"的最小公倍数为:"<<(a*b)/f(a,b)<<endl;
    return 0;
}
    

 

4. 从键盘输入一个角度值y(计算时需要将角度值转换成弧度值:x=y*PI/180),PI的取值为3.14159265。求sin(x)的近似值,要求截断误差小于10-7,即通项式的值小于10-7时停止计算。近似计算公式如下:

 C++ 入门学习(练习+代码)—— 05

输入输出格式参见样张:

 C++ 入门学习(练习+代码)—— 05C++ 入门学习(练习+代码)—— 05C++ 入门学习(练习+代码)—— 05C++ 入门学习(练习+代码)—— 05

 

说明:输入180或360时,程序运行结果不是0。PI的精度不同,计算结果也会不同,但一定是一个非常接近于0的数。图中的数据是在=3.14159265时算出来的。

 提示:

 C++ 入门学习(练习+代码)—— 05

这个近似计算可以看作一个累加过程,关键在于累加项数的确定。item保存第n项,则推出第n+1项的方法为:item=item*x*x/((2*n)*(2*n+1))

 示例代码:

//sin值计算
#include<iostream>
using namespace std;
int main()
{
    const long double PI=3.14159265;
    double x,y,item,sum;
    int n=1,s=1;
    cout<<"请输入一角度:";
    cin>>x;
    y=x*PI/180;
    item=y,sum=0;
    do
    {
        sum=sum+item*s;
        item=item*y*y/((2*n)*(2*n+1));
        s=-s;
        n++;
    }while(item>=1e-7);
    cout<<"sin("<<x<<")="<<sum<<endl;
    return 0;
}

 

5. 由键盘输入若干职工的工资收入(以负数结束),输出每个职工的工资收入、计算并输出每个职工的缴税额,统计并输出职工总人数和总缴税额。

税收计算方法: (参见实验3-5:根据国家的纳税政策,个人应税起征点为月收入5000元;不超过起征点3000元的,超过部分按3%交纳个人所得税;超过起征点3000至12000元的,超过部分按10%交纳个人所得税;应税月收入超过起征点12000至25000元,超过部分按20%交纳个人所得税。超过起征点25000的本题不考虑) 输入输出格式参见样张:

 C++ 入门学习(练习+代码)—— 05

示例代码:

//交税值计算
#include<iostream>
#include<iomanip>
using namespace std;
double f(double n)
{    
    double s;
    if(0<=n&&n<=5000) 
    {
        s=0;
    } 
    if(n<=8000&&n>5000) 
    {
        s=(n-5000)*0.03;
    } 
    if(n>8000&&n<=17000) 
    {
        s=((n-8000)*0.10)+90;
    } 
    if(n<=30000&&n>17000) 
    {
        s=((n-17000)*0.20)+90+900;
    } 
    return s;
}
int main()
{
    int i=1,t=0;
    double n,s=0;
    cout.fill('*');
    do
    {
        cout<<"请输入第"<<i<<"位职工的工资(负数结束):";
        cin>>n;
        if(n<0)
        {
            cout<<endl;
            cout<<"职工总人数为:"<<i-1<<",总缴税额为:"<<s<<endl;
            t=-1;
        }
        else
        {
            s+=f(n);
            cout<<"第"<<i<<"位职工的工资为:"<<n-f(n)<<",缴税额为:"<<f(n)<<endl;
            i++;
            cout<<setw(40)<<"*"<<endl;

        }

    }
    while(t>=0);
    return 0;
}

 

C++ 入门学习(练习+代码)—— 05

上一篇:数据可视化之使用Matplotlib绘制甘特图


下一篇:dushubaogao