抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

循环结构编程练习题

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)
{
// 降序输出1~30中的所有偶数
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)
{
//输入10个分数,去掉最高分和最低分后求平均分,保留一位小数
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

$$
根据用户输入的正整数n,求 1 + \frac{1}{3}+ \frac{1}{5}+ \frac{1}{7}+… 的前n项之和。
$$

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

$$
根据用户输入的正整数n,求 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; //用户输入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)
{
// 求数列1,2,3,5,8,13,21,34, ...中第25项的值。
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-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+…+\frac{(-1)^{n+1}}{n}的值,绝对值小于10^{-5}的项不计算。
$$

1

编程练习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

输入如下所示的五五乘法表。

20210312153345

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

输出如图所示的图案

20210312153441

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 ++)
{
// 1 : 6
// 2 : 5
// 3 : 4
for(k = 1;k <= 7-i;k ++)
{
printf(" ");
}
for(j = 1;j <= i*2-1;j ++)
{
printf("*");
}
printf("\n");
}
return 0;
}

编程练习5.27

根据输入的行数输出图案。例如,输入的行数为 7 ,则输出的图案如图所示。

20210312153614

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);
}
}
}
}
}
}
}

评论




2019-2022 覃浩的博客 鄂ICP备2021017381号-1 正在载入...

PoweredHexo
HostedGitHub & Coding
DNSDNSPod
CDN腾讯云CDN
PictureBed腾讯云CDN
ThemeVolantis