一、语句

1. 什么是语句?

C语句可分为以下五类:

1. 表达式语句

2. 函数调用语句

3. 控制语句

4. 复合语句

5. 空语句

本章后面介绍的是控制语句。

2. 控制语句:

用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。
可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;

2. 循环执行语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。

二、分支语句

1.if语句

语法结构:

1)单分支if

                if(表达式)
语句;
2)if else语句(双分支)
                if(表达式)
语句1;
                else
语句2;
3)if elseif else(多分支)    
                if(表达式1)
语句1;
                else if(表达式2)
语句2;
                else
语句3;
注意:
如果表达式的结果为真,则语句执行。在C语言中如何表示真假?
0表示假,非0表示真。

如果条件成立,要执行多条语句,怎应该使用代码块。
这里的一对 { } 就是一个代码块。
 

1.1例子:

#include <stdio.h>
//代码1
int main()
{int age = 0;scanf("%d", &age);if(age<18){printf("未成年\n");}
}//代码2
#include <stdio.h>
int main()
{int age = 0;scanf("%d", &age);if(age<18){printf("未成年\n");}else{printf("成年\n");}
}//代码3
#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){

1.2悬空else

有时会遇到这种代码,由于省略了{},或者没有对齐代码(缩进格式问题),导致对代码理解产生误解。

//适当的使用{}可以使代码的逻辑更加清楚。
//代码风格很重要

例子:

这个else到底与哪个if是匹配的?代码最终是什么结果?其实是第二个if,结果是什么也没输出。原因很简单:

else的匹配:else是和它离的最近的if匹配的。

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1)if(b == 2)printf("hehe\n");else//与上面最近的if进行匹配printf("haha\n");return 0;
}

其实上面的代码就等于这样

当a=0时,第一个if语句判断a==1表达式为假,不执行该语句。压根就没进去这个代码块,于是直接跳到return 0;结束该程序了。

#include <stdio.h>
int main()
{int a = 0;int b = 2;if(a == 1){if(b == 2){printf("hehe\n");}else//与上面最近的if进行匹配{printf("haha\n");}}return 0;
}

修改代码:

而我们真正想要的是这样

a==1的时候如果b==2打印hehe,否则a为其他值,打印haha

修改代码后,逻辑明显清晰了许多,所以养成良好的代码习惯很重要

#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;
}

2.switch语句

switch语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。
这就是switch 语句。
switch(整型表达式)
{
// 语句项;

case 整形常量表达式:
语句;

}

2.1 switch语句中的 break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
        每个case里的语句,需要适当的break,因为在switch语句里,是从上到下依次执行的,没有break代表着会一直往下执行,直至执行完最后一条switch里的语句。
例子1:
#include <stdio.h>
int main()
{int day = 1;switch(day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;    case 4:printf("星期四\n");break;    case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期天\n");    break;}return 0;
}

没有break将得到这样的结果:所有语句执行了,全输出来了

例2:

有时候我们的需求变了:
1. 输入1-5,输出的是“weekday”;
2. 输入6-7,输出“weekend”
所以我们的代码就应该这样实现了:
#include <stdio.h>
int main()
{int day = 3;switch(day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;}return 0;
}

 

编程好习惯
在最后一个 case 语句的后面加上一条 break语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.2 default子句

如果表达的值与所有的case标签的值都不匹配,default来与该匹配
例子:当不匹配时,默认走了default语句
int main()
{int n = 0;scanf("%d", &n);switch (n){case 1:case 2:case 3:printf("3以内\n");break;default:printf("非3以内的数\n");break;}return 0;
}

编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

三、循环语句

做一些重复往返的工作时,用循环语句

1.while语句

例如:在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{int i = 1;while(i<=10)//循环判断条件,当表达式为真进入循环体,否则不进入循环;当进入循环后,条件不满足时,跳出循环{printf("%d ", i);i = i+1;}return 0;
}

1.1while语句中的break与continue

//理解break和continue
int main()
{int i = 1;while (i <= 10) {//if (5 == i)//  break;//1 2 3 4//break结束整个循环,永久终止循环if (5 == i)continue;//1 2 3 4 死循环//跳过此次循环,忽略跳过continue后面的代码,重新回到该while循环判断表达式,是否进入下一个循环printf("%d ", i);i++;}return 0;
}
break最终结果:
永久结束整个循环

continue最终结果:

仔细观察,此时程序并没有结束,在4后死循环了

1.2总结:

1)break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
2)continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

2.for循环

for(表达式1; 表达式2; 表达式3)
循环语句;
for(初始化;判断;调整)
语法
表达式1
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。

2.1同样的例子:

使用for循环 在屏幕上打印1-10的数字。
#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;
}

2.2 breakcontinuefor循环中

我们发现在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。

break最终结果:

continue最终结果:

2.3 for语句的循环控制变量

建议:
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

2.4 一些for循环的变种

1)for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。

例如这样就死循环了

//代码1
for(;;)
{
printf("hehe\n");
}

2)省略初始化带来的问题

正常情况下打印3*3也就是9和hehe

//代码2int i = 0;int j = 0;//这里打印多少个hehe?for(i=0; i<3; i++){for(j=0; j<3; j++){printf("hehe\n");}}

当省略i=0和j=0,则只打印3次hehe

2.5大坑题

一次都不循环,因为k=0;这个判断条件=是赋值,而不是==判断是否相等,

所以此时表达式恒为假,不进入循环

//请问循环要循环多少次?
#include <stdio.h>
int main()
{int i = 0;int k = 0;for(i =0,k=0; k=0; i++,k++)k++;return 0;
}

3. do...while()循环

循环至少执行一次,使用的场景有限,所以不是经常使用。
do
循环语句;
while(表达式);

例子:

#include <stdio.h>
int main()
{int i = 1;do{printf("%d ", i);i=i+1;}while(i<=10);return 0;
}

3.1do while循环中的breakcontinue

#include <stdio.h>
int main()
{int i = 1;do{if(5 == i)break;printf("%d ", i);i=i+1;}while(i<=10);return 0;
}
#include <stdio.h>
int main()
{int i = 1;do{if(5 == i)continue;printf("%d ", i);i=i+1;}while(i<=10);return 0;
}

4.goto语句

//滥用会导致程序流程混乱或者导致死循环
//多层循环时,break可以跳出单层循环,跳出错层循环需要使用多次,很麻烦,所以可以使用goto语句跳出多层循环

例子1:死循环

#include<stdio.h>
//goto语句死循环例子
int main()
{
again:printf("hehe\n");printf("haha\n");printf("heihei\n");goto again;//goto语句跳转到agian的位置return 0;
}

运行结果:死循环打印

例子2:恶作剧关机程序(请慎用!!!否则真的关机了!!)

//关机程序:
#include<string.h>
#include<stdlib.h>
int main()
{//关机命令 shutdown//shutdown -s -t 60 //60s之后关机//shutdown -a 取消关机char arr[20] = { 0 };system("shutdown -s -t 60");
again:printf("请注意,你的电脑将在1分钟后关机。如果输入:我是猪,就取消关机\n");scanf("%s", arr);if (strcmp(arr, "我是猪") == 0){system("shutdown -a");}else{goto again;}//不用goto语句也可以//循环方法//while (1)//{//  printf("请注意,你的电脑将在1分钟后关机。如果输入:我是猪,就取消关机\n");//   scanf("%s", arr);//   if (strcmp(arr, "我是猪") == 0)//  {//     system("shutdown -a");//      break;//    }//}return 0;
}

运行结果:

