循环练习(求3的倍数、水仙花数、质数)、循环嵌套、break和continue、修改质数练习——JS流程控制

28 篇文章 0 订阅
21 篇文章 2 订阅

目录

一、练习1(求100以内3的倍数)

二、练习2(求水仙花数)

三、练习3(判断质数)

四、循环嵌套

五、练习(99乘法表)

六、练习(100以内的质数)

七、break和continue

八、修改质数练习一

九、修改质数练习二

做练习写代码时要多思考思考,想想有没有更简便的写法

一、练习1(求100以内3的倍数)

练习:求100以内所有3的倍数(求它们个数和总和)

方法一:

	<script>
		//创建计数器
		let count = 0
		//用来存储计算结果(累加结果)
		let sum = 0
		for(let i=0;i<100;i++){
            //获取3的倍数
			if(i % 3 == 0){
				count++ 
				sum = sum + i
			}
		}
		console.log(`100以内3的倍数的一共有${count}个,总和为${sum}`)
	</script>

方法二:(直接加3)

	<script>
		//创建计数器
		let count = 0
		//用来存储计算结果(累加结果)
		let sum = 0
		for(let i=3;i<=100;i+=3){
			count++ 
			sum = sum + i
		}
		console.log(`100以内3的倍数的一共有${count}个,总和为${sum}`)
	</script>

输出的结果:100以内3的倍数的一共有34个,总和为1683。 

二、练习2(求水仙花数)

练习:求1000以内的水仙花数

水仙花数:一个n位数(n>=3), 如果它各个位上数字的n次幂之和还等于这个数,那么这个数就是一个水仙花数。如153=1^3+5^3+3^3.

方法一:

	<script>
		for(let i=100;i<1000;i++){
			// 求百位数字
			let a = parseInt(i / 100)
			//求十位数字
			let b = parseInt((i % 100) / 10)
            //或者b = parseInt((i - a*100)/10)
			//求个位数字
			let c = i % 10
			//判断是否是水仙花数
			if(i == a**3+b**3+c**3){
				console.log(i)
			}
		}
	</script>

方法二:
字符串可以通过索引获得其对应内容,如a='hello',a[0]就是h,  a[1]是e.

	<script>
		for(let i=100;i<1000;i++){
			let strI = i + ""//转换为字符串
			//无需转换为数值,运算时可自动转换为数值
			if(i == strI[0] ** 3 + strI[1] ** 3 + strI[2] ** 3){
				console.log(i)
			}
		}
	</script>

输出结果:153,370,371,407. 

三、练习3(判断质数)

练习:获取用户输入的整数(暂时不考虑输错的情况)

                然后编写代码检查这个数字是否是质数,并打印结果

        质数:一个数如果只能被1和它自身整除,那么这个数就是质数。

                1既不是质数也不是合数。

	<script>
		let num = +prompt("请输入一个大于1的数字")
		//用来记录num的状态,默认是true,num是质数
		let flag = true
		for(let i=2;i<num;i++){
			if(num % i == 0){
				//如果num能被i整除,说明num一定不是质数
				//当循环执行时,如果从来没有进入过判断(判断代码没有执行),说明num是质数
				//如果判断哪怕只执行了依次,也说明num不是质数
				flag = false
			}
		}
		if(flag){
			alert(`${num}是质数`)
		}else{
			alert(`${num}不是质数`)
		}
	</script>

四、循环嵌套

在循环中也可以嵌套其他的循环

当循环发生嵌套时,外层循环每执行一次,内层循环就会执行一个完整的周期

	<script>
		//这个for循环,可以用来控制图形的高度
		for(let i=0;i<4;i++){
			//创建一个内层循环来控制图形的宽度
			for(let j=0;j<4;j++){
				document.write('**&nbsp;&nbsp;')//用&nbsp来设置星号之间的空格,
                                                //因为在JS中多个空格仍表现出一个空格。
			}
			document.write('<br>')//在网页文档中换行使用<br>
		}
	</script>

