2011-06-10 72 views
0

我正在使用'C底漆Plus',剛剛完成了編程練習,並且在第五章(操作員,表達式和語句)的最後一個上碰到了一堵磚牆, 。C底漆Plus編程練習題

的運動是:

編寫要求用戶輸入一個華氏溫度的程序。程序應該將溫度讀取爲一個double型數字,並將其作爲參數傳遞給用戶提供的名爲Temperatures()的函數。這個函數應該計算攝氏溫度和開氏溫度,並顯示所有三個溫度,精確到小數點右邊的兩個位置。它應該用它所代表的溫標來識別每個值。下面是華氏轉換爲攝氏下式:

攝氏= 1.8 *華氏+ 32.0

的絕對溫標,在科學常用,是一個標度,其中0表示絕對零度,下限到可能的溫度。下面是用於轉換到攝氏開爾文公式:

開爾文=攝氏+ 273.16

溫度()函數應使用常量來創建顯示在轉換的三個常數的符號表示。 main()函數應該使用循環來允許用戶重複輸入溫度,當輸入q或其他非數值時停止。

我的代碼是:

#include <stdio.h> 
void Temperatures(double); 
int main(void) 
{ 
    double farh; 
    printf("Enter a fahrenheit temperature: "); 
    scanf("%f", &farh); 
    printf("\n"); 
    Temperatures(farh); 
return 0; 

} 

void Temperatures(double f) 
{ 

    float c; 
    float k; 
    c = 1.8 * f + 32; 
    k = c + 273.16; 
    printf("Fahrenheit Celcius Kelvin\n"); 
    printf("%.2f %.2f %.2f\n", f, c, k); 

} 

我在哪裏出了錯? :只是胡說八道。

+1

f c k ?? ......... – crypted 2011-06-10 09:30:35

+1

華氏度,攝氏度,開爾文? – Anonymous 2011-06-10 09:31:32

+2

而'廢話'是指......?給我們一些輸入,預期輸出和實際輸出的例子。 – mdm 2011-06-10 09:32:30

回答

3

你要求通過scanf輸入float%f作爲輸入,但將其存儲爲double。 float和double通常具有不同的大小,如果是這樣,當試圖在double中存儲float時會發生垃圾。嘗試改用%lf,或將「farh」改爲浮動。

+0

啊謝謝,%lf是我在找的東西。 – Anonymous 2011-06-10 09:41:04

2

您正在使用scanf輸入並將其轉換爲某種類型,在這種情況下獲得華氏的float

scanf("%f", &farh); 

但是,您初始化farh爲雙...

... 
int main(void) 
{ 
double farh; 
... 

更改爲float farh;,看看有沒有什麼幫助。

更新。如果你想在一個雙,而不是浮動,然後代替上述情況,改變scanf的線是如下低於

在註釋中回答的問題:

scanf("%lf", &farh); 
+0

工作正常,但是如何從scanf中獲取double值呢? C Primer Plus說:打印浮點值 - printf()函數使用%f格式說明符使用十進制表示法打印浮點型和雙精度型的數字...我假設scanf在打印時具有與printf不同的行爲到%f呢?有任何想法嗎? – Anonymous 2011-06-10 09:39:03

+0

根據scanf文檔:http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ scanf(「%lf」,&double_farh)可能會獲得雙倍的竅門,而不是浮動。 – benosteen 2011-06-10 10:30:41

0

計算華氏攝氏度的公式是錯誤的..反而是

(°F - 32) x 5/9 = °C 

和ASLO鍛鍊; Tibial是要求轉換F到開爾文這樣: 飛輪海開爾文:

(5/9 * (Fahrenheit - 32) + 273). 

反正有人可以幫如何使這樣的:main()函數應該使用循環以允許用戶重複輸入溫度,當輸入aq或其他非數值時停止。 thnks

1

全面合作功能

void exc8(void){ 
    double Celtemp = 0; 
    double Fartemp = 0; 
    double Keltemp = 0; 
    printf("enter the temperature in Fahrenheit: ___\b\b\b"); 

    while (scanf_s("%lf",&Fartemp)==1) 
    { 
     Celtemp = (1.8 * Fartemp) + 32.0; 
     Keltemp = Celtemp + 273.16; 
     printf("\nThe temp %4.3lf in Far is equal are %4.3lf in Celc and %4.3lf in Kelv\n", Fartemp, Celtemp, Keltemp); 
     printf("Enter another one to convert or non number char for exit:___\b\b\b"); 

    } 

} 
-1

超越了運動的另一種版本。在這裏,我想讓函數返回值。但是,函數不能返回兩個值,而不會涉及更高級的主題,指針等。相反,我們將Celsius和Kelvin calcs分成兩個單獨的函數,並將它們返回到main()。

我試圖非常清楚地說明這個例子,注意在這個例子中使用了i和j,因爲它演示了這些變量是如何在函數本身中使用的,而不是在程序的主體中。 「fah」(用於fahrenheit)是發送給函數的變量,我們告訴函數返回哪些變量。請注意,這些函數的工作方式與代數函數的工作方式相同,它們基於相同的想法。 f(x)=(y)(z)。只有(y)(z)部分超出主程序的主體。在這個類比中,f(x)中的x是「傳遞」給函數的值。而「f」可以是我們想要的任何東西......所以我當然選擇了最明顯的名字,celcius和kelvin,然後可以在節目的主體中反覆地調用它們。將函數看作子例程。

#include <stdio.h> 
#include <stdlib.h> 

double celcius (double i); 
double kelvin (double j); 

int main() 
{ 
    double fah = 0.0; 

    printf("Enter a Fahrenheit temperature (or 'q' to quit): "); 

     while (scanf("%lf", &fah) == 1) 
     { 
      printf("Fahrenheit: \t%8.2lf", fah); 
      printf("\n"); 
      printf("Celcius: \t%8.2lf", celcius(fah)); // 1st function call 
      printf("\n"); 
      printf("Kelvin: \t%8.2lf", kelvin(fah)); // 2nd function call 
      printf("\n"); 

      printf("Enter another Fahrenheit temperature: "); 
     } 

    printf("goodbye"); 

    return 0; 

} 

double celcius (double i) // the value fah is "passed" to i. weird, right? 
{ 

    const double FRAC = (5.0/9.0); 
    const double FREEZE = 32.0; 
    double cel; // notice I have to define cel HERE, not in main. 

    cel = FRAC * (i - FREEZE); // the only place we see i 

    return cel; // here we tell the function which value to send back 

} 

double kelvin (double j) 
{ 
    const double ADD = 273.16; 
    double kel; // again, I must define the variable IN the function. 

    kel = ADD + ((5.0/9.0) * (j - 32.0)); 

    return kel; 
}