C语言的99乘法表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的99乘法表相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
main()
int y,x,p;
for (y=1;y<=9;y++)
for(x=1;x<=y;x++)
p=y*x;
printf("%dx%d=%d ",x,y,p);
这段代码,我有两处想不通.①为何是x<=y? ②就是在当执行完for (y=1;y<=9;y++)的时候,执行for(x=1;x<=y;x++)了,这时候确实是1*1问题就在第二遍for(y=1;y<=9;y++)这个时候y已经变了2没问题,在继续执行 for(x=1;x<=y;x++)这里为何x还是等于1.第二遍的时候因为x++它也应该等2啊,但结果却是1*2而不是2*2,纠结
因为他是按数学书上写的九九乘法表,那个乘法表是当两个数相等就结束的;
每次进入循环时(注意是进入,不是每个循环),循环初始化都会执行,即:每次进入时,x=1都会被执行,故x=1;
结果确实是2*2,你自己仔细看下,如果为了凸显效果,你可以在外层for循环里加入printf("\\n"),这样就可以清楚看到内层循环的执行结果(代码如下所示);
void main()
int y,x,p;
for (y=1;y<=9;y++)
for(x=1;x<=y;x++)
p=y*x;
printf("%dx%d=%d ",x,y,p);
printf("\\n");
追问
可当它外面的for执行第三次的时候嵌套在里面的for的X=2,并没有初始化啊
追答首先,初始化的时候x=1,其次,请看下图,如果没有初始化,1*3中的1哪来的呢?看你的输出语句,你应该知道第一个数字是x的值
所以它一直在初始化一直在要变2的时候变回了1,它从没有达到过2,那么2*2是怎么来,
追答我就知道你要犯这个错,还在第2点用括号注明了,是进入循环的时候初始化,并非每次循环都初始化,你想下,如果每执行一次循环都初始化,那么条件要么永远成立,要么永远成立,那这个循环要么不执行,要么无限执行,那for循环还有什么意义,你想下什么叫进入循环
参考技术A 首先第一个for(y=1;y<=9;y++)规定了循环9次,说白了就是9行,第二个 for(x=1;x<=y;x++)里面的内容其实是输出y行的内容。刚开始,y=1时,第一行输出的内容是:1*1=1 接下来y=2,第二行输出:
1*1=1
1*2=2 2*2=4
如果y=3,第三行输出:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9 如此类推 参考技术B 因为第一个for语句包含第二个for语句,也就是当y递增的时候,第二个for语句从头开始运行,重新赋值x=1。
以上是关于C语言的99乘法表的主要内容,如果未能解决你的问题,请参考以下文章