for语句 编程练习5.1 降序输出 1 ~ 30 中所有的偶数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main (void ) { int i; for (i = 30 ;i >= 1 ;i --) { if (i % 2 == 0 ) { printf ("%d\t" ,i); } } printf ("\n" ); return 0 ; }
编程练习5.2 输入10个分数,去掉最高分和最低分后求平均分,保留一位小数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include <stdio.h> int main (void ) { int i; double score; double MaxScore; double MinScore; double sum = 0.0 ; double average; for (i = 1 ;i <= 10 ;i ++) { printf ("请第%d位裁判评分:" ,i); scanf ("%lf" ,&score); MinScore = score; if (score > MaxScore) { MaxScore = score; } if (score < MinScore) { MinScore = score; } sum += score; } sum = sum - MaxScore - MinScore; average = sum / 8.0 ; printf ("去掉一个最高分:%.1lf分\n" ,MaxScore); printf ("去掉一个最低分:%.1lf分\n" ,MinScore); printf ("总分是:%.1lf分\n" ,sum); printf ("平均分是%.1lf分\n" ,average); }
编程练习5.3 求 1×2×3×…×10的值。
1 2 3 4 5 6 7 8 9 10 11 #include <stdio.h> int main (void ) { int i; int result = 1 ; for (i = 1 ;i <= 10 ;i ++) { result *= i; } printf ("%d\n" ,result); }
编程练习5.4 求 1!+ 2!+ 3!+ … + 10! 的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> int main (void ) { int i; int j; int res; int sum = 0 ; for (i = 1 ;i <= 10 ;i ++) { res = 1 ; for (j = 1 ;j <= i;j ++) { res *= j; } printf ("%d的阶乘是:%d\n" ,i,res); sum += res; } printf ("%d\n" ,sum); }
编程练习5.5 根据用户输入的正整数 a(1~9)和正整数 n ,求 a + aa + … + aa…a(n 个 a )的值。例如,当用户输入 a 为 6 ,n 为 5 时,6 + 66 + 666 + 6666 + 66666 = 74070 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include <stdio.h> #include <math.h> int main (void ) { printf ("*********************** 编程练习5.5 ***********************\n" ); int a; int n; int i; int g = 0 ; int s = 0 ; int sum; printf ("请输入a的值:" ); scanf ("%d" ,&a); printf ("请输入n的值:" ); scanf ("%d" ,&n); for (i = 1 ;i <= n;i ++) { g += a; if (i != n) { printf ("%d + " ,g); } else { printf ("%d" ,g); } s += g; g *= 10 ; } printf (" = %d\n" ,s); }
编程练习5.6 根据用户输入的正整数𝑛,求 $$ 1+\frac{1}{3}+\frac{1}{5}+\frac{1}{7}+… $$ 的前𝑛项之和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <stdio.h> int main (void ) { int n; int i; double result = 0.0 ; double sum = 0.0 ; printf ("请输入n的值:" ); scanf ("%d" ,&n); for ( i = 1 ;i <= n;i ++) { result = (1 / (2.0 * i - 1 )); printf ("1 / ( 2.0 * %d - 1) = %.2lf\n" ,i,result); sum += result; } printf ("结果为:%.2lf\n" ,sum); }
编程练习5.7 根据用户输入的正整数,求的值。根据用户输入的正整数𝑛,求 $$ 1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+…+\frac{(-1)^{n+1}}{n} $$ 的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main (void ) { int i; int n; double result; printf ("请输入n的值:" ); scanf ("%d" ,&n); for (i = 1 ;i <= n;i ++) { if (i % 2 == 0 ) { result -= 1.0 /i; } else { result += 1.0 /i; } } printf ("结果为:%.2lf\n" ,result); }
编程练习5.8 求的前项之和。求 $$ \frac{2}{1}+\frac{3}{2}+\frac{5}{3}+\frac{8}{5}+\frac{13}{8}+… $$ 的前20项之和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> int main (void ) { printf ("************************* 编程练习5.8 *************************\n" ); int i; double x = 1.0 ; double y = 2.0 ; double z; double result; for (i = 1 ;i <= 20 ;i ++) { z = (y / x); result += z; printf ("%.lf / %.lf = %lf\n" ,y,x,z); z = y; y += x; x = z; } printf ("**************************************************************\n" ); printf ("最终的结果为:%lf\n" ,result); }
编程练习5.9 求的前项之和。求 $$ 1-\frac{2}{3}+\frac{3}{5}-\frac{4}{7}+\frac{5}{9}-\frac{6}{11}+… $$ 的前20项之和。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("*********************** 编程练习5.9 ***********************\n" ); int i; double a = 1 ; double result; for (i = 1 ;i <= 20 ;i ++) { if (i % 2 == 0 ) { result -= (i / a); printf ("第%d项:- %d / %.lf\n" ,i,i,a); } else { result += (i / a); printf ("第%d项:+ %d / %.lf\n" ,i,i,a); } a += 2 ; } printf ("**********************************************************\n" ); printf ("结果为:%lf\n" ,result); }
编程练习5.10 求数列 1,2,3,5,8,13,21,34,… 的第25项的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include <stdio.h> int main (void ) { printf ("******************** 编程练习5.10 ********************\n" ); printf ("需求:求数列1,2,3,5,8,13,21,34, ...中第25项的值。\n" ); int i; int a = 0 ; int b = 1 ; int sum = 0 ; for (i = 1 ;i <= 25 ;i ++) { sum = a + b; a = b; b = sum; printf ("第%d项:%d\n" ,i,sum); } printf ("******************************************************\n" ); }
编程练习5.11 输出数列0,1,2,3,6,11,20,37,68, …的前20项,每行输出5项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> int main (void ) { printf ("************************** 编程练习5.11 **************************\n" ); printf (" 输出数列0,1,2,3,6,11,20,37,68, ...的前20项,每行输出5项\n" ); int a = 0 ; int b = 1 ; int c = 2 ; int sum; int i; printf ("%d\t%d\t%d\t" ,a,b,c); for (i = 4 ;i <= 20 ;i ++) { sum = a + b + c; a = b; b = c; c = sum; printf ("%d\t" ,sum); if (i % 5 == 0 ) { printf ("\n" ); } } return 0 ; }
编程练习5.12 输入15个字符,统计其中英文字母、数字字符、空格和其他字符的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include <stdio.h> int main (void ) { printf ("**************************** 编程练习5.12 ****************************\n" ); int i; char ch; int letter_times = 0 ; int number_times = 0 ; int space_times = 0 ; int others_times = 0 ; for (i = 1 ;i <= 15 ;i ++) { printf ("请输入第%d个字符:" ,i); scanf ("%c" ,&ch); getchar(); if (ch >= '0' && ch <= '9' ) { number_times ++; } else if (ch >= 'a' && ch <= 'z' ) { letter_times ++; } else if (ch >= 'A' && ch <= 'Z' ) { letter_times ++; } else if (ch == ' ' || ch == "\n" ) { space_times ++; } else { others_times ++; } } printf ("*********************** 统计结果 ***********************\n" ); printf ("英文字母个数:%d\n" ,letter_times); printf ("数字字符个数:%d\n" ,number_times); printf ("空格字符个数:%d\n" ,space_times); printf ("其它字符个数:%d\n" ,others_times); }
编程练习5.13 输出 2000~2100 年之间所有的闰年。符合以下二者之一的年份是闰年:
(1)能被4整除,但不能被100整除,如2016。
(2)能被400整除,如2000。
要求:每行输出5项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> int main (void ) { printf ("************************** 编程练习5.13 **************************\n" ); int year; int times; for (year = 2000 ;year <= 2100 ;year ++) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ) { times ++; if (times % 5 == 0 ) { printf ("%d\n" ,year); } else { printf ("%d\t" ,year); } } } return 0 ; }
编程练习5.14 输出所有的水仙花数。水仙花数是一个三位正整数,每位数字的三次方之和等于该数本身。例如,是水仙花数。输出所有的水仙花数。水仙花数是一个三位正整数,每位数字的三次方之和等于该数本身。例如1^3+5^3+3^3=153,153是水仙花数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("************************* 编程练习5.14 *************************\n" ); int i; int a; int b; int c; for (i = 100 ;i <= 999 ;i ++) { a = i / 100 ; b = i % 100 / 10 ; c = i % 100 % 10 ; if (a*a*a + b*b*b + c*c*c == i) { printf ("%d\t%d\t%d\t%d\n" ,a,b,c,i); } else { continue ; } } return 0 ; }
while语句 编程练习5.15 输入若干整数,以 -1 结束,去掉最大值和最小值,求平均值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <stdio.h> int main (void ) { int number; int times = 0 ; int sum = 0 ; int average; printf ("请输入整数(输入-1结束):\n" ); scanf ("%d" ,&number); while (number != -1 ) { sum += number; times ++; scanf ("%d" ,&number); } if (times > 0 ) { average = sum / times; printf ("平均值为:%d\n" ,average); } else { printf ("错误输入!\n" ); } return 0 ; }
编程练习5.16 输入一行字符,统计英文字母、数字字符、空格和其他字符的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> int main (void ) { printf ("**************************** 编程练习5.16 ****************************\n" ); char ch; int letter_times = 0 ; int number_times = 0 ; int space_times = 0 ; int others_times = 0 ; printf ("请输入一行字符:" ); scanf ("%c" ,&ch); while (ch != '\n' ) { if (ch >= '0' && ch <= '9' ) { number_times ++; } else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' ) { letter_times ++; } else if (ch == ' ' ) { space_times ++; } else { others_times ++; } scanf ("%c" ,&ch); } printf ("**************************** 数据统计结果 ****************************\n" ); printf ("英文字符个数:%d\n" , letter_times); printf ("数字字符个数:%d\n" , number_times); printf ("空格字符个数:%d\n" , space_times); printf ("其他字符个数:%d\n" , others_times); }
编程练习5.17 求1−12+13−14+…+(−1)𝑛+1𝑛的值,绝对值小于10−5的项不计算。
编程练习5.18 根据公式 $$ \frac{π}{4}≈1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+… $$ 求π的近似值,绝对值小于10^−5的项不计算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("***************************** 编程练习5.18 *****************************\n" ); int i = 1 ; int times = 1 ; double sum = 0.0 ; double item; while ( (item = 1.0 /i) >= 1.0e-5 ) { if (times % 2 == 0 ) { sum -= item; } else { sum += item; } times ++; i += 2 ; } printf ("sum = %lf\n" ,4 *sum); return 0 ; }
编程练习5.19 求的值,绝对值小于的项不计算。求 $$ 1-\frac{1}{4}+\frac{1}{7}-\frac{1}{10}+\frac{1}{13}-\frac{1}{16}+… $$ 的值,绝对值小于10^−5的项不计算。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("******************************** 编程练习5.19 ********************************\n" ); int i = 1 ; int times = 1 ; double item; double sum; while ( (item = 1.0 /i) >= 1.0e-5 ) { if (times % 2 == 0 ) { sum -= item; } else { sum += item; } i += 3 ; times ++; } printf ("sum = %lf\n" ,sum); return 0 ; }
编程练习5.20 输入两个正整数,求最小公倍数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("**************************** 编程练习5.20 ****************************\n" ); int number1; int number2; int gcd; printf ("请输入两个正整数:\n" ); scanf ("%d%d" ,&number1,&number2); if (number1 > number2) { gcd = number1; } else { gcd = number2; } while (gcd % number1 || gcd % number2) { gcd ++; } printf ("%d 和 %d 的最小公倍数为:%d\n" ,number1,number2,gcd); return 0 ; }
编程练习5.21 输入一个正整数 n ,求 n 是几位数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main (void ) { int number; int size = 0 ; printf ("请输入一个正整数:" ); scanf ("%d" ,&number); while (number) { size ++; number /= 10 ; } printf ("数字的位数为:%d 位\n" ,size); return 0 ; }
编程练习5.22 输入一个正整数 n ,判断 n 是否为回文数。所谓回文数,是从左到右读这个数和从右到左读这个数是一样的。例如,98789是回文数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("*************************** 编程练习5.22 ***************************\n" ); int number; int x; int y = 0 ; printf ("请输入一个正整数:" ); scanf ("%d" ,&number); x = number; while (x > 0 ) { y = y * 10 + x % 10 ; x = x / 10 ; } if (y == number) { printf ("%d 是一个回文数\n" ,number); } else { printf ("%d 不是一个回文数\n" ,number); } }
嵌套的循环语句 编程练习5.25 输入如下所示的五五乘法表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <stdio.h> int main (void ) { printf ("******************************* 编程练习5.25 *******************************\n" ); int i; int j; int k; for (i = 1 ;i <= 5 ;i ++) { for (j = i;j <= 5 ;j ++) { printf ("%d * %d = %d\t" ,i,j,i*j); } printf ("\n" ); for (k = 0 ;k <= i-1 ;k ++) { printf ("\t\t" ); } } printf ("\n" ); return 0 ; }
编程练习5.26 输出如图所示的图案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <stdio.h> int main (void ) { printf ("******************************* 编程练习5.26 *******************************\n" ); int i; int j; int k; for (i = 1 ;i <= 7 ;i ++) { for (k = 1 ;k <= 7 -i;k ++) { printf (" " ); } for (j = 1 ;j <= i*2 -1 ;j ++) { printf ("*" ); } printf ("\n" ); } return 0 ; }
编程练习5.27 根据输入的行数输出图案。例如,输入的行数为 7 ,则输出的图案如图所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h> #include <math.h> int main (void ) { printf ("***************************** 编程练习5.27 *****************************\n" ); int n; int i; int j; int k; printf ("请输入行数:" ); scanf ("%d" ,&n); for (i = -n / 2 ;i <= n / 2 ;i ++) { for (j = abs (i);j >= 0 ;j --) { printf (" " ); } for (k = 1 ;k <= n - 2 * abs (i);k ++) { printf ("*" ); } printf ("\n" ); } return 0 ; }
编程练习5.28 输出 100 以内所有的质数,每行输出5个质数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <stdio.h> #include <math.h> int main (void ) { printf ("******************************* 编程练习5.28 *******************************\n" ); int i; int j; int m; int times = 0 ; for (i = 2 ;i < 100 ;i ++) { m = (int )(sqrt (i) + 1 ); for (j = 2 ;j < m;j ++) { if (i % j == 0 ) { break ; } } if (j == m) { printf ("%d\t" ,i); times ++; if (times % 5 == 0 ) { printf ("\n" ); } } } return 0 ; }
编程练习5.29 百钱买百鸡问题。一百个铜钱买了一百只鸡,其中公鸡一只5钱,母鸡一只3钱,小鸡一钱3只。问:一百只鸡中公鸡、母鸡、小鸡各有多少只?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <stdio.h> int main (void ) { int i; int j; int k; for (i = 0 ;i <= 20 ;i ++) { for (j = 0 ;j <= 33 ;j ++) { for (k = 3 ;k <= 99 ;k ++) { if (i * 5 + j * 3 + k/3 == 100 ) { if (i + j + k == 100 ) { if (k % 3 == 0 ) { printf ("公鸡:%d 只\t母鸡:%d 只\t小鸡:%d 只\n" ,i,j,k); } } } } } } }