今天我们继续第一模块第二部分《初识C语言》的学习,上一篇笔记当中我们详细讲解了什么是C语言、第一个C语言程序以及数据类型。本篇笔记中我们继续从变量与常量开始学习,后面的内容还包括:变量与常量 、字符串+转义字符+注释 、选择语句 、循环语句 、函数 、数组 、操作符 、常见关键字 、define 定义常量和宏 、指针 、结构体。
在本部分的学习中,我们仅仅是浅尝辄止,对于每个知识点就是简单认识,并不做详细讲解。后面会针对每个知识点进行详细的讲解。
第二部分 初识C语言
四、变量与常量
(一)、变量的创建与命名
1、变量与常量
生活中的有些值是不变的,比如说圆周率、性别、身份证号等;也有些值是可变的,比如说年龄、体重、薪资等。C语言规定,不变的值称为常量,可变的值称为变量。
2、定义变量的方法
变量类型 变量名称 = 初始化的值;
在对变量命名的时候,最好也要使用一些有意义的名称。创建变量的时候,一定要初始化,否则有一些编译器会报错。在上一个目题当中,已经给出了部分示例来展示创建不同类型的变量并进行了初始化。
当使用printf函数打印变量的时候:使用 %d 用来打印int类型;使用 %f 用来打印float类型;使用 %lf 用来打印double类型。
3、关于变量的命名
(1)只能由字母(包括大写和小写)、数字和下划线( _ )组成。
(2)不能以数字开头。
(3)长度不能超过63个字符。
(4)变量名中区分大小写的。
(5)变量名不能和关键字重名。(int double char return while for switch if else long goto do break case const continue float short void sizeof struct 等等)
# include <stdio.h>
int main(){
//存放一个人的年龄10岁,使用int类型
int age = 10;
printf("%d\n", age);
//存放一个人的薪资是5000,使用float类型
float salary = 5000.0f;
printf("%f\n", salary);
//如果想限制小数点后位数,可以如下表示
//语法规定 %.xf 或者 %.xlf 中的 x 可以规定小数点后保留几位小数,如果不做设置,则默认小数点后保留六位小数。
printf("%.2f\n", salary);
//也可以使用double去定义浮点数,数据结尾就无需f了
double money = 5000.0;
printf("%.2lf\n", money);
printf("%.8lf\n", money);
char ch = 'w'; //定义一个字符类型
//下面展示更改一个整型变量的值
int a = 0; //定义一个整型并进行初始化为0
a = 10; //修改这个整型的值
printf("%d\n", a);// 打印的值为10,实现了变量值的修改
return 0;
}
(二)、变量的分类及基础使用
1、局部变量与全局变量
变量分为全局变量和局部变量,下面直接通过一段代码来观察全局变量与局部变量的含义以及最基础的使用:
#include<stdio.h>
int num1 = 1000; // 全局变量
int num = 10; //全局变量
int main(){
int num2 = 1; // 局部变量
int num = 0; // 和全局变量名字一样的局部变量
printf("num1 = %d\n", num1);//打印一个全局变量
printf("num2 = %d\n", num2);//打印一个局部变量
//当全局变量和局部变量名称相同的时候,打印局部变量优先
//当然当我们定义变量的时候,建议不要全局变量和局部变量冲突
printf("num = %d\n", num);
return 0;
}
int num2 = 2000; // 这也是全局变量
2、变量的使用示例
//变量的简单使用——实现两个整数的相加
#include<stdio.h>
int main()
{
int num1 = 0; //定义第一个变量
int num2 = 0; //定义第二个变量
//用户输入数据
printf("请输入两个数字,请用回车或空格分割:\n");
//scanf也是库函数,实现从键盘接受数据
scanf("%d %d", &num1, &num2);
//进行计算求和
int sum = 0; //初始化为0
sum = num1 + num2;
//打印计算结果
printf("%d + %d = %d", num1, num2, sum);
return 0;
}
3、C4996报错的修正
上面的示例代码如果在VS2022上第一次编译,是会出现C4996的报错的:
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
这是因为VS编译器认为scanf这个函数是不安全的,建议使用scanf_s来替换,但是scanf_s仅仅是在VS 2022中使用的,也就是不可以跨平台使用,因此依旧建议使用scanf函数.
具体操作方法为在整个项目的第一行加上:
#define _CRT_SECURE_NO_WARNINGS
VS中不仅只是scanf函数出现这个报错,所以我们在所有源文件的第一行都加入这个预处理便可以有效的在以后得编程中避免 C4996 的报错的
具体操作方法如下:
(1)、使用everything工具搜素 newc++file.cpp ,右击鼠标——打开路径
(2)、将该文件复制到桌面上,然后便可以正常修改,在其内容的第一行写入
#define _CRT_SECURE_NO_WARNINGS
(3)、再将修改好的文件拷贝会原路径下即可
这样以后创建的文件中都会默认有这句预处理了。
(三)、变量的作用域和生命周期
1、作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。简单来说,这个变量在哪里可以使用,那么就说这个范围是这个变量的作用域。
· 局部变量的作用域是变量所在的局部范围。
· 全局变量的作用域是整个工程。
2、变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
· 局部变量的生命周期是进入作用域生命周期开始,出作用域生命周期结束。
· 全局变量的生命周期是整个程序。
下面我们来看一段代码来说明变量的作用域:
#include<stdio.h>
int b = 50;
void test()
{
printf("再打印一次 b = %d\n", b);//全局变量的作用域包含主函数外部
}
int main()
{
{
int a = 100;
printf("a = %d\n", a);
}
printf("a = %d\n", a); // 这一行会报错,显示 a 是未声明的标识符
// 这就是因为这一行不在 a 这个变量的作用域内
// 变量 a 的作用域就是包含该变量的{ }内部
printf("b = %d\n", b); //全局变量的作用域包含主函数内部
// 甚至全局变量的作用域可以包括在同一工程内的不同源文件上
// 当然调用的时候,需要使用 extern 来声明外部符号
test(); //调用函数
return 0;
}
(四)、常量
1、C语言中的常量分为以下以下几种:
· 字面常量
· const 修饰的常变量
· #define 定义的标识符常量
· 枚举常量
2、字面常量
3.14; //字面常量——浮点型常量
55; //字面常量——整型常量
'a'; //字面常量——字符常量
3、 const 修饰的常变量
#include<stdio.h>
int main()
{
int num = 10; // 变量
num = 20; // 修改变量的值
const int age = 10;
printf("age = %d", age);
age = 20; //这句话会报错,因为 const 将其加入了不可改值的属性
// 但是 const 仅仅是在语法上限值要求 age的值不能被改变,但 age 的本质上依旧是一个变量
// 下面可以使用数组的性质来验证常变量的本质:数组的大小语法要求必须输入一个确定的整型数值来规定
int n1 = 10;
int arr1[n1] = { 0 }; // 这里会报错,因为要求数组的大小必须要输入一个确定的数字
const n2 = 100;
int arr2[n2] = { 0 }; //这里依旧会报错,所以我们可以得出编译器依旧将 n2 (常变量)视为一个变量
return 0;
}
4、 #define 定义的标识符常量
#define MAX 100
int main()
{
printf("%d\n", MAX); //这个就是 #define 定义的标识符常量
int arr[MAX] = { 0 }; // 在这里这句话不会报错
return 0;
}
5、枚举常量
枚举 —— 一一列举
比如:
· 性别:男、女、保密
· 三原色:红色、绿色、蓝色
· 生肖:子鼠、丑牛、寅虎、卯兔、辰龙、巳蛇、午马、未羊、申猴、酉鸡、戌狗、亥猪
例如这种我们就可以使用枚举常量
enum Color // enum 是枚举关键字
{
// 枚举类型 enum Sex 的可能取值,他们都是枚举常量
RED, // 红色—— 0
GREEN, // 绿色 —— 1
BLUE // 蓝色 —— 2
};
int main()
{
printf("RED = %d", RED);
printf("GREEN = %d", GREEN);
printf("BLUE = %d", BLUE);
// 枚举常量默认取值为 0 、1 、2(从0开始,依次向下递增1的)
RED = 100; //这句话会报错,这证明了枚举常量是常量
return 0;
}
本篇笔记当中我们详细讲解了变量与常量的相关知识。第二部分的学习还远远没有结束,下篇笔记中我们继续从字符串+转义字符+注释开始学习 。