大家帮忙看看,哪里错了吗? 用c语言输出一个镂空的菱形

#include<stdio.h>
void main()
{
int i,j;
char c[5][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",c[i][j]);
printf("\n");
}
}

#include<stdio.h>

void main()

{

 int i,j;

 char c[5][5]={{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};//你一定要把这个数组初始化全,如果不写的话,就是0,必须要么是空格符,要么是*符

 for(i=0;i<5;i++)

 {

  for(j=0;j<5;j++)

   printf("%c",c[i][j]);

  printf("\n");

 }

}

结果如下:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-01
#include<stdio.h>
void main()
{
int i,j;
char c[6][6]={ //定义6*6
" * ", //想要什么图形,就画什么,不用想太多。
" * * ",
"* *",
" * * ",
" * "
};
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",c[i][j]);
printf("\n");
}
}
这样是不是简单了?
第2个回答  2013-02-01
  char c[5][5]={{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};

  这条初始化语句你没有将所有的25个元素赋值,只初始化了一部分元素,所以其他元素都是随机值,当你输出所有的25个元素的值时,那些随机值也会被输出到屏幕。
------------------------------------------
解决方案:
  (方案1)将25个元素全部初始化(空格补齐)
  (方案2)for循环中如果I>5/2+1时,输出*后跳出本次循环(结束本次循环可防止每行最后的*号后边的随机值输出。)
第3个回答  2013-02-01
如果就你这个程序而言的话,其他同学的回答已经指出了你的错误,并正确的解答了你的问题。

但是你这种打印菱形的方法很笨,不太灵活,就是硬生生的把菱形一个个的敲出来了,毫无逻辑性可言。我给你实现一种稍微灵活一点的方法。供你学习参考,不作为解答该问题。
#include<stdio.h>
int main()
{
int m = 1; // 定义边长
int i, j; // 控制行数和列数
int x; // 记录偏移量

while ( m )
{
printf("请输入菱形的边长,输入0结束:");
scanf("%d", &m);

if (m<0)
{
printf("\n*警告* 你输入的边长无效,请重新输入!\n");
}
else
{
for (i=0; i<2*m-1; i++)
{
if (i < m) // 计算偏移量
x = i;
else
x = 2 * m - i - 2;

for (j=0; j<2*m-1; j++)
{
// m-1是中间位置,距中间位置偏移量为x的位置打印*
if (j == m - 1 + x || j == m - 1 - x)
{
printf("*");
}
else // 否则打印空格
{
printf(" ");
}
}

printf("\n");
}
}
}

printf("\nThank you! bye!\n\n");
return 0;
}
第4个回答  2013-02-01
char c[5][5]默认初始化