我是靠谱客的博主 刻苦樱桃,这篇文章主要介绍多层for循环详解引言一维数组and单层for循环二维数组and双层for循环双层for循环的分析三层for循环双层for循环练习多层for循环练习,现在分享给大家,希望可以做个参考。

目录

  • 引言
  • 一维数组and单层for循环
  • 二维数组and双层for循环
  • 双层for循环的分析
  • 三层for循环
  • 双层for循环练习
    • 打印正三角形、倒三角形、等边三角形、菱形,平行四边形
  • 多层for循环练习
    • 硬币之谜简化版
    • 乒乓球对手分配

引言

编程序就是为了解决重复的工作,所以就有了循环,程序里没有循环就没有灵魂,无论我们是实现基础C语言题目,例如打印一维数组、二维数组还是实现排序算法,例如,冒泡排序,直接选择排序,直接插入排序,这些程序的主干部分就是循环,可见循环在C语言中的重要性。在这篇文章里,我将对for循环进行详细的分析。

一维数组and单层for循环

题目:
打印1 2 3 到一个数组里,
算法设计:
遍历每一个元素,打印操作。
在这里插入图片描述
代码实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
int main() { int arr[3] = { 0 }; for (int i = 0; i < 3; i++) { arr[i] = i+1; } for (int i = 0; i < 3; i++) { printf("%d ", arr[i]); } return 0; }

运行结果:
在这里插入图片描述

二维数组and双层for循环

题目:
打印1 2 3 4 5 6 7 8 9 到一个二维数组里,
算法设计:

  • 遍历每一行元素
    • 遍历每一列元素
      • 打印操作

代码实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main() { int count = 1; int arr[3][3] = { 0 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { arr[i][j] =count++; } } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%d ", arr[i][j]); } printf("n"); } return 0; }

运行结果:
在这里插入图片描述

双层for循环的分析

双层for循环的原理分析图:

在这里插入图片描述
两层for循环

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
int main() { for (int i = 1; i <= 3; i++) { printf("第%d次外层for循环n", i); for (int j = 1; j <= 3; j++) { printf("第%d次内层for循环 ", j); } printf("nn"); } return 0; }

在这里插入图片描述
从运行结果上来看, 一共有十二个运行结果,也就是说这个程序执行了9次。而且每一行都是以外层循环开始,以内层循环结束,也就是说每执行一次外层for循环就要将内层for循环全部执行完成,然后外部循环变量加1,在进行判断,满足条件再进行内层循环。即将内层循环变量从初始值执行至最终值后跳出内层循环,继续执行外层循环,直至将外层循环变量从初始值执行至最终值

总结:每执行一次外层循环,要将内层循环全部执行完成,再进行第二次外层循环的执行

两层for循环,循环条件相关联

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
int main() { for (int i = 1; i <= 3; i++) { printf("第%d次外层for循环n", i); for (int j = 1; j <= i; j++) { printf("第%d次内层for循环 ", j); } printf("nn"); } return 0; }

运行结果
在这里插入图片描述
内层循环一共执行了六次,每一次内层的循环次数跟外层循环的次数有关。

三层for循环

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() { for (int i = 1; i <= 3; i++) { printf("第一层第%d次for循环n", i); for (int j = 1; j <= 3; j++) { printf("第二层第%d次for循环n ", j); for (int k = 1; k <= 3; k++) { printf("第三层第%d次for循环 ", k); } printf("n"); } printf("nn"); } return 0; }

在这里插入图片描述
最内层的代码执行次数为27次,都是从最内层的代码开始执行的,最内层的代码执行完毕后,中间层的循环变量加1,再继续执行最内层的代码,中间层的循环变量再加1。等到中间层的循环条件不满足时,最外层的循环变量加1,按照这个思路,一直往后执行。
三层for循环,循环条件相关联

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main() { for (int i = 1; i <= 3; i++) { printf("第一层第%d次for循环n", i); for (int j = 1; j <= i; j++) { printf("第二层第%d次for循环n ", j); for (int k = 1; k <= j; k++) { printf("第三层第%d次for循环 ", k); } printf("n"); } printf("nn"); } return 0; }

在这里插入图片描述

双层for循环练习

打印正三角形、倒三角形、等边三角形、菱形,平行四边形

复制代码
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> void tri1(int n) { for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { printf("*"); } printf("n"); } } void tri2(int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n-i; j++) { printf("*"); } printf("n"); } } void tri3(int n) { int i, j; for ( i = 1; i <= n; i++) { for (j = 1; j < i; j++) { printf(" "); } for ( j = n; j >= i; j--) { printf("*"); } printf("n"); } } void tri4(int n) { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= n - i; j++) { printf(" "); } for (j = 1; j <= i; j++) { printf("*"); } printf("n"); } } void tri5(int n) { int i = 0, j = 0; for (i = 1; i <= n; i++) { for (j = n; j >= i; j--) { printf(" "); } for (j = 1; j <= i; j++) { printf("* "); } printf("n"); } } void tri6(int n) { int i = 0, j = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { printf(" "); } for (j = n; j >= i; j--) { printf("* "); } printf("n"); } } void tri7(int n) { int i = 0, j = 0; for (i = 1; i <= n; i++) { for (j = n; j >= i; j--) { printf(" "); } for (j = 1; j <= i; j++) { printf("* "); } printf("n"); } for (i = 1; i <= n; i++) { for (j = 1; j <= i+1; j++) { printf(" "); } for (j = 1; j <= n-i; j++) { printf("* "); } printf("n"); } } void tri8(int n) { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= n - i; j++) { printf(" "); } for (j = 1; j <= i; j++) { printf("*"); } printf("n"); } for (int i = 0; i < n-1; i++) { for (int j = 0; j < n - i-1; j++) { printf("*"); } printf("n"); } } int main() { tri1(5); printf("n"); tri2(5); printf("n"); tri3(5); printf("n"); tri4(5); printf("n"); tri5(5); printf("n"); tri6(5); printf("n"); tri7(5); printf("n"); tri8(5); printf("n"); return 0; }

