C语言知识点小结Part1---分支与循环
C语言是一门结构化的程序设计语言
1.顺序结构
2.选择结构
3.循环结构
自用学习笔记----一直会补充,不是最终版,有错误欢迎各位大佬指正O(∩_∩)O
Part1.分支和循环语句
什么是语句?
有一个分号隔开的就是一个语句,单独一个分号也算一个语句,只是一个空语句。
一、分支语句:
1.if语句
2.switch语句
(1)if语句
使用方式①——单分支
if(表达式)
语句;
该情况下,表达式的结果为真,执行语句,否则,什么都不执行。
使用方式②——双分支
if(表达式)
语句1;
else
语句2;
该情况下,表达式的结果为真,执行语句1,表达式结果为假,执行语句2。
使用方式③——多分支:
if(表达式1)
语句1;
else if(表达式2)//还需要条件限制
语句2;
else
语句3;
该使用方法表示含义:表达式1成立,执行语句1;另外如果表达式1不成立,表达式2成立,执行语句2;如果表达式1,2都不成立,执行语句3。
此情况下如果最后一个else不存在,如果表达式1,2都不成立,不走任何一个分支。
另外如果写法为:
if(age<18) 语句1; else if(18<=age<20) 语句2; else 语句3;
代码是顺序执行的,假如输入age =10,应该执行语句1,但时候顺序执行到else if表达式中执行的语句顺序是:先判断18<=age,如果为假返回0,然后判断0<20,为真,则又执行语句2,只要age<18一定会执行语句2
温馨提示1:C语言中表示真假的方式
0表示假,一切非0为真
-1不是0,表示真
温馨提示2:if语句要控制多条语句,都得用{}括起来,否则就只能执行一个语句
温馨提示3:悬空else(特别容易出错)
注意else的匹配原则,就近if匹配,防止else挂起bug,这种情况下还不容易查找出错
// if(表达式) return x; return y;
该部分的意思是:如果满足表达式,返回x;如果不满足返回y。
但是这样写代码的可读性是不好的,一般不这样写
一般会写的表达式:
if(表达式) { return x; } else { return y; }
温习提示4:容易会出现的bug方式:
int main() { int a = 1; if(a = 5) { printf("哈哈\n"); } retuen 0; }
这种情况下的输出结果是:哈哈
(→_→)请原谅这里的输出结果忘记贴图~~
明明1不等于5,但是打印结果为哈哈,出现这种情况的原因是:一个等号是赋值,双等号是判断相等
该情况下的出错,编译器不会直接暴露出错误
避免出现这种错误的办法:将常量写在前边,定义的变量写在后边
if(5 == a),这样即使手抖也不会出现bug,O(∩_∩)O哈哈~~~~
(2)switch语句
switch语句也是一种分支。相对于 if 语句而言,switch 语句可以更方便地应用于多个分支的控制流程。
switch 语句与 if 语句不同的是,switch 语句只能够测试是否相等,因此,case 语句后面只能是整型或字符型的常量或常量表达式;而在 if 语句中还能够测试关系与逻辑表达式。
使用方法
switch(整型表达式)
{
语句项;
}
PS:什么又是语句项?什么是整形表达式?整形表达式和整型常量表达式有什么不同?
语句项是一些case语句
表示如下:
case 整型常量表达式
语句;
整型表达式是整个表达式的最后的值是一个整型,但是不能是float等。
整型常量表达式是包含运算符的整型表达式。------(整型常量+运算符号也就是只能用1+1、1+2)
如果使用
int a = 0;
int n = 1;
switch(a)
{
case n:
语句;break;
}
这种也是不可以的,因为case后边的表达式不是常量
举个例子~~
int main() { int day; scanf("%d",day); switch(day) { case 1+0: printf("星期%d\n", day);break; case 2: printf("星期%d\n", day);break; case 3: printf("星期%d\n", day);break; case 4: printf("星期%d\n", day);break; case 5: printf("星期%d\n", day);break; case 6: printf("星期%d\n", day);break; case 7: printf("星期%d\n", day);break; } }
插入的break是终止跳出分支的,如果不break,那么从哪里进入case一直到最后一条case才会跳出
但是不是每个分支都需要加语句
举个例子~~:
int main() { int day; scanf("%d",day); switch(day) { case 1:
//if(day == 1)
// printf("哈哈哈\n");
//break;
//输入1打印结果为:哈哈哈 case 2: case 3: case 4: case 5: printf("工作日\n", day);break; case 6: case 7: printf("休息日\n", day);break;
//defult:
// printf("输入错误\n");
// break; } }
这里case选项为1-7,如果超出这个范围,将不作处理,但是这种情况下
后边的default给一个友好提示处理非法case
case和default没有顺序严格的控制,但是一般会放在后边
case语句里是可以出现if语句的
二、循环语句:
1.while循环
2.for循环
3.do while循环
(1)while 循环
语法结构:
while(表达式)
{
循环语句;
}
表达式的结果为真,就循环语句,直到表达式的值为假,语句才不再执行,循环停止
while(1)为死循环
循环里如果遇到break和continue:
break---不会有执行,跳出while循环;continue---continue后边的代码不再继续执行,回到while循环的判断部分,继续while做判断
continue不明白的话,举个例子:
int main() { int i = 1; while(i<10) { if(i == 5) continue; printf("%d ",i); i++; } } //此时打印的结果为 //1 2 3 4 //因为i++执行不了,卡在i = 5,一直在循环
如果调整一下代码,将i++的位置往前放一放
int main() { int i = 1; while(i<10) { i++; if(i == 5) continue; printf("%d ",i); //i++; } } //此时打印的结果为 //1 2 3 4 6 7 8 9 10 //i = 5的后边代码跳过
总结:
break在while循环中的作用:
只要遇到break,就停止后期的所有循环,直接终止循环,用于永久终止循环
continue用于终止本次循环,后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
循环部分未完待续,明天继续完善......
还会用到C语言的输入输出操作,到时候再做一个总结,补链接在这里
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程