使用 Visual Studio 2019 【在更】基础 | C 语言笔记( 七 )


算术运算符(+ - * / %)关系运算符(> < == >=~ | ^ &)赋值运算符(= 及其扩展赋值运算符)条件运算符(?:)逗号运算符(,)指针运算符(* 和 &)求字节数运算符()强制类型转换运算符((类型))分量运算符(. ->)下标运算符([])其他(如函数调用运算符 ())
运算符优先级可参考:C语言运算符优先级(超详细)
2.10.2 算术运算符及算术表达式
算术运算符优先级(由高到低):乘(*)、除(/)、取余(%) → \ → 加(+)、减(-)
适用数据类型:
例:逆序输出
输出:
2.10.3 关系运算符与关系表达式
例:判断年份
输出:
解析:
根据 if 语句的条件 , 编译器先判断 3 , 如果是则值为 1 , 否则为 0;无论关系表达式的值是真是假 , 编译器判断 关系表达式的值 是的结果都为真 , 打印 year is ok\n 。
更改代码第 9 行如下:
输出:
例:判断闰年(替换上例 9-14 行)
2.10.4 逻辑运算符与逻辑表达式
例:短路运算(逻辑与)
输出:
当逻辑与(&&)运算符前的表达式成立 , 运算符后的表达式才执行 。即使运算符后的表达式优先级高于逻辑与运算符 。
短路运算(逻辑或)
输出:
2.10.5 位运算符
位运算符包括左移()、按位取反(~)、按位或(|)、按位异或(^)、按位与(&) 。
例:左移
输出:
注:除赋值运算与算术运算以外 , 其余都不会改变变量值 。
例:左移位运算符可能改变值的正负
输出:
解析(参考 2.8.1 示例):
由于整型数默认按 int 型计算 , 编译器计算 ij ? (i > k ? i : k) : (j > k ? j : k);。
2.10.8 自增、自减运算符及求字节运算符
例:i++
输出:
解析:
当 ++ 在变量 i 之前时 , 程序第 7 行 j = i++ > -1; 等同于 j = i > -1; i++; 。前一语句判断为假 , 即 j=0;后一语句 i=-1+1=0 。
例:++i
输出:
解析:
当 ++ 在变量 i 之后时 , 程序按照正常的优先级计算 。++i 计算 i=++i=0+1=1;j = !i 将 i=1 取反判断为假 , 即 j=0 。
三、选择与循环 学习目标3.1 选择结构程序设计 3.1.1 关系表达式与逻辑表达式
根据表达式最后运算步骤的类别确定该表达式的类型 。
3.1.2 if 语句
流程图:
左侧为仅 if 语句 , 右侧为 if + else 语句 。
多分支语句
if 语句的嵌套
例:
输出:
注意:if 判断后不能加 ; , 即以下写法是错误的:
3.1.3语句
例:打印每个月的天数
输出:
对程序进行优化:
3.2 循环结构程序设计 3.2.1 goto 语句
例:goto 向上跳转
输出:
例:goto 向下跳转
输出:
注意:标签与 goto 不能跨函数使用 。
3.2.2 while 循环
注意:当使用多层嵌套循环语句时出现报错 , 调试时断点从外层循环向内层尝试设置 。
例:
输出:
3.2.3 do while 循环
特点:先执行循环体 , 后判断循环条件是否成立 。
与 while 循环的区别:do while 循环的第一次循环一定会执行 。
例:
输出:
3.2.4 for 循环
使用场景:
一般形式:for(表达式 1; 表达式 2; 表达式 3) 语句;
先求解表达式 1 。求解表达式 2 , 若其值为真(值为非 0) , 则先执行 for 语句中指定的内嵌语句 , 后执行第 3 步 。若其值为假(值为 0) , 则结束循环 , 转到第 5 步 。求解表达式 3 。转回第 2 步继续执行 。循环结束 , 执行 for 语句下面的语句 。