在这里插入图片描述
在这里插入图片描述

多层for循环练习

硬币之谜简化版

题目描述:
有不同面额的纸币,分别为10元 5元 1元,有多少种组合,可以组成35元

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//穷举法,所有情况一一罗列,挑选出满足条件的组合 #include <stdio.h> void show1() { int count = 0; for (int i1 = 0; i1 <=3; i1++) { for (int i2 = 0; i2 <= 7; i2++) { for (int i3 = 0; i3 <= 35; i3++) { if (i1 * 10 + i2 * 5 + i3 * 1 == 35) { count++; printf("第%d种组合为:%d张10元 %d张5元 %d张1元n", count, i1, i2, i3); } } } } } int main() { show1(); return 0; }

在这里插入图片描述

乒乓球对手分配

题目再现:
两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。已知抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程找出3对选手的比赛名单。
演算分析:
我们规定:char A = ‘X’;A的对手是X,XYZ刚好连续,所以遍历方便
A != ‘X’ && C != ‘X’ && C != ‘Z’ :A说他不和X比,C说他不和X,Z比
A != B && B != C && A != C :每个人的对手只能是一个人,不能一对多,只能一对一
在这里插入图片描述
代码实现:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h> void player() { //ABC XYZ for (char A = 'X'; A <= 'Z'; A++) { //A 含义:A的对手是X,Y,Z for (char B = 'X'; B <= 'Z'; B++) { for (char C = 'X'; C <= 'Z'; C++) { if (A != 'X' && C != 'X' && C != 'Z' && A != B && B != C && A != C) { //每个人的对手只能是一个人,不能一对多,只能一对一 printf("A的对手是%cn B的对手是%cn C的对手是%cn", A, B, C); } } } } return; } int main() { show1(); return 0; }

运行结果:
在这里插入图片描述
变式:
两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。已知抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和Z比,请编程找出3对选手可能的比赛名单。
代码实现:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void player() { //ABC XYZ for (char A = 'X'; A <= 'Z'; A++) { //A 含义:A的对手是X,Y,Z for (char B = 'X'; B <= 'Z'; B++) { for (char C = 'X'; C <= 'Z'; C++) { if (A != 'X' && C != 'Z' && A != B && B != C && A != C) { //每个人的对手只能是一个人,不能一对多,只能一对一 A != B && B != C && A != C printf("A的对手是%cn B的对手是%cn C的对手是%cn", A, B, C); } } } } return; }

运行结果:
在这里插入图片描述

最后

以上就是刻苦樱桃最近收集整理的关于多层for循环详解引言一维数组and单层for循环二维数组and双层for循环双层for循环的分析三层for循环双层for循环练习多层for循环练习的全部内容,更多相关多层for循环详解引言一维数组and单层for循环二维数组and双层for循环双层for循环内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部