学习Js-day03
学习Js的第三天,重新学习了一下大一的C语言循环部分🤡,老刘的指导历历在目。
循环while,它的兄弟循环do-while,循环for,如何跳出循环break和continue,以及时间复杂度(有点云里雾里),学数据结构的时候没好好学😇,现在就记得名字了,需要好好百度学习一下🤧
循环语句
简单来说,循环就是周而复始的重复一件事,在各种条件的加持下,变量发生数据迭代,从而衍生出一系列的数据,达到某一个节点就可以break,跳出循环,广泛用于大量数据的处理。我们需要注意的是,要全力避免死循环,不至于造成程序卡死甚至崩溃等问题。
循环分类:分类种类很多,如for-in,for-each等,这次学习了其他计算机语言通用的三种方式,属于通吃行为。
while循环
while循环语法格式:
while(条件表达式) {
迭代量;
执行代码;
}
注意:
1.遵守语法格式,只能更改内容和执行代码;
2.表达式可以是常量,变量或者其他表达式,该表达式会被强制转换为boolean类型, 可以理解表达式就是循环的条件, 条件成立则进入括号{}里面执行代码,否则不进入;
3.执行代码可以有多行, {}所包含的称为循环体;
4.表达式不要一直是true, 避免死循环;
5.while循环的顺序是: 先判断表达式是否为true, 若true则执行执行代码, 然后再继续判断表达式是否为true, …. 直到判断表达式为false才会跳出循环, 执行while后面的代码
示例:
// 1加到100
var number = 0;
while(number<100){
number ++;
sum += number;
}
console.log(sum);
// 100加到1
var i = 100;
var sum = 0;
while(i>=1){
sum += i;
i--;
}
console.log(sum);
打印100以内7的倍数
var i = 1;
var sum = 7;
while(sum<100){
console.log(sum);
i += 1;
sum = i*7;
}
// 打印100以内的奇数
var i = 1;
var number = 0
while(i<100){
console.log(i);
i +=2;
}
// 1.打印100以内偶数的和
var i = 0;
var sum = 0;
while(i<100){
i += 2;
sum += i;
}
console.log(sum);
//2. 打印100以内偶数的和
var i = 0;
var sum = 0;
while(i<100){
i++;
if(!i%2){
sum+=i;
}
}
console.log(sum);
do-while循环
do-while循环语法格式:
do {
执行代码;
} while(表达式)
注意:
1.作为兄弟,他的书写格式和while类似。
2.之前的区别就是判断条件的先后不一致,while是先判断条件,而do-while则是先执行代码,不管条件满不满足,do-while都至少执行一次循环体。
示例:
<script>
//对应while来说,唯一的区别是先做后判断,至少走一次
/* var 初识值 = 值
do {
执行的代码
迭代量变化
}while(条件) */
var isEmpty = true
do {
console.log('有人吗');
isEmpty = false;
}while(isEmpty)
//1+……100
var i = 0;
var sum = 0;
do {
i++;
sum +=i;
}while(i<100)
console.log(sum);
</script>
<!-- while和do while 的区别 -->
<script>
// 1.while是先判断后执行 do while 先执行后判断
// 2.do while 最少执行一次 while最少执行0次
// 常用while来写一些执行多次的内容, do while规定必须要执行的时候
</script>
for循环
for循环语法格式:
for (表达式1; 表达式2; 表达式3) {
执行代码;
}
注意:
1, 表达式1: 循环初始值, (可以不填)
2, 表达式2: 循环条件
3, 表达式3: 迭代量
4, 两个分号必须写.
5.省略条件和迭代量,必然是死循环
示例:
<!-- <script>
//省略条件和迭代量 必定是死循环
for(初始值;条件;迭代量){
// 执行的代码 跟if一样如果你执行的代码只有一行就可以省略{}
}
</script> -->
<script>
// 1+……100
var sum = 0;
for(var i=0;i<=100;i++){
sum +=i;
}
console.log(sum);
</script>
<script>
//O(1)每行只执行一遍
var i = 0;
i++;
if(i<10){
console.log(i);
}
// O(logN)
var i = 1//由ii和2决定
while(i<100){
i*=2
}
// O(n)由对应的一个值决定的
for(var i=0;i<100;i++){
console.log('我执行了' +i+ '遍');
}
// 时间复杂度 O(1) <O(logN)<O(n)
</script>
<script>
//打印四行四列的图形
// 循环嵌套(将多个循环嵌套在一起)
var row = 4;
var col = 4;
for(var i=0;i<row;i++){
var j=0;
var rowStr = ''
while (j<col){
j++;
rowStr+='*';
}
document.write(rowStr+'<br/>');
}
</script>
其中循环嵌套:
一个循环语句又包含另一个循环语句,三种循环都可以相互嵌套,以下的循环语句都是合理的。

