
我们在这里介绍一些最基础的运算符:加、减、乘、除、取模,的基本应用

💡 重要提示:乘法使用
*而不是 ×,除法使用/而不是 ÷
%% 表示求两个整数相除的余数。printf("%d\n", 15 % 4); // 输出:3
printf("%d\n", 10 % 3); // 输出:1
printf("%d\n", -15 % 4); // 输出:-3(符号与第一个操作数相同)10.5 % 3 会导致编译错误)
0 不能作为取模运算的除数(会导致运行时错误)
8 / 5 结果是 1 而不是 1.6?#include <stdio.h>
int main() {
// 整数除法 - 截断小数部分
printf("8 / 5 = %d\n", 8 / 5); // 输出:1
// 浮点数除法 - 保留小数部分
printf("8.0 / 5.0 = %.1f\n", 8.0 / 5.0); // 输出:1.6
printf("8 / 5.0 = %.1f\n", 8 / 5.0); // 输出:1.6
printf("8.0 / 5 = %.1f\n", 8.0 / 5); // 输出:1.6
return 0;
}✨ 黄金规则:想要得到浮点数结果,至少有一个操作数是浮点数!

示例分析
int score = 100;
score += 10; // 相当于 score = score + 10; → 110
score -= 5; // 相当于 score = score - 5; → 105
score *= 2; // 相当于 score = score * 2; → 210#include <stdio.h>
int main() {
int a = 5, b = 5;
// 前置:先增减,后使用
printf("++a = %d\n", ++a); // 输出:6
printf("现在 a = %d\n", a); // 输出:6
// 后置:先使用,后增减
printf("b++ = %d\n", b++); // 输出:5
printf("现在 b = %d\n", b); // 输出:6
return 0;
}++i(前缀):先+1,后使用 → 立刻增加,马上生效
i++(后缀):先使用,后+1 → 等等再增加,先用旧值
⚠️ 注意:避免在同一个表达式中对同一个变量多次使用自增/自减运算符,行为可能未定义
a = b = 5 → b = 5 然后 a = b
int result = 10 + 5 * 2; // 结果是20,不是30!(先乘后加)
int result2 = (10 + 5) * 2; // 结果是30(括号优先)
int x = 5;
int y = ++x * 2; // x先变成6,然后6*2=12
int z = x++ * 2; // 先用x的值6*2=12,然后x变成7// 清晰易懂
int average = (a + b + c) / 3;
// 容易误解
int confusing = a + b + c / 3; // 实际是 a + b + (c / 3)// 不容易理解
int result = ++a * b-- + c / d % e;
// 推荐写法
int part1 = ++a * b--;
int part2 = c / d % e;
int result = part1 + part2;// 错误:整数除法
double result = 5 / 2; // 结果是2.0而不是2.5
// 正确:浮点数除法
double correct = 5.0 / 2; // 结果是2.5🎯 记住:编程中的算术规则与数学基本相同,但要注意数据类型的影响!多练习,慢慢就会熟练起来。
C语言是结构化的程序设计语言,程序结构分为三种基本类型:
💡 日常生活中几乎所有任务都可以分解为这三种结构的组合。
if语句的基本形式
if (表达式)
{
语句;
}#include <stdio.h>
int main()
{
int num = 0; scanf("%d", &num);
if (num % 2 == 1)
{
printf("%d是奇数\n", num);
}
return 0;
}if-else语句的基本形式if (表达式)
{
语句1;
}
else
{
语句2;
}#include <stdio.h>
int main()
{
int num = 0; scanf("%d", &num);
if (num % 2 == 1)
{
printf("%d是奇数\n", num);
}
else
{
printf("%d是偶数\n", num);
}
return 0;
}#include <stdio.h>
int main()
{
printf("请输入年龄: ");
int age = 0; scanf("%d", &age);
if (age >= 18)
{
printf("成年\n");
}
else
{
printf("未成年\n");
}
return 0;
}if和else默认只控制紧随其后的一条语句。#include <stdio.h>
int main()
{
int age = 0; scanf("%d", &age);
if (age >= 18)
printf("成年了\n"); // 只有这条语句受if控制
printf("可以谈恋爱了\n"); // 这条语句总是会执行
return 0;
}{}创建代码块#include <stdio.h>
int main()
{
int age = 0; scanf("%d", &age);
if (age >= 18) //if 后使⽤ {} 控制多条语句 ---- 这个块也叫:"代码块,或者复合语句"
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else //else 后使⽤ {} 控制多条语句(同理)
{
printf("未成年\n");
printf("好好学习\n");
}
return 0;
}if-else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。if-else-if-else构成嵌套结构//⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h>
int main() {
int num = 0;
scanf("%d", &num);
if (num == 0) {
printf("输入的数字是0\n");
} else if (num > 0) {
printf("输入的数字是正数\n");
} else {
printf("输入的数字是负数\n");
}
return 0;
}{}构成嵌套结构://⽐如:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:⾮正数
#include <stdio.h>
int main()
{
int num = 0; scanf("%d", &num);
if(num>0)
{
if(num%2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("⾮正数\n");
}
return 0;
}👍 建议:使用大括号明确代码块范围,使逻辑更加清晰
#include <stdio.h>
int main()
{
printf("请输入年龄: ");
int age = 0; scanf("%d", &age);
if (age < 18) {
printf("少年\n");
} else if (age >= 18 && age <= 44) {
printf("青年\n");
} else if (age >= 45 && age <= 59) {
printf("中老年\n");
} else if (age >= 60 && age <= 89) {
printf("老年\n");
} else {
printf("老寿星\n");
}
return 0;
}以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
如果有多个
if和else,可以记住这样⼀条规则:else总是跟最接近的if匹配。
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n"); // 这个else与内层if匹配
return 0;
}if-else不会执行)
2.规范写法:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n"); // 这个else与内层if匹配,所以和内层if缩进统一
return 0;
}👍建议:为了能更好的分辨
if和else的匹配关系,我们可以统一if和else的缩进
#include <stdio.h>
int main() {
int a = 0;
int b = 2;
// 明确else与第一个if匹配
if (a == 1)
{
if (b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n"); // 现在会输出"haha"
}
return 0;
}✅ 最佳实践:始终使用大括号,即使只有一条语句!
条件操作符是C语言中唯一的三目运算符,其基本形式为
表达式1 ? 表达式2 : 表达式3#include <stdio.h>
int main()
{
int a = 10, b = 20;
// 使用条件操作符求最大值
int max = (a > b) ? a : b;
printf("最大值: %d\n", max);
// 判断奇偶数
int num = 15;
printf("%d是%s\n", num, (num % 2 == 0) ? "偶数" : "奇数");
// 成绩等级判断
int score = 85;
char grade = (score >= 90) ? 'A' :
(score >= 80) ? 'B' :
(score >= 70) ? 'C' :
(score >= 60) ? 'D' : 'F';
printf("成绩等级: %c\n", grade);
return 0;
}#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
if (a > 5)
b = 3;
else
b = -3;
printf("%d\n", b);
return 0;
}
//改造后:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d", &a);
b = (a > 5) ? 3 : -3;
printf("%d\n", b);
return 0;
}switch语句用于多分支选择,比多重if-else结构更清晰、易读
switch (表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
// 更多case语句...
default:
默认语句;
break;
}1.使用if-else实现
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n % 3 == 0)
printf("整除,余数为0\n");
else if(n % 3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}2.使用switch实现
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}代码格式注意事项:break语句在switch中非常重要,它能实现真正的分支效果。如果没有break,会出现"case穿透"现象。
case穿透示例
#include <stdio.h>
int main()
{
int day = 3;
switch(day)
{
case 1:
printf("星期一\n");
// 没有break,会继续执行下一个case
case 2:
printf("星期二\n");
// 没有break,会继续执行下一个case
case 3:
printf("星期三\n");
// 没有break,会继续执行下一个case
case 4:
printf("星期四\n");
// 没有break,会继续执行下一个case
case 5:
printf("星期五\n");
break; // 这里有break,会跳出switch
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
}
return 0;
}输出结果:
星期三
星期四
星期五合理利用case穿透
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}有时我们可以故意省略break来实现多个case共享同一段代码
当switch后的表达式值与所有case都不匹配时,可以使用default子句处理这种情况。
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误,请输入1-7之间的数字\n");
break;
}
return 0;
}在switch语句中,case语句和default语句没有严格的顺序要求,可以根据实际需求安排。
#include <stdio.h>
int main()
{
int score = 85;
switch(score / 10)
{
default: // default可以放在前面
printf("不及格\n");
break;
case 6:
printf("及格\n");
break;
case 7:
printf("中等\n");
break;
case 8:
printf("良好\n");
break;
case 9:
case 10: // case 9和10共享同一段代码
printf("优秀\n");
break;
}
return 0;
}虽然语法上允许default放在任何位置,但通常我们把它放在最后,这样代码更易读。
学习了这两个操作符我们就能构建更加复杂的逻辑关系表达式了
C 语言中用于比较的表达式,称为 “关系表达式”,里面使用的运算符就称为“关系操作符”

