首页 > 编程笔记 > C语言笔记 阅读:77

C语言中的基本数据类型(整形、浮点型和字符型)

生活中我们通常会使用很多不同大小的收纳箱,如用来装围巾的、装上衣的以及装裤子的。为了不浪费柜子的空间,可以按照东西的大小用相应容积的收纳箱来收纳。

在 C语言中是同样的道理,存储什么样的数据,就用什么样的数据类型。C语言中有多种不同的基本数据类型,如图 1 所示。


图 1 基本数据类型

接下来分别介绍这些基本数据类型。

C语言整型

数学中称 23、0、1314、520 这样的数据为整数,而在 C语言中,也称这类数据为整数,即整型数据。

声明整型数据

整型数据使用 int 来声明,int 是 integer(整数)的缩写,声明整型数据的一般语法格式如下:
int 标识符;
上面的语法格式表示该标识符是整型数据。定义整型变量,代码如下:
int age; //定义整型变量age

如果要定义多个整型变量,可以单独定义每个变量,例如:
int age; //定义整型变量age,表示年龄
int high; //定义整型变量high,表示身高
int weight; //定义整型变量weight,表示体重

也可以在 int 后面列出多个变量名,变量名之间用英文逗号隔开,例如:
int age, high, weight;   //定义整型变量age、high、weight
上述的单独声明变量和同时列出多个变量名,这两种方法的效果是相同的,都是声明 int 类型的变量。但如果要同时声明多个变量,那么这些变量的类型必须都一样。

初始化整型变量

初始化整型变量,就是为整型变量赋值。初始化整型变量有以下几种方式,第一种是直接在声明时初始化变量,例如:
int year=2019; //定义整型变量year并赋值
int month=6; //定义整型变量month并赋值
int day =1; //定义整型变量day并赋值

另一种是先声明变量,再赋值,例如:
int year, month, day; //定义整型变量year、month、day
year =2019; //给变量year赋值
month =6; //给变量month赋值
day=1; //给变量day赋值

或者可以这样初始化变量:
int year, month, day; //定义整型变量year、month、day
year =2019, month =6,day=1; //给变量year、month、day赋值
以上赋值方式效果都是一样的。

其它整型

整型默认的是 int 类型(基本整型),但是整型不仅有基本整型,还有短整型、长整型和无符号整型,无符号整型又可与前 3 种匹配构成无符号基本整型、无符号短整型和无符号长整型。

整型的分类如下表所示:

表:整型的分类
数据类型 含义 长度 取值范围
unsigned short int 无符号短整型 16位 0~65535
short int 短整型 16位 -32768~32767
unsigned int 无符号基本整型 32位 0~4294967295
int 基本整型 32位 -2147483648~2147483647
unsigned long int 无符号长整型 64位 0~18446744073709551615
long int 长整型 64位 -9223372036854775808~9223372036854775807

所有编译环境不同,整型的长度也可能不一样。应合理地选择声明类型,避免造成空间浪费。

在编写整型变量时,可以在变量的后面加上符号 L 或者 U 进行修饰。L 表示该变量是长整型,U 表示该变量是无符号整型,例如:
long LongNum = 2000L; //L 表示长整形
unsigned long UnsignLongNum = 1234U; //U表示无符号整形
表示长整型的后缀字母 L 和表示无符号整型的后缀字母 U 可以使用大写,也可以使用小写。如果不在后面加上后缀,在默认状态下,整型为 int 类型。

输出整型数据

输出数据同样要使用 printf() 函数,输出不同的整型数据需应用不同的格式字符,如下表所示。

格式控制符 说明
%c 输出一个单一的字符
%hd、%d、%ld、%lld 以十进制、有符号的形式输出 short、int、long、long long 类型的整数
%hu、%u、%lu、%llu 以十进制、无符号(unsigned)的形式输出 short、int、long、long long 类型的整数
%ho、%o、%lo、%llo 以八进制、不带前缀、无符号的形式输出 short、int、long、long long 类型的整数
%#ho、%#o、%#lo、%#llo 以八进制、带前缀、无符号的形式输出 short、int、long、long long 类型的整数
%hx、%x、%lx、%llx
%hX、%X、%lX、%llX
以十六进制、不带前缀、无符号的形式输出 short、int、long、long long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%#hx、%#x、%#lx、%#llx
%#hX、%#X、%#lX、%#llX
以十六进制、带前缀、无符号的形式输出 short、int、long、long long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。

