循环语句与条件语句的细节与思想
1.C总结与剖析:关键字篇 (万字长文)2.对C语言符号的一些冷门知识运用的剖析和总结 (万字)3.位段 -- 内存布局详解-浅谈C语言4.数组降维、函数栈帧、地址空间、可变参数原理剖析 (万字)5.C语言预处理过程中语法的实用方法与技巧 (万字)6.分析负数取模与取余的规则7.四类取整方式8.条件编译 - 代码裁剪的工具9.理解C语言变量, auto register关键字
10.循环语句与条件语句的细节与思想
11.宏定义与特别运用12.浮点数与"零值"的比较13.反汇编分析赋值与自增自减14.聊聊typedef15.聊聊位运算一些注意事项16.C语言类型与强制类型转换17.标准预处理指令 可变参数 #与## 的基本用法目录
if-else组合
- 表达式: 变量与操作符的组合称为表达式
- 语句: 以分号结尾的表达式称为语句
- if(0){ //... }注释法,在看到if(0)时,有可能这是一个注释,不推荐这种做法,但是需要认识.
if的执行顺序
-
计算功能:先执行完毕if括号()中的表达式or某种函数,得到表达式的真假结果
-
判定功能:根据表达式结果进行条件判定
-
分支功能:根据判定结果进行分支
(if有判定和分支两个功能,而switch只有判定而没有分支功能,因此必须使用break)
操作符的执行顺序测试方法
printf("1 ") && printf("2 ");
printf("1 ") || printf("2 ");
C语言的布尔类型
- C89/C90没有bool类型
- C99 引入了关键字为_Bool的类型,在新增的头文件stdbool.h中.为了保证C/C++的兼容性,被重新用宏写成了bool.
- 微软对C语言bool类型也有一套标准,BOOL,FALSE,TRUE. 不推荐使用微软这套标准,不具备可移植性
switch case组合
- 基本语法结构
//switch只能对整数进行判定,做不了复杂的逻辑计算 switch(整型变量/常量/整型表达式){ case 常量1: break; case 常量2: break; case 常量3: break; default: break; } 推荐使用switch的场景:只能用于整数判定且分支很多的情况下
- switch case 的功能
switch本身没有判断和分支能力,switch是拿着结果去找case进行匹配,
case具有判定能力,但没有分支能力,case是通过break完成分支功能
break具有分支功能,相当于if的分支能力.
default相当else,处理异常情况
(补充) 屏蔽警告的方法
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 方法1: #pragma warning(disable:4996) 方法2: #define _CRT_SECURE_NO_WARNINGS //该宏定义必须写在文件的首行(头文件的前面)才有效 (如果宏没有宏值,则只能用在#ifdef等条件编译语句中,即只用于标识)
-
在case中执行多条语句,建议case后都带上花括号.
在case中定义变量,直接写会警告,需要带上花括号,但不建议在case中定义变量,如果非要这么做,可以封装成函数来替代.并且
-
多个case执行同样语句
int main() { int n = 0 ; scanf("%d",&n); switch (n) { case 1: case 2: case 3: case 4: case 5: puts("周内"); break; case 6: puts("周六"); break; case 7: puts("周日"); break; default: break; } return 0; }
- default可以在switch中的任意位置,一般习惯放在最后的case后
- switch中尽量不要单独出现return.一般习惯用break,突然return容易搞混
- switch中不要使用bool值,不好维护
- case的值必须是数字常量,不能是
const int a = 1;
这种 - 按执行频率排列case语句,频率越高越靠前,能减少匹配次数
do、while、for
循环的基本结构
- 一般的循环都必须要有3种功能:
- 循环条件初始化
- 循环条件判定
- 循环条件更新
(死循环除外)
int main() { int count = 10; //1.循环条件初始化 while (count > 10) //2.循环条件判定 { printf("%d\n", count); //3.业务逻辑 count--; //4.循环条件更新 } return 0; }
- for循环
使用样例: for(int i = 0; i<10; i++) { //业务逻辑 }
for的结构更加紧凑,更清晰
for(1.循环条件初始化; 2.循环条件判定; 4.循环条件更新){ //3.业务逻辑 }
- do-while
//1.循环条件初始化 do{ //2.业务逻辑 //3.循环条件更新 }while(4.循环条件判定);
do while结构需要在while()后加上分号,容易忘记
continue跳转的位置
- while循环continue后会跳转到循环条件判定的位置,之后执行循环判定
- for循环会跳转到循环条件更新的位置,之后进行循环条件更新!!!
循环设计的思想推荐
1.尽可能减少循环来回多次的跳转的次数 --- 涉及缓存,局部性原理,CPU命中概率.尽可能让代码执行的更加平滑
2.在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨且循环层的次数.
推荐使用for的前闭后开写法
推荐1:for语句循环的次数的计算方式 1.for(int i = 0; i<=9; i++){} //cnt = 9-0+1 = 10次 2.for(int i = 0; i<10; i++){} //cnt = 10-0 = 10次 3.for(int i = 6; i<=9; i++){} //cnt = 9-6+1 = 4次 4.for(int i = 6; i<10; i++){} //cnt = 10-6 = 4次 从计算角度,前闭后开写法能更加直观,快速 推荐2:下标映射时,思维清晰,不容易混乱
本文来自博客园,作者:HJfjfK,原文链接:https://www.cnblogs.com/DSCL-ing/p/18414571
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
· 易语言 —— 开山篇