1

こんにちは、私は c の書き方を学んでいる初心者です。正の整数を入力するよう促し、0 を入力すると終了し、0 より前の数値が少なくとも 2 つの正の整数であるコードをどのように作成するのか疑問に思っていました。次に、プログラムは最大の正の整数入力と最小の整数入力を決定します。

#include <stdio.h>

int main(void)
{
    int integer=0, largest_int, smallest_int;

    while (integer) {
        printf("Please enter a positive integer: \n");
        scanf("%d", &integer);
        if (integer = 0) {
            while (integer<=0) {
                printf("Please enter a positive integer: \n");
                scanf("%d", &integer);
                    if (integer>0) {
                        printf("Please enter a positive integer: \n");
                        scanf("%d", &integer);

                        if (integer>0) {
                            printf("the largest integer is.....and the smallest integer is......");printf("Please enter a positive integer: \n");
                            break;
                        }
                        else {
                            printf("Please enter a positive integer: \n");
                            scanf("%d", &integer);
                        }
                }
            }
        }
    }

    return 0;
}

最初は do/while ループを使用しようとしましたが、まったく機能しませんでした。

また、ループ内に if ese ステートメントがある場合に、コンパイラがループを読み取る方法にも頭を悩ませています。

これが私が考えていたことです:2つの正の数を入力するまで、「正の整数を入力してください」を繰り返し尋ねることを考えました。次に、次の入力がゼロに等しいかどうかをプログラムにチェックさせます。そうでない場合は、ループを再開します。ユーザーが少なくとも 2 つの正の整数を入力してからゼロを入力すると、ループが中断され、最大の int と最小の int が出力されます。また、私を混乱させるのは、整数を 100000000000000000000 回入力し続けることができるため、すべてのユーザーの入力をフィルタリングしてこれらの値を決定する方法です。

4

4 に答える 4

1

これは宿題のように思えるので、熟考するためのいくつかのポイントがあります。

直前にゼロにwhile (integer)初期化するため、実行されることはありません。integerしたがって、実際にあるのはwhile(0)であり、ループ内では何も実行されません。これを a に置き換えることもできますがdo { ... } while(condition)、現在のループの種類を維持し、ループの前に追加の入力読み取りを追加したいと思います (理由は、最大値と最小値を見つけるための変数を初期化するためです。以下を参照してください)。

変数を追加します。たとえばNPos、正の整数である最後のエントリの数をカウントします。ゼロに初期化します。数値を入力するたびに、それが正の場合は の値を増やしますNPos。それ以外の場合は、ゼロに設定します (エントリがゼロであるかのように、リセットではなく実行の停止を意味する場合があるため、これは注意が必要ですNPos)。入力した数が 0 の場合は、それNPosが 2 以上であることを確認し、そうであれば停止します。

極値を見つけるには、2 つの変数 (maxおよびmin) を作成し、それらを最初のユーザー入力に初期化します。次に、各有効な入力 (実行の終了を意味する入力ではない) で、値が より大きいmaxか小さいかを確認しますminmaxその場合は、 orminを入力に置き換えます。

これらは、アルゴリズムのより大きな行です。実装はあなた次第です。

最後の注意: 私は value に名前を付けるのは好きintegerではありませんが、それは私だけかもしれません。

于 2012-10-12T15:55:42.003 に答える
0

これは解決策ではありませんが、コードにいくつかのコーディング エラーがあります。

あなたのコードは次のように最初に動作しません

 int integer=0, largest_int, smallest_int;

            while (integer) {
                    ........
                            }

ここで整数は 0 で、最初のチェックで出てくる while でこれを与えています。

于 2012-10-12T15:55:58.187 に答える
0

#include <limits.h>
#include <stdio.h>

int main() {
  int integer, largest_int = INT_MIN, smallest_int = INT_MAX;
  int count_positive = 0;

  for ( ; ; ) {
    printf("Please enter a positive integer: \n");
    scanf("%d", &integer); //XXX add error handling
    if (integer == 0 && count_positive > 1) 
      break;
    else if (integer > 0) {
      count_positive = count_positive > 1 ? 2 : count_positive + 1;
      if (largest_int < integer)
        largest_int = integer;
      if (smallest_int > integer)
        smallest_int = integer;
    }
  }
  printf("%d %d\n", smallest_int, largest_int);
  return 0;
}

「少なくとも 2 つの正の整数」の要件が連続している必要があることを意味する場合は、0 以下の整数に遭遇したときに count_positive を 0 にリセットします。ループに追加:

else if (integer <= 0) 
  count_positive = 0;
于 2012-10-12T15:56:08.453 に答える
0
#include <stdio.h>
#include <limits.h>

int main(void)
{
    int integer, largest_int=INT_MIN, smallest_int=INT_MAX;

    do
    {
        printf("Enter a positive integer: ");
        scanf("%d", &integer);
        if (integer < 0)
        continue;
        else if (integer == 0)
        break;
        else
        {
            if (integer > largest_int)
            largest_int = integer;
            if (integer < smallest_int)
            smallest_int = integer;
        }
    } while(1);

    printf("Largest integer is %d\nSmallest integer is %d", largest_int, smallest_int);
}
于 2012-10-12T15:56:25.667 に答える