第2章 C语言基础


基础章节 重点掌握 数据类型、常量变量、运算符表达式是编程的基础

本章概述

本章介绍C语言的基础知识,包括:

  • 基本数据类型
  • 常量与变量
  • 运算符与表达式
  • 数据类型转换
  • 输入输出函数

这些知识是学习C语言的基石,必须扎实掌握。

基本数据类型

整型

1
2
3
4
int a = 100;              // 基本整型
short b = 10; // 短整型
long c = 100000; // 长整型
unsigned int d = 200; // 无符号整型

字符型

1
2
3
char ch = 'A';           // 字符型
signed char sc = -1; // 有符号字符型
unsigned char uc = 255; // 无符号字符型

浮点型

1
2
float f = 3.14f;         // 单精度浮点型
double d = 3.14159; // 双精度浮点型

💡 数据类型选择原则

  • 整数使用int
  • 小数使用double(精度更高)
  • 字符使用char
  • 需要大范围数值时使用long

常量与变量

常量

常量是值不能改变的量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 整型常量
100 // 十进制
077 // 八进制
0xFF // 十六进制

// 实型常量
3.14 // 小数形式
3.14e2 // 指数形式,表示3.14×10²

// 字符常量
'A' // 单个字符
'\n' // 转义字符

// 字符串常量
"Hello World" // 字符串

// 符号常量
#define PI 3.14159
const int MAX = 100;

变量

变量是值可以改变的量,必须先定义后使用:

1
2
3
4
5
6
int age = 20;              // 定义并初始化
float salary;
salary = 5000.50; // 赋值

// 批量定义
int a = 1, b = 2, c = 3;

变量命名规则

  • 只能由字母、数字、下划线组成
  • 不能以数字开头
  • 不能使用关键字
  • 区分大小写
  • 见名知意(推荐)
1
2
3
4
5
6
7
8
// 好的变量名
int studentAge;
float averageScore;

// 不好的变量名
int x; // 含义不明
int 2number; // 错误:不能以数字开头
int int; // 错误:不能使用关键字

运算符与表达式

算术运算符

运算符 说明 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取余(模) a % b
++ 自增 a++++a
-- 自减 a----a
1
2
3
4
5
6
7
8
9
int a = 10, b = 3;
printf("%d\n", a + b); // 输出:13
printf("%d\n", a / b); // 输出:3(整数除法)
printf("%d\n", a % b); // 输出:1

// 自增自减
int x = 5;
printf("%d\n", x++); // 输出:5,然后x变为6
printf("%d\n", ++x); // x先变为7,输出:7

关系运算符

运算符 说明 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

逻辑运算符

运算符 说明 示例
&& 逻辑与 a && b
` `
! 逻辑非 !a

赋值运算符

1
2
3
4
5
6
int a = 10;
a += 5; // 等价于 a = a + 5,结果为15
a -= 3; // 等价于 a = a - 3,结果为12
a *= 2; // 等价于 a = a * 2,结果为24
a /= 4; // 等价于 a = a / 4,结果为6
a %= 4; // 等价于 a = a % 4,结果为2

💡 运算符优先级

优先级从高到低:括号 > 自增自减 > 乘除模 > 加减 > 关系 > 逻辑 > 赋值

1
2
int result = 2 + 3 * 4;    // 结果为14,不是20
int result = (2 + 3) * 4; // 结果为20

数据类型转换

自动类型转换

1
2
3
4
5
6
int a = 10;
float b = 3.5;
float c = a + b; // a自动转换为float,结果为13.5

// 转换规则:低精度 → 高精度
// char → int → long → float → double

强制类型转换

1
2
3
int a = 10, b = 3;
float result = (float)a / b; // 结果为3.33333
int result2 = a / (int)b; // 结果为3

输入输出函数

格式化输出 printf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include 

int main() {
int age = 20;
float height = 1.75;
char grade = 'A';

printf("年龄:%d\n", age);
printf("身高:%.2f\n", height);
printf("等级:%c\n", grade);
printf("格式化:%s是%d岁\n", "小明", age);

return 0;
}

常用格式占位符:

占位符 说明
%d 有符号十进制整数
%f 浮点数
%c 单个字符
%s 字符串
%.2f 保留2位小数

格式化输入 scanf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include 

int main() {
int age;
float height;

printf("请输入年龄:");
scanf("%d", &age); // 注意:必须使用&取地址

printf("请输入身高:");
scanf("%f", &height);

printf("年龄:%d,身高:%.2f\n", age, height);

return 0;
}

⚠️ scanf注意事项

  • 除数组外,必须使用&获取变量地址
  • 输入数据时用空格或回车分隔
  • scanf("%c", &ch)会读取缓冲区的换行符

完整示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include 

#define PI 3.14159

int main() {
// 计算圆的面积
double radius, area;

printf("请输入圆的半径:");
scanf("%lf", &radius);

area = PI * radius * radius;

printf("半径为%.2f的圆的面积为:%.2f\n", radius, area);

return 0;
}

实战案例:温度转换器

📋 案例说明

编写一个程序,实现摄氏温度和华氏温度的相互转换。

