文章目录
前言
本文章介绍循环分支,if,while,for,do while
一.什么是语句
c语句分为以下五类
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
1.1首先讲解控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
1.选择结构
人生总是面临着选择,面临着分叉路。
例如填志愿,例如找男/女朋友,亦或者选择专业
这就是选择结构!
2.if语句
2.1 if语法规则
int main()
{
if() //(判断)
{
}
else()
{
}
return 0;
}
多分支
int main()
{
if()
{
}
else if()
{
}
else()
{
}
return 0;
}
2.2 运行例子
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("壮年\n");
}
return 0;
}
2.3悬空分else 就近原则
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
PS:该代码else语句只与最近的else匹配,也就是hehe。该代码结果 不打印
建议代码习惯:
1.适当的使用{}会让代码逻辑更加清晰
2.如果在if中不使用{}时,只对下面的第一条语句有用
2.4 练习
判断奇数
输出1-100的奇数
include<stdio.h>
int main()
{
int i=0;
for(i=1;i<=100;i++)
{
if(i%2==0)
{
printf("偶数");
}
if(i%2==1)
printf("奇数为%d ",i);
}
return 0;
}
3.switch语句
3.1语法结构
include<stdio.h>
int main()
{
switch(表达式)
{
case 1:
//表达式
case 2:
}
return 0;
}
应用情景:当表达多分支情况时,if else较多较为麻烦时,使用switch语句
3.2 break语句
在 switch 语句中,我们没办法直接实现分支,搭配 break 使用才能实现真正的分支。
break打破(终止循环)
include<stdio.h>
int main()
{
int a=1;
int b=2;
switch(a)
{
case 1:
printf("Good\n"); //注意若不使用break则循环会进入case2
break;
case:2
printf("Bad\n"); //良好的代码习惯是在每个case后加一个break
break;
}
return 0;
}
3.3 default语句
如果表达的值与所有的case标签的值都不匹配怎么办? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个 case 标签可以出现的位置。
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
3.4 练习
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++; //m=3 n=1
case 2:
n++; //由于没有break,会继续进行case2, m=3 n=2
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2: //由于n=2,直接进入case2.m=4 n=3
m++;
n++;
break;
}
case 4: //m=5 n=3
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n); //m=5 n=3
return 0;
}
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
4.循环语句
4.1 while循环
4.1.1
比如在屏幕上打印1-10的数字
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0
}
上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:
3.1.2while中的break和continue
break介绍
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5) //当i=5时,进入if break后 直接出while循环
break;
printf("%d ", i); //1,2,3,4
i = i+1;
}
return 0;
}
其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。所以: while 中的 break 是用于 永久 终止循环的。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue; //当i=5 进入if continue后 会回到while语句
printf("%d ", i);
i = i+1;
}
return 0;
}
所以结果打印 1,2,3,4
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while 语句的判断部分。进行下一次循环的入口判断。
3.2 for循环
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )循环语句 ;
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
3.2.1 break和continue在for循环的应用
include<stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break; //出for 循环
printf("%d ",i); //1,2,3,4
}
return 0;
}
在continue时
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue; //因为在for循环中,调整部分在前
printf("%d ",i); //1,2,3,4,6,7,8,9,10
}
return 0;
}
与while循环的对比中,可以发现有差异但是不大,大同小异
3.2.2 小练习
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i =0,k=0; k=0; i++,k++) //在c语言中 0为假 非零为真 所以不循环
k++;
return 0;
}
4.1 do while循环
4.1.1语法结构
do循环语句 ;while ( 表达式 );
4.1.2 do语句的特点
至少“做”一次。循环会至少进行一次
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i=i+1;
}while(i<=10);
return 0;
}