注意,输出的星号是在网页中打印输出,所以应使用<body>中的换行标签<br> 。

	<script>
		//外层循环,用来控制图形的高度
		for(let i=0;i<5;i++){
			//内层循环,用来控制图形的宽度
			for(let j=0;j<i+1;j++){
				document.write("*&nbsp;&nbsp;")
				
			}
			document.write("<br>")//在网页文档中换行使用<br>标签
		}
	</script>

五、练习(99乘法表)

练习:在网页中打印99乘法表(循环嵌套的练习)

	<style>
		span{
			display:inline-block;
			width:80px;
		}
	</style>
	<script>
		//创建一个外层循环,控制图形的高度
		for(let i=1;i<10;i++){
			//创建内层循环控制图形的宽度
			for(let j=1;j<i+1;j++){
				document.write(`<span>${j}*${i}=${i*j}</span>`)//在网页中打印,使用<span>标签        
                                             //将等式写在span中,并对其进行设置,以使更整洁对齐
			}
			//打印换行
			document.write("<br>")
		}
	</script>

注意:使用span,并对span进行设置,以保证对齐

六、练习(100以内的质数)

编写代码,求100以内所有的质数

	<script>		
		for(let num=2;num<100;num++){
			//检查num是否是质数
			//创建一个变量,记录num的状态
			let flag = true
			//获取2-num之间的数
			for(i=2;i<num;i++){
				//判断num能不能被i整除
				if(num % i == 0){
					//进入判断,说明num不是质数,修改flag为false
					flag = false
				}				
			}
			//判断结果
			if(flag){
				console.log(num)
			}
		}		
	</script>

七、break和continue

break:

        - break用来终止switch和循环语句

        - break执行后,当前的switch或循环会立刻终止

        - break会终止离他最近的循环

	<script>		
		for(let i=0;i<5;i++){
			console.log(i)
			for(let j=0;j<5;j++){
				if(j == 1) break
				console.log('内层循环',j)
			}
		}	
	</script>

continue:

        - continue用来跳过当次循环

        - continue会跳过离他最近的循环

	<script>		
		for(let i=0;i<5;i++){
			console.log(i)
			for(let j=0;j<5;j++){
				if(j === 1) continue
				console.log('内层循环',j)
			}						
		}	
	</script>

八、修改质数练习一

在开发中,除了实现功能外,还要考虑代码的执行性能(执行速度)。测试代码的执行性能(时间)通过在代码前加console.time(’名字‘)和代码结束后加console.timeEnd(’名字‘),可以获得代码的执行时间。如:

	<script>	
		//开始一个计时器
		console.time('质数练习:')	
		for(let num=2;num<100;num++){
			let flag = true
			for(i=2;i<num;i++){
				if(num % i == 0){
					flag = false
				}				
			}
			if(flag){
				// console.log(num)
			}
		}
		//停止计时器	
		console.timeEnd('质数练习:')	
	</script>

添加break,内层循环循环次数减少

	<script>	
		//开始一个计时器
		console.time('质数练习:')	
		for(let num=2;num<100;num++){
			let flag = true
			for(i=2;i<num;i++){
				if(num % i == 0){
					flag = false
					//进入判断说明num一定不是质数,后续检查没有执行的必要
					break
				}				
			}
			if(flag){
				console.log(num)
			}
		}
		//停止计时器	
		console.timeEnd('质数练习:')	
	</script>

九、修改质数练习二

修改内层循环的终止次数条件,对于判断质数,只需取到这个数的开方即可,无需取完所有比这个数的所有整数。

	<script>	
		//开始一个计时器
		console.time('质数练习:')	
		for(let num=2;num<100;num++){
			let flag = true
			//第二次优化,将i<num 改为i <= num ** 0.5
			for(i=2;i<=num**0.5;i++){
				if(num % i == 0){
					flag = false
					//进入判断说明num一定不是质数,后续检查没有执行的必要
					break
				}				
			}
			if(flag){
				console.log(num)
			}
		}
		//停止计时器	
		console.timeEnd('质数练习:')	
	</script>

还可以优化,只对除2以外的其余奇数进行判断是否是质数即可。对于外层循环来说,是把100以内所有的整数都进行判断,但是除了2以外所有的偶数都不是质数,所以可以把2单独拿出来,然后从初始变量3开始,修改初始变量也以2进行递增然后判断。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值