C Primer Plus(三)---数据和C

C Primer Plus(三)—数据和C

《C Primer Plus》第三章学习笔记



变量与常量数据

常量:在整个程序的运行过程中没有变化
变量:其他数据类型在程序运行期间可能会改变或被幅值

数据:数据类型关键词

最初K&Rge给出的关键字C90标准添加的关键字C99标准添加的关键字
intsigned_Bool
longvoid_Complex
short_Imaginary
unsigned
char
float
double
整数类型:int 及long、short、unsigned、signed 提供的变式 字符类型:char --用于指定字母和其他字符,以及表示较小的整数 小数:float、double、long double 布尔值:\_Bool ---true、false 复数:\_Complex 虚数:\_Imaginary

按计算机存储方式可以分为两大基本类型:整数和浮点数

整数:
整数是没有小数部分的数。计算机以二进制数字存储整数

浮点数:
在一个值后面加上一个小数点,该值就成为一个浮点值
浮点数存储方案:计算机把浮点数分成小数部分和指数部分来表示,而且分开存储这两部分

整数和浮点数的区别:

  1. 整数没有小数部分,浮点数有小数部分
  2. 浮点数可以表示的范围比整数大
  3. 对于一些算数运算(如,两个很大的数相减),浮点数损失的精度更多
  4. 因为在任何区间内都存在无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的计算值
  5. 在有浮点处理器之前,浮点运算比整数运算慢

C语言基本数据类型

int类型

int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。
ISO C规定int的取值范围最小为-32768~32767 。一般而言,系统用一个特殊位的值表示有符号整数的正负号。

1. 声明int变量

要声明多个变量,可以单独声明每个变量,也可在int后面列出多个变量名,变量名之间用逗号分隔。

变量如何获得值?

  1. 赋值
  2. 通过函数获得(scanf())
  3. 初始化

2.初始化变量

初始化变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成,只需在变量名后面加上幅值运算符(=)和待赋给变量的值即可。

3.int类型常量

C语言把不含小数点和指数的数作为整数

4.打印int值

–注意:使用printf()函数时,要确保转换说明的数量与待打印值的数量相等

5.八进制和十六进制

C语言都假定整型常量是十进制数。
0x或0X前缀表示十六进制值
0前缀表示八进制

—使用不同的进制数是为了方便,不会影响数被储存的方式

6.显示八进制和十六进制

在C语言中,可以使用和显示不同进制的数。不同的进制要使用不同的转换说明。以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。
另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。

其他整数类型

C语言提供3个附属关键字修饰基本整数类型:short、long、unsigned

  • short int类型(或者简写为short)占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间 —short是有符号类型
  • long int或long占用的存储空间可能比int多,适用于较大数值的场合 —long是有符号类型
  • long long int或long long(C99标准加入)占用的存储空间比long多,适用于更大数值的场合 —该类型至少占64位,long long是有符号类型
  • unsigned int或unsigned只用于非负值的场合。16位unsigned int允许的取值范围是0~65535,用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
  • 在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图

—个人计算机上最常见的设置时,long long占64位,long占32位,short占16位,int占16位或32位(依计算机的自然字长而定)

打印unsigned int类型的值,使用%u转换说明;打印long类型的值,使用%ld转换说明。在x和o前面可以使用l前缀,%lx表示以十六进制格式打印long类型整数,%lo表示以八进制格式打印long类型整数
对于short类型,可以使用h前缀。%hd表示以十进制显示short类型的整数,%ho表示以八进制格式打印short类型的整数

使用字符:char类型

char类型用于储存字符(如,字母或标点符号),char是整数类型。因为char类型实际上储存的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。美国最常用的编码是ASCII编码。

单引号只使用于字符、数字和标点符号,

C语言提供了3种方法表示代表行为的字符:

  1. 使用ASCII码
  2. 使用特殊的符号序列表示一些特殊的字符—转义序列 把转义序列赋给字符变量时,必须用单引号把转义序列括起来
    转义序列表

C标准规定警报字符不得改变活跃位置。标准中的活跃位置指的是显示设备(屏幕、电传打字机、打印机等 )中下一个字符将出现的位置 ---- 屏幕光标位置就是活跃位置。在程序中把警报字符输出在屏幕上的效果是,发出一声蜂鸣,但不会移动屏幕光标
转义字符\b、\f、\n、\r、\t和\v是常用的输出设备控制字符
3个转义序列(\\、\‘、\")用于打印\、’、”字符

无论是普通字符还是转义序列,只要是双引号括起来的字符集合,就无需用单引号括起来。双引号中的字符集合叫做字符串

  1. 用十六进制形式表示字符常量,即反斜杠后面跟一个x或X,再加上1~3位十六进制数字

%c转换说明告诉printf()打印该整数值对应的字符

C编译器把char实现为有符号类型,这意味着char可表示的范围是-128127。C编译器把char实现为无符号类型,那么char可表示的范围是0255

_Bool类型

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false
因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型

可移植类型:stdint.h inttypes.h

C99新增了两个头文件stdint.h 和 inttypes.h
这些新的类型名定义在stdint.h头文件中。例如,int32_t表示32位的有符号整数类型。 ----精确宽度整数类型

对不支持精确宽度整数类型:提供 有指定宽度的最小整数类型 —称为最小宽度类型 e.g. int_least8_t
unitmax_t表示最大的无符号整数类型

float、double和long double

C语言中的浮点类型有float、double和long double

浮点类型能表示包括小数在内更大范围的数。浮点数的表示类似于科学计数法(即用小数乘以10的幂来表示数字)。该记数系统常用于表示非常大或非常小的数

C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10-37~1037
-意味着 float类型必须至少精确到小数点后6位有效数字,如33.333333

double(双精度)。double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字,一般情况下,double占用64位而不是32位

  1. 声明浮点型变量 : 与整型变量声明方式相同

  2. 浮点型变量 : 浮点型常量的基本形式是有符号的数字(包括小数点),后面紧跟e或E,最后是一个有符号数表示10的指数
    一般小数会存储为double类型,在浮点数后面加上f或F后缀可覆盖默认设置,编译器会将浮点型常量看作float类型,使用l或L后缀使得数字称为long double类型

C99标准添加了一种新的浮点型常量格式—用十六进制表示浮点型常量,即在十六进制数前加上十六进制前缀(0x或0X),用p和P分别代表e和E,用2的幂代替10的幂(即,p计数法)。

  1. 打印浮点数 : printf()函数使用%f转换说明打印十进制计数法的float和double类型浮点数,用%e打印指数计数法的浮点数。如果系统支持十六进制格式的浮点数,可用a和A分别代替e和E。 打印long double类型要使用%LF、%Le或%La转换说明

  2. 浮点数的上溢和下溢 : 当计算导致数字过大,超过当前类型能表达的范围时,就会发生上溢。 这种情况下会给toobig赋一个表示无穷大的特定值,而且printf()显示该值为inf或infinity(或者具有无穷含义的其他内容) 计算过程中却损失了原末尾有效位上的数字,这种情况叫做下溢 浮点值NaN(not a number)

复数和虚数类型

C语言有3种复数类型:float_Complex、double_Complex和long double_Complex
例如,float_Complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。
C语言的3种虚数类型是float_Imaginary、double_Imaginary和long double_Imaginary

如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,还可以用I代替-1的平方根

其他类型

C语言还有一些从基本类型衍生的其他类型,包括数组、指针、结构和联合

类型大小

sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11提供%zd转换说明匹配sizeof的返回类型。一些不支持C99和C11的编译器可用%u或%lu代替%zd

基本数据类型总结

关键字:
基本数据类型由11个关键字组成:int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_Imaginary

有符号整型:
有符号整型可用于表示正整数和负整数

  • int – 系统给定的基本整数类型 C语言规定int类型不小于16位
  • short或short int – 最大的short类型整数小于或等于最大的int类型整数 C语言规定short类型至少占16位
  • long或long int – 最大的short类型整数小于或等于最大的int类型整数 C语言规定short类型至少占16位
  • long long或long long int – 该类型可表示的整数大于或等于最大的long类型整数 long long类型至少占64位

无符号整型:
无符号整型只能用于表示零和正整数。因此无符号整型可表示的正整数比有符号整形的大。在整型类型前加上关键词unsigned表示该类型是无符号整型:unsgined int、unsgined long、unsigned short 。 — 单独的unsgined 相当于unsigned int

字符类型:
可打印出来的符号(如A、&和+)都是字符。根据定义,char类型表示一个字符要占用1字节内存。出于历史原因,1字节通常是8位,但是如果要表示基本字符集,也可以是16位或更大。

  • char — 字符类型的关键字。有些编译器使用有符号的char,而有些则使用无符号的char
    在需要时,可在char前面加上关键字signed或unsigned来指明具体使用哪一种类型

布尔类型:
布尔值表示true和false。 C语言用1表示true,0表示false

  • _Bool —布尔类型的关键字。布尔类型是无符号int类型,所占用的控制只要能储存0或1即可

实浮点类型:
实浮点类型可表示正浮点数和负浮点数

  • float —系统的基本浮点类型,可精确表示至少6位有效数字
  • double —存储浮点数的范围(可能)更大,能表示比float类型更多的有效数字(至少10位,通常会更多)和更大的指数
  • long double —存储浮点数的范围(可能)比double更大,能表示比double更多的有效数字和更大的指数

复数和虚数浮点数:
虚数类型是可选的类型。复数的实部和虚部类型都基于实浮点类型来构成:

  • float _Complex
  • double _Complex
  • long double _Complex
  • float _Imaginery
  • double _Imaginery
  • long double _Imaginery

使用数据类型

编写程序时,应注意合理选择所需的变量及类型。通用,用int或float类型表示数字,char类型表示字符

参数和陷阱

函数参数个数要对应

刷新输出

printf()何时把输出发送到屏幕上?
printf()语句把输出发送到一个叫做缓冲区的中间存储区域,然后缓冲区中的内容再不断被发送到屏幕上。

C标准明确规定了何时把缓冲区中的内容发送到屏幕:当缓冲区满、遇到换行字符或需要输入的时候(从缓冲区把数据发送到屏幕或文件被称为刷新缓冲区)

另一种刷新缓冲区的方法是使用fflush()函数

小结:如何声明简单变量

  1. 选择需要的类型
  2. 使用有效的字符给变量起一个变量名
  3. 按以下格式进行声明:
    类型说明符 变量名;
    类型说明符由一个或多个关键字组成
    int erest;
    unsigned short cash;
  4. 可以同时声明相同的多个变量,用逗号分隔各变量名,如下所示:
    char ch,init,ans;
  5. 在声明的同时还可以初始化变量:
    float mass = 6.0E24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值