目前主要分为三个专栏,后续还会添加:
专栏如下: 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");}elseprintf("* ");}}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到xfor(int i=1; i<=x; i++){// 内层循环控制列,从1到xfor(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等。
- 优化代码:考虑是否可以减少不必要的打印语句,使代码更加简洁。
- 编写注释:在关键的循环和打印语句处添加注释,说明代码的作用。
- 回顾和总结:思考如何改进代码,比如是否可以使用更少的循环或更简洁的表达式。