变量与基本数据类型
这节课我们来学习 C 语言的核心基础语法。
注释
代码注释是程序中不可少的部分,我们在编写代码时可以添加一些注释文本,这些文本内容在编译时自动忽略,只是对程序代码进行解释说明,既可以作为程序员之间交流的主要途径,也能方便作者自己以后阅读代码与维护代码,大大增强程序的可读性。
C 语言的注释有以下两种形式:
- 单行注释:以
//
开始,同一行之后的内容都会被注释,不论写什么都不会被执行; - 多行注释:用
/* */
把要注释的内容包裹起来,被包裹的内容都不会被执行
以下代码就同时包含了以上两种注释:
#include <stdio.h> // 引入标准库文件
/*
* 我是多行注释
* 这个简单的文件是由 IDE 自动生成的测试代码
*/
// 我是单行注释
int main(void) { // 主函数
printf("Hello, World!\n"); // 打印字符串到控制台
return 0; // 注:该行代码我们可以不写,编译器会自动添加。
}
在 Clion 中,除了手动输入注释符号外,我们可以使用快捷键将选中的内容注释掉,只需要把需要注释的部分选中,然后按下 ctrl + /
即可。
我们也可以使用 ctrl + /
将已经注释的代码取消注释。
注释的内容,既可以写在代码后面,也可以单独一行。
常量与基本数据类型
我们已经知道 printf()
函数的作用是格式化输出,输出的就是括号中的内容:
printf("欢迎关注 B 站罗大富!");
printf()
函数输出的这段文本,在程序运行的过程中永远不会发生变化,也被称为 常量
,而这个常量又被双引号包裹起来,类似这样的由多个字母、数字、符号等字符组成的内容,我们将其称为 字符串
,因此我们也可以称其为 字符串常量
。
在 C 语言中常量的类型除了字符串以外,还有几种基本数据类型:
基本数据类型 | 对应关键字 | 说明 | 示例 |
---|---|---|---|
整数类型 | int | int 是 integer 的缩写,正数、负数、0 都属于整型 | 25、0、-99 |
字符类型 | char | 单引号引起来的字母、数字、英文符号,且单引号中只能存在一个字符 | 'a'、'z'、‘8’、'$' |
单精度浮点数 | float | 较低的精度和较小的存储空间占用,通常用于对精度要求不高但需要节省内存的场景。 | 3.14 |
双精度浮点数 | double | 较高的精度和较大的数值范围,通常用于需要高精度计算的场合。 | 3.141592653 |
接着,我们就需要对常量进行输出打印,在打印字符串时,我们可以直接将双引号包裹的字符串传递进来,但是如果我们把字符串替换为字符、整数、浮点数之后,就无法正常打印
printf('A'); // printf 无法直接打印字符
printf(18); // printf 无法直接打印整型
printf(3.14); // printf 无法直接打印浮点数
这是因为 printf(参数1,...)
函数在使用时一般要传递两个以上的参数:
参数 1
:格式化字符串(必填项),包含普通字符和占位符(以%
开头);...
:可变参数列表,与占位符一一对应,格式化字符串中有几个占位符,就加几个参数。
下面是一个使用案例:
printf("大家好,我叫%s,今年 %d 岁,身高 %fcm", "罗大富", 30, 180.5);
上述代码中的 %s
、%d
与 %f
被称为 占位符
,占位符
用于指定数据的类型和格式,常用的占位符类型有:
占位符 | 说明 |
---|---|
%d | 十进制有符号整数 |
%f | 小数形式浮点数(默认 6 位小数) |
%c | 单个字符 |
%s | 字符串 |
我们在使用上面的代码输出时会发现一个新的问题,就是身高显示的结果为 180.500000
,这是因为 %f
默认显示 6 位小数,我们只需要将其修改成 %.1f
即可将显示的小数精度改为 1 位,代码如下:
printf("大家好,我叫%s,今年 %d 岁,身高 %.1fcm", "罗大富", 30, 180.5);
变量
与常量相对的,就是变量。
在 C 语言中,变量
是程序中用于存储数据的容器,简单点说,就是在程序运行时,记录数据用的。无论是使用哪种编程语言,变量都是其程序的基本组成部分,它通过一个名字(变量名)来标识,并指定了存储数据的类型(如整数、浮点数、字符等)。变量允许程序在运行过程中动态地保存和修改数据,是编程中最基础且核心的概念之一 。
想象你有一个收纳盒,我们将变量当成收纳盒,这个盒子有以下特点:
盒子标签(变量名)
:比如下图中的文具盒,用来区分不同的盒子。盒子类型(数据类型)
:盒子的大小和用途决定了能装什么(如小盒子只能装玩具车,大盒子能装玩偶)。装的东西(变量值)
:盒子里实际存放的物品,可以随时更换。

