初始C语言-分支与循环语句
一、语句
1. 什么是语句?
C语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
2. 控制语句:
可分成以下三类: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语句
比如:输入1,输出星期一输入2,输出星期二输入3,输出星期三输入4,输出星期四输入5,输出星期五输入6,输出星期六输入7,输出星期日那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。这就是switch 语句。switch(整型表达式){// 语句项;case 整形常量表达式:语句;}
2.1 在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:
所以我们的代码就应该这样实现了:#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; }
2.2 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; }
三、循环语句
做一些重复往返的工作时,用循环语句
1.while语句
#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同样的例子:
#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 break和continue在for循环中
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(;;) { 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循环中的break和continue
#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语言-分支与循环语句相关推荐
- C语言全网最详细的分支和循环语句讲解
文章目录 前言 一.什么是语句? 二.分支语句(选择结构) 1.if语句 1.1 悬空else 1.2 if书写形式的对比 1.3 小小练习巩固一下 2.switch语句 2.1 在switch语句中 ...
- [简明C语言]分支和循环P_2:分支 - swtich语句
[简明C语言]分支和循环P_2:分支 - switch语句 前言 swtich语句 语句项 break语句 多个case值对应一个执行语句 default子句 要求整型 练习一:嵌套switch语句 ...
- C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)
业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...
- php中可以实现分支,PHP中的分支及循环语句
这次实践的都是PHP7的语法. 感觉是以前的5差别不是那么大,只是希望越来越快吧. $looking = isset($_GET['title']) || isset($_GET['author']) ...
- 【C语言进阶深度学习记录】七 C语言中的循环语句
文章目录 1 循环语句分析 1.1 do...while循环 1.2 while循环 1.3 for循环 1.4 三种循环语句使用对比 2 break和continue的区别 3 总结 1 循环语句分 ...
- c语言循环语循环控制,C语言.控制语循环语句.ppt
C语言.控制语循环语句 作业: 1.从键盘输入两个正整数,求出它们的最大公约数和最小 公倍数. 要求: (1)使用for语句实现: (2)输出要有字说明,其形式为: 最大公约数=具体值,最小公倍数=具 ...
- sql脚本语言中的循环语句介绍
sql脚本语言中的循环语句介绍 –sql脚本语言的循环介绍: –1.goto循环点. declare x number; begin x:=0;–变量初始化: <<repeat_loop& ...
- C语言初级篇-----循环语句详解
目录 循环语句 一.while循环 二.for循环 三.do...while循环 四.循环语句练习 getchar 与 putchar 总结 循环语句 if 语句:当条件满足的情况下,if语句后的语 ...
- 分支与循环语句C语言
c语言是一门 结构化 的程序设计语言 分为以下三种结构 顺序结构 选择结构 循环结构 一.分支语句 if语句 单分支种类 种类1: if(表达式) 语句1 种类2: if(表达式) 语句1: else ...
最新文章
- 期望dp ---- B. Tree Array 思维+期望dp 逆序对期望数
- Linux服务器默认建立的LVM逻辑卷磁盘空间分配不合理,根目录不够用,如何缩减和扩展逻辑卷?...
- 企业官网营销,网站建设是第一步
- RequestWindowFeature
- 在OpenPower720上安装SLES9(I)
- MapInfo导入.TAB和.mws的方法
- Java循环案例-求PI值
- 分割线不显示_90后都30岁了,为什么还不结婚
- leetcode —— 面试题 16.19. 水域大小
- 原理图框图_GW1N9芯片测评之GW1N Zero原理图、3D模型及PCB设计(二)
- 工作流牛人 Jan Mendling
- IE浏览器访问出现Automation 服务器不能创建对象
- 安卓 基于百度LBS的定位
- (正则)校验 8-16位,必须含有特殊字符、而大写字母、小写字母、数字至少包含其中两项
- 一、Java基础入门
- linux下的SAMBA服务------SMB协议
- SQL常见函数以及使用
- CF Round#240题解
- 纬地计算机公司有年终奖吗,常见问题解答【纬地系列软件教程】.doc
- Mixly用点灯科技控制小爱同学小度小度天猫精灵Siri控制应用