题目:
绘制左边图的输出图像,函数已给出。
原因分析:
提示:这里填写问题的分析:
例如:Handler
发送消息有两种方式,分别是 Handler.obtainMessage()
和 Handler.sendMessage()
,其中 obtainMessage
方式当数据量过大时,由于 MessageQuene
大小也有限,所以当 message
处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
解决方案:
思路
对于原来的坐标几何图形,2<=n,y<=x<=2n-y,1<=y<=x。
我们用来写C代码的函数首先要确定三角形高的范围,至少要2。
将图形分隔成上下两部分。从最高的顶点到三角形高的部分,和其下面的部分。
使用line表示行数,height表示高(由用户输入),line最大为2*height-1(对应2n-1),然后使用循环来处理每一行的输出。
判断行line是否等于高height来将图形分隔成上下两部分,判断条件为line是否<=height。
MySymbol用于输出*,相当于x,由于直线方程y=-x+2n,斜率为-1,所以对应上半的输出图像上随着行数+1而*号数量+1,MySymbol起始值为1,到函数交点x=n时停止,也就是第n行(第height行)。
下半部分,MySymbol递减至1。对应每次值应该为2*height-line(图像下半部分的边界为x=y,line+y=line+x=line+MySymbol=2*height所以MySymbol对应2*height-line)。
代码
#include <stdio.h>
#include <stdlib.h>
int main() {
int height, line, MySymbol, valid = 0; //height为高,line为行数,MySymbol为*的计数,valid用于验证输入
while (1) {
printf("请输入三角形的高(需要大于1且小于30): ");
valid = scanf_s("%d", &height);
// 检查输入的内容是否符合要求
if (valid == 1 && height > 1 && height < 30) {
break; // 输入有效,退出循环
}
else {
printf("请重新输入符合规范的数字。\n\n");
// 清除输入缓冲区
while (getchar() != '\n'); // 丢弃无效输入
}
}
// 绘制图形
for (line = 1; line <= 2 * height - 1; line++) {
//上半部分绘制
if (line <= height)
{
for (MySymbol = 1; MySymbol <= line; MySymbol++)
{
printf("*");
}
printf("\n");
}
//下半部分绘制
else {
for (MySymbol = 2*height-line; 1<=MySymbol; MySymbol--)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
输出结果
标签:height,valid,MySymbol,printf,线性,line,C语言,绘制,输入 From: https://blog.csdn.net/qq_44954543/article/details/143869903