【C】分⽀和循环上

【C】分⽀和循环上 判断一个数是否为奇数方法1判断余数不等于 0% 取余C 语言余数符号跟随被除数缺点取模不能判断负数是否为奇数(得用位运算解决这个问题int main() { int num 0; //输入整数 scanf(%d, num); if (num % 2 ! 0) { printf(奇数\n); } else { printf(偶数\n); } return 0; }方法2位运算int main() { //判断一个数是否为奇数方法位运算 int num 0; //输入整数 scanf(%d, num); if (num 1) { printf(奇数\n); } else { printf(偶数\n); } return 0; }二进制最低位为 1 代表奇数正负整数均适用 在 C 语言里是 按位与运算符按位与规则两位都是 1结果才等于 1其余全部为 0例子方法3三目运算符int main() { //判断一个数是否为奇数方法三目运算符 int num 0; //输入整数 scanf(%d, num); num % 2 ! 0 ? printf(奇数\n) : printf(偶数); return 0; }三目运算符(条件运算符知识点条件 ? 表达式1 : 表达式2;执行规则判断条件真假条件为真 → 执行、返回表达式 1条件为假 → 执行、返回表达式 2条件运算符是 C 语言唯一的三元运算符需要 3 个操作数。int main() { //判断一个数是否为奇数方法三目运算符 int num 0; //输入整数 scanf(%d, num); num % 2 ! 0 ? printf(奇数\n) : printf(偶数); return 0; }if语句if语法格式if (表达式) { 语句1; 语句2; }执行规则a先计算括号里表达式的值bC 语言真假规则0假非0真表达式结果≠0真 → 执行 if 下面的语句表达式结果 0假 → 跳过这条语句不执行流程图else语法if (表达式) 语句1; else 语句2;执行规则a先计算括号里的表达式如果表达式结果为真非 0→ 执行语句1然后跳过 else 部分如果表达式结果为假0→ 跳过语句 1执行语句2嵌套if在 if else 语句中 else 可以与另⼀个 if 语句连⽤构成多重判断输⼊⼀个整数判断输⼊的整数是0还是正数或者负数//if嵌套 int num 0; scanf(%d, num); if (num 0) { printf(输入的数是0\n); } else { if (num 0) { printf(输入的数是正数\n); } else { printf(输入的数是负数\n); } }写法2int num 0; scanf(%d, num); if (num 0) { printf(输入的数是0\n); } else if (num 0) { printf(输入的数是正数\n); } else { printf(输入的数是负数\n); }逻辑流程a如果num 0→ 打印 0b否则进入外层 else 的大括号再做第二层判断如果num0→正数否则 →负数c特点if 里面嵌套了另一个 if‑else输⼊⼀个整数如果是正数再判断是奇数还是偶数并输出如果不是正数则输出⾮正数。int num 0; scanf(%d, num); if (num 0) { if (num % 2 0) { printf(偶数\n); } else { printf(奇数\n); } } else { printf(非正数\n); }功能a输入一个整数b如果数字大于 0正数再嵌套判断奇数还是偶数num % 2 0除以 2 余数为 0 →偶数否则 →奇数c如果数字 ≤ 00 或者负数输出非正数无嵌套版//无嵌套版 int main() { int num 0; scanf(%d,num); if (num 0) { printf(非正数\n); } else if (num % 2 0) { printf(偶数\n); } else { printf(奇数\n); } return 0; }悬空else问题匹配规则else 总是跟距离它最近、尚未配对的 if 进行匹配如果有多个if和else可以记住这样⼀条规则else总是跟最接近的 if匹配什么是悬空 else当代码没有加{ }else 看上去好像和外层 if 对齐但实际上被编译器绑定到内层 if造成逻辑和预期不一致这个问题就叫悬空 else 问题。int a 0; int b 2; if(a 1) if(b 2) printf(hehe\n); else printf(haha\n);解决else悬空问题(加{}int a 0; int b 2; if (a 1) { if (b 2) { printf(haha\n); } else { printf(hehe\n); } }关系操作符6 个关系运算符a返回值规则关系表达式结果只有两个1 → 真条件成立0 → 假条件不成立C 语言规定0 代表假一切非 0 数字都代表真坑点 和 a相等判断用来比较左右两边值是否相等b赋值运算符把右边的值放到左边变量坑点 不要连续写多个关系运算符错误写法i j k; // 等价于ijk正确写法-- 用逻辑i j j k;条件操作符三目运算符exp1 ? exp2 : exp3;执行逻辑a判断exp1是否为真b真 → 执行exp2c假 → 执行exp3例1 使⽤条件表达式实现找两个数中较⼤值int a 0; int b 0; scanf(%d%d, a, b); int m a b ? a : b; printf(%d\n, m);逻辑操作符、 、||a! —— 逻辑取反逻辑非属于单目运算符只作用于一个表达式作用反转真假如果表达式为真! 表达式结果就是 0假如果表达式为假! 表达式结果就是 1真b —— 逻辑与并且双目运算符左右两个表达式都要判断规则两边全部为真结果才为真只要任意一边是假结果就是假c|| —— 逻辑或或者双目运算符左右两个表达式任选其一成立即可规则两边只要有一个为真结果就是真只有两边全都为假结果才是假短路规则高频考点a 的短路当 左边表达式结果为假的时候右边不会执行例0 (x)x 这一行代码不会运行b|| 的短路当 || 左边表达式结果为真的时候右边不会执行例1 || (x)x 不会运行逻辑取反运算符