一道循环结构题
题目描述:
涂小天是个画家,他希望有一天他的画能让心仪的她看到。
只是后来她有了他,他却只有他的画,他望着他的画,默默的发呆。
可惜做题的你,画不出他画的她,所以,我们只好画点简单的画,或许有一天,你就会遇到画里她/他吗?
因此我们规定画画的内容:输入一个正整数 n(n为奇数),输出高度为 n 的菱形,例如 n = 5 时,输出
*
*
***
*
*
***
*****
***
*
基础的循环结构应用,我觉得重点在于对循环内变量的设计和打印换行符的位置。做题思路是观察总结规律,把其变为数学模型再用for循环输出。
因为我数学不太好,不太能直接对一个菱形总结出一个数学模型,所以我才用了将之分为三个部分的方式来完成一个菱形。分别是:上部分,中间特殊行,下部分。对简单的规律总结主要是看变化量,可以得到上半部分的行数变化是0,1,2;归纳总结可以总结为输入正整数n/2行,对内部分析,上半部分空格的变化量是-1,使用外层for循环变量充当数学模型中的x,可以写出:y=-x+1+n/2;对于上半部分的字符可以总结为:y=2x-1;然后是重要的在两个内循环for外输出换行符,再在两个内循环所在外循环外放置单个for循环输出中间一行,这一行比较基础,后面的重复观测——统计归纳数学模型——转化为程序语言这里不做多阐述。
附上我写的代码,刚入门菜鸟一直,如果有改进建议欢迎评论区讨论。
#include<cstdio>
void rhombus (int a)
{
for(int b=1;b<=a/2;b++)
{
for(int c=1;c<=-b+a/2+1;c++)//打印空格
{
printf(" ");
}
for(int d=1;d<=2*b-1;d++)
{
printf("*");
}
printf("\n");
}
for(int c=1;c<=a;c++)
{
printf("*");
}
printf("\n");
for(int b=1;b<=a/2;b++)
{
for(int d=1;d<=b;d++)
{
printf(" ");
}
for(int c=1;c<=a-2*b;c++)
{
printf("*");
}
printf("\n");
}
}
int main()
{
int T,a;
scanf("%d",&T);
for(int b=1;b<=T;b++)
{
scanf("%d",&a);
rhombus(a);
}
return 0;
}
分享结束,谢谢观看。