一、实验目的
1.理解“处理某一或某些操作需要被有条件地重复执行”的编程思路和方法;
2.掌握循环结构的程序设计,以及while、do-while和for语句的使用方法。
二、实验任务
1.一只猴子摘了N个桃子,第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天准备吃时发现还有一个。编程计算并输出猴子一共摘了多少个桃子。输入输出格式参见样张:(两个样张二选一)
示例代码:
//桃子数量 #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进制数)。输入输出格式参见样张:(两个样张二选一)
示例代码:
//进制转换 #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. 计算由键盘输入的两个数的最大公约数和最小公倍数。输入输出格式参见样张:
示例代码:
//最大公倍数和最小公约数 #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时停止计算。近似计算公式如下:
输入输出格式参见样张:
说明:输入180或360时,程序运行结果不是0。PI的精度不同,计算结果也会不同,但一定是一个非常接近于0的数。图中的数据是在=3.14159265时算出来的。
提示:
这个近似计算可以看作一个累加过程,关键在于累加项数的确定。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的本题不考虑) 输入输出格式参见样张:
示例代码:
//交税值计算 #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; }