c语言学习笔记

常量和变量

● 常量包括:1:整形常量

                      2:实型常量

                      3:字符常量:① 普通字符 ② 转义字符

                      4:字符串常量

                       注意:单撇号内只能包含一个字符,双撇号内可以包含一个字符串

                      5:符号常量 :用#define 指令,指定用一个符号名称代表一个变量

                       注意: 区分符号常量和变量,符号常量不占内存只是一个临时符号,在预编译后这个符号就不存在了,故不能对符号常量赋以新值。为与变量名区别,习惯上符号常量用大写表示。

●变量包括:   

                      注意:区分变量名和变量值,变量名实际上是以一个名字代表的一个存储地址。对程序编译链接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。

● 常变量:如:const int a=3; 表示a被定义为一个整形变量,指定其值为3,而且在变量存在的期间其值不能改变。

● 标识符:     用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。

                       注意:C语言规定标识符只能由字母、数字和下划线3种字符组成。且第一个字符必须是字母或下划线。      

●数据类型:

                   计算机中为什么要指定变量的类型呢?

                                答:在数学中,数值是不分类型的,数值的运算时绝对精确的。但是在计算机中是不一样的,因为,在计算机中数据是存放在存储单元中的,它是具体存在的,不可能存放“无穷大”的数,也不能存放循环小数。所以必须指定变量的具体类型,从而有一定的有效位限制。    

                  ●整型数据:

                                    ●基本整形(int型):编译系统给int型数据分配两个字节或者4个字节(具体由编译系统自行决定),

                                                                       int型在存储单元中的存储方式是:用整数的补码形式存放。对于正数,补码和原码是一样的;负数补码的求法:先求出该负数绝对值的补码,然后整体按位取反,然后加1。

                                                             注意:如果给整型变量分配了两个字节,即该整型变量所取的数值范围为:10000000 00000000 ~ 01111111 11111111;也就是说-32768 ~ 32767 。如果超出该范围则会溢出。分配4个字节同理。

                                     ●短整型(short int):系统分配短整型类型2个字节,存储方式和int型一致,即取值范围为-3276类型8 ~ 32767。

                                     ●长整型(long int ):系统分配长整型类型4个字节,存储方式和int型一致。

                                     注意:c标准没有具体规定各种类型数据所占用存储单元的长度,这是由个编译系统自行决定的。C标准只要求Long类型数据不短于int型,short型不长于int型。

                                     ●由于实际中常常表示的情况只存在正数,没有负数情况,所以为了充分利用取值范围,可以将变量定义为“无符号”类型。即在类型前面加一个unsigned。此时由于第一位不再表示符号位,所以一般的无符号类型的取值范围是有符号类型取值范围的两倍。

                                      注意:1:只有整形(包括字符型)数据可以加signed或unsigned修饰符,实型数据不能加。

                                                 2:对无符号整形数据用“%u”表示用无符号十进制的格式输出,有符号整形数据“%d”

                                                 3:不能对无符号变量赋值负值,否则会得到错误的结果    

                                      典型例子:unsigned short price= -1;

                                                         printf("%d\n",price);

                                                        结果会得到输出结果为65535。显然结果是错误的

                                                        具体分析:系统会将-1的补码存放进变量price当中,由于补码全部为1,另外无符号整型变量首位表示数据值,即结果为65535。

                     ●字符型数据 :字符是按其代码(整数)形式存储的,C99把字符型数据作为整数类型的一种。

                                             基本所有的字符的ASCII代号码都可以用7个二进制位表示,所以在C中,指定用一个字节(8位)存储一个字符(所有的系统都不例外)。此时,字节中的第一位都为0。

                                       注意:字符‘1’ 和整数1是不同的概念,字符‘1’只代表一个形状为‘1’的符号,在需要时按照原样输出,内存中占一个字节。但是整数1内存中占2个或者4个字节。

                                  ● 实数是以指数形式存放在存储单元中的。

                                  ● float型(单精度浮点型) 系统为其分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。

                                    注意:在4个字节中,究竟多少位表示小数位,多少位表示指数部分,C标准并没有具体规定,有编译系统自定。float型数据能得到6位有效数字。

                                  ●double型(双精度浮点型):分配8个字节。可以得到15位有效数字。

                                  ●long double型(长双精度):分配16个字节。

                                  ●C编译系统吧浮点型常量都按双精度处理,分配8个字节,一般可以在常量的末尾加专用字符,强制指定常量的类型。

                                  ●运算符++和--只能用于变量,而不能用于常量。

                                  ●printf("x1= %7.2f\nx2=%7.2f\n", x1,x2);   表示输出x1和x2,指定数据占7列,其中小数部分占2列。输出x1之后换行输出x2。并不是任何时候都需要输出6位有效位数,可以灵活控制。

                                    printf("%5d",12);  表示指定输出数据占5列。输出的数据显示在此5列区域的右侧。

                                    printf("%-m.nf"); 作用和没加符号一样,但是当数据长度不超过m是,数据向左靠,右端补空格。

                                   注意:一个双精度数只能保证15位有效数字的精确度,即使指定小数位数为50,也不能保证输出的50位都是有效的数字。其他同理。

                                   注意: 在使用getchar()函数时,键盘输入的数据先是存放在缓冲区当中,当按下ENTER键时才将前面的数据一一赋值给相应的变量。如果输入一个字符就按一下ENTER键,结果就是系统会默认的把回车符号赋给第二个变量。从而造成输出结果错误。

                              

 

 

                                       (未完待续)

 

                                 

                                                                            

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值