编辑
或许不是今天,或许不是明天,或许不是下个月,但是,有一件事是确定的,有一天我肯定会成为冠军。—莫雷诺
目录
3、尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形
C语言循环结构的三种循环语句
在日常生活中我们许多事物离不开循环。像超市的收银系统,学校的学生管理系统等。都是重复一些类似的操作来录入信息,这时候就需要用到循环控制语句完成。下面我就来介绍这几种循环语句:
1、for语句语句循环结构
1.1for语句的循环结构
🤼♀️通过以下程序来看下它的结构:
//for语法结构 #include <stdio.h> int main() { for(表达式1;表达式2;表达式3) { 循环体; } }
- 表达式1是程序始初我们定义的值,它经过循环过后会改变我们称之循环变量
- 表达式2根据条件来判断true或false(继续或结束程序)我们称之为循环判断
- 表达式3它也会随着程序的运行不断自增,我们也称它为循环变量
- 循环体内容一般就是我们要求的内容也就是程序的目的
for语句流程图:
编辑
1.2for语句的执行步骤
//for语法结构 #include <stdio.h> int main() { for(表达式1;表达式2;表达式3) { 循环体; } }
执行步骤:
第一,给表达式1进行循环变量初始化,表达式2设置循环终止条件,表达式3设置循环变量增量或减量;
第二,执行表达式2,判断结果为true(真),则进入表达式3循环变量增量或减量,否则为false(假)退出循环;
第三,执行循环体内容;
第四,转入第二步;
注意🥊🥊🥊
for语句里面的每个表达式都用英文分号;隔开
例子:求0的9的和
//求0到9的和 #include<stdio.h> int main() { int s = 0; for (int i = 0; i < 10; i++) { s += i; } printf("%d\n", s); return 0; }
输出:45
第一次:i=0;i<10;i++,执行循环体内容,此时s=0;
第二次:i=1;i<10;i++,执行循环体内容,此时s=1;
此处省略多次
最后一次:i=10;i!<9,退出循环,此时s=45;
我们可以理解为每一次判断过后,i都要自增。自增后的i作为下一次判断条件,直到判断终止。
1.3for语句里的break和continue
首先我们要了解到break和continue的用法。在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。而continue则是退出本次循环,不终止循环,继续下一次循环。
🤼我们来看break在for语句中的用法:
#include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) break; printf("%d ", i); } return 0; }
输出:1 2 3 4
这个程序比较容易理解,循环体内输出4次i后,i自增到5。if语句判断i==5为正则运行break语句,退出了整个循环。
🤼♀️continue在for语句中的用法:
#include <stdio.h> int main() { int i = 0; for (i = 1; i <= 10; i++) { if (i == 5) continue; printf("%d ", i); } return 0; }
输出:1 2 3 4 6 7 8 9 10
可以看到,与break不同之处是。当i自增到5时候,continue语句执行退出了当次的循环后,for语句还并未结束。所以输出的结果也是截然不同的。
相信大家都已经懂得了for循环的结构、运行流程和for中break和continue的用法,我们来练习一下吧。
1.4练习
1.4.1练习1
🤼有以下程序输出的结果是什么
#include <stdio.h> int main() { int a = 0, b = 0; for (a = 1, b = 1; a <= 100; a++) { if (b >= 20) break; if (b % 3 == 1) { b = b + 3; continue; } b = b-5; } printf("%d\n", a); return 0; }
输出: 8
第一次循环:a = 1,b=1->b<20,if不成立,b%3==1%3==1成立,b=b+3, 此时b的值为4
第二次循环:a = 2,b=4->b<20,if不成立,4%3==1成立,b=b+3, 此时b的值为7
第三次循环:a = 3,b=7->b<20,if不成立,7%3==1成立,b=b+3, 此时b的值为10
第四次循环:a = 4,b=10->b<20,if不成立,10%3==1成立,b=b+3, 此时b的值为13
第五次循环:a = 5,b=13->b<20,if不成立,13%3==1成立,b=b+3, 此时b的值为16
第六次循环:a = 6,b=16->b<20,if不成立,16%3==1成立,b=b+3, 此时b的值为19
第七次循环:a = 7,b=19->b<20,if不成立,19%3==1成立,b=b+3, 此时b的值为22
第八次循环:a = 8,b=22->b>20,if成立,循环break提出
最后打印a:8
1.4.2练习2
🤼♀️找到10个数里面最大的值使用for循环
#include<stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int rat = sizeof(arr) /sizeof(arr[0]); int max = 0; for (int i = 0; i < rat; i++) { if (arr[i] > max) max = arr[i]; } printf("%d\n", max); return 0; }
输出:10
sizeof是求字节数,sizeof(arr)求出arr数组总字节数,sizeof(arr[0])求出arr单个元素字节数。那么sizeof(arr) /sizeof(arr[0])就是arr数组的长度了。
上述程序 ,输出的结果是正确的。但这个程序是由漏洞的,这个程序固定设计了十个整数。那么自行输入呢。输入的数可以是整数、负数。那时候,最大的值该怎么求呢?
🥊我们可以这样改:
#include<stdio.h> int main() { int n = 0; int arr[10] = {0}; int rat = sizeof(arr) / sizeof(arr[0])-1; for (int i = 0; i < rat; i++) { scanf("%d ", &arr[i]); } int max = arr[0]; for (int j = 0; j < rat; j++) { if (arr[j] > max) max = arr[j]; } printf("%d\n", max); }
输入:-1 -2 -3 -4 -5 -1 -6 -10 -9 -10
输出:-1
我们可以看到上述程序中的max=arr[0]了,防止我输入的全都是负数,因此我干脆将第一个元素先最为最大值。
2、while语句循环结构
2.1while语句的结构
//while语法结构 #include <stdio.h> int main() { 表达式1; while (表达式2) { 语句; 表达式3; } }
注意🥊🥊🥊不知道各位发现没有for语句与while语句有着同工异曲之处。那么如果我们会了for语句或者while语句其中一个是不是就掌握了两种语句呢?
while流程图 :
编辑
2.2while语句的执行步骤
//while语法结构 #include <stdio.h> int main() { 表达式1; while (表达式2) { 语句; 表达式3; } }
执行步骤:
第一,给表达式1进行循环变量初始化,表达式2设置循环终止条件,表达式3设置循环变量增量或减量;
第二,执行表达式2,判断结果为true(真)执行语句,否则为false(假)退出循环;
第三,表达式3循环变量增量或减量
第四,转入第二步;
while语句我们理解为先判断再执行
例子:求0到9的和
//求0到9的和 #include <stdio.h> int main() { int i = 0; int s = 0; while (i < 10) { s = s + i; i++; } printf("%d\n", s); return 0; }
输出:45
和for语句执行的结果一样都是45,我们可以认为掌握for语句后就掌握了while语句,所以for语句与while语句有着同工异曲之处。
2.3while语句中的break和continue
上面已经讲到了break和continue的区别
🤼那么break在while中的用法:
#include<stdio.h> int main() { int i = 1; while(i <= 10) { if (i == 5) break; printf("%d ", i); i = i + 1; } return 0; }
输出:1 2 3 4
和刚刚讲解for的语句一样,输出4次i的值,当i自增到5时,满足了if判断为真执行break语句退出整个循环。
🤼♀️continue在while中的用法:
#include <stdio.h> int main() { int i = 1; while (i <= 10) { if (i == 5) continue; printf("%d ", i); i = i + 1; } return 0; }
输出:1 2 3 4 光标一直闪烁
与for语句中不同的是,i自增的位置发生了改变。导致每次退出的时候i始终是=5,所以if判断一直是真就一直执行continue语句。最终导致程序不能终止。
2.4练习
2.4.1练习
🤼打印数字字符个数跳过其余字符
#include <stdio.h> int main() { char ch = '\0'; while ((ch = getchar()) != EOF) { if (ch < '0' || ch > '9') continue; putchar(ch); } return 0; }
输入:abcd1234fafa567
输出:1234567
EOF文件结束标志,我们理解EOF=-1||是或的意思
3、do-while语句循环结构
这里我们可以引用一句话:“东厂不敢杀的人我杀,东厂不敢管的事我管。一句话,东厂管得了的我要管,东厂管不了的我更要管,先斩后奏,皇权特许!”开个玩笑,其实这句话没什么用。主要是显现出do它不管后面的while满不满意先做了再说。
3.1do-while语句执行步骤
#include <stdio.h> int main() { 表达式1; do { 语句; 表达式2; }while(表达式3); return 0; }
先执行循环里面语句和表达式2,在判断表达式3。因此我们理解 do-while为先执行再判断
do-while流程图 :
编辑
🥊我们直接来看代码:
//简单的while循环 #include <stdio.h> int main() { int a = 0; int b = 1; do { a = a + b; b++; printf("%d ", a); } while (a<100); printf("\n"); return 0; }
输出:1 3 6 10 15 21 28 36 45 55 66 78 91 105
我们可以看到,最后一次结果为105,超出了a<100。可见do-while确实是先执行循环体后判断。
3.2do-while语句中的break和continue
🤼break语句在do-while中的用法:
#include <stdio.h> int main() { int i = 1; do { if (5 == i) break; printf("%d ", i); i = i + 1; } while (i <= 10); return 0; }
输出:1 2 3 4
与上面for循环,while循环都有一样,输出4次i,i自增到5满足if判断语句退出循环。可见判断语句在程序中的重要性。
🤼♀️continue语句在do-while中的用法:
#include <stdio.h> int main() { int i = 1; do { if (5 == i) continue; printf("%d ", i); i = i + 1; } while (i <= 10); return 0; }
输出:1 2 3 4 光标闪烁不停
do-while语句中的continue语句跟上面while程序中continue语句功能是一样的。都是每次退出的时候i始终是=5,所以if判断一直是真就一直执行continue语句。最终导致程序不能终止。
控制循环结构的两个语句
1、break语句
- beeak语句我们理解为退出循环,结束程序。
🤼我们直接看代码:
编辑
执行break操作,跳出所在的当前整个循环,到外层代码继续执行。
编辑
执行break操作,跳出所在的当前整个循环,到外层代码继续执行。可以跟上述continue语句对比。
2、continue语句
- continue语句咱们理解为退出本次循环,继续执行程序。
🤼♀️咱们直接看代码:
编辑
执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。
编辑
上面可以看两个不同的语句实现同一种功能,都跳过了3然后继续打印下个一个数字直到程序结束。
3、嵌套循环
嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
🤼最经典之一的嵌套循环有9*9乘法口诀,来吧展示:
#include <stdio.h> int main() { int i = 1; int j = 1; while (j < 10) { for (i = 1; i <=j; i++) { printf("%d*%d=%d ", i, j,i*j); } printf("\n"); j++; } }
可以看到结果非常的漂亮:
编辑
C语言循环结构语句,控制循环语句你会了吗?
总结:
- 1、while语句先判断后执行
- 2、do-while语句先执行后判断(先斩后奏)
- 3、for语句跟while语句有着同工异曲之处
- 4、break语句退出本次循环结束程序
- 5、continue语句退出本次循环继续执行程序
练习
1、计算n的阶乘
#include<stdio.h> int main() { int n = 0; int s = 1; scanf("%d", &n); for (int i = 1; i <=n; i++) { s = s * i; } printf("%d\n", s); return 0; }
输入:5
输出:120
2、计算1!+2!+3!+...+10!
#include<stdio.h> int main() { int n = 0; int s = 0; int m = 0; scanf("%d", &n); for (int i = 1; i <=n; i++) { m = 1; for (int j = 1; j <= i; j++) { m = m * j; } s = s + m; } printf("%d\n", s); return 0; }
输入:6
输出:873
3、尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形
#include<stdio.h> int main() { int i,j,k,n; n=3; char a; scanf("%c",&a); for(i=1;i<=n;i++) { for(j=0;j<n-i;j++) printf(" "); for(k=0;k<2*i-1;k++) printf("%c",a); printf("\n"); } for(i=1;i<n;i++) { for(j=0;j<i;j++) printf(" "); for(k=0;k<2*(n-i)-1;k++) printf("%c",a); printf("\n"); } return 0; }
输入:*
输出:
编辑
本期博客到这就结束,如有帮助还请给博主点个小小的关注
编辑
“我真的恨死训练了。但我告诉自己,‘别放弃,忍受当下的苦,然后这辈子都像一个冠军一样活着。’”——阿里