鱼C论坛

 找回密码
 立即注册
查看: 1270|回复: 5

这是关于嵌套for循环的习题我有两个问题想要问大家

[复制链接]
发表于 2023-8-26 13:28:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
void test01()
{
        for (int i = 1; i <= 9; i++)
        {
                for (int j = 1; j <= i; j++)
                {
                        printf("%d * %d = %d  ",j, i, i * j);
                }
                printf("\n");
        }
       
}

void main()
{
        test01();
        system("pause");
        return 0;
}
问题1:为什么第一个位置要写上j,而不是i,按理来说应该是外层函数控制列的啊,不应该是i,j,i*j吗
问题2:为什么j<=i,而不是<=9,而且为什么不写i<10啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-26 13:29:05 | 显示全部楼层
问题1:为什么第一个位置要写上j,而不是i,按理来说应该是外层函数控制列的啊,不应该是i,j,i*j吗?

在这个嵌套循环中,外层循环变量i控制行数,内层循环变量j控制每行中的列数。因此,内层循环的目的是按照当前行数i打印出相应数量的列。所以,j代表列数,而不是i

问题2:为什么j<=i,而不是<=9,而且为什么不写i<10啊?

在这个乘法表的例子中,每一行的列数是根据行数来确定的。第一行只有一个数字,第二行有两个数字,第三行有三个数字,以此类推。所以内层循环的终止条件是j <= i,这样可以确保每行打印正确的列数。

如果使用< 10作为终止条件,那么每一行就会打印出从 1 到 9 的全部列数,而不符合乘法表的规律。

同理,如果使用i < 10作为外层循环的终止条件,那么会打印出从 1 到 9 的全部行数,但是不符合乘法表的规律。

因此,根据乘法表的特点,内层循环的终止条件是j <= i,外层循环的终止条件是i <= 9。这样可以正确地打印出乘法表。

如果您对这个解释还有疑问,请随时提出。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 13:29:33 | 显示全部楼层
问题1:为什么第一个位置要写上j,而不是i,按理来说应该是外层函数控制列的啊,不应该是i,j,i*j吗?

答:在这个嵌套的for循环中,外层的循环变量i用于控制行数,内层的循环变量j用于控制列数。在每一行中,列数是根据行数来确定的,例如第一行只有一列,第二行有两列,以此类推。所以在内层循环中,j的取值范围是从1到i,表示每一行中的列数。

问题2:为什么j<=i,而不是<=9,而且为什么不写i<10啊?

答:j<=i的目的是控制内层循环的次数,确保内层循环只执行到当前行数i为止。因为每一行的列数是根据行数来确定的,所以内层循环的次数应该与当前行数相等,即j的取值范围是从1到i。如果将j的取值范围改为<=9,那么内层循环将会执行9次,而不是根据行数来确定的次数。

至于为什么不写i<10,是因为这个乘法表只需要打印9行,所以外层循环的次数应该是从1到9,即i的取值范围是从1到9。如果将i的取值范围改为<10,那么外层循环将会执行10次,打印出一个多余的空行。

希望以上解答能够帮助到您!如果您还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 14:44:14 | 显示全部楼层
问题1:为什么第一个位置要写上j,而不是i?

在这个例子中,外层循环是控制行数,内层循环是控制列数。每一行的列数与行数相关,所以内层循环的索引变量为j,而不是i。通过在内层循环中使用j和i来打印每个乘法表的元素,可以确保每个元素都正确地与相应的行和列进行相乘。

问题2:为什么j<=i,而不是<=9,为什么不写i<10?

这里的循环条件是j<=i是因为我们想要打印乘法表的上半部分(包括对角线)。外层循环控制行数,从1到9,而内层循环控制列数。在每一行中,我们只需要打印从第1列到当前行数(即i)的列。因此,内层循环的条件应该是j<=i,而不是固定的<=9或i<10。

如果内层循环的条件是<=9或i<10,那么将会打印出整个9x9乘法表,而不仅仅是上半部分。为了保持乘法表的正确性和对称性,我们只需打印上半部分(包括对角线),所以内层循环的条件是j<=i。

希望可以解答你的问题!如果还有疑问,请随时提出。
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 19:44:01 | 显示全部楼层
问题1:在这段代码中,外层循环控制行数,内层循环控制每行的列数。因此,外层循环中的变量i代表行数,内层循环中的变量j代表列数。在打印九九乘法表时,我们希望每一行输出的是和当前行数相对应的乘法表,因此内层循环的终止条件是j <= i。

问题2:内层循环的终止条件是j <= i,是为了保证每一行只输出该行所对应的乘法表。如果内层循环的终止条件是j <= 9,那么每一行将会输出从1到9的乘法表,而不是符合九九乘法表规律的样式。因此,我们需要根据当前行数i来限制内层循环的次数,确保只输出对应的乘法表。

同时,你提到的使用i < 10 作为内层循环的终止条件也是可以的,因为在这个具体的例子中,外层循环恰好执行了9次。但是,使用i < 10 不如使用j <= i 表达得更加直观和准确。

希望能解答你的疑问!如果还有其他问题,请随时提问。

此内容为ChatGPT回答,如果对你有帮助,请设置一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 20:46:50 | 显示全部楼层
本帖最后由 Mr.Wallet 于 2023-8-26 20:51 编辑

我感觉看他的输出就知道了啊
第一个问:/为什么第一个位置要写上j,而不是i,按理来说应该是外层函数控制列的啊,不应该是i,j,i*j吗
        /*               1*1=1
                          1*2=2 2*2=4
                          1*3=3 2*3=6 3*3=6
                          1*4=4 2*4=8 3*4=12 4*4=16
                          ...
        */
他这里写的是按行输出,可以理解为i是一次循环的列数
第二个问:为什么j<=i,而不是<=9,而且为什么不写i<10啊
这个直接带入试试就知道了,还是要理解代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表