本帖最后由 wAterLoo 于 2012-3-18 00:10 编辑
修改后的代码#include <stdio.h>
int main()
{
// i 用于控制输出的行数
// j 用于控制每行空格输出
// k 用于控制每行星星的输出
int i, j, k;
//打印上半部分
/*
* 1
*** 2
***** 3
******* 4
*/
// 这里我把i由0该为1,可以更好的理解
// 当i 等于1的时候,表示程序要打印第一行的空格和星星
for (i = 1; i <= 4; i++)
{
//打印空格
/*
* 1
*** 2
***** 3
******* 4
*/
// 这里要注意有一个逻辑,也就是每行中要打印几个空格的逻辑
// 注意观察,第一行要打印3个空格,第二行要打印2个,第三行打印1个,第四行0个
// 空格的数量 正好满足 spcaceCount = 4 -i 这个关系式
// 由于每次只能打印一个空格字符,所以这里用一个循环,循环4-i次 输出空格
for (j = 1; j <= 4 - i; j++)
printf(" ");
// 星星又有什么逻辑呢?
// 第一行 1星,第二行 3星,第三行 5星 ......
// 正好满足 starCount = 2 * i -1
// 由于每次只能打印一个星星字符,所以这里用一个循环,循环2 * i -1次 输出星星
for (k = 1; k <= 2 * i - 1; k++)
printf("*");
printf("\n");
}
/*
*******
*****
***
*
*/
// 这里是输出下半部分
// 可以按照我上半段的思路来分析
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= i; j++)
printf(" ");
for (k = 0; k <= 4 - 2 * i; k++)
printf("*");
printf("\n");
}
return 0;
}
下面是我以前写的代码,楼主可以借鉴下
可以输出任意长度的菱形哦#include <stdio.h>
void draw(int rowCount);
int main()
{
int rowCount = 14;
draw(rowCount);
return 1;
}
/*
*
***
*
*/
void draw(int rowCount){
if(!(rowCount % 2))
{
printf("rowCount 必须是一个奇数!!!!");
return;
}
int maxStarCount; // 所有行中,最多能输出星星的数量
int maxStarCountRow; // 所有行中, 输出最多星星的数量的行
int starCount; // 行,输出星星的数量
int sapceCount; // 行,输出空格的数量
int spaceAndStarCount;
// 其实这个程序无非就是打印空格和星星
// 只要把其中的逻辑弄清楚了,就很简单了
int row,column;
maxStarCountRow = (rowCount + 1) / 2;
maxStarCount = maxStarCountRow * 2 -1;
// 控制行
for(row = 1; row <= rowCount; row ++)
{
// 计算当前所在行要打印的星星的数量
if(row <= maxStarCountRow) starCount = row * 2 -1;
else
starCount = (2 * maxStarCountRow - row) * 2 -1;
// 计算当前所在行要打印的空格的数量
sapceCount = (maxStarCount - starCount) / 2;
// 星星和空格的总数量
spaceAndStarCount = sapceCount + starCount;
// 控制列
for(column = 1; column <= spaceAndStarCount; column ++)
{
// 空格
if(column <= sapceCount){
printf(" ");
}
//星星
else
{
printf("*");
}
}
printf("\n");
}
}
|