C语言是由顺序结构、选择结构、循环结构组成的结构化程序设计语言。我们日常所见的事情都可以拆分成这三种结构或者这三种结构的组合。 顺序结构:按语句出现的先后顺序,以此执行。 选择结构(也叫分支结构):根据所给定的条件选择是否执行。 循环结构:根据要求,将语句重复执行多次。 接下来我们将详细分析选择结构和循环结构。
【一】选择结构
首先我们要知道,在C语言中,表达式是用真假来判断的,0代表假,非0代表真。
那真、假
又是什么意思呢?🧐
简单点理解,表达式为真就表示这个表达式是对的,比如 3 > 1、'a' == 'a'
都表示真
,不对的就是假
。
1.1 if(如果)
我们可以直接把if
理解成如果
,else
理解为否则
,如果
表达式为真(为非0),则进入🌸括号执行里面的语句,否则为假(为0),则不会进入到if后面的🌸括号,也就是跳过if( 表达式 ){语句}
结构,执行else
后面的语句。
单分支结构语法规则为:
举个🌰栗子: 假如你的一周的时间规划是每周六晚上会去操场跑步,其余的晚上在宿舍撸代码。
#include<stdio.h>
int main()
{
int day = 0;
printf("星期");
scanf("%d",&day);
if(day == 6)//如果day为6,表达式为真,进入🌸括号执行里面的语句
{
printf("去操场跑步!");
}
//表达式为假,则不进入上面的🌸括号,执行下面的语句。
printf("在宿舍撸代码!");
return 0;
}
虽然说if和else后面只有一条语句时,可以省略花括号,但不建议这样写。加上花括号,代码更加简洁更有逻辑,有助于养成一个良好的代码习惯。
1.2 if(如果)... else(否则)
if语句可以单独使用,也可以给它配一个小弟else,构成if...else
结构。
双分支结构语法规则:
比如下面的🌰栗子:
像这样的一种条件成立,另一种肯定不成立的事情,就可以使用if...else结构。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 0)
printf("%d 是偶数\n", num);
else
printf("%d 是奇数\n", num);
return 0;
}
在这个程序中我们使用了if的双分支结构,因为对于数的奇偶性,一个数不是奇数,那它肯定就是偶数。
%叫做取余或取模,1%2 = 1 意思就是1除以2,余数为1,把这个数除以2,看余数是否为零,余数为零则为偶数,否则就为奇数。
注:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。因此要合理地去使用花括号,避免代码出现歧义。
1.3 用else if表示多分支结构
了解了if...else结构之后,我们发现在日常生活中可能有多种情况,此时单靠if...else结构,可能就搞不定了,为此C语言增加了else if结构。
还是上面的🌰栗子:
如果我的计划有变,我想星期一到星期四晚上在宿舍撸代码,星期五和星期六晚上和女朋友约会,星期天晚上去操场跑步。此时单靠if...else结构已经是搞不定了,就需要加入else if语句共同实现。
首先我们要知道else if的后面也是带判断条件的,比如else if( n > 0 )。正是由于它可以带有判断语句,才能区别于else进行多分支条件的判断。
1.4 switch语句
虽说else if语句能够解决多分支语句,可是我们可以很清楚地看到if多分支语句的代码过于冗余,为此C语言提供了第二种解决多分支的语句——switch语句。
在介绍switch语句前,我们还需要先了解另两个语句——break语句和continue语句。
1.4.1 break语句和continue语句
break和continue都是用来控制循环结构的,主要作用就是控制循环的执行。
区别:
continue语句的作用是跳过本次循环体中剩余尚未执行的语句,立即进行下一次的循环条件判断,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。
注:continue只能在循环语句中使用,即只能在 for 、 while 和 do ... while 语句中使用。
break语句用于跳出一个循环体或者完全结束一个循环,不管哪种循环,一旦在循环体中遇到break语句,系统将完全结束循环,开始执行循环之后的语句。
注:break语句不仅可以用在循环语句中,还能使用在switch语句中。
在switch语句中,break的作用是跳过一块case语句。
OK,了解了break语句后,我们返回正题,学习解决多分支问题的switch语句。
switch语句的语法规则:
switch语句的使用注意事项:switch的括号中的语句必须是整型表达式,case后面必须是整型常量表达式。`break语句就相当于一个插销,把多个case语句划分为不同的分支语句。``
switch(整型表达式)
{
case 1:
语句1;
break;//如果这里没有break,则执行完语句1后会继续执行case2及后面的语句
//因此break语句相当于一个插销,卡住这里
case 2:
语句2;
break;
...
default :
语句n;
break;
}
还是之前的🌰栗子:
在switch语句中的case语句和default语句是没有顺序要求的,只有满足实际情况都是可以的,不过通常是把default语句放在最后面。
【二】循环结构
循环,在日常生活中是让人重复做一件事,在代码世界中是让计算机重复执行同样的一段代码。
2.1 while语句
while循环根据循环条件的返回值来判断执行几次循环体,当条件成立时,重复执行循环体,直到条件不成立时终止。
while语句的语法规则:
while( 表达式 )
{
语句;
}
实战练习:
输⼊⼀个正的整数,逆序打印这个整数的每⼀位
例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
实现思路:
首先要对一个整数的个十、百、千、万...位进行操作,我们需要了解两个操作符——“ / ”和“ % ”。
比如 12 这个数,12%10 意思就是12除以10的余数,所以12%10就得到了2。12/10 在数学运算中,结果为1.2,然后用一个int的类型的空间存放它,就把2给除掉,剩下1。
总结规律:
- 想要得到整数n的最低位,就可以使用n%0的运算,得到的余数就是最低位。比如1234%10得到4。
- 想要删掉整数n的最低位,就可以使用n/10的运算,删掉最后一位数。比如 (int) 1234/10 得到123。
对于这道题,输入1234,我们先将1234%10,就能得到并打印 4 ,然后再将1234/10 得到123 ,再重复前面的操作,就能实现逆序打印了。
注意事项:要注意while循环的判断条件是否合理,如果判断条件恒为真,那么程序将会陷入死循环,,判断条件恒为假,则此循环将作废。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
while(n)
{
printf("%d ", n%10);
n /= 10;
}
return 0;
}
2.2 do while语句
一看到do while语句,我们就能发现它跟while语句是孪生兄弟。它和while循环的实现逻辑完全一样,唯一不同的是do while 语句要先执行循环体语句一次,再进行while后面的条件语句判断。
do while语句的语法规则:
do
{
执行语句;
}while(表达式);
由do while语句的结构,我们就能验证它独一无二的特点,首先看到do语句相当于敞开的大门,没有任何阻拦,请君入瓮,执行完一次循环体while语句再突然一拦截,表达式为真则继续循环,直到为假才结束循环。
2.3 for语句
for循环语句是我们平常最常用的语句,因为它集成了对循环变量初始化、控制循环的条件、循环的调整三种结构,能够非常清晰明了地控制循环的进行。
for语句的语法规则:
for循环使用样例:
for循环语句与while循环语句的对比:
for循环的初始化、判断、调整的三部分语句非常集中,看上去代码比较清晰简单;而while的三部分控制语句就比较分撒,如果遇到比较复杂的程序,容易漏掉某一部分,造成循环功能无法实现。所以for循环的使用次数是比较多的,但是也不是说while语句不好,具体问题具体分析,只是for循环对初学者可能比较友好。
最后
以上就是本篇文章的全部内容了,如果觉得写的不错的话就请动动你们的小手点个赞,本文如有不足或错误的地方,欢迎指正!