C Primer Plus (第五版) 第五章 程式設計練習 答案
阿新 • • 發佈:2019-01-31
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或其他非數字值時,迴圈結束。
Ouput:#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; }
2. 編寫一個程式,此程式要求輸入一整數,然後打印出從(包括)輸入的值到(包括)比輸入的值大10的所有整數值(也就是說,如果輸入為5,那麼輸出就從5到15)。要求在各個輸出值之間用空格、製表符或換行符分。
Output:#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; } */
3. 編寫一個程式,該程式要求使用者輸入天數,然後將該值轉換為週數和天數。例如,此程式將把18天轉換成2周4天。用下面的格式顯示結果:
18 days are 2 weeks, 4 days.
使用一個while迴圈讓使用者重複輸入天數;當用戶輸入一個非正數(如0或-20)時,程式將終止迴圈。
Output:#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; }
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: