*
笔记里面有一些代码的首字母是大写的,自己写时候要用小写,这是OneNote编写时软件的问题。此笔记仅是我个人学习的笔记,接下来会持续更新,希望对初学者有所帮助,如果发现错误,望在评论区指正。
分支结构
if语句
if
形式:
- if (表达式)
语句
解释:若表达式为真/表达式结果不为0,则语句执行,否则不执行
例子:输入一个数,判断是否为奇数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("该数字是奇数\n");
return 0;
}
else
解释:成立的话为if,不成立的话则为else
例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("该数字是奇数\n");
else
printf("该数字是偶数\n");
return 0;
}
分支中包含多条语句
解释:if 和 else 默认只包含一条控制语句,如果要控制多条语句的话,要在 if/else 后加 {},意为一个代码块
例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
{
printf("该数字是奇数\n");
printf("(-1)^(%d) = -1", num);
}
else
printf("该数字是偶数\n");
return 0;
}
嵌套if
解释:在if else语句中,else可以与另一个if语句连用,构成多重判断。一般情况下,用{}包含新的 if else 语句;也可以用简便写法(如下)
例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入年纪:");
scanf("%d", &num);
if (num < 18)
printf("未成年");
else
{
if (num < 25)
printf("青年");
else
printf("青壮年");
}
return 0;
}
简便方法(将新的if语句缩写在else里面):
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num = 0;
printf("请输入年纪:");
scanf("%d", &num);
if (num < 18)
printf("未成年");
else if (num < 25)
printf("青年");
else
printf("青壮年");
return 0;
}
悬空else问题
解释:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
例子:
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 1)
if (b = 3)
printf("%d", b);
else
printf("%d", b);
return 0;
}
//输出空行
实际上代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 1)
if (b = 3)
printf("%d", b);
else
printf("%d", b);
return 0;
}
通过带上{},可以让代码更加简洁:
#include <stdio.h>
int main()
{
int a = 0;
int b = 3;
if (a == 1)
{
if (b = 3)
printf("%d", b);
else
printf("%d", b);
}
return 0;
}
关系操作符
:大于运算符
< :小于运算符
= :大于等于运算符
<= :小于等于运算符
== :相等运算符
!= :不相等运算符
注意:多个关系运算符不宜连用
原因:例如,i<j<k,表达式会从左到右计算,此时得到(i<j)的结果为0或者是1,再由1和0与c作比较,达不到预期的效果,应该改为:“i<j && j<k”
条件操作符 (类似双分支)
条件操作符又叫三目操作符,需要接受三个操作数。
形式:exp1 ? exp2 :exp3
解释:如果exp1为真,计算exp2,结果返回exp2计算的结果;exp1为假,计算exp3,结果返回exp3计算的结果。
逻辑操作符
!:逻辑取反运算符
&&:逻辑与运算符,并且(全真为真)
|| :逻辑或运算符,或者(全假为假)
(非0表示真,0表示假)
逻辑取反运算符 !
使用:在语句前面加 !,表示语句为假。
逻辑与运算符 &&
使用:加在两事件中间,表示并且的关系
逻辑或运算符 ||
使用:加在两事件中间,表示或者的关系
短路
解释:C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果根据左操作数的结果就能知道整个表达式的结果,就不再对右边的表达式求值。这种情况称为“短路”。
switch语句
形式:
switch (expression){
case value1:statement
case value2:statement
default:statement
}
解释:
switch (表达式){}
结果1:执行语句
结果2:执行语句
……
default(以上结果都没有):执行语句
注意:
1.case和后面的数字必须要有空格
2.每个case语句后面必须要有break语句,才能跳出switch语句
switch语句中的break和default
因为需要break才能跳出循环,所以可以调整break的位置
有时候没有计划中的结果,需要执行“输入错误”
例如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int day = 0;
scanf("%d", &day);
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
default:
printf("输入错误");
break;
}
return 0;
}
switch中case和default的顺序问题
case和default无顺序,通常是把default放到最后