目前主要分为三个专栏,后续还会添加:
专栏如下: C语言刷题解析 C语言系列文章 我的成长经历
感谢阅读!
初来乍到,如有错误请指出,感谢!
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的直角三角形图案。
输入描述:
多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。
输出描述:
针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。
解题思路 :
/*
依旧使用嵌套循环 一个控制行 一个控制列
这个就和乘法口诀表差不多了
只不过不需要输入乘法之类的东西
当用户输入一个数字之后就会进入for循环,判断是否小于等于i的值
当条件成立的时候,将进入第二条for循环,这里n<=j 的意思就是 从左到右打印 *
当条件不成立的时候就会跳出这个for循环,从第一层for循环开始,继续往下执行
其中最核心的地方就是两个圆圈圈起来的地方
如果把n<=j写成 n<=i 的话 就会一直打印,输入数字几,就会横着打印几个 *
和之前的题一样了
*/
代码 1 :
/*思路 : 依旧使用嵌套循环 一个控制行 一个控制列
这个就和乘法口诀表差不多了
只不过不需要输入乘法之类的东西
当用户输入一个数字之后就会进入for循环,判断是否小于等于i的值
当条件成立的时候,将进入第二条for循环,这里n<=j 的意思就是 从左到右打印 *
当条件不成立的时候就会跳出这个for循环,从第一层for循环开始,继续往下执行
其中最核心的地方就是两个圆圈圈起来的地方
如果把n<=j写成 n<=i 的话 就会一直打印,输入数字几,就会横着打印几个 *
和之前的题一样了
*/
# 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<=j;n++)//控制行
{
printf("* ");
}
printf("\n");
}
}
return 0;
}
//————————————————————————————————————————————————————————————
# include <stdio.h> // 包含标准输入输出库
int main() // 主函数的开始
{
int i = 0; // 定义一个整型变量i并初始化为0
while (scanf("%d",&i)!=EOF) // 当输入不是文件结束符EOF时,循环读取i的值
{
for(int j = 1; j <= i; j++) // 外层循环,控制列数,从1开始到i结束
{
for(int n = 1; n<=j;n++) // 内层循环,控制每行打印的星号数量,从1开始到j结束
{
printf("* "); // 打印一个星号和一个空格
}
printf("\n"); // 每行打印完毕后,换行
}
}
return 0; // 程序正常结束,返回0
}
代码 2 :
void print(int num)
{
int i,j;
for(i = 0; i < num; i++)
{
for(j = 0; j < i +1; j++)
{
printf("* ");
}
printf("\n");
}
}
int main()
{
int num;
while(scanf("%d",&num) != EOF)
{
print(num);
}
return 0;
}
//——————————————————————————————————————————————————————————————————————
void print(int num) // 定义一个名为print的函数,它接受一个整型参数num
{
int i,j; // 定义两个循环计数器i和j
for(i = 0; i < num; i++) // 外层循环,控制行数,从0到num-1
{
for(j = 0; j < i +1; j++) // 内层循环,控制每行打印的星号数量,从0到i
{
printf("* "); // 打印一个星号和一个空格
}
printf("\n"); // 每行打印完毕后,换行
}
}
int main() // 主函数的开始
{
int num; // 定义一个整型变量num用于存储用户输入
while(scanf("%d",&num) != EOF) // 当输入不是文件结束符EOF时,循环读取num的值
{
print(num); // 调用print函数,打印由星号组成的三角形
}
return 0; // 程序正常结束,返回0
}
这段代码的功能是:用户可以连续输入整数,每次输入后程序会调用print
函数打印出一个由星号组成的三角形,三角形的高度由用户输入的整数决定。
当用户输入文件结束符EOF时,程序结束。
扩展 :
如何解答图形问题
1. 理解图案的几何特性
首先,你需要清楚地了解你想要打印的图案的几何特性。例如,一个简单的三角形图案可能具有以下特性:
- 行数递增
- 每行的星号数量递增
- 星号之间可能有或没有空格
- 可能需要在星号之间或图案周围打印空格以形成特定的形状
2. 设计循环结构
根据图案的特性,设计循环结构来控制打印过程。通常,这涉及到两个嵌套的循环:
- 外层循环:控制图案的行数。例如,如果用户输入数字5,外层循环将执行5次。
- 内层循环:控制每行打印的字符数量。例如,第一行打印1个星号,第二行打印2个星号,依此类推。
3. 使用条件语句
条件语句(如if
、else
)可以用来控制打印的模式,特别是在需要根据当前行或列的特定条件来改变打印行为时。
4. 变量控制
使用变量来控制打印的模式,例如:
- 使用变量来记录当前行应该打印的星号数量。
- 使用变量来控制是否需要在星号之间或图案周围打印空格。
5. 字符串和数组
对于更复杂的图案,可以使用字符串数组来存储每一行的打印内容,然后再统一输出。这种方法可以更容易地管理和调整图案的格式。
6. 递归方法
对于一些可以递归定义的图案(如分形图案),递归函数可以是一种优雅且简洁的解决方案。
7. 图形库的使用
在某些编程语言中,可以使用图形库来简化图形的打印和绘制。这些库提供了更高级的抽象,可以更容易地创建复杂的图形。
8. 调试和测试
在开发过程中,逐步调试和测试代码:
- 逐步执行:观察每一行代码的执行结果,确保循环和条件语句按预期工作。
- 打印变量值:在关键点打印变量的值,以确保它们遵循正确的模式。
- 调整逻辑:根据测试结果调整循环条件、条件语句或打印逻辑。
9. 优化和改进
一旦基本的图案打印正确,考虑优化代码:
- 减少不必要的计算:例如,预先计算循环次数或星号数量,而不是在循环内部重复计算。
- 改进可读性:使用清晰的变量名和函数名,添加注释,使代码易于理解和维护。
10. 用户交互
如果图案的打印依赖于用户输入,确保用户交互部分的代码健壮且易于使用:
- 输入验证:确保用户输入的数据是有效的,并且符合预期的格式。
- 错误处理:优雅地处理错误输入或异常情况。