文章目录
C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构这三种结构顺序结构就不用介绍了,自然是顺着往下执行的结构了,我们今天先介绍分支结构!
选择结构
选择结构分为两个,一个是if,else语句,一个是switch,case语句。
if,else
if,else基本知识
表现形式
if(条件)
语句1
else//否则
语句2
其中条件为真就执行语句,为假就不执行语句。
- 在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
- else是否则的意思,条件为假就执行else语句,整个的意思是如果条件为真,就执行语句1,否则执行语句2。
举个例子
#include<stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if(num%2==1)//num为奇数
{
printf("为奇数");
}
else//一个数不是奇数就是偶数了
{
printf("为偶数");
}
return 0;
}
- if,else语句默认只控制一条语句,当然了,要是你想if语句下要执行多条语句,就要加上{}了。
比如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");//不管age值为多少,可以谈恋爱了这条语句都会执行
return 0;
}
问题:要是我要判断一个月份是春夏秋冬的哪一个季节,if,else语句可以做到吗?
当然可以,用if,else嵌套调用即可。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else
{
if(num > 0)
{
printf("输⼊的数字是正数\n");
}
else
{
printf("输⼊的数字是负数\n");
}
}
return 0;
}
再来讲一个知识点:
大括号 {} 的作用是:
- 把多个语句 “打包” 成一个 “复合语句”(视为一条语句)
- 要是大括号内只有一个语句,就可以把大括号省略
- 因为第二个if,else语句仅执行其中一个(或if或else),就算在第二个if或者else中因为有多条语句,所以加了大括号,也被视为一条语句(整个大括号里面的不管多少条语句),所以第一个else的大括号可以省略,所以可以像下面这样写
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
这么写也是最常见的,这是因为else后面没有这个条件,所以可以这么写,像if(条件)就不可以了,最好就加上大括号,以便理解。
if,else的对应问题
一个重要的点:
if,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;
}
其中else与第二个if相匹配。
switch,case
第二个分支结构就是switch,case结构
举个例子演示:
#include <stdio.h>
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");
break;
}
return 0;
}
由这个例子了解swtich,case结构
从后面接的数据类型是哪些的方面来说
- switch 后的括号之中的表达式必须是整型表达式
比如:n(一个整数变量),可以是x+y(两个都是整型变量),但是不可以是浮点型和字符型的。- case 后的值,必须是整型常量表达式。
从形式上来说
case后面要加一个空格才能加整数。
从内容上来说
- switch的意思就是开关嘛,那么就可以联系一下风扇的挡位,有1,2,3档,而switch关键词,比如你要选择一档,就可以这样,switch(1)(一般switch中都是一个整型变量的,可以自己输入的),当然选了1,自然就要有与之对应的内容了,case就有这样的作用
- case的意思就是情况、案例,switch调到了1,那么就可以跳到case 1(案例1)了,执行下面的内容了
case 1:
printf(“星期⼀\n”);//这里的语句可以不止一个并且一般情况不用加大括号
break;
解释一下上面注释的内容,要先来讲一下break有终止当前case分支的作用(当然不止于这,后面还会讲的)
衍生问题:
case 1:
……
case 2:
……
当我的switch(n),其中n为1的时候他不会执行完语句之后就跳出分支吗?
答案是不会,需要自己用break关键词来跳出switch分支,不用就会跳到这个n指定的位置,一直往下面执行。
接着讲注释的问题
那么知道了switch,case的执行逻辑了,就可以很清楚的知道这个当switch中的数字是1时就会跳到下面case后数字是1的地方,然后向后执行,直到遇到break,就跳出了switch分支,所以可以不加大括号(在case后面定义变量的就要假,但是一般不会在其中定义变量)。- default是什么?就是当用户输入的数据并不是case后数据中的,就跳到了default执行报错指令,当然default并不是只能放在最后一个,还可以放在前面(只是一般写法是将default放在最后的),最后一个的结构可以不加break,加上也可以的。
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
}
return 0;
}
很明显的是case1~5就只有case下面有语句
为什么?
因为当用户输入1~5的时候执行同一条语句,就可以利用switch的规则(跳到对应的case的地方,然后往后面执行,遇到break,就提前跳出)
逻辑运算符与关系运算符和条件运算符
讲完分支结构,我们来讲一下必不可少的逻辑运算符和关系运算符
逻辑运算符分为三种
&& // 逻辑与
|| // 逻辑或
! // 逻辑非关系运算符
> //大于运算符
< //小于运算符
= //大于等于运算符
<= //小于等于运算符
== //相等运算符
!= //不相等运算符条件运算符
r=a>b?a:b//条件运算符
讲之前有一个重要的点就是
关系表达式通常返回 0 或 1 ,表示真假。
C 语言中, 0 表示假,所有非零值表示真。比如, 20 > 12 返回 1 , 12 > 20 返回 0 。
关系表达式常用于 if 或 while 结构。(之前讲过,这里再提一下)
关系预算符要注意的点
- C语言中=是赋值运算符,==是相等运算符。
以此有一个很好的写法
if(x==3)可以写成if(3==x)//要是写成=,编译器会报错
- 不要写成数学里的那样
比如:
if(i<j<k)//错误写法
分析一下i<j(为真就返回1,为加返回0),再判断k与返回值的大小得出真假,这完全得不到我们想要的结果,因而有了逻辑运算符。
逻辑运算符的注意点
&&都真才为真
||有一个为真就为真
!真假反转
条件中的短路
if(假&&(表达式))//后面的表达式就不再执行,这是C语言的规则,因为就是前面为假就不用看后面了,直接判为假,&&的规则
if(真||(表达式))//同理,后面的表达式就不再执行因为就是前面为真就不用看后面了,直接判为真,||的规则
条件运算符的注意点
r=a>b?a:b//意思是a大于b吗?为真就返回a,为假就返回b,返回值被r接收。
总结
谢谢观看,下期会讲到循环结构!

3296

被折叠的 条评论
为什么被折叠?



