1.1循環(huán)
循環(huán)的目的:在實際問題中,有許多具有規(guī)律性的重復(fù)操作,因此在程序中要完成這類操作就需要重復(fù)執(zhí)行某些語句
js中循環(huán)主要有三種類型的循環(huán)語句:
- for循環(huán)
- while循環(huán)
- do....while循環(huán)
1.2for循環(huán)
在程序中,一組被重復(fù)執(zhí)行的語句被稱之為循環(huán)體,能否繼續(xù)重復(fù)執(zhí)行,取決于循環(huán)的最終條件。由循環(huán)體及循環(huán)的終止條件組成的語句,被稱之為循環(huán)語句。
// 1. for 重復(fù)執(zhí)行某些代碼, 通常跟計數(shù)有關(guān)系
// 2. for 語法結(jié)構(gòu)
// for (初始化變量; 條件表達式; 操作表達式) {
// // 循環(huán)體
// }
// 3. 初始化變量 就是用var 聲明的一個普通變量, 通常用于作為計數(shù)器使用
// 4. 條件表達式 就是用來決定每一次循環(huán)是否繼續(xù)執(zhí)行 就是終止的條件
// 5. 操作表達式 是每次循環(huán)最后執(zhí)行的代碼 經(jīng)常用于我們計數(shù)器變量進行更新(遞增或者遞減)
// 6. 代碼體驗 我們重復(fù)打印100局 你好
for (var i = 1; i <= 100; i++) {
console.log('你好嗎');
}
for 循環(huán)的執(zhí)行過程
- 首先執(zhí)行里面的計數(shù)器變量 var i = 1 .但是這句話在for 里面只執(zhí)行一次 index
- 去 i <= 100 來判斷是否滿足條件, 如果滿足條件 就去執(zhí)行 循環(huán)體 不滿足條件退出循環(huán)
- 最后去執(zhí)行 i++ i++是單獨寫的代碼 遞增 第一輪結(jié)束
- 接著去執(zhí)行 i <= 100 如果滿足條件 就去執(zhí)行 循環(huán)體 不滿足條件退出循環(huán) 第二輪
// for 循環(huán)可以執(zhí)行相同的代碼
for (var i = 1; i <= 10; i++) {
console.log('媳婦我錯了');
}
// 我們可以讓用戶控制輸出的次數(shù)
var num = prompt('請您輸入次數(shù)');
for (var i = 1; i <= num; i++) {
console.log('媳婦我錯了');
}
- for 循環(huán)可以重復(fù)執(zhí)行不同的代碼 因為我們有計數(shù)器變量 i 的存在 i每次循環(huán)值都會變化
我們想要輸出1個人 1~100歲
for (var i = 1; i <= 100; i++) {
if (i == 1) {
console.log('這個人今年1歲了,他出生了');
} else if (i == 100) {
console.log('這個人今年100歲了,他死了');
} else {
console.log('這個人今年' + i + '歲了');
}
- for 循環(huán)重復(fù)執(zhí)行某些操作 比如說我們做了100次加法運算
求 1~100 之間的整數(shù)累加和
需要循環(huán)100次,我們需要一個計數(shù)器 i
我們需要一個存儲結(jié)果的變量 sum ,但是初始值一定是 0
核心算法:1 + 2 + 3 + 4 .... ,sum = sum + i;
var sum = 0; // 求和 的變量
for (var i = 1; i <= 100; i++) {
// sum = sum + i;
sum += i;
}
console.log(sum);
1.2.1for循環(huán)案例
// 1. 求1-100之間所有數(shù)的平均值 需要一個 sum 和的變量 還需要一個平均值 average 變量
var sum = 0;
var average = 0;
for (var i = 1; i <= 100; i++) {
sum = sum + i;
}
average = sum / 100;
console.log(average);
// 2. 求1-100之間所有偶數(shù)和奇數(shù)的和 我們需要一個偶數(shù)的和變量 even 還需要一個奇數(shù) odd
var even = 0;
var odd = 0;
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
even = even + i;
} else {
odd = odd + i;
}
}
console.log('1~100 之間所有的偶數(shù)和是' + even);
console.log('1~100 之間所有的奇數(shù)和是' + odd);
// 3. 求1-100之間所有能被3整除的數(shù)字的和
var result = 0;
for (var i = 1; i <= 100; i++) {
if (i % 3 == 0) {
// result = result + i;
result += i;
}
}
console.log('1~100之間能夠被3整數(shù)的數(shù)字的和是:' + result);
1.2.2求學(xué)生成績案例
// 彈出輸入框輸入總的班級人數(shù)(num)
// 依次輸入學(xué)生的成績( 保存起來 score), 此時我們需要用到
// for 循環(huán), 彈出的次數(shù)跟班級總?cè)藬?shù)有關(guān)系 條件表達式 i <= num
// 進行業(yè)務(wù)處理: 計算成績。 先求總成績( sum), 之后求平均成績( average)
// 彈出結(jié)果
var num = prompt('請輸入班級的總?cè)藬?shù):'); // num 總的班級人數(shù)
var sum = 0; // 求和的變量
var average = 0; // 求平均值的變量
for (var i = 1; i <= num; i++) {
var score = prompt('請您輸入第' + i + '個學(xué)生成績');
// 因為從prompt取過來的數(shù)據(jù)是 字符串型的需要轉(zhuǎn)換為數(shù)字型
sum = sum + parseFloat(score);
}
average = sum / num;
alert('班級總的成績是' + sum);
alert('班級平均分是:' + average);
1.2.3一行打印五個星星
// 一行打印五個星星
// console.log('★★★★★');
// for (var i = 1; i <= 5; i++) {
// console.log('★');
// }
// var str = '';
// for (var i = 1; i <= 5; i++) {
// str = str + '★';
// }
// console.log(str);
var num = prompt('請輸入星星的個數(shù)');
var str = '';
for (var i = 1; i <= num; i++) {
str = str + '★'
}
console.log(str);
1.3雙重for循環(huán)
- 雙重for循環(huán) 語法結(jié)構(gòu)
for (外層的初始化變量; 外層的條件表達式; 外層的操作表達式) {
for (里層的初始化變量; 里層的條件表達式; 里層的操作表達式) {
執(zhí)行語句; }
} - 我們可以把里面的循環(huán)看做是外層循環(huán)的語句
- 外層循環(huán)循環(huán)一次, 里面的循環(huán)執(zhí)行全部
- 代碼驗證
for (var i = 1; i <= 3; i++) {
console.log('這是外層循環(huán)第' + i + '次');
for (var j = 1; j <= 3; j++) {
console.log('這是里層的循環(huán)第' + j + '次');
}
}
1.3.1打印五行五列星星
// 打印五行五列星星
var str = '';
for (var i = 1; i <= 5; i++) { // 外層循環(huán)負(fù)責(zé)打印五行
for (var j = 1; j <= 5; j++) { // 里層循環(huán)負(fù)責(zé)一行打印五個星星
str = str + '★';
}
// 如果一行打印完畢5個星星就要另起一行 加 \n
str = str + '\n';
}
console.log(str);
1.3.2打印n行n列星星
// 打印n行n列的星星
var rows = prompt('請您輸入行數(shù):');
var cols = prompt('請您輸入列數(shù):');
var str = '';
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
str = str + '★';
}
str += '\n';
}
console.log(str);
1.3.2打印倒三角型
// 打印倒三角形案例
var str = '';
for (var i = 1; i <= 10; i++) { // 外層循環(huán)控制行數(shù)
for (var j = i; j <= 10; j++) { // 里層循環(huán)打印的個數(shù)不一樣 j = i
str = str + '★';
}
str += '\n';
}
console.log(str);
1.3.3打印九九乘法表
九九乘法表
- 一共有9行,但是每行的個數(shù)不一樣,因此需要用到雙重 for 循環(huán)
- 外層的 for 循環(huán)控制行數(shù) i ,循環(huán)9次 ,可以打印 9 行
- 內(nèi)層的 for 循環(huán)控制每行公式 j
- 核心算法:每一行 公式的個數(shù)正好和行數(shù)一致, j <= i;
- 每行打印完畢,都需要重新?lián)Q一行
var str = '';
for (var i = 1; i <= 9; i++) { // 外層循環(huán)控制行數(shù)
for (var j = 1; j <= i; j++) { // 里層循環(huán)控制每一行的個數(shù) j <= i
// 1 × 2 = 2
// str = str + '★';
str += j + '×' + i + '=' + i * j + '\t';
}
str += '\n';
}
console.log(str);
1.4while循環(huán)
// 1. while 循環(huán)語法結(jié)構(gòu) while 當(dāng)...的時候
// while (條件表達式) {
// // 循環(huán)體
// }
// 2. 執(zhí)行思路 當(dāng)條件表達式結(jié)果為true 則執(zhí)行循環(huán)體 否則 退出循環(huán)
// 3. 代碼驗證
var num = 1;
while (num <= 100) {
console.log('好啊有');
num++;
}
// 4. 里面應(yīng)該也有計數(shù)器 初始化變量
// 5. 里面應(yīng)該也有操作表達式 完成計數(shù)器的更新 防止死循環(huán)
1.4.1while循環(huán)案例
// 1. 打印人的一生,從1歲到100歲
var i = 1;
while (i <= 100) {
console.log('這個人今年' + i + '歲了');
i++;
}
// 2. 計算 1 ~ 100 之間所有整數(shù)的和
var sum = 0;
var j = 1;
while (j <= 100) {
sum += j;
j++
}
console.log(sum);
// 3. 彈出一個提示框, 你愛我嗎? 如果輸入我愛你,就提示結(jié)束,否則,一直詢問。
var message = prompt('你愛我嗎?');
while (message !== '我愛你') {
message = prompt('你愛我嗎?');
}
alert('我也愛你啊!');
1.5do while循環(huán)
// 1.do while 循環(huán) 語法結(jié)構(gòu)
do {
// 循環(huán)體
} while (條件表達式)
// 2. 執(zhí)行思路 跟while不同的地方在于 do while 先執(zhí)行一次循環(huán)體 在判斷條件 如果條件表達式結(jié)果為真,則繼續(xù)執(zhí)行循環(huán)體,否則退出循環(huán)
// 3. 代碼驗證
var i = 1;
do {
console.log('how are you?');
i++;
} while (i <= 100)
// 4. 我們的do while 循環(huán)體至少執(zhí)行一次
1.4.1do while循環(huán)案例
// 1. 打印人的一生,從1歲到100歲
var i = 1;
do {
console.log('這個人今年' + i + '歲了');
i++;
} while (i <= 100)
// 2. 計算 1 ~ 100 之間所有整數(shù)的和
var sum = 0;
var j = 1;
do {
sum += j;
j++;
} while (j <= 100)
console.log(sum);
// 3. 彈出一個提示框, 你愛我嗎? 如果輸入我愛你,就提示結(jié)束,否則,一直詢問。
do {
var message = prompt('你愛我嗎?');
} while (message !== '我愛你')
alert('我也愛你啊');
1.6continue
continue關(guān)鍵字,退出本次循環(huán)(當(dāng)前次的循環(huán))繼續(xù)執(zhí)行剩余次數(shù)循環(huán)
for (var i = 1; i <= 5; i++) {
if (i == 3) {
continue; // 只要遇見 continue就退出本次循環(huán) 直接跳到 i++
}
console.log('我正在吃第' + i + '個包子');
}
// 1. 求1~100 之間, 除了能被7整除之外的整數(shù)和
var sum = 0;
for (var i = 1; i <= 100; i++) {
if (i % 7 == 0) {
continue;
}
sum += i;
}
console.log(sum);
1.7break
退出整個循環(huán)
for (var i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
console.log('我正在吃第' + i + '個包子');
}