目錄
1.請(qǐng)畫(huà)出例5.6 中給出的 3個(gè)程序段的流程圖。
2.請(qǐng)補(bǔ)充例5.7程序,分別統(tǒng)計(jì)當(dāng)“fabs(t)>=1e-6”和“fabs(t)>=1e-8”時(shí)執(zhí)行循環(huán)體的次數(shù)。
3.輸入兩個(gè)正整數(shù)m 和n,求其最大公約數(shù)和最小公倍數(shù)。
4.輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。
5. 求Sn=a+aa+aaa+ ... +aa...(n個(gè)a)a之值,其中a是一個(gè)數(shù)字,n表示a的位數(shù),n由鍵盤(pán)輸入。例如:2+22+222+2222+22222 (此時(shí)n=5)
6.求(即求?1!+2!+3!+4!+…+20!)。
7.求。
8. 輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè) 3 位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是水仙花數(shù),因?yàn)?53=13+53+33。
9.一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6的因子為1,2,3,而6=1+2+3,因此6是“完數(shù)”。編程序找出 1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子:6 its factors are 1,2,3
10. 有一個(gè)分?jǐn)?shù)序列2/1, 3/2, 5/3, 8/5, 13/8, 21/13, ...求出這個(gè)數(shù)列的前20項(xiàng)之和。
11.一個(gè)球從100m高度自由落下,每次落地后反彈回原高度的一半,再落下,再反彈。求它在第10次落地時(shí)共經(jīng)過(guò)多少米,第10次反彈多高。
12. 猴子吃桃問(wèn)題。猴子第1天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了一個(gè)。第2天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),就只剩一個(gè)桃子了。求第1天共摘多少個(gè)桃子。
13. 用迭代法求 x=根號(hào)下a。求平方根的迭代公式為x(n+1)= 1/2(x的n次方 + a/x的n次方)要求前后兩次求出的x的差的絕對(duì)值小于 10??。
14. 用牛頓迭代法求下面方程在 1.5 附近的根:2x3-4x2+3x-6=0
15. 用二分法求下面方程在(-10,10)的根:2x3-4x2+3x-6=0
16.輸出7行的菱形:
17.兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3 人。甲隊(duì)為 A,B,C3 人,乙隊(duì)為 X,Y,Z3人。已抽簽決定比賽名單。有人向隊(duì)員打聽(tīng)比賽的名單,A 說(shuō)他不和X 比,C說(shuō)他不和X,Z 比,請(qǐng)編程序找出 3對(duì)賽手的名單。
1.請(qǐng)畫(huà)出例5.6 中給出的 3個(gè)程序段的流程圖。
??流程圖1:
?? 流程圖2:
?? 流程圖3:
2.請(qǐng)補(bǔ)充例5.7程序,分別統(tǒng)計(jì)當(dāng)“fabs(t)>=1e-6”和“fabs(t)>=1e-8”時(shí)執(zhí)行循環(huán)體的次數(shù)。
#include <stdio.h> #include <math.h> int main() { int sign = 1; double pi = 0.0, n = 1.0, term = 1.0; int count = 0; while (fabs(term) >= 1e-8) { count++; pi = pi + term; n = n + 2; sign = -sign; term = sign / n; } pi = pi * 4; printf("pi=%10.8f\n", pi); printf("count = %d\n", count); return 0; }
3.輸入兩個(gè)正整數(shù)m 和n,求其最大公約數(shù)和最小公倍數(shù)。
#include <stdio.h> int main() { int m, n; printf("請(qǐng)輸入兩個(gè)正整數(shù):"); scanf("%d%d", &m, &n); //選取較大值,保存在n當(dāng)中 if (n < m) { int tmp = n; n = m; m = tmp; } //為最小公倍數(shù)保存兩者的乘積,因?yàn)樵? //輾轉(zhuǎn)相除法的時(shí)候,m,n當(dāng)中的值會(huì)變化 int total = m * n; //最大公約數(shù) int r = -1;//r代表余數(shù) while (m != 0) { r = n % m; //為下一次計(jì)算做準(zhǔn)備、 n = m; m = r; } //最大公約數(shù)經(jīng)上面計(jì)算,已經(jīng)保存在n當(dāng)中了 printf("最大公約數(shù)為:%d\n", n); printf("最小公倍數(shù)為:%d\n", total / n); return 0; }
4.輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。
#include <stdio.h> int main() { //英文字符 int eng_char = 0; //空格 int space_char = 0; //數(shù)字字符 int digit_char = 0; //其他字符 int other_char = 0; char c; while ((c = getchar()) != '\n') { if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') { eng_char++; } else if (c == ' ') { space_char++; } else if (c >= '0' && c <= '9') { digit_char++; } else { other_char++; } } printf("英文字符:%d,空格字符:%d, 數(shù)字字符:%d, 其它字符:%d", eng_char, space_char, digit_char, other_char); return 0; }
5. 求Sn=a+aa+aaa+ ... +aa...(n個(gè)a)a之值,其中a是一個(gè)數(shù)字,n表示a的位數(shù),n由鍵盤(pán)輸入。例如: 2+22+222+2222+22222 (此時(shí)n=5)
#include <stdio.h> #include <math.h> int main() { int n = 0; double a, signle_num = 0.0, total_sum = 0.0; printf("請(qǐng)輸入要求數(shù)列的位數(shù)和數(shù)字:"); scanf("%d %lf", &n, &a); for (int i = 0; i < n; i++) { signle_num += a * pow(10, i); total_sum += signle_num; } printf("%.2lf\n", total_sum); return 0; }
6.求(即求?1!+2!+3!+4!+…+20!)。
#include <stdio.h> int main() { double total_sum = 0.0; for (int i = 1; i <= 20; i++) { double single_num = 1.0; for (int j = i; j > 0; j--) { single_num *= j; } total_sum += single_num; } printf("%lf\n", total_sum); return 0; }
7.求。
第一個(gè)式子指:求1~100的和,1+2+3+...+100,求和之后,和為整數(shù)。
第二個(gè)式子指:求1^2 + 2^2 + 3^2 +...+ 50^2,求和之后,和為整數(shù)。
第三個(gè)式子指:求1/1 + 1/2 + 1/3 +...+ 1/10,求和結(jié)果為浮點(diǎn)數(shù)。
#include <stdio.h> int main() { double total_sum = 0.0, sum1 = 0.0, sum2 = 0.0, sum3 = 0.0; //1~100 for (int i = 1; i <= 100; i++) { //1+2+3+...+100 sum1 += 1; //1^2 + 2^2 + 3^2 +...+ 50^2 if (i <= 50) { sum2 += i * i; } //1/1 + 1/2 + 1/3 +...+ 1/10 if (i <= 10) { sum3 += 1.0 / i; } } total_sum = sum1 + sum2 + sum3; printf("%lf\n", total_sum); return 0; }
8. 輸出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè) 3 位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是水仙花數(shù),因?yàn)?53=13+53+33。
#include <stdio.h> int main() { //a表示百位,b表示十位,c表示個(gè)位 int a, b, c; //獲取100~999 for (int i = 100; i <= 999; i++) { //獲取三位數(shù)當(dāng)中的每一位 a = i / 100; b = (i / 10) % 10; c = i % 10; if (a * a * a + b * b * b + c * c * c == i) { printf("%d ", i); } } return 0; }
9.一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如,6的因子為1,2,3,而6=1+2+3,因此6是“完數(shù)”。編程序找出 1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子: 6 its factors are 1,2,3
#include <stdio.h> int main() { for (int data = 2; data <= 1000; data++) { int factor_sum = 0; for (int factor = 1; factor <= data / 2; factor++) { if (data % factor == 0) { factor_sum += factor; } } //判斷是否為完數(shù) if (factor_sum == data) { printf("%d its factors are ", data); for (int factor = 1; factor <= data / 2; factor++) { if (data % factor == 0) { printf("%d, ", factor); } } printf("\n"); } } return 0; }
10. 有一個(gè)分?jǐn)?shù)序列 2/1, 3/2, 5/3, 8/5, 13/8, 21/13, ... 求出這個(gè)數(shù)列的前20項(xiàng)之和。
#include <stdio.h> int main() { //a: 分子 //b: 分母 double a = 2.0, b = 1.0, total_sum = 0.0; for (int i = 1; i <= 20; i++) { //1.將分式的結(jié)果累加到total_sum當(dāng)中 total_sum += a / b; //2.求下一個(gè)分式的值 double tmp = a; a = a + b; b = tmp; } printf("%lf\n", total_sum); return 0; }
11.一個(gè)球從100m高度自由落下,每次落地后反彈回原高度的一半,再落下,再反彈。求它在第10次落地時(shí)共經(jīng)過(guò)多少米,第10次反彈多高。
#include <stdio.h> int main() { //定義小球經(jīng)過(guò)的米數(shù) double total_sum = 0.0; //定義高度 double total_m = 100.0; for (int i = 0; i < 10; i++) { //下落+回彈 total_sum += total_m; total_m /= 2; total_sum += total_m; } //第10次回彈的距離從總距離當(dāng)中除掉 total_sum -= total_m; printf("小球經(jīng)過(guò)%lf米,第10次反彈%lf米\n", total_sum, total_m); return 0; }
12. 猴子吃桃問(wèn)題。猴子第1天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多吃了一個(gè)。第2天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),就只剩一個(gè)桃子了。求第1天共摘多少個(gè)桃子。
#include <stdio.h> int main() { int day = 9; int cur_day_count = 1; int prev_day_count; while (day > 0) { prev_day_count = (cur_day_count + 1) * 2; cur_day_count = prev_day_count; day--; } printf("第一天共摘挑子%d個(gè)\n", prev_day_count); return 0; }
13. 用迭代法求 x=根號(hào)下a。求平方根的迭代公式為 x(n+1)= 1/2(x的n次方 + a/x的n次方) 要求前后兩次求出的x的差的絕對(duì)值小于 10??。
#include <stdio.h> #include <math.h> int main() { float a, x0, x1; scanf("%f", &a); //計(jì)算x0和x1的值 x0 = a / 2; x1 = (x0 + a / x0) / 2; //判斷是否小于10^-5 while (fabs(x0 - x1) >= 1e-5) { //更新x0和x1的值 x0 = x1; x1 = (x0 + a / x0) / 2; } printf("[%f] 的平方根為 [%f]\n", a, x1); return 0; }
14. 用牛頓迭代法求下面方程在 1.5 附近的根: 2x3-4x2+3x-6=0
#include <stdio.h> #include <math.h> int main() { //x0 ---> xn //x1 ---> xn+1 //f ---> f(xn) //f1 ---> f`(xn) double x0, x1, f, f1; x1 = 1.5; do { x0 = x1; f = ((2 * x0 - 4) * x0 + 3) * x0 - 6; f1 = (6 * x0 - 8) * x0 + 3; x1 = x0 - f / f1; } while (fabs(x1 - x0) >= 1e-5); printf("方程在1.5附近的根:%lf\n", x1); return 0; }
15. 用二分法求下面方程在(-10,10)的根: 2x3-4x2+3x-6=0
#include <stdio.h> #include <math.h> int main() { double left = -10, right = 10, mid; double tmp = 10; while (fabs(tmp) > 1e-5) { mid = (left + right) / 2; tmp = ((2 * mid - 4) * mid + 3) * mid - 6; if (tmp > 0) { right = mid; } else if (tmp < 0) { left = mid; } } printf("方程在(-10, 10)之間的根為:%lf\n", mid); return 0; }
16.輸出7行的菱形:
#include <stdio.h> int main() { //打印上半部分 for (int i = 0; i < 4; i++) { //打印空格 for (int j = 3 - i; j > 0; j--) { printf(" "); } //打印* for (int j = 2 * i + 1; j > 0; j--) { printf("*"); } printf("\n"); } //打印下半部分 for (int i = 0; i < 3; i++) { //打印空格 for (int j = i + 1; j > 0; j--) { printf(" "); } //打印* for (int j = 7 - 2 * (i + 1); j > 0; j--) { printf("*"); } printf("\n"); } return 0; }
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-818949.html
17.兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出3 人。甲隊(duì)為 A,B,C3 人,乙隊(duì)為 X,Y,Z3人。已抽簽決定比賽名單。有人向隊(duì)員打聽(tīng)比賽的名單,A 說(shuō)他不和X 比,C說(shuō)他不和X,Z 比,請(qǐng)編程序找出 3對(duì)賽手的名單。 ?
#include <stdio.h> int main() { //1.列舉A的所有對(duì)戰(zhàn)對(duì)象 for (int A = 'X'; A <= 'Z'; A++) { //2.列舉B的所有對(duì)戰(zhàn)對(duì)象 for (int B = 'X'; B <= 'Z'; B++) { //3.列舉C的所有對(duì)戰(zhàn)對(duì)象 for (int C = 'X'; C <= 'Z'; C++) { if (A != 'X' && C != 'X' && C != 'Z' && A != B && A != C && B != C) { printf("A對(duì)戰(zhàn)%c, B對(duì)戰(zhàn)%c, C對(duì)戰(zhàn)%c\n", A, B, C); } } } } return 0; }
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-818949.html
到了這里,關(guān)于譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第五章習(xí)題詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!