表格中飘绿的格式控制符,都是 C99 标准新引入的。

具体代码如下:
#include<stdio.h> 
int main()             
{
    short sh = 200; //定义短整型数据
    long lo = 65537; //定义长整型数据
    int in=30000; //定义整型数据
    printf(“短整型数据是:%hd\n”,sh); //输出短整型数据
    printf(“整型数据是:%d\n”, in); //输出整型数据
    printf(“长整型数据是:%ld\n”, lo); //输出长整型数据
    return 0;          
}
运行结果为:

短整型数据是:200
整型数据是:30000
长整型数据是:65537

C语言浮点型

生活中,我们买东西时常常会收到购物小票,购物小票上的数字(如 11.97、0.238 等)都是带小数点的数字,数学中称这类数字为小数。

在 C语言中,小数的类型为浮点型,也称实型。

声明浮点型数据

C语言中将浮点型数据分为单精度数据、双精度数据以及长双精度数据,下面分别介绍。

1) 单精度数据

单精度数据使用的关键字是 float,它在内存中占 4 个字节,取值范围是 4.4×10^-38~4.4×10^38,包含正负号。

声明单精度数据的格式为:
float 标识符;
上述代码表示该标识符是单精度类型。例如要定义一个变量 fruit:
float fruit; /*定义单精度类型变量*/

定义多个单精度类型变量,示例代码如下:
float apple; /*定义多个单精度类型变量*/
float vagetable;
float row;
或者
float apple, vagetable,row; /*定义多个单精度类型变量*/

2) 双精度数据

双精度数据使用的关键字是 double,它在内存中占 8 个字节,取值范围是 1.7×10^308~1.7×10^308,包含正负号。

声明双精度数据的格式为:
double 标识符;
上述代码表示该标识符是双精度类型。例如要定义一个变量 dDouble:
double dDouble; /*定义双精度类型变量*/
定义多个双精度类型变量,示例代码如下:
double apple; /*定义多个双精度类型变量*/
double vagetable;
double row;
或者
double apple, vagetable,row; /*定义多个双精度类型变量*/

3) 长双精度数据

长双精度数据使用的关键字是 long double,它在内存中占 16 个字节,声明长双精度数据的格式如下:
long double 标识符;
上述代码表示该标识符是长双精度类型。例如要定义一个变量 ldDouble:
long double ldDouble; /*定义长双精度类型变量*/

定义多个长双精度类型变量,示例代码如下:
long double apple; /*定义多个长双精度类型变量*/
long double vagetable;
long double row;
或者
long double apple, vagetable,row; /*定义多个长双精度类型变量*/
float 表示单精度浮点数,double 表示双精度浮点数。双精度浮点数是可以精确到小数点后 16 位的,从精确度方面来说,双精度浮点数要比单精度浮点数更精确。开发者可以根据自己的需要,合理选择这两种类型。

初始化浮点型变量

初始化浮点型变量,就是为浮点型变量赋值。

初始化浮点型变量有两种方式,一种是直接在声明时初始化变量,例如:
float fFloat = 8.88f; // 定义浮点型变量 fFloat 并赋值
double dDouble = 99.9; // 定义浮点型变量 dDouble 并赋值
long double ldDouble = 5.21e-3L; // 定义浮点型变量 ldDouble 并赋值

另一种是先声明变量,再赋值,例如:
float fFloat; //定义浮点型变量fFloat
double dDouble; //定义浮点型变量dDouble
long double ldDouble; //定义浮点型变量ldDouble
fFloat=8.88f; //给变量fFloat赋值
dDouble=99.9; //给变量dDouble赋值
ldDouble=5.21e-3L; //给变量ldDouble赋值
以上赋值方式效果都是一样的。

在编写浮点型常量时,可以在常量的后面加上符号 F 或者 L 进行修饰:
例如:
float fFloat=5.19e2F; /*单精度类型*/
long double LdDouble=4.354e-3L; /*长双精度类型*/
如果不在后面加上后缀,在默认状态下,浮点型常量为双精度类型(double);在常量后面添加的后缀不区分大小写,大小写是通用的。

