牛客网刷题 | BC99 正方形图案

目前主要分为三个专栏,后续还会添加:

        专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

感谢阅读!

初来乍到,如有错误请指出,感谢!


描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的正方形图案。

输入描述:

多组输入,一个整数(1~20),表示正方形的长度,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应边长的正方形,每个“*”后面有一个空格。


思路 :

/*使用嵌套循环来解决这题

两层嵌套for循环 就和乘法口诀表差不多

由此可以看出,当进入第二层循环的时候,是从左往右打印当这五个*打印完成之后

换行操作,然后进入第一层循环然后继续判断,继续从左往右打印*直到循环结束

一开始我也不会写这种题目,理不清是怎么一回事

其实只要套入进去就行了,然后写完在VS里面调试一下就能明白大概是什么意思了。

*/


代码 1 :

/*使用嵌套循环来解决这题
        两层嵌套for循环 就和乘法口诀表差不多
由此可以看出,当进入第二层循环的时候,是从左往右打印当这五个*打印完成之后
换行操作,然后进入第一层循环然后继续判断,继续从左往右打印*直到循环结束
一开始我也不会写这种题目,理不清是怎么一回事
其实只要套入进去就行了,然后写完在VS里面调试一下就能明白大概是什么意思了。
*/

# include <stdio.h>
int main ()

{
    int i = 0;
    while (scanf("%d",&i)!=EOF)
    {
        for(int j = 1;j<=i;j++)//控制列
        {

        for(int n = 1;n<=i;n++)//控制行
        {
            printf("* ");
        }
    
        printf("\n");

        }
    } 
    
    return 0;
}

#include <stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int i = 0; // 定义一个整型变量i,用于存储用户输入的数字

    // 使用while循环读取用户输入,直到输入结束(EOF)
    while (scanf("%d",&i)!=EOF)
    {
        // 外层循环控制列数,从1开始到用户输入的数字i结束
        for(int j = 1;j<=i;j++)
        {
            // 内层循环控制行数,从1开始到用户输入的数字i结束
            for(int n = 1;n<=i;n++)
            {
                printf("* "); // 打印一个星号和一个空格
            }
            
            printf("\n"); // 内层循环结束后,打印一个换行符,准备打印下一行
        }
    } 
    
    return 0; // 程序正常结束
}

代码 2 :

#include<stdio.h>
int main()
{
    int x,i;
    while(scanf("%d",&x)!=EOF)
    {
        for(i=1;i<=(x*x);i++)
        {
            if(i%x==0)
            {
                printf("*\n");
            }
            else
                printf("* ");
        }
    }
    return 0;
}


#include<stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int x, i; // 定义两个整型变量x和i,x用于存储用户输入的数字,i用于循环计数

    // 使用while循环读取用户输入,直到输入结束(EOF)
    while(scanf("%d",&x)!=EOF)
    {
        // 外层循环控制总的打印次数,即x的平方
        for(i=1; i<=(x*x); i++)
        {
            // 判断当前打印的星号是否是一行的最后一个
            if(i%x==0) // 如果i能被x整除,说明是一行的最后一个星号
            {
                printf("*\n"); // 打印一个星号后换行,开始新的一行
            }
            else // 如果不是一行的最后一个星号
                printf("* "); // 打印一个星号后跟一个空格
        }
    }
    return 0; // 程序正常结束
}

代码 3 :

#include<stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int x; // 定义一个整型变量x,用于存储用户输入的数字,代表矩阵的边长

    // 使用while循环读取用户输入,直到输入结束(EOF)
    while(scanf("%d",&x)!=EOF)
    {
        // 外层循环控制行,从1到x
        for(int i=1; i<=x; i++)
        {
            // 内层循环控制列,从1到x
            for(int j=1; j<=x; j++)
            {
                // 如果是列的最后一个星号,打印星号后换行
                if(j==x) 
                    printf("*\n");
                // 否则打印星号后跟一个空格
                else 
                    printf("* ");
            }
        }
    }
    // 主函数结束,返回0表示程序正常结束
    return 0;
}

这段代码通过两层嵌套循环来打印矩阵。

外层循环控制行,内层循环控制列。

在内层循环中,如果当前是列的最后一个元素(即j==x),则打印一个星号后换行;否则,打印一个星号后跟一个空格。

这样,每完成一行的打印后,就会自动换到下一行的开头,继续打印,直到整个矩阵打印完毕。


 扩展 :

  • 理解题目要求

    • 仔细阅读题目,弄清楚需要解决的问题是什么,输出的格式是什么样的。
  • 确定循环结构

    • 根据题目要求,确定需要几层循环。通常,每一层循环对应输出结构中的一个维度。
    • 例如,打印一个矩阵通常需要两层循环:外层循环控制行,内层循环控制列。
  • 设计循环变量

    • 为每一层循环定义一个循环变量,这个变量通常从1开始,到某个特定的值结束。
  • 编写循环体

    • 在循环体内编写需要执行的操作,比如打印字符、计算数值等。
    • 考虑循环体内的逻辑,比如何时换行、何时打印特定的字符等。
  • 处理边界条件

    • 考虑循环的起始和结束条件,以及循环变量的取值范围。
    • 特别注意循环的终止条件,避免无限循环。
  • 测试和调试

    • 编写完代码后,进行测试,检查输出是否符合预期。
    • 使用一些简单的测试用例,比如边界值,来验证代码的正确性。
    • 如果输出不正确,使用调试工具或打印语句来逐步跟踪代码的执行过程,找出问题所在。
  • 优化代码

    • 在确保代码能够正确运行的基础上,考虑是否可以优化循环结构或逻辑,使代码更加简洁高效。
  • 编写注释

    • 给关键的代码段添加注释,说明代码的功能和逻辑,便于他人阅读和理解。
  • 回顾和总结

    • 完成题目后,回顾整个解题过程,总结经验教训,提高解题能力。
  • 以打印乘法口诀表为例,可以这样思考:
  • 题目要求:打印一个乘法口诀表。
  • 循环结构:两层循环,外层控制行(乘数),内层控制列(被乘数)。
  • 循环变量:外层循环变量从1开始,到9结束;内层循环变量也从1开始,到9结束。
  • 循环体:在内层循环体内打印乘法表达式和结果,每完成一行后换行。
  • 边界条件:确保循环变量不超过9。
  • 测试和调试:使用几个简单的数字测试代码,比如输入1、2等。
  • 优化代码:考虑是否可以减少不必要的打印语句,使代码更加简洁。
  • 编写注释:在关键的循环和打印语句处添加注释,说明代码的作用。
  • 回顾和总结:思考如何改进代码,比如是否可以使用更少的循环或更简洁的表达式。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值