break关键字
break的功能:
1,在switch语句中使流程跳出switch结构。
2,在循环语句中使流程跳出当前的循环
注意: 1, 如果已执行break语句,就不会执行循环体中位于break后的语句。
2, 在多层循环中,一个break语句只向外跳一层 。
示例:
<script>
// 判断一个数是不是合数
var number = prompt();
for(var i=2;i<number;i++){
if(number%i==0){
console.log('当前数为合数');
break;
}
}
</script>
<script>
// 判断一个数是不是素数
var count = 0;
var number = prompt();
for(var i=2;i<number;i++){
if(number%i==0){
count++;
break;
}
}
if(count==0){
console.log('当前数为素数');
}
</script>
continue关键字
continue的功能:
只能在循环语句中使用,使本次循环结束,即跳过循环体中下面尚未执行的语句,接着进行下次是否执行循环的判断。 注意: 1, continue语句只能用在循环里。
2, 对于 while 和 do-while 循环,continue 语句执行之后的动作是条件判断;对于 for 循环,随后的动作是变量更新。
示例:
<script>
// 求整数1-100的累加值,要求跳过所有各位为3的数
var sum = 0;
for(var i=1;i<=100;i++){
if(i%10==3){
continue//跳过本次循环,开始下一次循环
}
sum+=i;
}
console.log(sum);
</script>
课后练习:
1<script>
//1, 一个新入职,月工资为2000元的员工,每年涨当年工资5%,20年后的月工资是多少?
var i=1;
sum = 2000;
while(i<20){
i++;
sum*=1.05
}
console.log('20年后工资为'+sum);
</script>
2<script>
//2, 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。
// 问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
var sum = 15;
var i =0;
while(sum<50){
sum+=5;
i++
}
console.log(i);
</script>
3<script>
//3, 打印100–200之间所有能被3或者7整除的数
for(var i=100;i<200;i++){
if(i%3==0 || i%7==0){
console.log(i);
}
}
</script>
4<script>
//4.计算10的阶乘 (1*2*3*4*5*6*7*8*9*10 n的阶乘1*2……*n)
var sum = 1;
for(i=2;i<10;i++){
sum *=i
}
console.log(sum);
</script>
5<script>
// 5.计算1+3+5+...+99的和
var sum = 0;
for(i=1;i<100;i++){
if(i%2==0){
continue;
}
sum +=i;
}
console.log(sum);
</script>
6<script>
//6.99乘法表
var sum = 0;
for(var i=0;i<=9;i++){
var str = ''
for(var j=0;j<=i;j++){
str += j + '*' + i + '=' + i*j +'\t'
}
document.write(str);
}
</script>
7<script>
//7.输出20~80之间能被3整除的整数, 每行5个
var str ='';
var count = 0;
for(var i=20;i<=80;i++){
if(i%3==0){
count++;
str += i+'\t';
if(count%5==0 && count!=0){
console.log(str);
str =''
}
}
}
</script>
8<script>
//8.打印1000~2000年中所有的闰年, 每行4个
var j=0;
var str ='';
for(var i=1000;i<=2000;i++){
if(i%4==0 && i%100!=0 || i%400==0){
j++;
str += i+'\t';
if(j%4==0 && j!=0){
console.log(str);
str =''
}
}
}
</script>
9<script>
//9.求: 1-1/2+1/3-1/4 … 1/100的和
var sum = 0;
var b;
var a;
for( var i=1;i<=100;i++){
if(i%2==0){
sum -=1/i;
}
else{
sum +=1/i;
}
}
console.log(sum);
</script>
10<script>
// 输入两个数,求两个数的最小公倍数(****)
// 如: 9和6的最小公倍数是18,
// 1, 先找出两个数中的最大数 // 9 -> 6*9
// 2, 最大数++,找出能被两个数整除的数(退出循环)
var a =prompt('第一个数');
var b =prompt('第二个数');
if(a>b){
for(var i=1;i<100;i++){
a = a*i
if(a%b==0){
console.log(a);
break;
}
}
}else {
for(var i=1;i<100;i++){
b = b*i
if(b%a==0){
console.log(b);
break;
}
}
}
</script>
11<script>
// 输入两个数n,a,如果n==3, a == 2;
// 输出 2 + 22 + 222 的值。(不用输出式子)(****)
// 如: n == 4, a == 3;
// 输出 3 + 33 + 333 + 3333的值。
// 提示: 1、n = 3,相加三次,每次相加比前一次相加的数,多一位
// 2、每次多的这个位数的值为a, 3, 3*10+3(33), 33*10+3(333),...
var n =prompt('第一个');
var a =prompt('第二个');
var str = '';
var sum = 0;
for(var i=0;i<n;i++){
str +=a;
sum +=Number(str);
}
console.log(sum);
</script>
12<script>
// 五位数中,对称的数称为回文数,找出所有的回文数。
var number;
for (number = 10000; number < 100000; number++) {
var wan = parseInt(number/10000);
var qian = parseInt((number/1000)%10);
var shi = parseInt((number/1000)/10);
var ge = parseInt(number%10);
while (wan == ge && qian == shi) {
console.log(number);
}
}
</script>
14<script>
//找出所有的水仙花数,三位数,各位立方和等于该数本身。
//如: 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3
var number = 100;
for (number = 100; number < 1000; number++) {
var bai = parseInt(number/100);
var shi = parseInt((number/10)%10);
var ge = parseInt(number%10);
if (((Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3))) == number) {
console.log(number);
}
}
</script>
16<script>
// 输入两个数,求两个数的最大公约数(*****)
// 如: 12和8的最大公约数是4,
// 提示: 能够同时整除两个数的最大数
// 1, 先找出两个数中最小的那个数,
// 2, 最小数--, 找出能被两个数整除的数(退出循环break)
var number1 = 12
var number2 = 8
var min = number1<number2?number1:number2
for(var i=min;i>0;i--){
if(number1%i==0 && number2%i==0){
console.log(i);
break
}
}
</script>

浙公网安备 33010602011771号