15C++循环结构-while循环(2)

一、while语句的应用

问题:对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1,这就是由日本数学家角谷静夫发现的角谷猜想,又称为3n+1猜想。如取一个数字6,根据上述公式,得出6→3→10→5→16→8→4→2→1。试编一程序,验证角谷猜想。
流程图:

#include <iostream> 
using namespace std; 
int main()
{
  long long  x,count=0;
  cout<<"x=";
  cin>>x;
  while(x!=1)
  {
    cout<<x<<"---->";
    if(x%2==1) x=x*3+1;
    else x/=2;
    count++;
  }
  cout<<x<<endl;
  cout<<"步数:"<<count<<endl;
  return 0;   
}

练习:

(1)格莱尔在参加信息学社团的学习过程中,想在因特网上与他人行即时讨论、交流,则下列工具中最适合的是()。

   A.E-mail(电子邮件)      B.BBS(电子公告栏)      C.QQ      D.博客

(2)阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
  int n, x, s=0;
  cin>>n;
  x=n;
  while(x>=1)
 {
    if(n%x==0)++s;
    --x;
    cout <<s<< endl;
  return 0;
}

输入:8
n,x,s输出:_____________
3.完善程序。
计算2020-1+2-3+4-5+··±n的值(n为奇数时减,偶数时加)。

#include <iostream>
using namespace std;
int main()
{
  int i, sum, n;
  _______________;
  cout <<"n=";
  cin>>n;
  i=l;
  while(i<=n)
  {
    if(_____)
      sum-=i;
    else
      sum+=i;
    i++;
  }
  cout << sum << endl;
  return 0;
}

二、双精度实数double及科学计数法

一只蝴蝶在巴西轻拍翅膀,可以导致一个月后美国得克萨斯州的一场龙卷风,一只海鸥扇动翅膀足以改变天气,这是美国气象学家爱德华·诺顿·罗伦兹在1963年提出的蝴蝶效应,表明初始条件的极小偏差,将会引起结果的极大差异。n的初始值设为1,让它产生极小偏差。减0.01后得到的值是0.99,加0.01后得到的值是1.01,以后每次得到的值都是自己乘自己。试编一程序算一算,第15次后分别是多少?
流程图如图:

#include <iostream>
using namespace std;
int main()
{
  int n,i;
  double  n1,n2;
  n=1;
  n1=n-0.01;
  n2=n+0.01;
  cout<<"   "<<n1;
  cout<<"   "<<n2<<endl; 
  i=1;
  while(i<=15)
  {
    n1*=n1;
    n2*=n2;
    cout<<i<<"  "<<n1<<"   "<<n2<<endl;
    i++;
  }
  return 0;
}

运行结果:
1 0.9801 1.0201
2 0.960596 1.0406
........
14 3.06922e-072 6.32977e+070
15 9.42012e-144 4.0066e+141

其中1.15048e-009、7.08229e+008等数字是什么意思啊?

实数又称为浮点数,类型包括正实数、负实数、实数零,如12.8、-6.3、0.0都是实数。其中0.0是实数零,而0是整数零。实数有两种表示方法,一种是日常表示法,如3.14159、-0.6等;另一种是科学计数法,如7.9e+2、6.18e-1等。
科学计数法是采用指数形式表示实数,每个数由只含一位整数的数和指数两部分组成。如:

1.15048e-009=0.00000000115048(小数点向左移动9位)
7.08229e+008=708229000(小数点向右移动8位)
double为双精度实数(双精度浮点数),可表示的范围为-1.79e308~1.79e308。

练习:

(1)用科学计数法表示2600,以下( )是正确的。

   A.2.6e+2      B.2.6e+3      C.2.6e-2      D.2.6e-3

(2)阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
  int n, x, s=0;
  cin>>n;
  x=1;
  while(x<=n)
 {
   if(x%3==1)s+=x;
   ++x;
  }
  cout <<s<< endl;
  return 0;
}

输入:20
n,x,s输出:_____________
(3)完善程序。
韩信带1500名士兵打仗,战死四五百人,幸存的士兵站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人,算一算幸存的兵至少有多少人?

#include <iostream>
using namespace std;
int main()
{
  int i;
  i=1000;
  while(true)
  {
    if(i%3==2&&i%5==4&&i%7==6) _____________;
    i++;
  }
  cout <<___________<<endl;
  return 0;
}

三、分数化为小数

问题:在科学研究的领域,对数据的精度求非高,有时需计算到小数点后10位,甚至小数点后100位,做到精益求精。
试编一程序,把分数1/7转化成小数的形式,要求计算结果精确到小数点100位。
先看下尼克初学时编写的程序:

#include<iostream>
using mamespace sid;
int main()
{
  cout<<1/7<<endl;
  cout<< 1.0/7<endl;
  reurn 0;
}

其中(double)1/7。运用了强制类型转换运算符,将结果转换成双精度浮点数,但还不能输出小数点后100位,要解决此问题,我们先来研究一下1/7的运算过程。
1÷7=0·········1
1×10÷7=1······3(商1,小数点后第1位上的数字)
3×10÷7-4······2(商4,小数点后第2位上的数字)
2×10÷7=2······6(商2,小数点后第3位上的数字)
把上一次产生的余数扩大10倍,再除以7,得到的商就是当前数位上的数字。流程图如图:

#include <iostream>
using namespace std;
int main()
{
  int m,n,r,i=1;
  m=1;
  n=7;
  cout<<m/n<<'.';
  r=m%n;
  while(i<=100)
  {
    cout<<(r*10)/n;
  	r=(r*10)%n;
  	i++;
  }
  return 0;	
}

#include <iostream> 
using namespace std;
int main()
{
  int a,b,i;
  cout<<"0.";
  i=1;
  a=1;
  while(i<=100)
  {
    a*=10;
    b=a/7; 
    cout<<b;
    a%=7;
    i++;
  } 
  return 0;
}

练习:

(1)在计算机内部,一切信息存取、处理和传递的形式都是( )。

   A.ASCII码        B.BCD码         C.二进制        D.十六进制

(2)阅读程序写结果:

#include<iostream>
using namespace std;
int main()
{
  int a, b, n, num=0;
  cin>>a>>b>>n;
  while(a<=b)
  {
   if(a%n==0)num++;
   a++;
   b=-10;   
  }
  cout << num <<endl;
  return 0 ;
}

输入:1 100 5
a,b,n,num输出:_______________
(3)完善程序。
输入三个正数a、b、n,输出a÷b的值,要求计算结果精确到小数点后n(1≤n≤200)位。如输人1 3 4,出0.33;输入2017 27 10,输出74.7037037037。

#include<iostream>
using namespace std;
int main()
{
 int a,b,n,ans,i;
 cout<<"a b n=";
 cin>>a>>b>>n;
 ____________;
 cout<<ans;
 cont<<'.';
 a%=b;
 for(i=1;i<=n;i++)
 {
  ans=(a*10)/b;
  cout<<ans;
  _________;
 }
return 0;
}
posted @ 2025-01-09 10:28  gdyyx  阅读(46)  评论(0)    收藏  举报