一、while语句的应用
(第44课 角谷猜想)参考视频1
问题:对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1,这就是由日本数学家角谷静夫发现的角谷猜想,又称为3n+1猜想。如取一个数字6,根据上述公式,得出6→3→10→5→16→8→4→2→1。试编一程序,验证角谷猜想。
流程图:
二、双精度实数double及科学计数法
(第45课 蝴蝶效应)参考视频1
一只蝴蝶在巴西轻拍翅膀,可以导致一个月后美国得克萨斯州的一场龙卷风,一只海鸥扇动翅膀足以改变天气,这是美国气象学家爱德华·诺顿·罗伦兹在1963年提出的蝴蝶效应,表明初始条件的极小偏差,将会引起结果的极大差异。n的初始值设为1,让它产生极小偏差。减0.01后得到的值是0.99,加0.01后得到的值是1.01,以后每次得到的值都是自己乘自己。试编一程序算一算,第15次后分别是多少?
流程图如图:
其中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。
三、分数化为小数
(第46课 精益求精)参考视频1
问题:在科学研究的领域,对数据的精度求非高,有时需计算到小数点后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;
}