2

私は、ハーバードのオンライン CS50 クラスでいくつかの初歩的な問題セットに取り組んでいました。問題は正しく機能しましたが、プログラムを機能させるためのよりクリーンな方法やより良い方法があるのではないかと考えていました。

このプログラムの目的は、ハッシュ タグとスペース文字で構成される右揃えのピラミッドを出力することです。スタイルやトリックに関するガイダンスは大歓迎です。

/* Creating the mario program, whose goal is to create a 
*  pyramid by accepting input from the user to get the 
*  height then aligning the pyrimid to the right.
*
*/

#include <stdio.h>
#include <cs50.h>

int main(void)
{

    // get user input and set to variable
    printf("Height: ");
    int height = GetInt();

    int i, j, k;
    for(i = 1 ; i < height; i++)
    {

        // create n-1 spaces
        for(k = (height - 2); k > (i-1); k--)
        {
            printf("%c", ' ');      
        }

        // create n+1 hash tags
        for(j = 0; j < (i+1); j++)
        {
            printf("#");
        }

        printf("\n");
    }
    return 0;
}
4

4 に答える 4

2

クリーナーとは、「スパイシーでファンシーな」という意味だと思います。

これは私には気の利いたように見えます:

#include <stdio.h>
#include <cs50.h>

int main(void) {
    // get user input and set to variable
    printf("Height: ");
    int height = GetInt();
    int hm2 = height - 2;

    int j, k;
    for(int i = 1 ; i < height; i++) {
        // create n-1 spaces
        for(k = hm2; k > (i-1); k--)
            printf("%c", ' ');      

        // create n+1 hash tags
        for(j = 0; j < (i+1); j++)
            printf("#");

        printf("\n");
    }
    return 0;
}

ただし、コードを凝ったものにすることに夢中になりすぎないでください。他の人や自分自身と一緒に仕事をするのはいいことですが。あなたの例はうまく見えました。

さて、最適化については、心配する必要があります。最適化が多すぎると、プログラムが壊れる可能性があることを覚えておいてください。

于 2013-11-24T22:47:36.837 に答える
0

ここに提案があります:

#include <stdio.h>
#include <cs50.h>

int main(void) {
    //initialize variables
    int height, hm2, j, k, i;

    printf("Height: \n");
    // Get user input
    height = GetInt();
    hm2 = height - 1;
    for(i = 0; i < height; i++) {
        // create n spaces
        for(k = hm2; k > i; k--)
            printf("%c", ' ');      

        // create n+1 hash tags
        for(j = 0; j < i+1; j++)
            printf("#");

        printf("\n");
    }
    return 0;
}

ユーザーが高さとして 5 を入力した場合の結果:

Height: 
    #
   ##
  ###
 ####
#####

このバージョンのコードで考慮した点がいくつかあります。

- C では、すべての変数を値を与えるのとは別に宣言し、後で値を割り当てることをお勧めします。一部のコンパイラでは、for ループで値を宣言して代入すると、「エラー: 'for' ループの初期宣言は C99 モードでのみ許可されています」というエラーが表示される場合があります。これらの変更は、私が提供したものと見なされます。

//initialize variables                                                            
int height, hm2, j, k, i;

-ここに改行を追加しました

printf("Height: \n");

- hm2 = height - 2 の代わりに、次のように変更しました。

hm2 = height - 1;

-最初のループでは、ia 値を指定し、それを 0 に設定して、行われた他の変更に対応します。

for(i = 0; i < height; i++) {

-n個のスペースを作成するループの場合、次のように変更しました。

for(k = hm2; k > i; k--)

-最後に最後の for ループで括弧を削除しました (この場合は必要ありません):

for(j = 0; j < i+1; j++)

乾杯

于 2017-08-29T19:40:16.473 に答える