-2

次の図 (2 つの三角形が交わる) を表示する必要があります (n は奇数)。図はこのリンクにあります: http://i.imgur.com/mQxarLz.jpg

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

私はすでにこのコードを書いていますが、n を与える方法がわかりません。n は奇数です。私のコードはコンパイルされません。「5行目、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は実際に何かを書き込む前に 2 番目の "for" ループで読み取られるため、最初に n を読み取るようにしてくださいつまり、nにはその時点でゴミが含まれています。

于 2013-04-24T18:39:03.200 に答える
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 に答える