占位符

先讲一下占位符吧,一会儿输出变量的时候要用。

核心作用:在printf(输出)、scanf(输入)等函数中,替代 变量/常量 的位置,并指定数据的 显示/读取 格式,必须与变量的类型严格匹配

占位符的通用规则

  1. 语法格式:%开头,后跟「格式字符」(如d/f/c),可选「修饰符」(如宽度、精度),例:%d%.2f%5s
  2. 核心匹配: 占位符类型必须与变量类型一致(如int%dfloat%f),否则会出现乱码 / 错误。
  3. 两大场景:
    • printf:用占位符指定「输出格式」,语法:printf("字符串+占位符", 变量1, 变量2...);
    • scanf:用占位符指定「输入格式」,语法:scanf("占位符", &变量1, &变量2...);(注意&取地址符,字符串除外)。

常用占位符速查表(按类型分类)

占位符 对应数据类型 用途 示例(printf) 示例(scanf)
%d int 十进制整数 printf(“%d”, 10); scanf(“%d”, &a);
%hd short int 短整数 printf(“%hd”, (short)5); scanf(“%hd”, &b);
%ld long int 长整数 printf(“%ld”, 123456789L); scanf(“%ld”, &c);
%lld long long int 超长整数 printf(“%lld”, 9876543210LL); scanf(“%lld”, &d);
%u unsigned int 无符号十进制整数 printf(“%u”, 100U); scanf(“%u”, &e);
%f float/double 浮点数(printf) printf(“%f”, 3.14f); scanf(“%f”, &f);(仅 float)
%lf double 浮点数(scanf) printf(“%lf”, 3.14); scanf(“%lf”, &g);(仅 double)
%.2f float/double 保留 2 位小数的浮点数 printf(“%.2f”, 3.1415); -
%c char 单个字符 printf(“%c”, ‘A’); scanf(“%c”, &ch);
%s char[]/char* 字符串(以 \0 结尾) printf(“%s”, “Hello”); scanf(“%s”, str);(无需 &)
%x/%X int/long 十六进制整数(小写 / 大写) printf(“%x”, 255);(输出 ff) scanf(“%x”, &h);
%o int/long 八进制整数 printf(“%o”, 8);(输出 10) scanf(“%o”, &i);
%p void* 内存地址(十六进制) printf(“%p”, &a); -
%% - 输出百分号本身 printf(“%%”);(输出 %) -

用法演示:匹配变量类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main() {
int num = 100;
float pi = 3.14159f;
char ch = 'C';
char str[] = "Language";

printf("整数:%d\n", num); // 输出:整数:100
printf("浮点数:%f\n", pi); // 输出:浮点数:3.141590(默认6位小数)
printf("字符:%c\n", ch); // 输出:字符:C
printf("字符串:%s\n", str); // 输出:字符串:Language
printf("十六进制:%x\n", 255); // 输出:十六进制:ff
printf("地址:%p\n", &num); // 输出:地址:0x7ffeeabc18ac(不同环境地址不同)
printf("百分号:%%\n"); // 输出:百分号:%
return 0;
}

赋值操作

赋值是计算的前提,=并非 “等于”,而是将右侧表达式的结果赋给左侧变量

基本赋值语法

场景 语法示例 说明
变量初始化(定义时赋值) int a = 10; 定义 int 型变量 a,同时赋值为 10
变量重新赋值 a = 20; 已定义的变量 a,覆盖原有值为 20
表达式结果赋值 int b = a + 5; 先计算a+5(25),再赋值给 b
多变量连续赋值 int x = y = z = 3; 右结合性:先z=3→y=z→x=y(需先定义 y、z)

赋值的关键规则

  • 左侧必须是变量(如10 = a;a + b = 5;均报错,因为 10/a+b 是 “右值”,不可修改)
  • 赋值后变量的类型不变(如int a = 3.8;,会自动截断小数,a 最终为 3)
  • 赋值表达式本身有返回值(如int c = (a = 10);,a=10 的返回值是 10,因此 c=10)

变量计算:算术运算符

通过+-*/%对变量进行 加\减\乘\除\取模 运算,运算结果可直接赋值给变量,也可临时使用(如打印)。

运算符 作用 适用类型 关键规则
+ 加法 整数 / 浮点数 支持正数、负数,如3 + (-5) = -2
- 减法 / 取负 整数 / 浮点数 单目取负:int a = -10;;减法:5 - 8 = -3
* 乘法 整数 / 浮点数 注意溢出(如int a = 100000 * 100000;可能超 int 范围)
/ 除法 整数 / 浮点数 整数除法:截断小数(5/2=2);浮点数除法:5.0/2=2.5
% 取模(余数) 仅整数 结果符号与被除数一致(7%3=1-7%3=-17%-3=1

示例:基础算术计算与赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int main() {
int num1 = 10, num2 = 3;
float f1 = 10.0, f2 = 3.0;

// 整数运算
int add = num1 + num2; // 13
int sub = num1 - num2; // 7
int mul = num1 * num2; // 30
int div_int = num1 / num2; // 3(整数除法截断)
int mod = num1 % num2; // 1

// 浮点数运算
float div_float = f1 / f2; // 3.333333

printf("整数加法:%d\n", add);
printf("整数除法:%d\n", div_int);
printf("浮点数除法:%f\n", div_float);
printf("取模:%d\n", mod);

return 0;
}

简化操作:复合赋值运算符

复合运算符 等价形式 示例 说明
+= a = a + b a += 5a=a+5 加法赋值
-= a = a - b a -= 3a=a-3 减法赋值
*= a = a * b a *= 2a=a*2 乘法赋值
/= a = a / b a /= 4a=a/4 除法赋值(整数 / 浮点数)
%= a = a % b a %= 5a=a%5 取模赋值(仅整数)

示例:复合赋值

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main() {
int a = 10;
a += 5; // a = 15
a *= 2; // a = 30
a -= 8; // a = 22
a /= 4; // a = 5(22/4=5,整数截断)
a %= 3; // a = 2(5%3=2)
printf("最终a的值:%d\n", a); // 输出2
return 0;
}