众所周知循环是每一门编程语言都必不可少的一项功能,循环的作用就是重复一件事情,而分支则是判断是否执行条件下的语句。
目前C语言主流的循环为for while dowhile;
分支语句有if-else switch
首先先来了解一下分支语句,分支语句的作用就是判断是否执行条件下的语句
分支:
if-else单分支:
if(判断条件){
语句
}
流程图可以看出程序经过判断条件式如果符合条件则执行语句,否者程序不执行语句,但是程序整体依然会继续执行下去
如果我们想对某一变量,表达式等符合某一条件进行单独操作时我们可以使用if语句,这么说可能不清楚具体看例子:
#include <stdio.h>
int main()
{
int year = 18;
if (year == 18){
printf("刚满18岁!");
}
return 0;
}
这里我们定义了一个变量year当year满足year == 18这个条件的时候我们输出刚满18岁!
if-else双分支:
if(判断条件){
语句1;
}
else{
语句2;
}
从上面流程图可以看出,程序经进入判断条件时出现了两条分支,一条是满足判断条件的分支,一条是不满足判断条件的分支。
一个变量,一个表达式等如果符合我们的条件,我们想这样做,如果不符合我们要那样做,就可以使用以上if-else双分支语法。
例:
#include <stdio.h>
int main()
{
int year = 18;
if (year >= 18){
printf("成年了!");
}
else{
printf("未成年!");
}
return 0;
}
这里我们定义了一个变量year,当程序往下走的时候我们会遇到一个判断条件,当year满足year>=18岁的时候输出成年了!否则输出未成年。
if-else多分支:
if(条件1){
语句1
}else if(条件2){
语句2
}else if(条件3){
语句3
}....
else if(条件n){
语句n
}else {
全部不满足时的语句
}
当有多个条件,并且每个条件都需要有自己独立的语句的时候就可以用多分支结构
例:
#include <stdio.h>
int main()
{
int year;
printf("请输入年龄:");
scanf("%d", &year);
if (year >= 0 && year < 18){
printf("未成年!");
}else if(year >= 18 && year < 30){
printf("青年");
}else if(year >= 30 && year < 50){
printf("中年");
}else if(year >= 50 && year < 120){
printf("老年");
}else{
printf("输入错误!");
}
return 0;
}
这里我们设计了一个程序,用户输入年龄根据条件判断用户属于哪个年龄段的人,用户输入年龄如果大于等于0小于18输出未成年,输入年龄大于等于18小于30输出青年,输入年龄大于等于30小于50输出中年,输入年龄大于等于50小于120输出老年,其余的情况均输出"输入错误!"
switch 分支
Switch语句和if-else多分支很像都是用于判断条件有多个结果的情况但是Switch语句的条件表达式只能是整形结果也只能是整形
switch (条件表达式) {
case 结果1: 语句
case 结果1: 语句
default: 全部结果都不符合的语句
}
这里我们写一个判断月份是否为大月,如果是输出大月如果不是输出小月
#include <stdio.h>
int main()
{
int month;
printf("请输入月份:");
scanf("%d", &month);
switch (month) {
case 1:
printf("大月");
break;
case 2:
printf("小月");
break;
case 3:
printf("大月");
break;
case 4:
printf("小月");
break;
case 5:
printf("大月");
break;
case 6:
printf("小月");
break;
case 7:
printf("大月");
break;
case 8:
printf("大月");
break;
case 9:
printf("小月");
break;
case 10:
printf("大月");
break;
case 11:
printf("小月");
break;
case 12:
printf("大月");
break;
default:
printf("输出错误");
break;
}
return 0;
}
这里的break语句是用于跳出分支的,如果不加break语句我们输入1的时候程序会从1这个分支一直往下走直到遇见break语句才跳出分支,假设我们删除全部break语句就会成这样
同理我们也可以运用这个原理来简化一下程序,当我们输入1 3 5 7 8 10 12 的时候输出大月,2 4 6 9 11 的时候输出小月其余情况输出错误。
#include <stdio.h>
int main()
{
int month;
printf("请输入月份:");
scanf("%d", &month);
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("大月");
break;
case 2:
case 4:
case 6:
case 9:
case 11:
printf("小月");
break;
default:
printf("输出错误");
break;
}
return 0;
}
循环
循环的作用就是重复迭代的做一件事,我们在写代码的时候不可能对一件需要重复5次的事情写5次相同一样的代码这个时候就需要用到循环了。
while循环
当判断表达式为0的时候循环结束,不为0则继续,如果遇到continue语句结束本次循环进入下一次循环,如果遇到break语句直接结束循环。
这里我们写一个打印1-10中偶数的程序
#include <stdio.h>
int main()
{
int i = 10;
while(i){
if (i % 2 == 0){
printf("%d ", i);
i--;
continue;
}
if (i == 1){
break;
}
i-- ;
}
return 0;
}
这里我们定义了一个为10的i变量,当i进入循环的时候,先判断i是不是偶数如果是输出i并自减1同时跳出本次循环进入下次循环,如果i不是偶数则判断i是否为1如果是直接结束循环。其余情况i都自减1。while括号里的i同样也可以换成表达式。
for循环
for(表达式1; 表达式2; 表达式3)
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
for循环先是执行表达式1初始化循环变量,接着是表达式2循环变量的判断,如果判断结果为0结束循环,不为0执行循环语句如果碰见break直接结束循环,如果碰见continue结束本次循环进入到表达式3变量调整,之后再次进入表达式2继续循环。如果没有碰见break和continue则执行完循环语句后执行continue之后的语句。
这里我们写一个打印2-100素数的的程序
#include <stdio.h>
int main()
{
int i;
for(i = 2; i <= 100; i++){
int j, boo = 1;
for(j = 2; j < i; j++){
if(i % j == 0){
boo = 0;
break;
}
}
if (boo == 1){
printf("%d ", i);
}
}
return 0;
}
我们都知道一个数如果只能被1和它本身整除那么它就是素数,这里程序先给i初始化一个2的值然后判断i是否小于等于100如果符合则执行循环语句,循环语句里先定义一个变量j然后再定义一个变量boo用于判断素数,接着进入内循环,内循环表达式1给j初始化一个2的值,表达式2规定j必须小i。然后进入内循环语句如果i%j余0,bool改为0结束内循环,否则进入内循环表达式3j++继续内循环。这里的内循环主要是用来判断i是不是能被除1和它本身之外的数整除,如果内循环执行完了都没有触发boo = 0,那么这个数一定是素数应为他不能被除1和它本身之外的数整除。接着就执行判断条件boo == 1如果没有触发内循环boo = 0那么boo值为1符合条件打印i。接着继续执行循环直到i<=100不满足为止。
do while
do{
}while(判断表达式);
do while循环绝对是这三个循环中最特殊的,其他循环是先判断在执行,而它是先执行在判断。
举个例子
#include <stdio.h>
int main() {
int i = 0;
do {
printf("输入1打游戏\n输入0退出游戏\n");
printf("请输入你的选着:");
scanf("%d", &i);
if (i == 1) {
printf("打游戏\n");
} else if (i == 0) {
printf("退出游戏\n");
break;
} else {
printf("输入错误\n");
}
} while (i);
return 0;
}
这里我们写了一个简化的游戏菜单,用户输入1开始游戏输入0停止游戏输入其他则提示输入错误
这个程序可以一直输入只要用户不输入0;如果用的是for循环和while循环他们则是要先判断后才能让我们输入,而do while正好可以让我们输入了之后再判断要不要循环!