初始C语言-分支与循环语句相关推荐

  1. C语言全网最详细的分支和循环语句讲解

    文章目录 前言 一.什么是语句? 二.分支语句(选择结构) 1.if语句 1.1 悬空else 1.2 if书写形式的对比 1.3 小小练习巩固一下 2.switch语句 2.1 在switch语句中 ...

  2. [简明C语言]分支和循环P_2:分支 - swtich语句

    [简明C语言]分支和循环P_2:分支 - switch语句 前言 swtich语句 语句项 break语句 多个case值对应一个执行语句 default子句 要求整型 练习一:嵌套switch语句 ...

  3. C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)

    业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...

  4. php中可以实现分支,PHP中的分支及循环语句

    这次实践的都是PHP7的语法. 感觉是以前的5差别不是那么大,只是希望越来越快吧. $looking = isset($_GET['title']) || isset($_GET['author']) ...

  5. 【C语言进阶深度学习记录】七 C语言中的循环语句

    文章目录 1 循环语句分析 1.1 do...while循环 1.2 while循环 1.3 for循环 1.4 三种循环语句使用对比 2 break和continue的区别 3 总结 1 循环语句分 ...

  6. c语言循环语循环控制,C语言.控制语循环语句.ppt

    C语言.控制语循环语句 作业: 1.从键盘输入两个正整数,求出它们的最大公约数和最小 公倍数. 要求: (1)使用for语句实现: (2)输出要有字说明,其形式为: 最大公约数=具体值,最小公倍数=具 ...

  7. sql脚本语言中的循环语句介绍

    sql脚本语言中的循环语句介绍 –sql脚本语言的循环介绍: –1.goto循环点. declare x number; begin x:=0;–变量初始化: <<repeat_loop& ...

  8. C语言初级篇-----循环语句详解

    目录 循环语句 一.while循环 二.for循环 三.do...while循环 四.循环语句练习 getchar 与 putchar 总结 循环语句  if 语句:当条件满足的情况下,if语句后的语 ...

  9. 分支与循环语句C语言

    c语言是一门 结构化 的程序设计语言 分为以下三种结构 顺序结构 选择结构 循环结构 一.分支语句 if语句 单分支种类 种类1: if(表达式) 语句1 种类2: if(表达式) 语句1: else ...

最新文章

  1. 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
  2. Linux服务器默认建立的LVM逻辑卷磁盘空间分配不合理,根目录不够用,如何缩减和扩展逻辑卷?...
  3. 企业官网营销,网站建设是第一步
  4. RequestWindowFeature
  5. 在OpenPower720上安装SLES9(I)
  6. MapInfo导入.TAB和.mws的方法
  7. Java循环案例-求PI值
  8. 分割线不显示_90后都30岁了,为什么还不结婚
  9. leetcode —— 面试题 16.19. 水域大小
  10. 原理图框图_GW1N9芯片测评之GW1N Zero原理图、3D模型及PCB设计(二)
  11. 工作流牛人 Jan Mendling
  12. IE浏览器访问出现Automation 服务器不能创建对象
  13. 安卓 基于百度LBS的定位
  14. (正则)校验 8-16位,必须含有特殊字符、而大写字母、小写字母、数字至少包含其中两项
  15. 一、Java基础入门
  16. linux下的SAMBA服务------SMB协议
  17. SQL常见函数以及使用
  18. CF Round#240题解
  19. 纬地计算机公司有年终奖吗,常见问题解答【纬地系列软件教程】.doc
  20. Mixly用点灯科技控制小爱同学小度小度天猫精灵Siri控制应用

热门文章

  1. SQL server 2008R2 入门
  2. 照片建模神器 Recap Photo
  3. 如何在 HTML 网站上创建其他网页
  4. 性能服务器阵列,存储性能101:服务器、阵列与网络架构基础
  5. 在华为13年的峥嵘岁月后,我加入了一个13人的初创团队
  6. Android热更新,android组件化通信
  7. 光学雨量计应用降雨量检测
  8. 【PHPWord】PHPWord生成图表-雷达图 | 隐藏图例、设置数值类别隐藏、展示多组数据
  9. win10关闭防火墙脚本.bat
  10. CMD 常用命令总结