C语言| 输出菱形*-CSDN博客
凡事还是得自己独立思考后,写一遍程序才能发现问题所在。
容易犯的错误:
【完整程序+注释】
运行结果
/*
输出菱形
1 总行数 n为奇数,分上三角形+下三角形,只考虑左边的空格和星号*
2 上三角形 行数==(n+1)/2
星号*为等差数列,公差为2,an=a1+(n-1)*d ,所以第i行的星号为1+(i-1)*2= {2*i-1}个
第i行的左边空格是 【行数-i】
3 下三角形 行数==上三角行数-1=(n+1)/2 -1
下三角形的首行* == 上三角形倒数第二行 == 对称行的前一行 == 2*{(n+1)/2 -1}-1 == {n-2}个
星号*为等差数列,公差为-2,an=a1+(n-1)*d,所以第i行的星号为{n-2}+(i-1)* -2== {n-2i}个
第i行的左边空格是i
4 因为需要用到for嵌套循环,才能把菱形打印出来
for循环上三角形的行数-->for循环打印空格---for循环打印星号*
for循环下三角形的行数-->for循环打印空格---for循环打印星号*
循环的变量范围,是变量的取值。行数的值--空格的值--星号的值
5 行数从1开始,空格和星号从0开始,
所以 int i = 1; int j = 0;
*/
#include <stdio.h>
int main(void)
{
int n = 0; //定义菱形的总行数
int i; //定义行数的循环变量
int j; //定义空格和星号*的数量的循环变量
printf("请输入行数:");
scanf("%d", &n);
//上面的三角形,包含对称行,行数==(n+1)/2
for(i=1; i<=(n+1)/2; i++)
{
//打印空格,范围左边空格的数量
for(j=0; j<(n+1)/2-i; j++)
{
printf(" ");
}
//打印星号*,范围是*的数量
for(j=0; j<2*i-1; j++)
{
printf("*");
}
printf("\n"); //每次循环一遍,把打印的空格和星号换行输出;缺少这句就会放在同一行输出
}
//下面的三角形,行数==n/2
for(i=1; i<=n/2; i++)
{
//打印空格
for(j=0; j<i; j++)
{
printf(" ");
}
//打印星号
for(j=0; j<n-2*i; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}