C Primer Plus (第五版) 第五章 程式設計練習 答案
1. 編寫一個程式。將用分鐘表示的時間轉換成以小時和分鐘表示的時間。使用#define或者const來建立一個代表60的符號常量。使用while迴圈來允許使用者重複鍵入值,並且當鍵入一個小於等於0的時間時終止迴圈。
2. 編寫一個程式,此程式要求輸入一整數,然後列印出從(包括)輸入的值到(包括)比輸入的值大10的所有整數值(也就是說,如果輸入為5,那麼輸出就從5到15)。要求在各個輸出值之間用空格、製表符或換行符分。
3. 編寫一個程式,該程式要求使用者輸入天數,然後將該值轉換為週數和天數。例如,此程式將把18天轉換成2周4天。用下面的格式顯示結果:
18 days are 2 weeks, 4 days.
使用一個while迴圈讓使用者重複輸入天數;當使用者輸入一個非正數(如0或-20)時,程式將終止迴圈。
4. 編寫一個程式讓使用者按釐米輸入一個高度值,然後,程式按照釐米和英尺英寸顯示這個高度值。允許釐米和英寸的值出現小數部分。程式允許使用者繼續輸入,直到使用者輸入一個非正的數值。程式執行的示例如下面所示:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters(<=O to quit): 168
168.0 cm = 5 feet, 6.1 inches
Enter a height in centimeters(<=O to quit): 0
bye
5. 改寫用來找到前20個整數之和的程式addemup.c(程式清單5.13)(如果您願意,可以把addemup.c程式看成是一個計算如果您第一天得到$l,第二天得到$2,第三天得到$3,以此類推,您在20天裡會掙多少錢的程式)。修改該程式,目的是您能互動地告訴程式計算將進行到哪裡。也就是說,用一個讀入的變數來代替20。
6. 現在修改程式設計練習5中的程式,使它能夠計算整數平方的和(如果您喜歡,可以這樣認為:如果您第一天得到$l,第二天得到$4,第三天得到$9,以此類推您將得到多少錢。這看起來像一個很好的買賣)。C沒有平方函式,但是您可以利用n的平方是n*n的事實。
7. 編寫一個程式,該程式要求輸入一個float型數並列印該數的立方值。使用您自己設計的函式來計算該值的立方並且將它的立方列印出來。main()程式把輸入的值傳遞給該函式。
8. 編寫一個程式,該程式要求使用者輸入一個華氏溫度。程式以double型別讀入溫度值,並將它作為一個引數傳遞給使用者提供的函式Temperatures()。該函式將計算相應的攝氏溫度和絕對溫度,並以小數點右邊有兩位數字的精度顯示這三種溫度。它應該用每個值所代表的溫度刻度來標識這3個值。下面是將華氏溫度轉換成攝氏溫度的方程:
Celsius = 1.8 * Fahreneit + 32.0
通常科學上的絕對溫度的刻度是0代表絕對零,是可能溫度的下界。下面是將攝氏溫度轉換為絕對溫度的方程:
Kelvin=Celsius+273.16
Temperatures()函式使用const來建立代表該轉換裡的3個常量的符號。main()函式將使用一個迴圈來允許使用者重複地輸入溫度,當使用者輸入q或其他非數字值時,迴圈結束。
#include <stdio.h>
#define M_PER_H 60 // 一小時有60分鐘
int main(void)
{
int min,hour,left; // min:minute, left: 剩餘分鐘數
printf("請輸入分鐘數(0或負數終止迴圈):\n");
scanf("%d",&min);
while (min > 0)
{
hour = min / M_PER_H
left = min % M_PER_H;
printf("%d minutes are %d hours, %d minutes.\n",min,hour,left);
printf("再一次輸入分鐘數(0或負數終止迴圈):");
scanf("%d",&min);
}
printf("That's all!\n");
return 0;
}
Ouput:2. 編寫一個程式,此程式要求輸入一整數,然後列印出從(包括)輸入的值到(包括)比輸入的值大10的所有整數值(也就是說,如果輸入為5,那麼輸出就從5到15)。要求在各個輸出值之間用空格、製表符或換行符分。
#include <stdio.h>
int main(void)
{
int num,end; // end:列印結束的值
printf("請輸入一個整數:\n");
scanf("%d",&num);
end = num + 10;
while (num <= end)
{
printf("%d ",num); // 各輸出值之間用空格分開
num++;
}
printf("\n");
return 0;
}
/* 方法2
#include <stdio.h>
int main(void)
{
int num, end;
printf("請輸入一個整數:");
scanf("%d", &num);
end = 11;
while (end-- > 0)
{
printf("%d\t", num++);
}
printf("\n");
return 0;
}
*/
/* 方法3
#include <stdio.h>
int main(void)
{
int num, end;
end = 0;
printf("請輸入一個整數:");
scanf("%d", &num);
while (end++ < 11)
{
printf("%d\n", num++);
}
printf("\n");
return 0;
}
*/
Output:3. 編寫一個程式,該程式要求使用者輸入天數,然後將該值轉換為週數和天數。例如,此程式將把18天轉換成2周4天。用下面的格式顯示結果:
18 days are 2 weeks, 4 days.
使用一個while迴圈讓使用者重複輸入天數;當使用者輸入一個非正數(如0或-20)時,程式將終止迴圈。
#include <stdio.h>
#define D_PER_W 7 // 一個星期有7天
int main(void)
{
int days,weeks,left; // left(left days)
printf("請輸入天數(0或負數退出程式):\n");
scanf("%d",&days);
while (days > 0)
{
weeks = days / D_PER_W;
left = days % D_PER_W;
printf("%d days are %d weeks, %d days.\n",days,weeks,left);
// printf("%d days are %d weeks, %d days.\n",days,days / D_PER_W,days % D_PER_W); 直接輸出和先賦值再輸出有什麼區別
printf("再一次輸入天數(0或負數退出程式):");
scanf("%d",&days);
}
return 0;
}
Output:4. 編寫一個程式讓使用者按釐米輸入一個高度值,然後,程式按照釐米和英尺英寸顯示這個高度值。允許釐米和英寸的值出現小數部分。程式允許使用者繼續輸入,直到使用者輸入一個非正的數值。程式執行的示例如下面所示:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters(<=O to quit): 168
168.0 cm = 5 feet, 6.1 inches
Enter a height in centimeters(<=O to quit): 0
bye
#include <stdio.h>
#define C_PER_I 2.54 // 一英寸等於2.54釐米
#define I_PER_F 12 // 一英尺等於12英寸
int main(void)
{
double cm; // cm = centimeter
double inch;
int feet;
printf("Enter a height in centimeters: ");
scanf("%lf",&cm);
while (cm > 0)
{
inch = cm / C_PER_I;
feet = (int)inch / I_PER_F;
printf("%.1f cm = %d feet, %.1f inches\n",cm,feet,inch);
// printf("%.1f cm = %d feet, %.1f inches\n",cm,feet,inch - feet * I_PER_F); 按照書上思路列印
printf("Enter a height in centimeters (<=0 to quit): ");
scanf("%lf",&cm);
}
printf("bye\n");
return 0;
}
Output:5. 改寫用來找到前20個整數之和的程式addemup.c(程式清單5.13)(如果您願意,可以把addemup.c程式看成是一個計算如果您第一天得到$l,第二天得到$2,第三天得到$3,以此類推,您在20天裡會掙多少錢的程式)。修改該程式,目的是您能互動地告訴程式計算將進行到哪裡。也就是說,用一個讀入的變數來代替20。
#include <stdio.h>
int main(void)
{
int count, sum;
int num;
printf("請輸入一個整數,求1到這個數的和:\n");
scanf("%d",&num);
count = 0;
sum = 0;
while (count++ < num)
sum = sum + count;
printf("sum = %d\n",sum);
return 0;
}
Output:6. 現在修改程式設計練習5中的程式,使它能夠計算整數平方的和(如果您喜歡,可以這樣認為:如果您第一天得到$l,第二天得到$4,第三天得到$9,以此類推您將得到多少錢。這看起來像一個很好的買賣)。C沒有平方函式,但是您可以利用n的平方是n*n的事實。
#include <stdio.h>
int main(void)
{
int count, sum;
int num;
printf("請輸入一個整數,求1到這個數的平方和:\n");
scanf("%d",&num);
count = 0;
sum = 0;
while (count++ < num)
sum = sum + count * count;
printf("Square sum = %d\n",sum);
return 0;
}
Output:7. 編寫一個程式,該程式要求輸入一個float型數並列印該數的立方值。使用您自己設計的函式來計算該值的立方並且將它的立方列印出來。main()程式把輸入的值傳遞給該函式。
#include <stdio.h>
void cube(float n);
int main(void)
{
float num;
printf("請輸入一個浮點數:\n");
scanf("%f",&num);
cube(num);
return 0;
}
void cube(float n)
{
printf("%.2f 的立方是:%.2f\n",n,n * n * n);
}
Output:8. 編寫一個程式,該程式要求使用者輸入一個華氏溫度。程式以double型別讀入溫度值,並將它作為一個引數傳遞給使用者提供的函式Temperatures()。該函式將計算相應的攝氏溫度和絕對溫度,並以小數點右邊有兩位數字的精度顯示這三種溫度。它應該用每個值所代表的溫度刻度來標識這3個值。下面是將華氏溫度轉換成攝氏溫度的方程:
Celsius = 1.8 * Fahreneit + 32.0
通常科學上的絕對溫度的刻度是0代表絕對零,是可能溫度的下界。下面是將攝氏溫度轉換為絕對溫度的方程:
Kelvin=Celsius+273.16
Temperatures()函式使用const來建立代表該轉換裡的3個常量的符號。main()函式將使用一個迴圈來允許使用者重複地輸入溫度,當使用者輸入q或其他非數字值時,迴圈結束。
#include <stdio.h>
void temperatures(double f);
int main(void)
{
double fahrenheit;
printf("請輸入一個華氏溫度:\n");
while (scanf("%lf",&fahrenheit) == 1)
{
temperatures(fahrenheit);
printf("請輸入一個華氏溫度(輸入q或非數字值,迴圈結束):\n");
}
printf("That's all!\n");
return 0;
}
void temperatures(double f) // 按照書中給出的公式計算,但是公式好像有錯,錯在將華氏和攝氏弄反
{
const double FTC_S1 = 1.8; // 華氏溫度轉換成攝氏溫度的轉換因子1
const double FTC_S2 = 32.0; // 華氏溫度轉換成攝氏溫度的轉換因子2
const double CTK_S1 = 273.16; // 攝氏溫度轉換成絕對溫度的轉換因子
double celsius,kelvin;
celsius = FTC_S1 * f + FTC_S2;
kelvin = celsius + CTK_S1;
printf("Fahrenheit: %.2f℉\n",f);
printf("Celsius: %.2f℃\n",celsius);
printf("Kelvin: %.2fK\n",kelvin);
}
/* 正確公式的函式
void temperatures(double f)
{
const double FTC_S1 = 1.8; // 華氏溫度轉換成攝氏溫度的轉換因子1
const double FTC_S2 = 32.0; // 華氏溫度轉換成攝氏溫度的轉換因子2
const double CTK_S1 = 273.16; // 攝氏溫度轉換成絕對溫度的轉換因子
double celsius,kelvin;
celsius = (f - FTC_S2) / FTC_S1;
kelvin = celsius + CTK_S1;
printf("Fahrenheit: %.2f℉\n",f);
printf("Celsius: %.2f℃\n",celsius);
printf("Kelvin: %.2fK\n",kelvin);
}
*/
Output:相關文章
- C Primer Plus 第9章 函式 程式設計練習函式程式設計
- C++ Primer Plus第六版 第三章 程式設計練習答案C++程式設計
- C primer plus 第六版 第十一章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十三題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十四題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十五題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第一題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第十章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第十一章 第十二題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第二題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第三題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第四題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第五題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第六題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第七題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第八題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第九題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第十題 程式設計練習答案程式設計
- C primer plus 第六版 第六章 第一題 程式設計練習答案程式設計
- C Primer Plus 第六版 程式設計練習第九章答案 最新出爐程式設計
- C primer plus 第六版 第八章 第四題 程式設計練習答案程式設計