C Primer Plus 第六版—— 6.16 編程練習題(附代碼)

1.編寫一個程序,建立一個包含26個元素的數組,並在其中存儲26個小寫字母。而後打印數組的全部內容。數組

#include <stdio.h> int main(void) { int num = 26-1; int i; char list[26-1]; char ch = 'a'; for (i = 0; i <= num; i++, ch++) list[i] = ch; for (i = 0; i <= num; i++) printf("%c", list[i]); getchar(); return 0; }

2.使用嵌套循環,按下面的格式打印字符: app

$函數

$$ui

$$$編碼

$$$$spa

$$$$$code

#include <stdio.h> int main(void) { int m, n; int num = 5; for (m = 0; m < num; m++) { for (n = 0; n <= m; n++) { printf("$"); } printf("\n"); } getchar(); return 0; }

3.使用嵌套循環,按下面的格式打印字母:ip

Felement

FEget

FED

FEDC

FEDCB

FEDCBA

注意:若是你的系統不使用ASCII或其餘以數字順序編碼的代碼,能夠把字符數組初始化爲字母表中的字母:

char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

而後用數組下標選擇單獨的字母,例如lets[0]是'A',等等。

#include <stdio.h> int main(void) { int m, n; int num = 6; printf("1******\n"); //方法1 for (m = 1; m <= num; m++) { char ch = 'F'; for (n = 1; n <= m; n++,ch--) { printf("%c", ch); } printf("\n"); } printf("2******\n"); //方法2 char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i = 5; for (m = 0; m <= i; m++) { for (n = 0; n <= m; n++) { printf("%c", lets[i-n]); } printf("\n"); } getchar(); return 0; }

4.使用嵌套循環,按下面的格式打印字母:

A

BC

DEF

GHIJ

KLMNO

PQRSTU

若是你的系統不使用以數字順序編碼的代碼,請參照練習3的方案解決。

#include <stdio.h> int main(void) { int m, n; int num = 6; char ch = 'A'; for (m = 1; m <= num; m++) { for (n = 1; n <= m; n++, ch++) { printf("%c", ch); } printf("\n"); } getchar(); return 0; }

5.編寫一個程序,提示用戶輸入大寫字母。使用嵌套循環如下面金字塔型的格式打印字母(O爲空格):

OOOOA

OOOABA

OOABCBA

OABCDCBA

ABCDEDCBA

打印這樣的圖形,要根據用戶輸入的字母來決定。例如,上面的圖形是在用戶輸入E後的打印結果。

提示:用外層循環處理行,每行使用3個內層循環,分別處理空格、以升序打印字母、以降序打印字母。若是系統不使用ASCII或其餘以數字順序編碼的代碼,請參照練習3的解決方案。

#include <stdio.h> int main(void) { int m, n; char ch; printf("Enter a character:"); scanf("%c", &ch); for (m = 0; m < ch - 'A' + 1; m++) { for (n = 0; n < ch - 'A' + 1 - m; n++) { printf(" "); } for (n = 0; n <= m; n++) { printf("%c",'A' + n); } for (n = m - 1; n >= 0; n--) { printf("%c", 'A' + n); } printf("\n"); } getchar(); return 0; }

6.編寫一個程序打印一個表格,每一行打印一個整數、該數的平方、該數的立方。要求用戶輸入表格的上下限。使用一個for循環

#include <stdio.h> void print_num(int min,int max); int main(void) { int lower, upper; printf("Please enter the lower limit:"); scanf("%d", &lower); printf("Please enter the upper limit:"); scanf("%d", &upper); print_num(lower, upper); printf("Done!\n"); getchar(); return 0; } void print_num(int min, int max) { int n; for (n = min; n <= max; n++) { printf("%d\t%d\t%d\n", n, n*n, n*n*n); } }

7.編寫一個程序把一個單詞讀入一個字符數組中,而後倒序打印這個單詞。提示:strlen()函數(第4章介紹過)可用於計算數組最後一個字符的下標。

