Chp - 6 流程控制-循环结构
1.for循环
1.语法结构
for(初始变量; 条件表达式; 操作表达式){
循环头
}
初始化变量:通常被用于初始化一个计数器,该表达式可以使用 let(var) 关键字声明新的变量,这个变量帮我们来记录次数。
条件表达式:用于确定每一次循环是否能被执行。如果结果是 true 就继续循环,否则退出循环。
操作表达式:每次循环的最后都要执行的表达式。通常被用于更新或者递增计数器变量。当然,递减变量也是可以的。
2.执行过程
初始化变量执行多少次?
条件表达式(判断条件)、操作表达式(循环迭代)、循环体的执行顺序?
-
初始化变量,初始化操作在整个 for 循环只会执行一次。
-
执行条件表达式,如果为true,则执行循环体语句,否则退出循环,循环结束。
-
执行操作表达式,此时第一轮结束。
-
第二轮开始,直接去执行条件表达式(不再初始化变量),如果为 true ,则去执行循环体语句,否则退出循环。
-
继续执行操作表达式,第二轮结束。
-
后续跟第二轮一致,直至条件表达式为假,结束整个 for 循环。
3.执行步骤
第一步:变量初始化 i=0;// 只执行一次
第二步:循环条件判断
如果 条件是 真true,执行循环体, 执行第三步
如果 条件是 假false ,结束循环
第三步:
执行循环迭代,返回第二步
//输出0-10之间的整数(包含10)
for(let i=0;i<=10;i++){
console.log(i);;
}
//输出0-10之间的整数和(包含10)
let sum=0;//存的和
for(let i=0;i<=10;i++){
sum+=i;
}
console.log('和是'+sum);
/* 做一个小游戏,报7游戏的安全数
(轮流报数,报到能被7整除或者尾数是7都要表演节目),
报出1-100之间的安全数 4、求0到20以内所在偶数的和 */
let sum2=0;
for(let m=1;m<101;m++){
let ge=m%10;
if(m%7!=0 && ge!=7){ //判断是否被7整除或者尾数是7
console.log(m);
if (m<=20&&m%2==0) { //0到20以内所在偶数的和
sum2+=m;
}
}
}
console.log(sum2);
2.break和continue的用法
continue:结束本次循环,调到下一次循环
break:结束整个循环
// continue 关键字 退出本次(当前次的循环) 继续执行剩余次数循环
for (let i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 只要遇见 continue就退出本次循环 直接跳到 i++
}
console.log('我敲的第' + i + '个例子');
}
3.双重或多重for循环
for循环中的“循环体”可以是一个for循环吗? 可以的
外层循环每循环一次,都会把“外层循环体里内层循环结构”执行一遍
双重for循环执行过程:
for (外循环的初始; 外循环的条件; 外循环的操作表达式) {
for (内循环的初始; 内循环的条件; 内循环的操作表达式) {
需执行的代码;
}
}
外层循环每执行一次,都会让内层循环执行完成一遍
//1、一行打印五颗星星案例
/*
*****
*/
document.write('*****');
// 比如一次只能输出一颗* 每次循环向目标字符串追加一个“星星”
let (var i=0;i<5;i++){
document.write('*');
}
2、 /* 输出如下图形
*****
*****
*****
*/
//双重循环
// 外层循环 控制 行数
for (var i = 0; i < 3; i++) {
// 内层循环 控制每行星的的个数
for (var j = 0; j < 5; j++) {
document.write('*');
}
document.write('<br>');
}
3、打印直角三角形案例
/*
*
**
***
****
*****
*/
// 外层循环控制行数
for(var i=1;i<=5;i++){
// 内层循环控制每行星的个数 打印一行星
let(var j=1;j<=i;j++){
document.write('*');
}
//换行
document.write('<br>');
}
4、打印直角三角形案例
/*
*
***
*****
*******
*********
*/
// 外层循环控制星的行数
for (var i = 1; i <= 5; i++) {
// 内层循环控制每行星的个数
for (var j = 1; j <=2*i-1; j++) { document.write('*') } document.write('<br>') }
5、打印等腰三角形
/*
*
***
*****
*******
*********
*/
// 外层循环控制行数
for(var i=1;i<=5;i++){
// 内层 控制每行的空格数
for(var j=1;j<=5-i;j++){
document.write(' ')
}
//内层 控制每行星的个数
for(var k=1;k<=2*i-1;k++){
document.write('*');
} // 换行符
document.write('<br>')
}
<!-- 菱形 -->
let n=prompt("请输入打印的行数:");
let flag=true;
while(flag){
if (n%2==0) {
alert(n+"是偶数,不能打印菱形,请重新输入")
}else{
alert(n+"是奇数");
flag=false;
}
}
// Math.ceil(x) 向上取整
// Math.floor(x) 向下取整
if (flag==false) {
let str='';
for (let i = 0; i <=Math.ceil(n/2); i++) {
for (let j = 0; j <Math.ceil(n/2)-i; j++) {
str+=" ";
}
for (let k = 0; k < 2*i-1; k++) {
str+="*" ;
}
str+="<br>";
}
for(let i=Math.floor(n/2);i>=0;i--){
for(let k=1;k<=Math.ceil(n/2)-i;k++){
str+=" "
}
for(let j=1;j<=2*i-1;j++){
str+="*"
}
str+="<br>"
}
document.write(str);
}
<!--空心的等腰三角形 -->
et num= prompt("请输入总行数")
//空心等腰
let str1="";
for(let i=1;i<=num;i++){
for(let k=1;k<=num-i;k++){
str1+="  "
}
for(let j=1;j<=2*i-1;j++){
//每行的第一个 和最后一个 最后一行
if(j==1||j==2*i-1||i==num){
str1+="★"
}else{
str1+="  "
}
}
str1+="<br>"
}
document.write(str1);
九九乘法表
// 一共有9行,但是每行的个数不一样,因此需要用到双重 for 循环 // 外层的 for 循环控制行数 i ,循环9次 ,可以打印 9 行
// 内层的 for 循环控制每行公式 j
// 核心算法:每一行 公式的个数正好和行数一致, j <= i;
// 每行打印完毕,都需要重新换一行
let str='';
for (let a = 1; a <= 9; a++) { // 外层循环控制行数
for (let b = 1; b <=a; b++) { // 里层循环控制每一行的个数
str=a+'x'+b+'='+a*b+'\t';
document.write(str)
}
document.write('<br>');
var str = '';
for (var i = 1; i <= 9; i++) { // 外层循环控制行数
for (var j = 1; j <= i; j++) { // 里层循环控制每一行的个数
j <= i
str += j + '×' + i + '=' + i * j + '\t';
}
str += '\n';
}
console.log(str);
4.while循环
while循环语法结构
while (条件表达式){
//循环结构
}
执行过程:
当循环条件为true时,则执行循环体,当条件为false时,结束整个循环
注意:若循环条件永远为true时,则会出现思循环,根据实际开发需要,在循环体中设置出口,及循环结束的条件
//计算100以内奇数的和
let i=0;
let sum=0;
while(i<101;){
if(i%2!=0){
sum+=i;
}
i++
}
console.log("奇数和为:"+sum);
//3.珠峰海拔8848米,现在有足够大的纸,厚度是0.01米,折多少次高度可以超过珠穆朗玛峰。
let sumhou=0; let cishu=1;
let sub=1;
while (sumhou<=8848000) {
sub=sub*cishu;
sumhou=0.01*2*sub;
cishu++;
}
console.log("需要折叠:"+cishu);
5.do while循环
do while循环语法结构
执行过程:
do {
//循环代码
}(条件表达式)
do-while循环和while循环的区别
do-while循环和while循环相比,会在判断条件表达式之前无条件的先去执行一次循环体后再判断条件
<script>
var i=0;
do{
document.write(i +' hello world <br>');
i++;
} while (i>3);
// 0 hello world
</script>
两者对比 前者输出一次语句
<script>
var i=0;
while(i>3){
document.write(i+' hello world <br>');
i++;
}
// null
</script>
6.条件的扩展和for循环扩展:
1. 条件扩展
if(true){
console.log('hello');
}else{
console.log('world');
}
// {}只有一句代码{}是可以省略的
if(false)console.log('hello');
else console.log('world');
2. for循环扩展
//for 省略条件
// 条件一 循环条件初始化省略
for(var i=0;i<10;i++){
}
var i = 0
for (; i < 10; i++) {
console.log(i);
}
// 条件二 判断条件 省略 相当于第二个条件是true 死循环
var i = 0
for (; ; i++) {
console.log(i);
}
// 解决死循环的问题,找到一个出口,结束循环
var i = 0
for (; ; i++) {
console.log(i);
//0 1 2 3 4 5
// 出口
if(i==5){
break; //结束当前的整体循环
}
}
var i = 0
for (; ; i++) {
// 出口
if(i==5){
break;//结束当前的整体循环 ,break后的代码不再执行
console.log('good');
}
console.log(i);
//0 1 2 3 4
}
console.log('very good');
// 省略条件3 i++
var i = 0
for (; ;) {
i++;
// 出口
if(i==5){
break;//结束当前的整体循环 ,break后的代码不再执行
console.log('good');
}
console.log(i); //1 2 3 4
}
console.log('very good');
Date 日期
let date= new Date();// date 实例对象
//1.创建日期对象
let date=new Date();//今天的时间
console.log(date);
//2024-10-1 12:00:00 2024/10/1 12:00:00 2024 10 1 12:00:00
let date1=new Date("2024-10-1 12:00:00");// 指定的时间
console.log(date1);
// 很少用 毫秒
let date2=new Date(1727171842176);
console.log(date2);
var d = new Date(2024, 9, 24, 17, 59, 58);
console.log(d);//Thu Oct 24 2024 17:59:58 GMT+0800 (中国标准时间)
Math对象
Math对象 算术 数学
Math.属性
Math.方法();
//属性 PI Math.PI π值
//方法
(1) Math.ceil(x) 向上取整 ceil(x) 对数进行上舍入。
(2) Math.floor(x) 向下取整 floor(x) 对 x 进行下舍入。
(3) Math.round(x) 四舍五入。
(4)Math.random() 随机数 [0,1)
找到一个区间 [10,30]之间的随机数
(5)max(x,y,z,...,n) 返回 x,y,z,...,n 中的最高值。
min(x,y,z,...,n) 返回 x,y,z,...,n中的最低值。
(6)pow(x,y) 返回 x 的 y 次幂。 x**y
sqrt(x) 返回数的平方根
abs(x) 返回 x 的绝对值
console.log(Math.PI);
let r = 10;
console.log("圆的面积:" + Math.PI * r * r);
//Math.ceil()、 Math.floor()、 parsenInt()、 Math.round()
console.log(Math.ceil(3.14), Math.ceil(-3.14));//4 -3
console.log(Math.floor(3.94), Math.floor(-3.14));//3 -4
console.log(parseInt(3.94), parseInt(-3.94));//3 -3
console.log(Math.round(3.84), Math.round(3.46));//4 3
for (let i = 0; i < 10; i++) {
console.log(Math.random()); // 0~1内的随机数
console.log(getRndInteger(10,30));//10~30内的随机数
}
function getRndInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
//返回最大值
console.log(Math.max(10,20,"50",30));
let a=+prompt("输入一个数");
let b=+prompt("输入一个数");
let c=+prompt("输入一个数");
console.log(Math.max(a,b,c));
let max=a;
if(max<b){
max=b;
}
if(max<c){
max=c;
}
console.log(max);
console.log(Math.min(200,80,100)); //返回最小值
console.log(Math.pow(2,3),2**3); //返回 x 的 y 次幂