目录
1.数值型变量
(1)整型常量
整型常量就是直接使用的整型常数,如123、-456等。整型常量可以是长整型、短整型、符号整型和无符号整型。
1)无符号短整型的取值范围是0~65535,有符号短整型的取值范围是-32768~+32767,这些都是16位整型常量的范围。
2)如果整型是32位的,那么无符号形式的取值范围是0~4294967295,有符号形式的取值范围是-2147483648~+2147483647。但是整型如果是16位的,就与无符号短整型的范围相同。
注意:不同的编译器,整型的取值范围是不一样的。在字长为16位的计算机中,整型就为16位;在字长为32位的计算机中,整型就为32位。
3)长整型是32位的,其取值范围可以参考上面有关整型的描述。
在编写整型常量时,可以在常量的后面加上符号L或者U进行修饰。L表示该常量是长整型,U表示该常量为无符号整型,例如:
注意:表示长整型和无符号整型的后缀字母L和U可以使用大写,也可以使用小写。
整型常量可以通过3种形式进行表达,分别为八进制形式、十进制形式和十六进制形式。
下面分别进行介绍:
a.八进制整数
要使得使用的数据表达形式是八进制,需要在常数前加上0进行修饰。八进制所包含的数
字是0~7。例如:
注意:以下关于八进制的写法是错误的:
b.十进制整数
十进制是不需要在其前面添加前缀的。十进制中所包含的数字为0~9。例如:
这些整型数据都以二进制的方式存放在计算机的内存之中,其数值是以补码的形式进行表示的。一个正数的补码与其原码形式相同,一个负数的补码是将该数绝对值的二进制形式按位取反后再加1。例如,一个十进制数11在内存中的表现形式如图
如果是-11,那么在内存中又是怎样的呢?因为是以补码进行表示,所以负数要先将其绝对值求出;然后进行取反操作,得到取反后的结果。
取反之后还要进行加1操作,这样就得到最终的结果。则为-11在计算机内存中如图
注意:对于有符号整数,其在内存中存放的最左面一位表示符号位,如果该位为0,则说明该数为正;若为1,则说明该数为负。
c. 十六进制整数
常量前面使用0x作为前缀,表示该常量是用十六进制进行表示的。十六进制中包含数字0~9以及字母A~F。例如:
注意1:其中字母A~F可以使用大写形式,也可以使用a~f小写形式。
注意2:以下关于十六进制的写法是错误的:
(2)实型常量
实型也称为浮点型,由整数部分和小数部分组成,并用十进制的小数点进行分隔。表示实数的方式有科学计数方式和指数方式两种。
a.科学计数方式
科学计数方式就是使用十进制的小数方法描述实型,例如:
b.指数方式
有时,实型非常大或者非常小,使用科学计数方式是不利于观察的。这时,可以使用指数方法显示实型常量。其中,使用字母e或者E进行指数显示,如45e2表示的就是4500,而45e-2表示的就是0.45。如上面的SciNum1和SciNum2代表的实型常量,使用指数方式显示这两个实型常量,代码如下:
在编写实型常量时,可以在常量的后面加上符号F或者L进行修饰。F表示该常量是float单精度类型,L表示该常量为long double长双精度类型。例如:
如果不在后面加上后缀,那么在默认状态下,实型常量为double双精度类型。例如:
注意:后缀的大小写是通用的。
2.字符型常量
字符型常量与之前所介绍的常量有所不同,即要对其字符型常量使用指定的定界符进行限制。字符型常量可以分成两种:一种是字符常量,另一种是字符串常量。
(1)字符常量
使用单直撇括起一个字符,这种形式就是字符常量。例如,'A'、'#'、'b'等都是正确的字符常量。在这里,需要注意以下几点:
a.字符常量只能包括一个字符,不能是字符串。例如,'A'是正确的,但是用'AB'来表
示字符常量就是错误的。
b.字符常量是区分大小写的。例如,'A'字符和'a'字符是不一样的,这两个字符代表着
不同的字符常量。
c.' '这对单直撇代表着定界符,不属于字符常量中的一部分。
示例1:字符常量的输出,使用putchar函数将单个字符常量进行输出,使得输出的字符常量形成一个单词Hello并显示在控制台中。
#include<stdio.h>
int main()
{ /*注意字符是单引号*/
putchar('H');/*输出字符常量H*/
putchar('e');/*输出字符常量e*/
putchar('l');/*输出字符常量l*/
putchar('l');/*输出字符常量l*/
putchar('o');/*输出字符常量o*/
putchar('\n');/*换行*/
return 0;
}
运行结果:
(2) 字符串常量
字 符 串 常 量 是 用 一 组 双 引 号 括 起 来 的 若 干 字 符 序 列, 例 如,“Have a good day!”和“beautiful day”即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。
在C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“\0”,作为字符串的结束标志。例如,字符串“welcome”在内存中的存储形式
注意:在程序中编写字符串常量时,不必在字符串的结尾处加上“\0”结束字符,系统会自动添加结束字符。
示例2:使用printf函数将字符串常量“What a nice day!”在控制台输出显示
#include<stdio.h>
int main()
{
printf("What a nice day!\n");
return 0;
}
运行结果:
字符常量与字符串常量之间有什么差别:
a.定界符的使用不同。字符常量使用的是单直撇,而字符串常量使用的是双引号。
b.长度不同。上面提到过字符常量只能有一个字符,也就是说字符常量的长度就是1。字符串常量的长度可以是0,也可以是任意数。即使字符串常量中的字符数量只有1个,长度也不是1。例如,字符串常量“H”,其长度为2
原因:系统会自动在字符串的尾部添加一个字符串结束字符“\0”,这也就是“H”的长度是2的原因
c. 存储的方式不同,在字符常量中存储的是字符的ASCII码值;而在字符串常量中,不仅要存储有效的字符,还要存储结尾处的结束标志“\0”
3. ASCII表
4. 转义符号
转义符号在字符常量中是一种特殊的字符。转义字符是以反斜杠“\”开头的字符,后面跟一个或几个字符。常用的转义字符及其含义
5.符号常量
例如:一个求解长方体体积的程序,其中长方体的高度是固定的,使用一个符号名代替固定的常量值,这里使用的符号名就称之为符号常量。
示例3:使用符号常量来表示圆周率,在控制台上显示文字提示用户输入数据,该数据是有关圆半径的值。得到用户输入的半径,经过计算得到圆的面积
#include <stdio.h>
#include <stdlib.h>
#define PAI 3.14 /*定义符号变量*/
int main(void)
{
double radius; /*定义半径变量*/
double result; /*定义结果变量*/
printf("请输入圆的半径:"); /*提示*/
scanf_s("%lf", &radius); /*输入数据*/
result = radius * radius * PAI; /*进行计算*/
printf("圆的面积为:%lf\n", result); /*显示结果*/
return 0; /*程序结束*/
}
运行结果:
6. 整型变量
整型变量是用来存储整型数值的变量。整型变量可以分为如表3.4所示的6种类型,其中基本类型的符号使用int关键字,在此基础上可以根据需要加上一些符号进行修饰,如关键字short或long
注意:表格中的[]为可选部分。例如[signed] int,在编写时可以省略signed关键字。
(1)有符号基本整型
有符号基本整型是指signed int型,其值是基本的整型常数。编写时,常将其关键字signed进行省略。有符号基本整型在内存中占4个字节,取值范围是-2147483648~2147483647。注意:通常说到的整型,都是指有符号基本整型int。
定义一个有符号整型变量的方法是在变量前使用关键字int。例如,定义一个整型的变量
iNumber,并为其赋值10的方法如下:
或者在定义变量的同时为其赋值
注意:在编写程序时,程序中用到的所有变量的定义应该放在变量的赋值之前,否则会产生错误。通过下面的两个例子进行对比:
示例4:对有符号基本整型变量的使用
#include <stdio.h>
int main()
{
signed int iNumber;
iNumber = 10;
printf("%d", iNumber);
return 0;
}
运行结果:
(2)无符号基本整型
无符号基本整型使用的关键字是unsigned int,其中的关键字int在编写时可以省略。无符号基本整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号基本整型变量的方法是在变量前使用关键字unsigned。例如,要定义一个无符号基本整型的变量iUnsignedNum,并为其赋值10的方法如下:
(3)有符号短整型
有符号短整型使用的关键字是signed short int,其中的关键字signed和int在编写时可以省略。有符号短整型在内存中占两个字节,取值范围是-32768~32767。
定义一个有符号短整型变量的方法是在变量前使用关键字short。例如,要定义一个有符号短整型的变量iShortNum,并为其赋值10的方法如下:
(4)无符号短整型
无符号短整型使用的关键字是unsigned short int,其中的关键字int在编写时可以省略。无符号短整型在内存中占两个字节,取值范围是0~65535。
定义一个无符号短整型变量的方法是在变量前使用关键字unsigned short。例如,要定义一个无符号短整型的变量iUnsignedShtNum,并为其赋值10的方法如下:
(5)有符号长整型
有符号长整型使用的关键字是signed long int,其中的关键字signed和int在编写时可以省略。有符号长整型在内存中占4个字节,取值范围是-2147483648~2147483647。
定义一个有符号长整型变量的方法是在变量前使用关键字long。例如,要定义一个有符号长整型的变量iLongNum,并为其赋值10的方法如下:
(6)无符号长整型
无符号长整型使用的关键字是unsigned long int,其中的关键字int在编写时可以省略。无符号长整型在内存中占4个字节,取值范围是0~4294967295。
定义一个无符号长整型变量的方法是在变量前使用关键字unsigned long。例如,要定义一个无符号长整型的变量iUnsignedLongNum,并为其赋值10的方法如下:
7. 实型变量
实型变量也称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。实型变量根据实型的精度可以分为单精度类型、双精度类型和长双精度类型3种
(1)单精度类型
单 精 度 类 型 使 用 的 关 键 字 是 float, 它 在 内 存 中 占 4 个 字 节, 取 值 范 围是-3.4×10 -38 ~3.4×10 38 。
定义一个单精度类型变量的方法是在变量前使用关键字float。例如,要定义一个变量fFloatStyle,并为其赋值3.14的方法如下:
示例5:定义一个单精度类型变量,然后为其赋值1.23
#include <stdio.h>
int main()
{
float fFloatStyle;
fFloatStyle = 1.23f;
printf("%f\n", fFloatStyle);
return 0;
}
运行结果:
(2)双精度类型
双 精 度 类 型 使 用 的 关 键 字 是 double, 它 在 内 存 中 占 8 个 字 节, 取 值 范 围是-1.7×10 -308 ~1.7×10 308 。
定义一个双精度类型变量的方法是在变量前使用关键字double。例如,要定义一个变量dDoubleStyle,并为其赋值5.321的方法如下:
示例6:定义一个双精度类型变量,然后为其赋值61.458
#include <stdio.h>
int main()
{
double dDoubleStyle;
dDoubleStyle = 61.458;
printf("%f\n", dDoubleStyle);
return 0;
}
运行结果:
(3)长双精度类型
长双精度类型使用的关键字是long double,它在内存中占8个字节,取值范围是-1.7×10 -308 ~1.7×10 308 。
定义一个双精度类型变量的方法是在变量前使用关键字long double。例如,要定义一个变量fLongDouble,并为其赋值46.257的方法如下:
示例7:定义一个长双精度类型变量,然后为其赋值46.257
#include <stdio.h>
int main()
{
long double fLongDouble;
fLongDouble = 46.257;
printf("%f\n", fLongDouble);
return 0;
}
运行结果:
8. 字符型变量
字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。
字符型变量在内存空间中占一个字节,取值范围是-128~127。
定义一个字符型变量的方法是使用关键字char。例如,要定义一个字符型的变量cChar,为其赋值为'a'的方法如下:
注意:字符数据在内存中存储的是字符的ASCII码,即一个无符号整数,其形式与整数的存储形式一样,因此C语言允许字符型数据与整型数据之间通用。例如
从上面的代码中可以看到,首先定义两个字符型变量,在为两个变量进行赋值时,一个变量赋值为'a',而另一个赋值为97。最后显示结果都是字符'a'。
示例8:为定义的字符型变量和整型变量进行不同的赋值,然后通过输出结果观察整型变
量和字符型变量之间的转换
#include <stdio.h>
int main()
{
char cChar1; /*定义字符型变量*/
char cChar2;
int iInt1; /*定义整型变量*/
int iInt2;
cChar1 = 'a';
cChar2 = 97;
iInt1 = 'a';
iInt2 = 97;
printf("%c\n", cChar1);
printf("%c\n", cChar2);
printf("%c\n", iInt1);
printf("%c\n", iInt2);
return 0;
}
运行结果: