|
第2章 变量和常量 |
|
在C语言中,变量和常量是程序中基本的元素。用户可以在程序中根据不同的需要,使用已经定义的变量或者常量存储一些中间数据等。并且还可以根据变量的作用域,高效、合理地使用各个变量实现特定功能。在本章中,将主要介绍变量和常量的定义、使用以及作用域等相关的基础知识。
变量在使用之前,必须进行定义。否则,编译器将无法识别变量名及其类型。变量定义的位置还决定了该变量的作用域。
在C语言中,常用的变量类型包括整型(it)、字符型(car)、单精度(foat)和双精度(double)等几种。每种变量类型在计算机中所占的大小不同,作用也不同。在本小节中,将介绍这几种常用变量类型的相关知识。
1. 整型(it)
整型在C语言中是常用的一种变量类型,使用符号“int”表示。该类型的数据在32位操作系统中,所占的计算机内存位数为8位。该类型变量的定义格式如下:
int变量名=初始化值; //定义并初始化整型变量
在整型定义格式中,变量类型标识符int必须置于变量名之前。当然,用户定义整型变量时,也可以不用对其进行初始化操作。此时,整型变量的初始值由系统指定。
注意 整数类型的初始化数据是不带小数点的数据。例如,128、100等都是整型数据。
当需要定义多个整型变量时,可以使用逗号“,”将各个变量名隔开。例如,用户需要定义多个整型变量,并进行初始化操作。具体代码如下:
…… //省略部分代码
int a, b,c; //定义整型类型的数据a, b,c
int m=10,n=10; //定义并初始化整型变量m, n
…… //省略部分代码
在实例代码中,使用整型变量标识符int同时定义了多个整型变量,并进行了初始化。通过这段代码,可以明白整型变量的定义及其初始化操作方法。
2. 字符型(car)
字符型通常是用于定义字符型数据的。该类型的变量不仅可以存储单字符数据,还可以存储多字符数据或字符串。用户一般直接使用字符变量标识符char就可以定义字符变量。其定义格式如下:
char变量名='初始化字符'; //定义并初始化单个字符
char变量名[10]="初始化字符串"; //定义并初始化字符串
在上面的字符变量定义中,若使用单字符数据对变量进行初始化,一定要用单引号将初始化数据括起来。而使用字符串初始化变量时,必须将变量定义为字符数组,并且用双引号将初始化数据括起来。否则,用户对字符变量的初始化操作会失败。
例如,使用字符变量标识符char定义并初始化一个单字符变量和一个字符串。具体代码如下:
…… //省略部分代码
char sz='C'; //定义并初始化一个单字符变量
char sz1[]="学习C语言"; //定义并初始化一个字符数组变量
……
注意 在定义数组时,可以不用预先指定数组元素的个数,而由后面的具体数据的个数进行填充即可。
3. 单精度(foat)
单精度数据类型用“float”表示,该类型的数据在32位操作系统中所占的计算机内存位数为16位。在进行编程时,若需要进行科学计算或多位小数计算,则需要使用单精度类型的数据。
提示 单精度数据类型的数据范围为1.401298E-45~3.402823E38,或者为-3.402823E38~-1.401298E-45。
通常情况下,只有在进行科学计算时要使用单精度类型的数据。该类型变量的定义格式如下:
float变量名=初始化变量值; //定义并初始化单精度变量
例如,用户在程序中,使用单精度变量标识符float定义一个变量f。具体代码如下:
…… //省略部分代码
float f=1.2545; //定义并初始化单精度变量f
…… //省略部分代码
注意 单精度数据在使用标准输出函数printf输出时,需要将输出控制符设置为“%1f”。后文将对该知识点进行详细讲解。
4. 双精度(double)
双精度数据类型用“double”表示。该类型的数据在32位操作系统中,所占的计算机内存位数为32位。与单精度类型的数据一样,在进行编程时,若需要进行科学计算或多位小数计算,则需要使用双精度类型的数据。
注意 通常,双精度变量定义与单精度变量定义格式相同。在本书中,不再对双精度变量的定义进行详细的讲解。
在本小节中,主要讲解了C语言中常用的几种变量类型的定义格式及其作用等相关的知识点。通过学习,读者应当能够熟悉这些常用变量类型的使用方法和技巧。这样,在后面的实际编程中,才能够更好地利用这些变量完成对应的功能。
为了使编写出来的程序具有较好的可读性以及方便修改,都需要将变量名修改为具有实际意义的名称。这样,才能够非常清楚地知道这些变量所表示的含义。
例如,需要定义一个整型变量表示学生的成绩,定义一个字符数组表示学生的姓名。具体代码如下:
…… //省略部分代码
int score=70; //定义并初始化学生成绩
char name[]="王磊"; //定义并初始化学生姓名
…… //省略部分代码
通过实例代码,很快就可以知道score是用于表示学生成绩的整型变量,而name则表示学生姓名的字符型数组。在实际编程时,一定要注意变量的命名规则,否则将会影响程序的可读性以及增加日后修改的难度。
在实际编程中,变量定义应当严格遵循其命名规则。一般情况下,变量名要有良好的可读性,但是长度不宜过长。用户还可以使用下划线“_”和前缀字符对变量进行标识。例如,在程序中,定义一个变量表示学生的姓名,则可以将变量名设置为m_name。
注意 变量名m_name中的m表示前缀字符。
变量命名时,不能使用特殊符号作为变量名的前缀,也不能使用C语言中的关键字作为自定义变量的名称。
注意 特殊符号包括“*”、“/”、“\”、“#”等。
局部变量是指在一些程序段中所定义的变量,其作用范围有很大限制,一般只在一对大括号之间有作用。在本小节中,将介绍局部变量的定义、作用及其使用方法等。
当用户在变量定义的代码段之外调用该变量时,是不允许的。
注意 局部变量的作用范围是相对的,而不是绝对的。
例如,在主函数中定义一个整型变量i,再在其内部的一段代码中定义一个整型变量i1。具体代码如下:
main() //主函数
{
int i=2; //定义并初始化整型变量
…… //省略部分代码
{ //主函数内部的代码段
int i1=3; //定义局部变量i1
…… //省略部分代码
}
return 0; //程序正常返回
}
在实例代码中,主函数所定义的变量,其作用域只能够在主函数中。当主函数中的代码运行完毕后,该整型变量将自动删除。而代码段“int i1=3”则是在主函数中的一个代码段中定义的,所以该变量i1的作用域在这个代码段中有效。当主函数内部的代码段执行完毕后,变量i1将被自动删除。
注意 局部变量的作用域一定是要在一对大括号之间,可以根据需要在不同的作用域中定义相同类型的变量。但是,这也容易导致定义的变量重名或者引用未定义的变量而发生错误。
与局部变量相似的是全局变量。顾名思义,全局变量的作用域是整个程序。当程序运行完毕退出时,全局变量才会被自动删除,即全局变量的生命周期与程序的生命周期是相同的。在本小节中,将介绍全局变量的定义及其作用范围。
例如,在局部变量的实例代码中,变量i相对于变量i1,也可以被称为全局变量。所以,使用全局变量时,需要根据实际情况确定全局变量的作用范围。
如果用户希望定义的全局变量的生命周期与程序的生命周期相同,则可以在主函数外定义变量。具体代码如下:
int i=0; //定义并初始化全局变量i
main() //主函数
{
…… //省略部分代码
return 0; //程序正常返回
}
在实例代码中,已经定义了全局变量i,表示其作用范围在整个程序中都是有效的。若在主函数中,再定义一个相同的变量i,则会出现变量名重复的错误。
注意 定义全局变量时,一定要注意其作用范围。
当变量定义成功后,就使用这些变量存储相应的数据。对于变量,可以在定义的同时初始化,也可以在特定的代码处初始化。在本节中,将介绍在程序中使用变量存储数据。
在程序中,可以使用符号“=”为已经定义的变量进行赋值操作。在存储数据时,必须根据变量的类型存储与其对应类型的数据,否则,程序可能会出现内存读写错误。在本小节中,将介绍使用已定义的变量正确存储数据。
例如,定义的变量类型是整型,则该变量只能存储整数数据。按照这个规则,可以定义不同类型的变量,并对其初始化。具体代码如下:
…… //省略部分代码
int score=70; //定义并初始化整型变量
char name[]="学习C语言"; //定义并初始化字符数组
float f=12.254545; //定义并初始化单精度变量
double dob; //定义双精度变量
dob=15.526646546542; //初始化双精度变量
//省略部分代码
……
在实例代码中,分别定义了四个不同类型的变量,并进行了初始化。如果将整型变量score的值初始化为单精度数据“12.254545”,则计算机会将单精度数据小数点后的位数省略,这样就会影响程序的运行结果。注意 用户必须要根据变量的类型存储相同类型的数据。
当用户需要从变量中取出数据时,可以使用输出函数printf实现。该函数的原型如下:
printf("格式化字符串",变量名); //输出函数printf的原型
在函数原型中,“格式化字符串”表示将以哪种格式输出变量值,“变量名”表示数据所存放的变量名称。
注意 当需要输出单个字符或者字符串数据时,应该将“格式化字符串”修改为“%c”或者“%s”。而需要输出单精度数据或者双精度数据时,可以将“格式化字符串”修改为“%f”或者“%1f”等。
例如,将前面一小节中所定义的各个变量值输出,具体代码如下:
#include<stdio.h> //包含头文件
main() //主函数开始
{
int score=70; //定义并初始化整型变量
char name[]="学习C语言"; //定义并初始化字符数组
float f=12.254545; //定义并初始化单精度变量
double dob; //定义双精度变量
dob=15.526646546542; //初始化双精度变量
printf("输出整型数据:%d\n",score); //输出各个变量值
printf("输出字符串:%s\n",name);
printf("输出单精度数据:%f\n",f);
printf("输出双精度数据:%1f\n",dob);
return 0; //程序正常结束
}
实例代码中,使用不同的格式化字符串控制不同类型的变量输出值。程序运行后的结果如图2.1所示。如果将代码段“printf("输出字符串:%s\n",name);”修改为“printf("输出字符数据:%c\n",name);”,则程序运行后,只会输出字符数组name中的第一个字符数据,如图2.2所示。
图 2.1 程序运行结果
图 2.2 程序修改后的运行结果
注意 程序运行后输出的单字符为p,这是因为中文字符和英文字符之间的转换关系。
定义常量时,必须使用关键字const修饰,否则定义的常量就变成了变量。并且在定义常量的同时,需要进行初始化操作。在本节中,将介绍常量的定义方法。
在C语言中,常量是指使用关键字const所定义的变量,其变量值在初始化后,不能够再进行更改。在本节中,将介绍常量的相关基础知识。
在程序中,变量和常量的区别在于前者可以在定义时不用进行初始化,并且可以随时更改变量值,而常量则不能这样操作。因此,可以根据需要将一些重要的数据且不能进行更改的数据保存在常量中。这样,可以有效地防止重要数据的丢失和被恶意篡改等威胁。
注意 常量在初始化以后,不能再进行赋值操作和修改常量值。
关键字const主要用于定义常量。该关键字的使用格式如下:
const常量类型标识符常量名称=常量初始化值; //定义并初始化常量
按照上面的常量定义格式,可以根据需要定义出不同类型的常量。例如,分别定义整型和字符型的常量,具体代码如下:
…… //省略部分代码
const int age=10; //定义并初始化整型常量
const char ch='C'; //定义并初始化字符型常量
……
//省略部分代码
注意 实际上,关键字const还可以用于C语言函数及其参数中。这些知识点将在后面的章节中详细讲解。
常量与变量一样,可以根据需要设置作用范围。例如,在程序中,需要将一个学校的招生代码“20052454”作为整个程序所共享的资源,并且该资源不可以被更改。这样,就可以将该招生代码存储在一个整型的全局常量中。具体代码如下:
#include<stdio.h> //包含头文件
const int num=20052454; //定义并初始化全局的整型常量
main() //主函数开始
{
printf("该学校的招生代码是:%d\n",num); //输出数据
return 0;
}
上面的程序运行后的结果如图2.3所示。
与全局常量相似的是局部常量,即该常量的作用范围有限。例如,在主函数中使用大括号包含一段单独的代码,则在该段代码中所定义的常量作用域就只能够在这对大括号之间。而在大括号之外使用局部常量时,将出现错误。具体代码如下:
图 2.3 程序运行结果
#include<stdio.h> //包含头文件
const int num=20052454; //定义全局常量
main() //主函数
{
{ //定义局部代码段
const int num1=19980235; //定义局部常量
printf("该学校的招生代码是:%d\n",num); //输出全局常量值
printf("该专业的招生代码是:%d\n",num1);
//输出局部常量值
}
printf("该学校的招生代码是:%d\n",num); //输出全局常量值
return 0;
}
在上面的实例代码中,主要说明了全局常量在程序中的任何位置都可以使用,而局部常量则只能够在特定范围的代码段中使用。程序运行后的结果如图2.4所示。
图 2.4 程序运行结果
读者在学习本节知识的同时,应当结合实例代码学习。并且可以将本节中的实例代码复制到编译器中编译运行,查看运行结果。这样,读者可以更加深入地学习,掌握重要的知识点。
在本章中,主要介绍了变量的基本类型、命名规则以及如何定义局部变量和全局变量的方法。本章中的重点在于使用变量存储数据和输出数据的代码编写方法。通过对变量的学习,读者应当熟悉变量的相关基础知识,并且在实际编程时,更好地利用变量实现程序的功能。通过本章的学习,读者应当对本章的知识点有深入的理解。在第3章中,将讲解C语言的数据类型以及常用运算符的相关知识。
1. 已知字符变量ch的值为“a”,编写程序实现输出该字符变量的ASCII值。
2. 已知字符串数组变量string被初始化为“学习C语言编程”,编写程序将其格式化为新字符串“初级程序员学习C语言编程”,并输出。
3. 编写程序将整型变量i设置为全局变量,并且使其初始化值不能够再次被修改。