1

いくつかのifステートメントを配置したforループがあります。これらの条件の目的は、数値の除算性をチェックし、数値が3で割り切れる場合は文字列を出力することです。数値が5で割り切れる場合は、別の文字列が出力されます。ただし、数値が3と5の両方で割り切れる場合は、他の文字列ではなく、まったく異なる文字列が代わりに出力されます。

これが私のコードです:

for (i = 1; i <= file_int; i++){
     if (i % 3 == 0) {
        printf("Hoppity \n");
    }
    if (i % 5 == 0) {
        printf("Hophop \n");
    }
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Hop \n");
    }   
}

ご覧のとおり、最後の条件は完全には機能しません。どのタイプの制御構造を使用する必要がありますか?そうしないと?

どうもありがとう。

4

4 に答える 4

3
for (i = 1; i <= file_int; i++){
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Five and three\n");
    } else if (i % 3 == 0) {
        printf("Three\n");
    } else if (i % 5 == 0) {
        printf("Five\n");
    } else {
        printf("None of the conditions passed\n");
    }
}
于 2011-12-29T21:32:50.443 に答える
1

私はそれを使っelse-ifsて私たちを作ります

(i % 5 == 0 && i % 3 == 0) <=> (i % 15 == 0)

for (i = 1; i <= file_int; i++){
  if (i % 15 == 0)
    printf("Hop \n");
  else if (i % 3 == 0)
    printf("Hoppity \n");
  else if (i % 5 == 0)
    printf("Hophop \n"); 
}

もちろん、for-loop以外の制御構造をまったく使用せずに回避することもできます。

const char* values[15] = {"Hop \n", "", "", "Hoppity \n", "", 
                          "Hophop \n", "Hoppity \n", "", "", "Hoppity \n", 
                          "Hophop \n", "", "Hoppity \n", "", ""};
for (int i = 1; i <= 100; i++) 
  printf(values[i % 15]);

この例では、その解決策は少し狂っていますが、別の方法で物事を行う方法を示しています(1つの関数に特定の数を超える分岐パスが存在しないコードを作成する場合はそれほど先取りされていません(熱心なコーディング規約)。 。))。

于 2011-12-29T21:58:34.700 に答える
0

元のコードに近づけるための代替ソリューション。ソリューションは確かelseにより効率的(そしてエレガント)ですが。

for (i = 1; i <= file_int; i++){
    if (i % 3 == 0 && i % 5 != 0) {
        printf("Hoppity \n");
    }
    if (i % 5 == 0 && i % 3 != 0) {
        printf("Hophop \n");
    }
    if (i % 5 == 0 && i % 3 == 0) {
        printf("Hop \n");
    }   
}
于 2011-12-29T21:40:06.870 に答える
0

boolからへの変換を悪用するため、読みにくくなる可能性があるため、お勧めしませんint

int msg = (i % 3 == 0) + 2*(i % 5 == 0);
switch ( msg ) {
case 3:
   cout << "Multiple of 3 and 5";
case 2: 
   cout << "Multiple of 5";
case 1:
   cout << "Multiple of 3";
}

これはさらに次のように要約できます。

const char* msgs[] = { "", "Multiple 3", "Multiple 5", "Multiple 3 and 5" };
cout << msgs[ (i%3==0) + 2*(i%5==0) ];

もちろん、どちらの解決策も、if構文ではなく、最初のケースではifの使用を避け、2番目のケースでは一般に分岐するため、質問自体に反します。

于 2011-12-29T23:03:33.790 に答える