==和=int x = 5;
if (x = 3) // 错误:赋值操作,总是为真
{
// 这里的代码总是会执行
}
// 正确写法
if (x == 3)// 比较操作
{
// 只有当x等于3时才执行
}if (3 == x) // 如果误写成3 = x,编译器会报错
{
// 安全的选择
}// 错误:不能这样判断范围
if (1 < x < 10) // 总是为真
{
/*
解释:
因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式
(1 < x) < 10
*/
// ...
}
// 正确:使用逻辑与运算符
if (x > 1 && x < 10)
{
// ...
}逻辑运算符提供“逻辑判断功能”,用于“构建更复杂的逻辑表达式”

!int flag = 0;
if (!flag) // 相当于 if(flag == 0)
{
printf("flag为假\n");
}&&int month = 4;
// 判断是否为春天(3-5月)
if (month >= 3 && month <= 5)
{
printf("现在是春天\n");
}||int month = 12;
// 判断是否为冬天(12月或1月或2月)
if (month == 12 || month == 1 || month == 2)
{
printf("现在是冬天\n");
}重要特性:逻辑运算符具有短路求值特性
&&:如果左边为假,右边不执行||:如果左边为真,右边不执行int a = 0, b = 10;
// 由于a>10为假,b++不会执行
if (a > 10 && b++ > 5)
{
// ...
}
printf("b = %d\n", b); // 输出:b = 10
// 由于a<5为真,b++不会执行
if (a < 5 || b++ > 5)
{
// ...
}
printf("b = %d\n", b); // 输出:b = 10#include <stdio.h>
int main() {
int score = 0;
printf("请输入成绩(0-100): ");
scanf("%d", &score);
if (score < 0 || score > 100)
{
printf("成绩无效\n");
} else if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 70) {
printf("中等\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}#include <stdio.h>
int main()
{
printf("请输入年份: ");
int year = 0; scanf("%d", &year);
// 闰年条件:能被4整除但不能被100整除,或者能被400整除
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
printf("%d年是闰年\n", year);
}
else
{
printf("%d年不是闰年\n", year);
}
return 0;
}🎯 记住:编程是实践的艺术,多写代码才能真正掌握这些概念!