C语言基础:回顾九九乘法表

文章讲述了作者在LintCode编程挑战中解决代码问题的过程,涉及输出格式调整、左对齐规则和处理特殊情况(如i=j时的空格),最终修复了代码并满足了要求。
摘要由CSDN通过智能技术生成

题目要求:LintCode
在这里插入图片描述
在这里插入图片描述

先把基本的写出来,为了看起来有个大概有个样子(1)每行换行;(2)输出结果5个空格,左对齐(%-5d):
关于%-nd的知识:+是右对齐,-是左对齐;数值n代表几个空格,如果是左对齐,就把串数字靠左,否则,靠右。
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>

int main() {
    // Write your code here
    for(int i = 1; i < 10; i++){
    	printf("\n");
        for(int j = 1; j < 10; j++){       	
            printf("%d * %d = %-5d",i,j,i*j);
        }
    }
    return 0;
}

在这里插入图片描述
然后对半切分(j <= i):

before:
	for(int j = 1; j < 10; j++){}
after:
	for(int j = 1; j <= i; j++){}
note:这个地方写成j<=i,如果是j<i,就会缺少两个数相同相乘的项,这个是我所犯的错误。

在这里插入图片描述
于是我就拿着这串代码,高高兴兴地提交了,结果不给过,气死我了。
问了一下AI,有2个误导问题:

  • 第一个问题:打印第一行前来了一个换行(非必要):
    在这里插入图片描述
    好我改:第一行前面先不用换行
before:
	printf("\n");
after:
	if(i != 1) printf("\n");

效果如下:
在这里插入图片描述

  • 第二个问题:说我没按照乘积为 1 位数(即 < 10)则输出 4 个空格,否则输出 3 个空格,每一行的开头和结尾没有空格。好我改,我就用简单放肆写,但是依然提交不上去。其实这里不需要改之前的%-5d,这个空间设置位5个空之后,其实不管是乘积是1位数,还是2位数都不影响它们之间的固定距离,只要不超过5个空间,尽管往里面塞数字就好。
    之前还尝试过用水平对齐符号 \t,但它是8个空间,不符合要求。
   误导代码:if(temp < 10){
                printf("%d * %d = %d    ",i,j,i*j);
            }else{
                printf("%d * %d = %d   ",i,j,i*j);
            }  
#include <stdio.h>

int main() {
    // Write your code here
    for(int i = 1; i < 10; i++){
    	if(i != 1) printf("\n");
        for(int j = 1; j <= i; j++){
            int temp = i*j;
            if(temp < 10){
                printf("%d * %d = %d    ",i,j,i*j);
            }else{
                printf("%d * %d = %d   ",i,j,i*j);
            }      	            	             	
        }    
    }
    return 0;
}

一提交还是错了,快要放弃的时候,我看到了这个提交反馈:原来i和j相等的时候后面不能有空格,这美滋滋,我终于知道我错哪里了,找到病在哪里就好用药。
在这里插入图片描述
于是我就在输出的时候,在i与j相等时做了一个判断,无需空格,其他照常输出:

            if(temp < 10){
                printf("%d * %d = %d    ",i,j,i*j);
            }else{
                printf("%d * %d = %d   ",i,j,i*j);
            }  

最终代码如下:为了方便看动注解都加上了

#include <stdio.h> // 包含标准输入输出库,用于使用printf等函数

int main() { // 程序的主入口点
    // Write your code here // 这是一个注释,提示开发者在这里编写代码
    for(int i = 1; i < 10; i++){ // 外层循环,变量i从1开始,到9结束(不包括10)
        if(i != 1) printf("\n"); // 如果i不是1,打印一个换行符。这样除了第一行外,每行开始前都有一个换行
        for(int j = 1; j <= i; j++){ // 内层循环,变量j从1开始,到i结束(包括i)
            if(i == j){ // 如果i等于j,即在对角线上
                printf("%d * %d = %d", i, j, i * j); // 直接打印乘法表达式和结果,没有额外的空格
            } else { // 如果i不等于j,即不在对角线上
                printf("%d * %d = %-5d", i, j, i * j); // 打印乘法表达式和结果,%-5d表示左对齐,至少占5个字符宽度,不足部分用空格填充
            } // 结束if-else语句
        } // 结束内层for循环
    } // 结束外层for循环
    return 0; // 程序正常结束,返回0
} // 结束main函数

在这里插入图片描述
提交完毕,好了今天就到这里啦,回舍。

在这里插入图片描述
如果你觉的很有用请给我点个赞吧,非常感谢!

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值