黑马程序员技术交流社区

标题: 帮我每句分析下,前段时间写的乘法表,突然看不懂了 [打印本页]

作者: 为梦想挺身而出    时间: 2014-5-1 21:22
标题: 帮我每句分析下,前段时间写的乘法表,突然看不懂了
#include<stdio.h>

int main(void)
{

        int a;

        scanf("%d",&a);
        printf("%d\n",a);

        int b;
        scanf("%d",&b);


        printf("%d   %d\n",a,b);

        return 0;

作者: 为梦想挺身而出    时间: 2014-5-1 21:24
发错了是这个


#include <stdio.h>

int main()
{
   
    for (int i = 0; i<9; i++)
    {
        
        for(int j = 10,a=0; j >9-i; j--)
        {
            //每次运行加1,用来计算被乘的数
            a++;
            int b = 10-(9-i);
            
            printf("%dx%d=%d  ", a, b, a*b );
        }
        
        printf("\n");//每次循环后换行
    }
   
   
    return 0;
}

作者: m573555543    时间: 2014-5-1 22:04
i = 0时  进入循环 J
j 等于10进入循环a++,b
j 循环一遍以后再进入 j 循环,直到 j 不满足条件退出循环


j 不满足条件退出循环的时候再次进入 i 循环


以此类推



直到 i 不满足条件  退出 整个循环。






作者: liulinjie    时间: 2014-5-2 10:41
(可以在循环里打印一下 i j a b 的值, 能帮助理解)

外层循环: i 分别取值 0, 1, 2, .., 8, 共9个循环, 每个循环换一次行.
内层循环: 对每个i的值, j 分别取值 10, 9, 8, ..., 10-i, 共i+1个循环, 即 i=0 时循环一次, i=1 时循环两次, i=8时循环9次. 每个内层循环内, a都从0开始, 每次加1, b = 10-(9-i) = i+1, b总是不变, 所以就是把i+1(即b)分别乘以1, 2, ..., i+1 (即a) 并打印出来.
整体来说, 就是i+1的取值为1到9, 对每个i+1, 分别打印 1*(i+1), 2*(i+1), ... (i+1)*(i+1), 之后换行, 也就是把1到9的数分别乘以从1到它自己, 所以打印出的就是三角乘法表.
作者: 打洞的土拨鼠    时间: 2014-5-7 02:30
1、从for (int i = 0; i<9; i++)开始,i<9【第一次运行到这里i是0,0<9为真】,进入内循环

2、运行for(int j = 10,a=0; j >9-i; j--)中的“int j = 10,a=0; j >9-i;”部分,这时j=10,a=0;10>9-0(i),10>9为真,运行a++(a变为了1),运行b = 10-(9-i)【10-9-0】,结果是1,你打印了a,b,a*b;【1*1=1】,运行j--(9),判断9>9-0为假,跳出内循环

3、再从for (int i = 0; i<9; i++)开始,此时,你的i执行了i++操作,结果由0变为了1,再次判断i<9【1<9】,进入内循环

4、执行for(int j = 10,a=0; j >9-i; j--)中的“int j = 10,a=0; j >9-i;”部分,这时j=10,a=0;10>9-1(i),10>9为真,运行a++(a变为了1),运行b = 10-(9-1)【10-(9-1)】,结果是2,你打印了a,b,a*b;【1*2=2】,运行j--(9),判断9>9-1为真,再执行a++(a变为了2),运行b = 10-(9-1)【10-(9-1)】,结果是2,你打印了a,b,a*b;【2*2=2】,跳出内循环
…………………………




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2