-2

我必须显示用户给定的下图(两个三角形截距),其中 n 是奇数。该图在此链接中:http: //i.imgur.com/mQxarLz.jpg

*******
 *****
  ***
   *
   *
  ***
 *****
*******

我已经写了这段代码,但我不知道如何给出 n,其中 n 是奇数。而且我的代码无法编译;它说:“在第五行,for 之前的语法错误”。

#include <stdio.h>
int main (void) {
    int n,i,k,m;

    for(m=0;m<2;m++)
        for  (i=1;i<=n;i++){ 
            if(m==0){    
                for(k = 1; k<=n-i; k++){        
                    printf("  ");      
                }   
            } 
        }
    for (k=1;k<2*i;k++){   
        printf("%s","*");   
        //printf("%d",i);
    }

    scanf("%d",&n);

    for (k = 1; k<=i;k++)
        for (k=1;k<(n-i)*2;k++)
           for (i=1;i<=n;i++) {   
               printf("\n$"); 
           }
    return 0;
}
4

3 回答 3

6

首先,“如何检查整数是否为奇数”的答案:您只需除以 2 并检查余数是 0(偶数)还是 1(奇数)。在 C 和大多数相关语言中,这就是模运算符 "%" 的作用:

if ((n % 2) == 1) {
    // The number is odd.
}

但是你应该确保你在一开始就阅读了你的n,因为在你提交的代码中,n在你真正写东西之前在你的第二个“for”循环中被读取。这意味着,此时n包含垃圾。

于 2013-04-24T18:39:03.200 回答
2

好的编程是以你能找到的最简单的方式解决问题。这个特定的算法是非常基础的东西,因此你不应该得到比这更复杂的东西:

#include <stdio.h>
#include <stdbool.h>

void print_chars (char symbol, int n)
{
  for(int i=0; i<n; i++)
  {
    printf("%c", symbol);
  }
}

void print_triangle (int base_size, int height, bool pointing_up)
{
  int star_count = pointing_up ? 1 : base_size;

  for(int row = 0; row < height; row++)
  {
    int spaces = base_size - star_count;

    print_chars (' ', spaces/2);
    print_chars ('*', star_count);
    print_chars (' ', spaces/2);

    printf("%\n");
    star_count += pointing_up ? 2 : -2;
  }
}

int main (void)
{
  print_triangle(7, 4, false);
  print_triangle(7, 4, true);
}

请注意,如果三角形的底边与其高度不同步,上面的代码会表现得很奇怪——我故意把它省略了,随时可以进一步改进程序。

于 2013-04-24T20:34:12.920 回答
0
#include <stdio.h>

void printAsterisk(int n, int length){
    int i, slen = (length - n)/2;
    for(i=0;i < slen;++i)
        putchar(' ');
    for(i=0;i < n;++i)
        putchar('*');
    putchar('\n');
}
/* non-recursive
void printTriangle(int n, int length){//n isn't required as an argument
    int d= -2;
    for(; n < length + 1; n += d){
        if(n < 0) n += (d *= -1);
        printAsterisk(n, length);
    }
}
*/    
void printTriangle(int n, int length){
    if(n < 1) return;
    printAsterisk(n, length);
    printTriangle(n - 2, length);
    printAsterisk(n, length);
}

int main(void){
    int n;
    do{
        printf("input odd number:");
        scanf("%d", &n);
    }while(n % 2 == 0);

    printTriangle(n, n);

    return 0;
}
于 2013-04-24T18:56:59.993 回答