什么是计算机语言
相信很多人不清楚什么是计算机语言,没有接触这门语言的人会觉得听起来就很高级,其实,单从这个名字方面来讲,其实还是很好解释的,虽然你不清楚何为计算机语言,但你一定清楚什么是汉语和英语吧,其实这些各国语言统称为自然语言,自然语言是人与人之间交流使用的媒介;而计算机语言与他们不同,他是人与计算机进行交流的媒介,这样听起来是不是就很好理解了呢。
下面我们就来进入C语言基础中的循环分支语句吧,我会给大家尽可能详细的总结出这里比较重要的知识点,让我们一起努力吧!!!💪💪💪
C语言的语句
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构和循环结构。
C语言的语句主要可以分为5类,分别是表达式语句,函数调用语句,控制语句,复合语句以及=控制语句。
本篇文章所讲的循环分支语句属于上述五大类语句中的控制语句,而控制语句又可分成三类,分别是:
1、分支语句:if语句、switch语句;
2、循环语句:do-while语句、while语句、for语句;
3、转向语句:break语句、goto语句、continue语句、return语句;
那么我们先从分支语句开始吧🤭
分支语句
我们首先从 if 语句讲起吧!!
if 语句
if语句的标准语法形式如下:
1 if ( 表达式 )
2 语句
如果if 后面的表达式成立(即表达式为真或表达式不为0),则if 后面的语句执行,如果表达式不成立(即表达式为假或为0),则语句不执行。
上面括号内为什么说或表达式为0或非0呢,其实在C语言中0表示假,而非0表示真,那我们为什么说 if 语句是判断语句呢,其实只想英文也能想到,if 在英文中是如果的意思,顾名思义,如果条件成立,则进行下面的这句话。就是这么简单,那么基础原理懂了,我们来练习一下吧
上面的意思就是说,随即输入一个数,看这个数是否为奇数,如果是就打印出来,也是比较简单的运用了。
那么有人就会问了,如果有两种情况或两种以上都要打印出一些东西呢?欸~~,哥哥们姐姐们别急,if 的金牌搭档兼青梅竹马它不就来了吗,下面我们来讲else
else语句
这个语句是 if 语句的老相好,一般情况下都是配套使用的,它的语法如下:
1 if ( 表达式 )
2 语句1
3 else
3 语句2
解释一下,其实翻译成白话文就是如果是这种情况,就执行语句1;如果是其他情况,就执行语句2。理解了这些,我们再来练习一下:
这个语句就是让你输入一个年龄,如果大于等于18岁就是成年,如果不是,就打印未成年。这时就有同学发现了,如果是三种情况的话,这个好像就不能很好的表示了,但显然,设计C语言的设计师可不是吃干饭的,这时我们就可以加上else if ,如下:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
如果你还是觉得情况不够,就疯狂往中间加else if 就行了。
当然,这里的语句1、2、3等等默认的都是1条语句,也就是说if和else和else if后面只能跟一条语句,如果是两条语句,第二条就不再归 if 和 else 和else if管了,那这时我们该如何解决呢,其实只要像int main()后面加上一个大括号 {} 就行了。,不过这里记住了if+else只能算一条语句。
相信到这里,大家对if-else语句有了一定的了解,那么我们下面来讲一下其中会出现的一种特殊情况,悬空else。
悬空else
什么是悬空else问题呢?我来给大家解释一下:如果有多个 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
printf("haha\n");
return 0;
}
你觉得他会输出什么呢,很多初学者,上来以判断 a 是0,不等于1,那就执行 else 子句,打印 haha 。但是当你去运行代码,输出的结果是:啥都不输出。
那这是个什么情况呢???
这就是我们上面说的规则,这是一定要遵守的,我们不能只看格式,说else明明和第一个if是对齐的,为什么会出现这种情况,但是虽然这是和第一个if 对齐的,但当你运行时,vs把编译器会自动帮你把格式矫正,出现上图中的情况。
那么讲完了if_else语句之后,我们就来讲一下switch语句吧
switch语句
除了if语句,C语言还提供了另一种分支语句就是switch语句。
switch语句其实是另一种形式的if-else结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。如下:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
注:1、case后面的值,必须是整型变量
2、case和后面的数字之间必须有空格
那我们来尝试一下:
这时,我猜你肯定会写成这样
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
printf("星期⼀\n");
case 2:
printf("星期⼆\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
}
return 0;
}
但是当你自信的把他放在编译器中时,输入一个1以后,点击回车就发现,原来自己长得像个小丑哈哈哈,那我们运行一下一起看看是怎么回事吧。
很明显,这里把后面几个case语句后的情况都打印出来了,由此可以得知,正常情况下,你输入case 1,他会从case 1窗口进入,但它并不会从这个窗口出来,而是往下把所有的case窗口 走完才出来,那么这时我们就该想想怎么解决这个问题了,这时我们就要引入break语句了
switch中的break语句
书接上段,这时我们就用到了break语句了。
在switch语句中的break具有直接跳出case窗口的作用,也就是不再进入后面的case窗口,直接跳出switch语句,所以对于此代码,只需要每个语句后加入一个break就能预防进入后续窗口
注:一定要注意,不是每个case语句后都要使用break,需要视情况而定,不能总是盲目的在每个case语句都加上break。
default子句
但是这时有同学想到,如果上述所有case的情况都不与结果相符,但是此时程序并不会被终止,因为这种情况程序并不会认为是错误的,而我们又不想忽略这些值,这时就需要我们人为干预了。
关于default的使用:写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。
这时我们就可以对上述代码进行补充,使程序更加完善,如下:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
case 3:
printf("星期三\n");
case 4:
printf("星期四\n");
case 5:
printf("星期五\n");
case 6:
printf("星期六\n");
case 7:
printf("星期天\n");
default:
printf("不存在这个星期\n");
}
return 0;
}
注:这里的default和case并不要求顺序,但是我们习惯将default放在case之后
OK,到这里分支语句就讲的差不多了,我们接下来讲一下循环语句吧。
循环语句
while循环
while语句其实使用方法一样,只不过if是满足表达式则执行语句,而while是满足表达式则将语句进行循环直到不满足表达式为止。
while的基本结构:
while(表达式)
循环语句;
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
while循环虽然用的比较多,但是比较简单,所以我们就简单练习一下,不说多余废话了。
题目解析 :
1. 要想得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4
2. 要想去掉n的最低位,找出倒数第二位,则使用 n=n/10 操作就可以去掉最低位的,如: n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。
代码如下:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}
for循环
好,这里我们上的循环就是三大循环里用的最多的了,for的语法形式如下:
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
下面是for循环的执行流程:
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
我想到这里好多同学还是看不懂,那么咱们上一下实践,大家应该就能看懂了:
我们现在在屏幕上打印1~10:
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
运行结果如下:
接下来我们将for循环和while循环进行对比:
一定程度上,while和for是可以相互转换的!
可以发现在 while 循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for 循环的风格更胜一筹; for 循环使用的频率也最高。后面学习数据结构的时间复杂度时for循环也是比较重要的!
do-while循环
OK,这里我们就讲到了最后一个要讲的循环do-while,这个循环是3个循环里用的最少的一个,它的语法如下:
do
循环语句;
while(表达式);
while 和 for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳 出循环; 而 do-while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表 达式为真,就会进行下一次,表达式为假,则不再继续循环。
执行流程如下:
在 do-while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的 结果是!=0,则继续循环,执行循环语句;判断表达式的结果==0,则循环结束。所以在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方。
还是在屏幕上打印1~10,用do-while循环代码如下:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
break和continue
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。
• continue 的作用是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有所差异的。
其实break对于while和for其实作用相同,都是中止break外的第一层循环,所以我们只拿while循环举个例子:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
执行结果如下:
打印了1,2,3,4后,当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。所以 break 的作用就是永久的终止循环,只要 break 被执行, break 外的第一层循环就终止了。 那以后我们在循环中,想在某种条件下终止循环,则可以使用 break 来完成我们想要的效果。
但是continue在for和while中就有所不同了,我们在for循环中运用一下continue,让大家对其作用有所了解:
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
执行结果如下:
所以在 for 循环中 continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环无需再执行后续某些操作的时候,就可以使用 continue 来实现。
那么在for和while循环中continue具体有什么区别呢?
其实区别不算很大,我来给大家对比一下:
while循环中,如果它跳过了本次循环中的continue后的代码,那么这次循环中 i 就不会再++,导致你执行代码后会陷入死循环,也就是你运行出1 2 3 4后光标一直会闪烁,因为i不加1,所以i一直卡在5,陷入死循环;
而for循环中,你会发现,就算跳过这次循环,由于for循环里的调整式位于for以后,所以i仍会++,不会陷入死循环。
我想,讲到这里,大家应该就看懂了,下面,我们来介绍一下转向语句中的goto语句。
转向语句
goto语句
C语言提供了⼀种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处。
例如:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用 goto 就非常的方便了。
goto语句语法如下:
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
error:
//...
本来 for 循环想提前退出得使用 break ,⼀个 break 只能跳出一层 for 循环,如果3层循环嵌套就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。
偷偷告诉大家,goto语句还可以用来整蛊欧(●ˇ∀ˇ●)
由于篇幅过长,这里就直接给代码了,同志们下课自己去玩吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 120");
while (1)
{
printf("您的电脑将在分钟后关机,请输入密码取消关机\n");
scanf("%s", input);
if (strcmp(input, "伦伦是猪") == 0)
{
system("shutdown -a");
break;
}
}
return 0;
}
循环分支语句到这里结束啦,看过的小伙伴赞一下啦🔅