C程序 - 当n为奇数时编码n给出的数字?

时间:2013-04-24 18:26:58

标签: c

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

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

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

#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;
}

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分: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);
}

请注意,如果三角形的底座与其高度不同步,上面的代码会表现得很奇怪 - 我故意将其留下,随意改进程序。

答案 2 :(得分: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;
}