2012-04-15 28 views
0

我目前正在做一個C編程課的基本介紹,對於我們目前的任務,我將編寫一個程序,使用循環將公里數轉換爲英里 - no if-else,switch語句或任何其他構造我們還沒有學會被允許。所以基本上我們只能使用循環和一些操作符。對於一個數字輸入,程序將使用while循環爲第一組計算生成三個相同的表(從1千米到輸入值開始),第二組爲循環,第三組爲循環。C編程 - 如何使用循環打印帶有小數部分的數字?

我寫整個程序,但我有一個有點問題與得到它的識別與小數分量的輸入。

的代碼讀取並轉換細整數,但是因爲只增量增加1也不會打印數與十進制組件(例如3.2,22.6等)。

有人能指出我在這個正確的方向?我非常感謝任何幫助! :)

+0

目前尚不清楚你的問題是什麼,我害怕。你可以編輯你的問題來提供你想要輸入的值(例如'3.2')的輸出嗎? – 2012-04-15 22:41:49

+0

是否計劃要接受多個輸入,然後產生多個輸出,或者你只需​​要輸入一公斤值和打印一個里程值? – RadBrad 2012-04-15 22:46:59

+0

@RadBrad它只需一次接受一個輸入,然後輸出從1公里到輸入值的所有轉換。 – californiagrown 2012-04-16 01:01:48

回答

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(公里)增加對每一行條目你需要的?如果不是,可能更好的解決方案是確定從一行到下一行的偏移量,它允許您在有限數量的行上在1.0和km之間進行迭代。

+0

是的,那是我確切的問題!我其實已經在程序中提供了你建議的代碼,但是我的表格仍然會結束,而不會爲3.2提供一個值。你有沒有嘗試過使用你的編譯器?對你起作用嗎? – californiagrown 2012-04-16 01:12:13

+0

@californiagrown - 是的,這是有道理的,因爲count> km是爲了突破第一個循環。 ((count - 1) mah 2012-04-16 01:28:47

+0

Ahhh確實有道理!我把'while'改成了你的建議,並且在循環變得無限的時候加入了break語句 - 它的功能就像一個魅力!非常感謝你的幫助! :) – californiagrown 2012-04-16 02:26:35

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(); 
    } 
+0

我的教授希望我們保持精確性,所以這段代碼不會完成任務。感謝您花時間幫助我! – californiagrown 2012-04-16 01:07:12

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); 

或包含性的‘最終結果’,以防止最後兩個結果是相同的,如果使用的整數:

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

您已成功打印整個數值,但需要在完成時打印最終值。所有你需要做的最後(上面)是將​​值直接從公里轉換爲英里。

+0

其實我有你在我的計劃張貼後者代碼(因爲你說我不想最後兩個結果是一樣的,如果使用一個整數),但是當我編譯並運行它,輸出仍然停止如果我輸入3.2,則爲3.000。唉唉! – californiagrown 2012-04-16 00:42:16

+0

想通了!非常感謝您的投入! – californiagrown 2012-04-16 03:13:37