#include <stdio.h> int main(void) { char str[30]; int i, max; printf("Please input a word:"); scanf("%s", str); max = strlen(str) - 1; printf("%s|", str); for (i = max; i >= 0; i--) { printf("%c", str[i]); } printf("\nDone!\n"); getchar(); return 0; }

8.編寫一個程序,要求用戶輸入兩個浮點數,並打印兩數之差除以兩數乘積的結果。在用戶輸入非數字以前,程序應循環處理用戶輸入的每對值。

#include <stdio.h> int main(void) { float m,n; printf("Please input two numbers:"); while (scanf("%f %f", &m, &n) == 2) { printf("The result is:%lf\n", (m - n) / (m*n)); printf("Please input two numbers:"); } printf("Done!\n"); getchar(); return 0; }

9.修改練習8,使用一個函數返回計算的結果。

#include <stdio.h> void print_r(float a, float b); int main(void) { float m, n; printf("Please input two numbers:"); while (scanf("%f %f", &m, &n) == 2) { print_r(m, n); printf("Please input two numbers:"); } printf("Done!\n"); getchar(); return 0; } void print_r(float a, float b) { float result = (a - b) / (a * b); printf("The result is %f\n", result); }

10.編寫一個程序,要求用戶輸入一個上限整數和一個下限整數,計算從上限到下限範圍內全部整數的平方和,並顯示計算結果。而後程序繼續提示用戶輸入上限和下限整數,並顯示結果,直到用戶輸入的上限整數小於下限整數爲止。程序的運行示例以下:

Enter lower and upper integer limists: 5 9

The sums of the squares from 25 to 81 is 255

Enter next set of limits: 3 25

The sums of the squares from 9 to 625 is 5520

Enter next set of limits: 5 5

Done

#include <stdio.h> void cal(int min, int max); int main(void) { int upper, lower; printf("Enter lower and upper integer limits:"); while (scanf("%d %d", &lower, &upper) == 2 && lower < upper) { cal(lower, upper); printf("Enter next set of limits:"); } printf("Done\n"); getchar(); return 0; } void cal(int min, int max) { int i; int sum = 0; for (i = min; i <= max; i++) { sum += i*i; } printf("The sums of the squares from %d to %d is %d\n", min*min, max*max,sum); }

11.編寫一個程序,在數組中讀入8個整數,而後按倒序打印這8個整數。

#include <stdio.h> int main(void) { int nums[8]; int i; printf("Enter 8 numbers:"); for (i = 0; i < 8; i++) scanf("%d", &nums[i]); for (i = 7; i >= 0; i--) printf("%d", nums[i]); printf("\n"); getchar(); return 0; }

12.考慮下面兩個無限序列:

1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + ...

1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + ...

編寫一個程序計算這兩個無限序列的總和,直到到達某次數。提示:奇數個-1相乘得-1,偶數個-1相乘得1。讓用戶交互地輸入指定的次數,當用戶輸入0或負值時結束輸入。查看運行100項、1000項、10000項後的總和,是否發現每一個序列都收斂於某值?

#include <stdio.h> float add1(int num); float add2(int num); int main(void) { int num; printf("Enter the number: "); while(scanf("%d", &num)==1 && num>0) { printf("%f\n", add1(num) + add2(num)); printf("Enter the number: "); } getchar(); return 0; } float add1(int num) { int i; float sum = 0.0; for (i = 1; i <= num; i++) sum += 1.0 / i; return sum; } float add2(int num) { int i; float sum = 0.0; int j = -1; for (i = 1; i <= num; i++) { j *= -1; sum += (1.0 / i) * j; } return sum; }

13.編寫一個程序,建立一個包含8個元素的int類型數組,分別把數組元素設置爲2的前8次冪。使用for循環設置數組元素的值,使用do while循環顯示數組元素的值。

#include <stdio.h> #include <math.h> int main(void) { int power_2[8]; int i; for (i = 0; i < 8; i++) { power_2[i] = pow(2, i); } i = 0; do { printf("%d|",power_2[i]); i++; } while (i < 8); getchar(); return 0; }

