变量与基本数据类型

罗大富 BigRich大约 10 分钟C/C++

这节课我们来学习 C 语言的核心基础语法。

注释

代码注释是程序中不可少的部分,我们在编写代码时可以添加一些注释文本,这些文本内容在编译时自动忽略,只是对程序代码进行解释说明,既可以作为程序员之间交流的主要途径,也能方便作者自己以后阅读代码与维护代码,大大增强程序的可读性。

C 语言的注释有以下两种形式:

  1. 单行注释:以 // 开始,同一行之后的内容都会被注释,不论写什么都不会被执行;
  2. 多行注释:用 /* */ 把要注释的内容包裹起来,被包裹的内容都不会被执行

以下代码就同时包含了以上两种注释:

#include <stdio.h>              // 引入标准库文件

/*
 * 我是多行注释
 * 这个简单的文件是由 IDE 自动生成的测试代码
 */

// 我是单行注释
int main(void) {                // 主函数
    printf("Hello, World!\n");  // 打印字符串到控制台
    return 0;                   // 注:该行代码我们可以不写,编译器会自动添加。
}

在 Clion 中,除了手动输入注释符号外,我们可以使用快捷键将选中的内容注释掉,只需要把需要注释的部分选中,然后按下 ctrl + / 即可。

我们也可以使用 ctrl + / 将已经注释的代码取消注释。

注释的内容,既可以写在代码后面,也可以单独一行。

常量与基本数据类型

我们已经知道 printf() 函数的作用是格式化输出,输出的就是括号中的内容:

printf("欢迎关注 B 站罗大富!");

printf() 函数输出的这段文本,在程序运行的过程中永远不会发生变化,也被称为 常量 ,而这个常量又被双引号包裹起来,类似这样的由多个字母、数字、符号等字符组成的内容,我们将其称为 字符串 ,因此我们也可以称其为 字符串常量

在 C 语言中常量的类型除了字符串以外,还有几种基本数据类型:

基本数据类型对应关键字说明示例
整数类型intint 是 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. 参数 1:格式化字符串(必填项),包含普通字符和占位符(以 % 开头);
  2. ...:可变参数列表,与占位符一一对应,格式化字符串中有几个占位符,就加几个参数。

下面是一个使用案例:

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 语言变量有三种常用的命名方法:

  1. 下划线命名法:逻辑断点(单词)用下划线隔开,例如:

    int student_age = 20;         // 学生年龄
    float average_score = 85.5;   // 平均分数
    
  2. 小驼峰命名法:除第一个单词以外,其他单词首字母大写,例如:

    int studentAge = 20;         // 学生年龄
    float averageScore = 85.5;  // 平均分数
    
  3. 大驼峰命名法:又叫帕斯卡命名法,与小驼峰不同的是,大驼峰命名法所有单词首字母大写,常用于结构体/类名、枚举类型,例如:

    // 定义学生信息结构体
    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)中会显示特殊颜色

大致浏览一遍即可,不用去百度每个关键字的作用,这些关键字以后会经常用到的,到时候你想不记住都难。

上次编辑于:
贡献者: 罗大富BigRich