0

私は現在、C プログラミング クラスの基礎を学んでいます。現在の課題では、ループを使用してキロメートルをマイルに変換するプログラムを作成する必要があります。まだ学習していないことは許可されています。したがって、基本的にはループといくつかの演算子しか使用できません。プログラムは、最初の計算セットに while ループ、2 番目に for ループ、3 番目に do ループを使用して、1 つの数値入力に対して 3 つの同一のテーブル (1 キロメートルから入力値まで) を生成します。

プログラム全体を作成しましたが、10 進コンポーネントを含む入力を認識させるのに少し問題があります。

コードは整数を読み込んで変換しますが、インクリメントは 1 だけ増加するため、小数部分 (3.2、22.6 など) を含む数値は表示されません。

誰かがこれについて正しい方向に私を向けることができますか? 助けていただければ幸いです。:)

4

3 に答える 3

0

出力として何を取得しようとしているのかは明確ではありません。3.2 から開始する例を使用するため、それに基づいて、現在のプログラムに基づいて、出力は次のようになります。

 KILOMETERS       MILES    (while loop)
 ==========       =====
   1.000          0.620
   2.000          1.240
   3.000          1.860

3.2 の値を出さずにテーブルが終了する問題はありますか? これを解決する簡単な方法 (必要に応じてループ ステートメントのみを使用) は、次のコードを追加することです。

while (count < km)
{
    printf ("%8.3lf %14.3lf\n", km, KM_TO_MILE * km);
    count = km;
}

これは本当にif変装した声明であり、あなたの教授がそれを受け入れるかどうかはわかりませんが、出力の最終行を提供します.

ラインごとに 1.0 (km) ずつ増加するエントリを出す必要がありますか? そうでない場合、おそらくより良い解決策は、ある行から次の行へのオフセットを決定することです。これにより、有限数の行で 1.0 と km の間を反復できます。

于 2012-04-15T22:38:28.413 に答える
0

簡単な解決策は、入力 ( km) に 10、100、または 1000 を掛けることです。次に、結果 ( mi) を同じ定数で割ります。ただし、ループ内で結果を出力することは避け、そこから取り出してください。ただし、精度が低下する可能性があります (それは次の演習です :)

#include <stdio.h>
#define KM_TO_MILE .62 

#define NAMEITHOWYOULIKE 100.0

main (void)
{
  double km, mi, count;                                                          

  printf ("This program converts kilometers to miles.\n");

    do                                                                      
    {
           printf ("\nEnter a positive non-zero number");                   
           printf (" of kilometers of the race:  ");
           scanf  ("%lf", &km);                                             
           getchar();                                                      
    }while (km <= 1);                                                       

    km = km * NAMEITHOWYOULIKE;

    printf ("\n KILOMETERS       MILES    (while loop)\n");                      
    printf (" ==========       =====\n");

    count = 1;                                                              
    while (count <= km)                                                     
    {                                                                       
          mi = KM_TO_MILE * count;
     ++count;                                                                           
    }
    printf ("%8.3lf %14.3lf\n", count/NAMEITHOWYOULIKE, mi/NAMEITHOWYOULIKE);                  
    getchar();
    }
于 2012-04-15T22:44:10.177 に答える
0

これを出力したい場合:

 KILOMETERS       MILES    (while loop)
 ==========       =====
   1.000          0.620
   2.000          1.240
   3.000          1.860
   3.200          1.984

ループの後に次を追加するだけwhileです(排他的な「最終結果」のために):

mi = KM_TO_MILE * km;
printf("%8.3lf %14.3lf\n", km, mi);

または、整数が使用されている場合に最後の 2 つの結果が同じになるのを防ぐための包括的な「最終結果」:

while (km > count)
{
    mi = KM_TO_MILE * km;
    printf("%8.3lf %14.3lf\n", km, mi);
    break;
}

整数値を正常に出力しましたが、完了したら最終値を出力する必要があります。最後 (上記) で行う必要があるのは、値をキロメートルからマイルに直接変換することだけです。

于 2012-04-15T22:46:43.130 に答える