在 C 语言中定义变量需要有以下三部分:
数据类型 变量名 = 变量的值; // 其中变量的值可以在声明变量的时候先不写
注意
此处的 =
与数学中的 =
不同,这里是赋值运算符,作用是将右侧的值赋予左侧变量名。
例如:
char symbol = '#'; // 使用字符类型存储符号数据
int age = 18; // 使用整型存储年龄年龄数据
float height = 180.5; // 使用浮点数类型存储身高数据
当然,我们也可以在定义变量的时候不对其进行赋值操作,代码如下:
int age; // 只定义不赋值
age = 18; // 定义完变量之后,调用该变量时,不再需要添加数据类型
age = 30 // 我们也可以使用赋值运算符对该变量的值进行修改。
如果我们要定义多个相同类型的变量,那么我们在同一行进行批量定义:
int i, j, k;
int i = 1, j = 2, k = 3;
// 使用批量声明变量时需要注意,此种情况下 i 和 j 并没有被赋值,为了避免出现误会不建议使用此种方法
int i, j, k = 4;
相信大家对变量已经有了充分的了解,但是学习编程最忌会的就是只听不练,我们在下面为大家准备了两道简单的练习题,来帮助大家趁热打铁充分加深印象。
练习 1:
计算一个长为 5,宽为 3,高为 2 的长方体的体积。
代码如下:
#include <stdio.h>
int main(){
int l = 5; // 声明整型变量长 l 并赋值 5
int w = 3; // 声明整型变量宽 w 并赋值 3
int h = 2; // 声明整型变量高 h 并赋值 2
printf("长方体的体积为:%d\n", l * w * h); // 计算并打印输出该长方体的体积
return 0;
}
练习 2:
计算两个整数 a=7 和 b=3 的和、差、积、商(保留 2 位小数),并输出结果。
提示:1. 整数除法需转换为浮点类型(如(float))以保留小数。
2. 保留一位小数的格式说明符用 %.2f
a 与 b 的数据类型均为整数,但是二者相除的结果为浮点数,因此,我们还需要将计算结果强制转换为浮点型,语法如下:
(float) a; //将变量 a 转换为 float 类型
(int) x+y; //把表达式 x+y 的结果转换为 int 整型
(float) 100; //将数值 100(默认为 int 类型)转换为 float 类型
代码如下:
#include <stdio.h>
int main(){
int a = 7; // 声明整型变量 a 并赋值 7
int b = 3; // 声明整型变量 b 并赋值 3
printf("a + b = %d \n", a + b); // 计算两者的和,输出且换行
printf("a - b = %d \n", a - b); // 计算两者的差,输出且换行
printf("a * b = %d \n", a * b); // 计算两者的积,输出且换行
printf("a / b = %.2f\n", (float)a / b); // 计算两者的商,保留 2 位小数输出且换行
return 0;
}
我们已经明白了声明变量的格式,但是在起变量名时不能随便命名,C 语言中命名变量有他专门的规则和方法,下面我们依次说明变量命名的规则和方法。
C 语言变量命名规则有以下几种:
- 变量名由字母、数字和下划线组成(A-z、0-9和_);
- 变量名必须以字母或下划线开头;
- 变量名不能由数字开头;
- 变量名严格区分大小写(age、Age、AGE 是三个不同的变量);
- 变量名应该具有一定的描述性,以便于代码的阅读和维护。
- 变量名不能使用 C 语言关键字(之后会详细列举)
当变量名过长时,C 语言变量有三种常用的命名方法:
下划线命名法
:逻辑断点(单词)用下划线隔开,例如:int student_age = 20; // 学生年龄 float average_score = 85.5; // 平均分数
小驼峰命名法
:除第一个单词以外,其他单词首字母大写,例如:int studentAge = 20; // 学生年龄 float averageScore = 85.5; // 平均分数
大驼峰命名法
:又叫帕斯卡命名法,与小驼峰不同的是,大驼峰命名法所有单词首字母大写,常用于结构体/类名、枚举类型,例如:// 定义学生信息结构体 struct StudentInfo { int id; // 学号 char name[50]; // 姓名 int age; // 年龄 float score; // 成绩 char gender; // 性别,'M' 或 'F' char address[100]; // 家庭住址 };
但是需要注意的是,并不是所有的单词都可以用作变量名的。
关键字
关键字是 C 语言提供的有特殊含义的符号,有些地方也叫做保留字,比如:int、return 等。
关键字 | 说明 |
---|---|
auto | 声明自动变量 |
short | 声明短整型 |
int | 声明整型 |
long | 声明长整型 |
float | 声明单精度浮点型 |
double | 声明双精度浮点型 |
char | 声明字符型 |
struct | 声明结构体类型 |
union | 声明联合(共用)类型 |
enum | 声明枚举类型 |
typedef | 重命名数据类型 |
const | 声明只读变量 |
unsigned | 声明无符号类型 |
signed | 声明有符号类型 |
extern | 声明外部变量 |
register | 声明寄存器变量 |
static | 声明静态变量 |
volatile | 说明变量在程序执行中可隐含的被改变 |
void | 声明函数无返回值或者无参数,声明无类型指针 |
if | 条件语句 |
else | 条件语句否定分支(与if连用) |
switch | 用于开关语句 |
case | 开关语句分支 |
default | 开关语句中默认分支 |
for | 循环语句 |
do | 循环语句循环体 |
while | 循环语句的循环条件 |
continue | 结束当前循环,开启下一轮循环 |
break | 跳出当前循环 |
goto | 无条件跳转语句 |
sizeof | 计算数据类型长度 |
return | 子程序返回语句(可以带参数,也可以不带参数)循环条件 |
关键字有 2 大特征:
- 全部都是小写
- 在开发工具或者智能文本编辑工具(比如 Clion)中会显示特殊颜色
大致浏览一遍即可,不用去百度每个关键字的作用,这些关键字以后会经常用到的,到时候你想不记住都难。