C语言的底层逻辑剖析(分支与循环1)
导入
关于C语言的底层逻辑剖析,此系列我们就要正式进入C语言的深入学习,关于学编程这件事呢,其实还是那句话,学习编程这件事是极其枯燥也是非常困难的,但是要相信坚持一定会有收获,共勉。
语句
什么是语句?
在C语言中大致有以下几种语句
1.表达式语句;
2.函数调用语句;
3.控制语句;
4.复合语句;
5.空语句;
这5种语句中最为重要的当属第三种控制语句,控制语句是用来控制程序的流程而使用的,进而决定程序的结构方式(C语言中有三种结构方式,顺序结构,选择结构,循环结构),所以说控制语句也是C语言语句中的精髓所在,而控制语句又可以细分为以下多种,
1. 条件判断语句也叫分支语句:if语句、switch语句;
2. 循环执行语句:do while语句、while语句、for语句;
3. 转向语句:break语句、goto语句、continue语句、return语句。
分支语句(选择结构)
假设你上大学有两种选择,一好好学习精通一门技术拿到好offer,二整日玩游戏娱乐,毕业回家卖红薯。那么我们如何在C语言中实现这个程序呢?
参考代码
i
nt main()
{
int i = 0;
printf("你要好好学习吗?\n(1/0)");
scanf("%d",&i);
if (i == 1)
printf("拿到好offer\n");
else
printf("回家卖红薯\n");
return 0;
}
结合我们在新手上路C语言初识C语言系列对C语言各种内容有一个大致了解,我们很容易能理解这段代码,这就是一个最基本的选择结构的示例,同时这也是分支语句的基本结构。
if语句
关于if语句我们最好直接来看示例来帮助大家理解,
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");
else if (age >= 50 && age < 70)
printf("老年\n");
else if (age >= 70 && age < 100)
printf("老寿星\n");
return 0;
}
我们仔细分析这段代码就是一个很简单的分支语句的例子,这里要解释一下在判断中的**&&意思是并且**,千万不要写成a>b>c的形式。另外在判断时表达式如果是真才会执行语句,表达式如果是假,则不会执行,在C语言中0表示假,非0为真
此外我们来看一个悬空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;
}
当你将代码写成这样,那么请问这个else和谁匹配,程序输出的结果是什么,请思考,我相信大部分人可能会回答打印hehe,那么就要恭喜你错了,正确的答案是什么都不会输出,为什么呢?我们再来看
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
当你把代码写成这个样子,可能你就理解为什么是什么都不输出,这里在a==1判断时为假,那么程序根本就不会再往下走,也就什么都不会输出。这就是这道题的正解,那么讲这道题的目的是什么呢,其实就是想告诉大家好的代码风格是有多么重要。再强调一次,代码风格很重要!代码风格很重要!代码风格很重要!
switch语句
当你要实现多种情况时,用if语句去写你会发现实在是有点麻烦,那么我们再去学习一种语句叫做switch语句,这是专门用来解决多种情况的一个语句,
int main()
{
int day = 0;
scanf("%d",&day);
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需要重点解释一下,break的作用就是让程序跳出代码块,这样才能保证结果的正确性,另外还有一种可能如果用户输入了一个非法的值怎么办,这时候就有了default子句,专门用来处理非法的情况。如下:
int main()
{
int day = 0;
scanf("%d",&day);
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;
default :
printf("输入错误\n");
}
return 0;
}
可见,当我输入8这一不存在的情况时候,给出的结果是输入错误,一般我们用此来处理一些非法的情况。另外,对于switch语句其实是允许嵌套使用的,
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1: m++;
case 2: n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1: n++;
case 2:
m++; n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
大家可以自行来计算一下这个程序的结果哦,当你能理解这个结果的时候也就彻底明白了switch语句的执行逻辑,我来告诉大家结果m=5,n=3.如果不懂的也欢迎讨论。