2019.7.24循环结构以及昨天的预习题。

预习题:

1、计算1-100之间的和 积
2、在页面中输出 九九乘法表

1、

var sum =0,i=1;

for(;;){
sum += i;
i++;
if(i==100){
break;
}
console.log('1-100的和='+ sum);

2、

var result ="";
for(var i =1;i<=6;i++){//控制行数
for(var j =1;j<=6;j++){//控制每一列
result +="*";
}
result +=" ";

}
console.log(result);

循环结构:

// 循环:一遍又一遍的重复执行相同或相似的代码
/*特点:
1、循环条件 规定循环的执行次数
2、循环的操作 要执行的相同或显示的语句*/
// 1、while循环结构
/*while(条件){
循环体
}
1)判断 循环条件
2)循环条件为真 true 执行循环体
再判断条件,如果条件为真 执行循环体
....
3)循环条件为假 false 则结束循环操作*/

// 循环的三要素
/*
1、循环变量
2、循环条件 满足时才执行循环体
3、循环变量的变化 变化是趋向于条件的不满足 趋向于循环的结束
*/

while循环

// 循环生产随机数 1-10之间
// 接受输入猜数字 输入的数字比随机数大 提示“猜大了”;反之“猜小了” ...直到输入的数字猜对了为止
// 输入exit 则退出游戏
/*
猜得次数(无数次)
猜的数和随机数不相等
猜的数和随机数相等*/
var r = parseInt(Math.random()*10+1) ;//Math.random()生产的0-1之间的随机数
// console.log(r);
while(true){
// 接受用户输入数字
var input = prompt("请输入你猜的数字:");

if( input == "exit"){
// 主动退出游戏
alert("放弃了,拜拜!");
break;
}

// 将 input 和 r 做比较
if(input > r){
alert('猜大了...');
}else if(input < r){
alert('猜小了....');
} else {
alert('猜对了!');
// 结束循环 关键字 break
break;
}
}

do while 循环

/*语法:
do{
循环体
}while(条件);
流程:
1、先执行循环体
2、判断循环条件
如果循环条件成立true,则继续执行循环操作
如果训话条件不成立false,则退出循环
*/
// 循环生产随机数 1-10之间
// 接受输入猜数字 输入的数字比随机数大 提示“猜大了”;反之“猜小了” ...直到输入的数字猜对了为止
// 输入exit 则退出游戏
function guessNum(){
var r = Math.random()*10+1 ;
r = r | 0;
do{
var input = prompt("请输入一个数");
// 将 input 和 r 做比较
if(input > r){
alert('猜大了...');
}else if(input < r){
alert('猜小了....');
} else {
alert('猜对了!');
// 结束循环 关键字 break
break;
}
}while(input != "exit");
}
guessNum();

// while 和 do while的区别
// 1、while:先判断,后执行 可能一次都不执行循环体
// 2、do while:先执行,后判断 至少会执行一次循环体

for循环

// 语法:
// for(达表示1;表达式2;表达式3){
// 循环体
// }
// 表达式1:声明循环变量 可以省略 循环变量需要在循环开始之前声明好
// 表达式2:循环条件的判断 可以省略 在循环体中添加结束循环的判断 否则就会形成死循环
// 表达式3:更新循环变量 可以省略 在循环体中添加循环变量的更新语句
// 三个表达式可以省略,但是;不能省略
// 流程:
// 1、执行表达式1 申明循环变量
// 2、判断循环条件是否成立 成立则执行循环体
// 3、执行表达式3,更新循环变量
// 执行表达式2 判断循环条件是否成立 成立则执行循环体
// 表达式2执行的结果为false 则终止循环
// 适用于:固定循环次数

1 创建一个函数,返回1+1/2+1/3+1/4+...+1/999的和

function fun1(){
var sum = 0;
// 从1开始到999结束
/*for(var i = 1;i<1000;i++){
sum += 1/i;
}*/
// 从999开始到1结束
for(var i=999 ; i>=1 ;i--){
sum += 1/i;
}
console.log('1+ 1/2 + 1/3 + 1/ 4+...+ 1/999 的和'+sum);
}

//2、定义一个函数,判断素数
function fun2(){
// 接受输入一个数字
var num = Number(prompt("请输入一个数"));
// 素数的条件:只能被1和自身整除的数
// 从2开始判断 到num-1 9 9%2 9%3 9%4 9%5 9%6 9%7 9%8 50
var isSu = true;//假设 默认该数字就是素数
for(var i=2;i<=num/2;i++){
// 判断num取i的余数是否为0
if(num%i == 0){
// 不是素数
isSu = false;
// 直接退出循环
break;
}
}

if(isSu){//根据开关来判断这个数到底是不是素数
console.log(num+'是素数');
}else{
console.log(num+'不是素数');
}

}

//3、有一个对兔子,从出生的第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死,问某个月的兔子总和是多少?
function fun3(){
/*
月份 兔子总数
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
斐波那契数列
规律:每个数都是前面两个数的和
n1 + n2 = n3
n2 + n3 = n4
n3 + n4 = n5

*/
/*var n1 =1,n2 =1;
console.log(n1,n2);
for(var i=1;i<9;i++){
n1 = n1 + n2;
n2 = n1 + n2;
console.log(n1,n2);
}*/
var n = Number(prompt("请输入需要查看兔子总数的月份:"));
// var sum = f(n);
var sum = fun4(n);
console.log('兔子的总数为:'+sum);
}
// 递归算法
function f(n){
if(n==1 || n==2){
return 1;
}
return f(n-1)+f(n-2);
}
/*
递归:在函数内,又调用自己
递归调用的内层函数,是在外层函数还未结束的时候已经开始了内层函数 ,外层函数的调用就会被阻塞
缺点:算法复杂度太高,且浪费内存
大部分的递归,都可以使用循环来的替代
*/
function fun4(n){
if(n==1 || n==2){
return 1;
}else{
var f1 = 1,f2 = 1,fn;
for(var i =1;i<=n-2;i++){
fn = f1+f2;
f1 = f2;
f2 = fn;
}
return fn;
}
}

原文地址:https://www.cnblogs.com/awei313558147/p/11246207.html