一、实例
1、模拟法1
在一次风之巅小学文艺汇演中,狐狸老师、尼克、格莱尔同台演出,其中个环节是拍手游戏,狐狸老师每1秒拍一次手,尼克每2秒拍次,格莱尔每4秒拍一次。三人同时开始拍第一次手,每人都拍10次。
试编一程序,算一算观众可听到多少声拿声?
按时间顺序,根据每个人的条件模拟拍手过程。开始时,时间为0秒,每人都拍了1次,这时众听到1声本声,每人剩下9次,然后逐一模拟拍手,直到三人各自拍满9次为止。程序中变量time是时间,cout是观众听到的掌声,fag是有人拍手的标记,teacher、nike、glir分别表示狐狸老师、尼克\格莱尔的手次数。流程图如图:
#include <iostream>
using namespace std;
int main()
{int time, count,teacher,nike, glair;bool flag; time=0;count=1; teacher=nike=glair=0;do{flag=0;time++;if(teacher<9){flag=1;teacher++;}if(nike<9&&time%2==0){flag=1;nike++;}if(glair<9&&time%4==0){flag=1; glair++;}if(flag) count++;}while(teacher+nike+glair<9*3);cout<<count<<endl;return 0;
}
2、模拟法2
#include <iostream>
using namespace std;
int main()
{int n,nike,glair,num=0;nike=glair=0;n=0;do{nike++;if(nike>20) nike=1;glair++;if(glair>30) glair=1;if(nike==glair) num++;n++;}while(n<1000);cout<<num<<endl;return 0;
}
3、纯小数转化为最简分数
#include <iostream>
#include <cmath> //调用求浮点数的绝对值函数fabs()
using namespace std;
int main()
{double x,y;long long a,b,i,j;cout<<"请输入一个纯小数"<<endl;do{cout<<"x=";cin>>x;}while(x>=1||x<=0);a=1;y=x;while(fabs(y-(int)y)>1e-10) //纯小数化成整数{a*=10;y=x*a; //不可以写成 y=y*10;} //因误差不停的扩大,会出现死循环b=y;cout<<b<<'/'<<a<<endl;for(i=b;i>=1;i--) //求出a和b的最大公约if(b%i==0&&a%i==0) {j=i; //找出最大公约数后,赋值给jbreak; //退出循环}cout<<"最简分数为:";cout<<b/j<<'/'<<a/j<<endl; return 0;
}
二、练习:
(一)选择题
1、下列选项中不属于图像格式的是( )。
A.jpeg格式 B.txt格式 C.gif格式 D.png格式
2、计算网络最突比的点是( )
A.计算精度高 B.内存容量大 C.远算速度快 D.可以实现资源共享
3、格莱尔收到一封主题为“这是我最近的照片”的陌生电子邮亡,你认为他最好应该( )
A.直接删除 B.打开看看 C.直接转发给同学 D下臷保存
(二)阅读程序写结果。
1、
#include <iostream>
using namespace std;
int main()
{int n, t,ans;n=l;t=2;ans=0;do{n*=t;ans+=n;}while(n<=le+3);cout << ans << endl;return 0;
}
n,t,ans输出:__________
2、
#include <iostream>
using namespace std;
int main()
{long long n, ans=0, k=1;cin>>n;do
{ans+=2;n-=k;k+=10*ans;}while(k<=n);cout << ans;return 0;
}
输入:100
n,ans,k输出:_________________
3、
#include <iostream>
using namespace std;
int main()
{int m, sum=0;cin>>m;do{sum=sum*10+m%10;m/=10;}wile(m!=0);cout <<sum <<endl;
return 0;
}
输入:123
m,sum输出:_____________
(三)完善程序。
1、用另一种方法算一算观众可听到多少声掌声(时间为0秒时,每人同时拍了1次手,所以狐狸老师拍完10次手用了9秒,尼克用了18秒,格莱尔用了36秒)
#include <iostream>
using namespace std;
int main()
{int ans=10, time=10;bool flag=0;do{flag=0;if(time<=18&&time%2==0)flag=1;if(time<=36&&time%4==0)flag=1;if(flag)ans++;_____________;}while(time<=36);
cout<<_______<<endl;
return 0;
}
2、尼克和格莱尔玩报数游戏,尼克按1x报数,格莱尔按1y报数。两人同时开始,并以同样的速度报数,当两人都报了m个数时,统计出两人同时报相同数的次数。
#include <iostream>
using namespace std;
int main()
{int n, nike, glair, num=0;int x, y, m;cout<<"m=";cin>>m;cout <<"x,y=";______________;nike=glair=0:for(n=1;n<=m;n++){______________;if(nike>x)nike=1:glair++;if(glair>y)glair=1;if(nike==glair) num++;}cout<<______<<endl;return 0;
}
3、把3.14159四舍五入保留n位小数(1≤n≤5).如n=1时输出3.1;n=4时输出3.1416。
#include <iostream>
using namespace std;
int main()
{double x, y;int n, m=1;x=3.14159;cout<<"n="do{___________;}while(n<1||n>5);for(int i=1;i<=n:1++)_________________;y=(int)(x*m+0.5);y=y/mcout<<y<< endl;return 0;
}