输出浮点型数据

想要输出浮点型数据,修改 printf() 函数的格式字符即可。printf() 函数输出浮点型数据的格式字符如下表所示。

格式控制符 说明
%f、%lf、%Lf 以十进制的形式输出 float、double、long double 类型的小数
%e、%le、%Le
%E、%lE、%LE
以指数的形式输出 float、double、long double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g、%lg、%Lg
%G、%lG、%LG
以十进制和指数中较短的形式输出 float、double、long double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。

例如输出不同的浮点型数据,主要代码如下:
#define __USE_MINGW_ANSI_STDIO 1
#include <stdio.h>
int main(){
   float fFloat = 8.88f;                     //定义单精度类型变量fFloat并赋值
   double dDouble = 9.99;                   //定义双精度类型变量dDouble并赋值
   long double ldDouble = 5.12e-2;          //定义长双精度类型变量ldDouble并赋值
   printf("单精度数是:%f\n",fFloat);         //输出单精度类型变量值
   printf("双精度数是:%lf\n", dDouble);       //输出双精度类型变量值
   printf("长双精度数是:%Lf\n", ldDouble);    //输出长双精度类型变量值
   return 0;
}
运行结果如下:

单精度数是:8.880000
双精度数是:9.990000
长双精度数是:0.051200

由输出结果可知,double 和 float 类型没有什么区别,但是在计算机内存分配上,两者是有区别的,因为这两种类型的取值范围是不同的,所占的字节数也不同。

C语言字符型

在 C语言中,将单个的字母、数字、符号用单引号标识,例如 'a'、'b'、'0'、'!',这样的数据被称为字符型数据。字符型数据在内存空间中占一个字节。声明字符型数据使用的关键字是 char。

声明字符型数据

char 是 character 的缩写,character 的中文含义是字符。可以使用 char 来修饰字符型数据。

定义字符型数据的格式如下:
char 标识符;
上述代码表示这个标识符是字符型的,例如,要定义一个字符型变量 name,代码如下:
char name; /*定义一个字符型变量*/

定义多个字符型变量,示例代码如下:
char name; /*定义多个字符型变量*/
char sex;
char address;
或者
char name, sex, address; /*定义多个字符型变量*/

初始化字符型变量

初始化字符型变量的方式与前面介绍的整型变量和浮点型变量类似,例如:

1) 一个字符型变量的赋值

第一种方式是直接在声明时初始化变量,例如:
char name='g'; //定义字符型变量name并赋值

第二种方式是先声明变量,再赋值,例如:
char name; //定义字符型变量name
name= 'g'; //给变量name赋值

2) 多个字符型变量的赋值

第一种方式,例如:
char alpha='e', number='3', symbol='*'; /*定义多个字符型变量并赋值*/

第二种方式,例如:
char alpha; /*定义多个字符型变量再赋值*/
char number;
char symbol;
alpha ='e';
number ='3';
symbol ='*';
或者:
char alpha; /*定义多个字符型变量再赋值*/
char number;
char symbol;
alpha='e', number ='3', symbol ='*';

输出字符型数据

输出语句依然使用 printf() 函数,想要输出字符型数据,对应修改 printf() 的格式字符即可。

printf() 函数输出字符型数据的格式字符如下表所示。

格式控制符 说明
%c 输出一个单一的字符
%s 输出一个字符串

输出字符的主要示例代码如下:
char cChar1 = 'h', cChar2 = '2'; // 定义字符变量
printf("%c%c", cChar1, cChar2);
运行结果如下:

01 h2


字符型数据在内存中存储的形式是字符的 ASCII,即一个无符号整数,与整数的存储形式一样,因此 C语言允许字符型数据与整型数据通用。例如:
char cChar1; /*字符型变量cChar1*/
char cChar2; /*字符型变量cChar2*/

cChar1='a'; /*为变量赋值*/
cChar2=97;

printf("%c\n",cChar1); /*输出变量cCharl,其中%c是输出格式说明*/
printf("%c\n",cChar2); /*输出变量cChar2*/
上面的代码中,首先定义两个字符型变量,在为两个变量赋值时,对一个变量赋值 'a',而对另一个赋值 97。最后输出结果都是字符 a。

相关文章