顶级太阳 发表于 2022-6-11 19:19:45

s1e14动动手3,题目不能同时显示问题

课后作业s1e14第3题,要求各种姿势打印“九九乘法表”,不知道大家是怎么完成的。我想偷点懒,把4个乘法表放到一段程序里。结果发现第3种不能打印出来(换句话说,不给运行)。当把其他几段程序屏蔽掉(前面加//)后,打印没有问题。来回折腾好几遍没找到问题所在。求助各位,帮忙看看什么原因。谢谢。
#include<stdio.h>

int main()
{
    int i,j,k;
    for(i=1;i<=9;i++)
    {
       for(j=1;j<=i;j++)
        {
      printf("%d*%d=%-2d",i,j,i*j);//左下
        }
        printf("\n");
}       

        printf("左下\n");
        printf("\n");
        printf("\n");

for(i=1;i<=9;i++)
        {
        for(j=i;j<=9;j++)
        {
        printf("%d*%d=%-2d",i,j,i*j);//左上
        }
        printf("\n");
        }
        printf("左上\n");
        printf("\n");

for(i=1;j<=9;i++)
   {
        for(k=9-i;k>=1;k--)printf("      ");


        for(j=1;j<=i;j++)
      {

        printf("%d*%d=%-2d",i,j,i*j);//右下
        }          
                printf("\n");
    }
        printf("右下\n");
        printf("\n");
        printf("\n");
        printf("\n");
for(i=1;i<=9;i++)
{

   for(k=1;k<i;k++)
    {
       printf("      ");
    }   
   for(j=i;j<=9;j++)
   {
        printf("%d*%d=%-2d",i,j,i*j);//右上
   }
        printf("\n");
}
printf("右上\n");
return 0;
}

风车呼呼呼 发表于 2022-6-11 19:26:27

for(i=1;j<=9;i++)
i<=9

顶级太阳 发表于 2022-6-11 19:32:43

风车呼呼呼 发表于 2022-6-11 19:26
for(i=1;j

每一段程序我都单独运行过,结果没有问题。但是现在的问题是4个放到一起,第3段就不给结果了。看看什么原因?

风车呼呼呼 发表于 2022-6-11 19:35:12

顶级太阳 发表于 2022-6-11 19:32
每一段程序我都单独运行过,结果没有问题。但是现在的问题是4个放到一起,第3段就不给结果了。看看什么原 ...

我这不是改了吗,第三段for条件i写成了j

顶级太阳 发表于 2022-6-11 19:38:11

确实,谢谢。但是为什么把前面的程序段都屏蔽掉之后还可以运行呢?

风车呼呼呼 发表于 2022-6-11 19:58:51

顶级太阳 发表于 2022-6-11 19:38
确实,谢谢。但是为什么把前面的程序段都屏蔽掉之后还可以运行呢?

首先,之所以四种放在一起不会运行,是因为前面的循环中,j的值最终变为了10,走到第三段判断 j<=9 为假,直接跳过。
其次,单独运行第三段,因为 j 没有初始化,变量j的内存中是脏数据,符号位的部分数据使得这个数据被解释为一个极大的负数,所以第一次循环中 j<=9成立,之后进入内层循环 j=1后,就正常运行了。
你可以在不初始化的情况下,直接打印 j 的值就知道了。

有的编译器在使用未初始化的变量时会直接警告报错,显然你使用的编译器并不会这样
页: [1]
查看完整版本: s1e14动动手3,题目不能同时显示问题