**涉及知识点:**变量、输入输出、算术运算、数据类型

💡 需求分析

  • 用户选择转换方向(摄氏→华氏 或 华氏→摄氏)
  • 输入要转换的温度值
  • 输出转换结果

📝 转换公式

  • 华氏温度 = 摄氏温度 × 9/5 + 32
  • 摄氏温度 = (华氏温度 - 32) × 5/9

💻 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include 

int main() {
int choice;
float temperature, converted;

printf("=================================\n");
printf(" 温度转换器\n");
printf("=================================\n");
printf("1. 摄氏温度 → 华氏温度\n");
printf("2. 华氏温度 → 摄氏温度\n");
printf("=================================\n");
printf("请选择(1或2):");
scanf("%d", &choice);

if (choice == 1) {
// 摄氏转华氏
printf("\n请输入摄氏温度:");
scanf("%f", &temperature);

converted = temperature * 9.0f / 5.0f + 32;

printf("\n转换结果:\n");
printf("%.2f°C = %.2f°F\n", temperature, converted);

} else if (choice == 2) {
// 华氏转摄氏
printf("\n请输入华氏温度:");
scanf("%f", &temperature);

converted = (temperature - 32) * 5.0f / 9.0f;

printf("\n转换结果:\n");
printf("%.2f°F = %.2f°C\n", temperature, converted);

} else {
printf("\n⚠️ 无效的选择!\n");
}

return 0;
}

🔍 代码解析

1. 浮点数运算注意事项
1
converted = temperature * 9.0f / 5.0f + 32;

解析:

  • 使用9.0f而不是9,确保进行浮点除法
  • 如果写成9/5,结果会是1(整数除法)
  • f后缀表示float类型,9.0会被当作double
2. 格式化输出
1
printf("%.2f°C = %.2f°F\n", temperature, converted);

解析:

  • %.2f:保留2位小数
  • °C°F:直接输出的特殊字符
  • 注意这里需要使用UTF-8编码才能正确显示度数符号
3. 变量命名
1
float temperature, converted;

解析:

  • temperature:原始温度值
  • converted:转换后的温度值
  • 见名知意的命名使代码更易读

📊 运行示例

1
2
3
4
5
6
7
8
9
10
11
12
=================================
温度转换器
=================================
1. 摄氏温度 → 华氏温度
2. 华氏温度 → 摄氏温度
=================================
请选择(1或2):1

请输入摄氏温度:25

转换结果:
25.00°C = 77.00°F

⚡ 扩展练习

  1. 添加开尔文温度的转换
  2. 支持批量转换多个温度值
  3. 添加温度范围提示(如:水在0°C结冰,100°C沸腾)
  4. 实现温度单位的历史记录

实战案例:简单计算器(基础版)

📋 案例说明

实现两个数的四则运算,帮助理解运算符和表达式。

**涉及知识点:**算术运算符、scanf、printf、条件判断

💻 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include 

int main() {
float num1, num2, result;
char op;

printf("请输入第一个数字:");
scanf("%f", &num1);

printf("请输入运算符 (+, -, *, /):");
scanf(" %c", &op); // 注意空格,用于跳过空白字符

printf("请输入第二个数字:");
scanf("%f", &num2);

switch (op) {
case '+':
result = num1 + num2;
printf("%.2f + %.2f = %.2f\n", num1, num2, result);
break;
case '-':
result = num1 - num2;
printf("%.2f - %.2f = %.2f\n", num1, num2, result);
break;
case '*':
result = num1 * num2;
printf("%.2f × %.2f = %.2f\n", num1, num2, result);
break;
case '/':
if (num2 == 0) {
printf("⚠️ 错误:除数不能为0!\n");
} else {
result = num1 / num2;
printf("%.2f ÷ %.2f = %.2f\n", num1, num2, result);
}
break;
default:
printf("⚠️ 错误:无效的运算符!\n");
}

return 0;
}

🔍 重点解析

1. scanf中的空格
1
scanf(" %c", &op);  // 注意前面的空格

**解析:**空格告诉scanf跳过之前的空白字符(包括换行符),直接读取下一个非空白字符。

2. 除零检查
1
2
3
4
5
if (num2 == 0) {
printf("⚠️ 错误:除数不能为0!\n");
} else {
result = num1 / num2;
}

**解析:**除数为0会导致运行时错误,必须提前检查。

3. 浮点数比较
1
if (num2 == 0.0f) { ... }

**注意:**浮点数直接比较可能不精确,实际应用中应该使用容差比较:

1
2
3
if (fabs(num2) < 1e-6) {  // 需要 #include 
printf("除数接近0\n");
}

📊 运行示例

1
2
3
4
请输入第一个数字:10
请输入运算符 (+, -, *, /):*
请输入第二个数字:5
10.00 × 5.00 = 50.00

本章小结

  • ✓ 掌握了基本数据类型的使用
  • ✓ 理解了常量和变量的区别
  • ✓ 学会了各种运算符的使用
  • ✓ 掌握了输入输出函数

下一步学习


© 2025 Rl. 使用 Stellar 创建
站点访问量 Loading... 站点访客数 Loading... 页面访问量 Loading...