鱼C论坛

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

[已解决]s1e14动动手3,题目不能同时显示问题

[复制链接]
发表于 2022-6-11 19:19:45 | 显示全部楼层 |阅读模式

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

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

x
课后作业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:35:12
顶级太阳 发表于 2022-6-11 19:32
每一段程序我都单独运行过,结果没有问题。但是现在的问题是4个放到一起,第3段就不给结果了。看看什么原 ...

我这不是改了吗,第三段for条件i写成了j
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-11 19:26:27 | 显示全部楼层
for(i=1;j<=9;i++)
i<=9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-11 19:32:43 | 显示全部楼层

每一段程序我都单独运行过,结果没有问题。但是现在的问题是4个放到一起,第3段就不给结果了。看看什么原因?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-11 19:35:12 | 显示全部楼层    本楼为最佳答案   
顶级太阳 发表于 2022-6-11 19:32
每一段程序我都单独运行过,结果没有问题。但是现在的问题是4个放到一起,第3段就不给结果了。看看什么原 ...

我这不是改了吗,第三段for条件i写成了j
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-11 19:38:11 | 显示全部楼层
确实,谢谢。但是为什么把前面的程序段都屏蔽掉之后还可以运行呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

有的编译器在使用未初始化的变量时会直接警告报错,显然你使用的编译器并不会这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 12:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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