14.編寫一個程序,建立兩個包含8個元素的double類型數組,使用循環提示用戶爲第一個數組輸入8個值。第二個數組元素的值設置爲第一個數組對應元素的累計之和。例如,第二個數組的第4個元素的值是第一個數組前4個元素之和,第二個數組的第5個元素的值是第一個數組前5個元素之和(用嵌套循環能夠完成,可是利用第二個數組的第5個元素是第二個數組的第4個元素與第一個數組的第5個元素之和,只用一個循環就能完成任務,不須要使用嵌套循環)。最後,使用循環顯示兩個數組的內容,第一個數組顯示成一行,第二個數組顯示在第一個數組的下一行並且每一個元素都與第一個數組各元素相對應。

#include <stdio.h> int main(void) { double a[8], b[8]; int i, j; printf("Enter 8 numbers: "); for (i = 0; i < 8; i++) { scanf("%lf", &a[i]); for (j = 0, b[i] = 0; j <= i; j++) b[i] += a[j]; } for (i = 0; i < 8; i++) printf("%3lf ", a[i]); printf("\n"); for (i = 0; i < 8; i++) printf("%3lf ", b[i]); getchar(); return 0; }

15.編寫一個程序,讀取一行輸入,而後輸入的內容倒序打印出來。能夠把輸入儲存在char類型的數組中,假設每行字符不超過255。回憶一下,根據%c的轉換說明,scanf()函數一次只能從輸入中讀取一個字符,並且在用戶按下Enter鍵時scanf()函數會生成一個換行字符(\n)。

#include <stdio.h> #include <string.h> int main(void) { char line[255]; int i, num; scanf("%s", line); num = strlen(line) - 1; for (i = num; i >= 0; i--) printf("%c", line[i]); getchar(); return 0; }

16.Daphne以10%的單利息投資了100美圓(也就是說,每一年投資獲利至關於原始投資的10%)。Deirdre以5%的複合利息投資了100美圓(也就是說,利息是當前餘額的5%,包含以前的利息)。編寫一個程序,計算須要多少年Deirdre的投資額纔會超過Daphne,並顯示那時兩人的投資額。

#include <stdio.h> double Daphne(int num); double Deirdre(int num); int main(void) { int num = 1; while (Deirdre(num) <= Daphne(num)) num++; printf("years: %d\nDeirdre: %lf\nDaphne: %lf\n", num, Deirdre(num), Daphne(num)); getchar(); return 0; } double Daphne(int num) { double sum = 100.0; int i; for (i = 1; i <= num; i++) { sum += 100.0 * 0.1 ; } return sum; } double Deirdre(int num) { double sum = 100.0; int i; for (i = 1; i <= num; i++) { sum *= 1.05; } return sum; }

17.Chuckie Lucky贏得了100萬美圓(稅後),他把獎金存入年利率8%的帳戶。在每一年的最後一天,Chuckie取出10萬美圓。編寫一個程序,計算多少年後Chuckie會取完帳戶的錢?

#include <stdio.h> int main(void) { int year = 0; double sum = 1000000.0; while (sum > 0) { sum *= 1.08; sum -= 100000.0; year++; } printf("%d", year); getchar(); return 0; }

18.Rabnud博士加入了一個社交圈。起初他有5個朋友。他注意到他的朋友數量如下面的方式增加。第1周少了1個朋友,剩下的朋友數量翻倍;第2周少了2個朋友,剩下的朋友數量翻倍。通常而言,第N周少了N朋友,剩下的朋友數量翻倍。編寫一個程序,計算並顯示Rabnud博士每週的朋友數量。改程序一直運行,直到超過鄧巴數(Dunbar's number)。鄧巴數是粗略估算一我的在社交圈中有穩定關係的成員的最大值,該值大約是150。

#include <stdio.h> int main(void) { int i = 1; int d = 5; while (d < 150) { d = (d - i) * 2; printf("week %d: friends: %d\n", i, d); i++; } getchar(); return 0; }

注:示例代碼僅供參考

相關文章
相關標籤/搜索