17 C++循环结构-(do-while循环)2

一、实例

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;   //找出最大公约数后,赋值给j
      break; //退出循环
    }
  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/m
 cout<<y<< endl;
 return 0;
}
posted @ 2025-02-05 15:51  gdyyx  阅读(93)  评论(0)    收藏  举报