文章目录
分类:
- C程序是结构化程序,以顺序、分支、循环三种基本结构构建的单入口单出口程序。
- 顺序结构:CPU从上到下依次运行;
形式1. 逻辑判断
//为防止出错,将==写成=,if(a=1)//成立,变成赋值;if(1=a)//gcc报错,帮你纠错
if (1==a)
{
printf("a等于1\n");
}
if (1=a)//gcc报错,不能给常数赋值1,纠错
{
printf("a=1,a=%d\n",a);
}
形式2. if else
if(表达式){ //若为真,运行1,否则运行2
语句1;
}
else{
语句2;
}
形式3. if else if else
条件分支使用注意事项:
- if 和 else的配对原则:else或者 else if和最近的 if 配对;
- 如果语句只有一条,{}可以省略;
- 是否独占一行,linux开发中,{}不会独占一行;
//如果表达式1为真,执行1,若不为真,执行表达式2;
//如果2为真,执行语句2,若不为真,依次向下;若以上条件都不合适,执行M语句
if(表达式1){
语句1;
}
else if(表达式2){
语句2;
}
...
else if(表达式3){
语句n;
}
else{ //我不知道条件是什么,就用else
语句M;
}
举例:
//利用 if else 判断3个数字最小
#include <stdio.h>
int main(void)
{
int a,b,c;
printf("请输入三个数字:\n");
scanf("%d%d%d",&a,&b,&c);//321,判断谁最小
if(a>b){
if(b>c){
printf("最小数是%d\n",c)
}
else{
printf("最小数是%d\n",b)
}
}
else{
if(a>c){
printf("最小数是%d\n",c)
}
else{
printf("最小数是%d\n",a)
}
}
return 0;
}
形式4. switch开关分支
概念: switch开关分支,控制表达式的值和下面case对应的常量表达式(相等),执行效率高,一旦break,开关分支立马结束,若case 都不相等,最后执行default 语句;
注意事项:
- 控制表达式被当成Int处理,可以是char,但不能是浮点数和字符串,如"5.5",“abc”
- 常量表达式必须是常量,不允许重复分支;
- 如果某个case对应的break没有添加,当case成立时,运行语句后会继续执行下一个case;
3.1 如果代码需要break,写完case,先写一个break,避免漏掉; - default 关键字可以写在任意case的前面,但是需要添加break;如果default 关键字写在最后,break可以省略
//switch(5)可以
//switch(5.5)不可以
//switch("abc")不可以
//switch('a')可以
switch (控制表达式){
case (常量表达式):
语句1;
break;
case (常量表达式):
语句2;
break;
。。。。
default:
语句M;
break;
}
形式5. For循环
- 语法:
For(表达式1; 表达式2; 表达式3){
循环语句;
}
- 语义:
第 1 步:首先计算,运行表达式1;
第 2 步:然后计算,运行表达式2;
第 3 步:如果2为真,则继续执行循环;若为假,For循环退出;
第 4 步:如果表达式2为真,执行运行循环语句,并当循环语句执行完毕后再运行表达式3,完毕后,执行步骤2; - 使用形式
形式1:
int i;
for(i=0;i<5;i++)
{
printf("i=%d\n",i);//i为循环变量
}
return 0;
形式2:
int i=0;
for(;i<5;i++)//i已经赋值运算过
{
printf("i=%d\n",i);
}
return 0;
形式3:
int i=0;
for(;i<5;)
{
printf("i=%d\n",i);
i++;//可后置
}
return 0;
形式4:死循环// ctrl + c 退出死循环;
int i=0;
for(;;){
printf("i=%d\n",i);
i++;//循环变量放在循环语句中
if(i>=5){
break;//执行中断,退出for循环 //如果for循环嵌套,中断最内层的for循环
}
}
return 0;
形式5:复合形式
int i,j;
for(i=0,j=0;i<5 && j<5;i++,j++){ //{}可以考虑省略,但是不要这样
printf("i=%d,j=%d\n",i,j);
}
return 0;
形式7: continue :中断本次循环,直接跳至下一次循环
int i;
for(i=0;i<5;i++){
if(3==i){
continue; //终端本次循环,直接跳至下一次循环//当i=3时,执行continue//
//后面循环的语句不再执行,直接执行i++;下一次循环
}
printf("i=%d\n",i);
}
形式6. While循环
- 语法
while(循环控制表达式)
{
循环语句;
}
- 执行步骤:1. 运算循环控制表达式,如果结果为真,那么执行循环语句;若为假,结束;
- 循环语句 执行完毕,继续执行第一步;
int i=0;
while(i<5){
printf("i=%d\n");
i++;///i=4时/ gameover
}
while(1){
printf("hello,world\n");死循环
}
i=0;
while(++i<5){
printf("i=%d\n",i);//输出 1、2、3、4
}
i=0;
while(i++<5){
printf("i=%d\n",i);//输出1\2\3\4\5
}
形式7. do-while循环语句【至少执行一次】
- 语法
do{
循环语句;
}while(循环控制表达式);//切记分号不可省略
- 流程:
第 1 步:先执行循环语句;//第一次不做判断
第 2 步:然后计算,运行循环语句,后续依次重复;
如果为真,继续执行循环语句,后续依次重复;
如果为假,循环结束;
int i=0;
do{
printf("i=%d\n",i);
}while(i++<5);//输出0、1、2、3、4、5
形式8. goto 语句
- 作用:可以让cpu跳转到任何一条语句中去执行
- 应用场景:linux内核操作系统大量使用goto语句
- 语法:goto 标签名;//标签名就是指定要跳转的地方
形式一:
标签名:
语句;
... ;
goto 标签名;
... ;
int main(void)
{
label:
printf("1\n");
goto label;//死循环
printf("2\n")//不执行
return 0;
}
//若不想死循环,可考虑使用if语句判断
int main(void)
{
int a=1;
lable:
printf("1\n");
if(1==a){ //此过程判断a是否等于1,执行两次printf 1的操作
a=0;
goto lable; //lable与goto lable之前的程序循环
}
else{
printf("2\n");
}
return 0;
}
形式二:
goto 标签名;
...
标签名:
语句;
...
int main(void)
{
goto label;
printf("2\n");//忽略此语句,翻过去了
label:
printf("1\n");
return 0;
}
总结
提示:这里对文章进行总结:
- 章节包含内容:循环分支类型罗列