用for while做99乘法表的疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

用for while做99乘法表的疑问

#1

帖子 ps3wifi » 2020-04-02 15:13

awk 'BEGIN {for(i=1;i<=9;i++) {j=1;while(j<=i) {j++} {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
用这种语法循环做99乘法表怎么只能像下面这种循环一次就结束了,j设置初始值=1,怎么运行的时候是从2开始了?希望大家帮我解答一下
1x2=2
2x3=6
3x4=12
4x5=20
5x6=30
6x7=42
7x8=56
8x9=72
9x10=90
头像
astolia
论坛版主
帖子: 6455
注册时间: 2008-09-18 13:11

Re: 用for while做99乘法表的疑问

#2

帖子 astolia » 2020-04-02 17:51

while(j<=i)这个循环执行的语句只有{j++}这一句。你这么写和

代码: 全选

awk 'BEGIN {for(i=1;i<=9;i++) {j=i+1; {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
是等价的
头像
懒蜗牛Gentoo
论坛版主
帖子: 7353
注册时间: 2007-03-02 17:36
系统: Linux Mint

Re: 用for while做99乘法表的疑问

#3

帖子 懒蜗牛Gentoo » 2020-04-02 19:39

这是作业么
虽然世上没有完美的东西,但这并不影响我们追求完美,因为只有偏执狂才TMD能成功。
10.04新手入门——笨兔兔讲述自己的故事
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: 用for while做99乘法表的疑问

#4

帖子 ps3wifi » 2020-04-02 21:54

懒蜗牛Gentoo 写了: 2020-04-02 19:39 这是作业么
正在学习python智商不在线,感觉用shell弄个99乘法表比python简便
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: 用for while做99乘法表的疑问

#5

帖子 ps3wifi » 2020-04-02 22:35

astolia 写了: 2020-04-02 17:51 while(j<=i)这个循环执行的语句只有{j++}这一句。你这么写和

代码: 全选

awk 'BEGIN {for(i=1;i<=9;i++) {j=i+1; {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
是等价的
大佬能不能给点解答思路,为什么用两个for循环就能成功打印出乘法表awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}',用while变成了j=i+1,我也给了条件和初始值呀
头像
astolia
论坛版主
帖子: 6455
注册时间: 2008-09-18 13:11

Re: 用for while做99乘法表的疑问

#6

帖子 astolia » 2020-04-03 13:17

ps3wifi 写了: 2020-04-02 22:35 大佬能不能给点解答思路,为什么用两个for循环就能成功打印出乘法表awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}',用while变成了j=i+1,我也给了条件和初始值呀
我上面都已经说了啊
astolia 写了: 2020-04-02 17:51 while(j<=i)这个循环执行的语句只有{j++}这一句
你自己对比一下两种写法中两层循环各自的作用范围
awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {j=1;while(j<=i) {j++} {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {j=1;while(j<=i) {j++} {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
ps3wifi
帖子: 94
注册时间: 2010-01-08 13:09

Re: 用for while做99乘法表的疑问

#7

帖子 ps3wifi » 2020-04-04 18:58

astolia 写了: 2020-04-03 13:17
ps3wifi 写了: 2020-04-02 22:35 大佬能不能给点解答思路,为什么用两个for循环就能成功打印出乘法表awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}',用while变成了j=i+1,我也给了条件和初始值呀
我上面都已经说了啊
astolia 写了: 2020-04-02 17:51 while(j<=i)这个循环执行的语句只有{j++}这一句
你自己对比一下两种写法中两层循环各自的作用范围
awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {for(j=1;j<=i;j++) {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {j=1;while(j<=i) {j++} {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
awk 'BEGIN {for(i=1;i<=9;i++) {j=1;while(j<=i) {j++} {printf "%dx%d=%-2d\t", i, j, i*j} {print ""}}}'
我分别用print打印出i和j的变量,i是for循环显示1-9,j是while循环直接显示10结束了
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 用for while做99乘法表的疑问

#8

帖子 oneleaf » 2020-04-04 21:24

代码: 全选

awk 'BEGIN {for(i=1;i<=9;i++) {j=1; while(j<=i) {printf "%dx%d=%-2d\t", i, j, i*j; j++} {print ""}}}'
回复