编写代码以绘制菱形的问题

时间:2014-11-06 16:39:36

标签: c diagonal

所以我已经分配了一个代码,它会问我“w”。输入一个数字后,它将创建一个菱形,对角线为2w。菱形必须由间隔和*组成。我现在面临的问题是,当我输入w = 5时,对角线是5而不是10 ....

main()
{
int w;
int i;
int j;

printf("w: ");
scanf("%d", &w);
printf("");

i = 0;
while (w >= i)
{
    for (j = 0; j < (w - i); j++)
        printf(" ");
    for (j = 0; j < i + 1; j++) {
        printf("*");
        if (j <= i) {
            printf(" ");
        }
    }
    printf("\n");
    i = i + 1;
}
i = w - 1;
while (i >= 0)
{
    for (j = 0; j < (w - i); j++)
        printf(" ");
    for (j = 0; j < i + 1; j++) {
        printf("*");
        if (j <= i) {
            printf(" ");
        }
    }
    printf("\n");
    i = i - 1;
}
return 0;
}

2 个答案:

答案 0 :(得分:2)

如果添加行w = 2 *(w-1)+ 1;在任何循环之前,你得到正确数量的* s打印出来(我只是寻找你得到的模式并修改输入)

你也可以只用一个循环来解决这个问题!

编辑:

#include <stdio.h>
#include <math.h>

#define min(a, b) (((a) < (b)) ? (a) : (b))
int main(){

    int input, row, column;

    printf("input a number: ");
    scanf("%d", &input);
    printf("");

    input = 2*(input-1) + 1;
    int pivot = input;
    int total_spaces = input*2+1;
    for(row = 0; row < total_spaces; row++){
        for(column = 0; column < total_spaces; column ++){
            if(min(abs(total_spaces - row -1),abs(0 - row)) +
                  min(abs(total_spaces - column -1),abs(0 - column)) 
                        >= input && (row%2 != column %2)){
                printf("*");
            }
            else printf(" ");
       }
       printf("\n");
    } 
}

那真是太棒了!

答案 1 :(得分:-1)

我运行了你的程序,我有这个:

/a.out
w: 5
     *
    * *
   * * *
  * * * *
 * * * * *
* * * * * *
 * * * * *
  * * * *
   * * *
    * *
     *

我看不到你的对角线在哪里5.你能更具体一点吗?

另外,我理解这对你来说可能并不重要,但是你的代码不能编译。 至少在主要功能之前添加int