1、 0X+数字部分以0X或0x为前缀,由0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F组成,没有小数部分整数可以加后缀: u U无符号后缀l L长整数后缀几个long整数常量的格式如下:/*长十进制常量*/ 10L、79L/*长八进制常量*/ 012L0115L/*长十六进制常量*/ 0xaL、0X4fL /*无符号长十进制常量*/ 776745UL、778866LU2. 实型常量浮点数的表示方法一个“浮点数常量”是一个表示带符号实数的十进制数。十进制小数形式:定点数指数形式:包括一个整数部分、一个小数部分和一个指数。 整数部分+小数部分+指数部分指数部分
2、以E或e开头,紧跟一整数,表示E前面的数值乘以10的多少次幂。15.751.575E1 /*=15.75*/1575e-2 /*=15.75*/-2.5e-3 /*=-0.0025*/25E-4 /*=0.0025*/实型常数分类:单精度(float) 4字节 双精度(double) 8字节 长精度(long double) 8字节在VC下,不区分双精确度和长精确度数。3字符常量普通字符常量字符常量是由可表示字符集中单个字符由单引号()括起来构成的。例2.1 查看字符的ASCII码值,并用字符参加算术运算。%c: %d n,a);A%d n+程序运行输出:a:97A:65162转义字符常量格式
3、:ascii字符这里表示转义,取消字符的原有含义,其后面的字符与”一起被处理成一个字符,在内存中占用一个字节。转义序列 表示a 响铃(警告)b 退格符(backspace键)f 换页n 换行r 回车t 水平制表(tab键)v 垂直制表 单引号 双引号 反向斜杠? 文字问号0 空字符nnn 八进制表示的ASCII字符 (注: nnn为三位八进制数=一字符的ascii码值)xhh 十六进制表示的ASCII字符 hh为二位十六进制数=一字符的ascii码值)例1:查看转义字符的ASCII码值。%s : %0xn,nnttrr%c : %dnx41x42 例2 大小写字母转换。从上面的例可知,大小写字
4、母的ASCII码值相差32,即:大写字母的ASCII码值=小写字母的ASCII码值-32小写字母的ASCII码值=大写字母的ASCII码值+32%cn+32);b-32);ab:B4.符号常量(文字常量)符号常量用标识符来表示一个常量,该常量称为符号常量,在C中用预处理命令#define来定义,如: #define PI 3.14159265符号常量的使用。#define pi 3.141592625 double x; x=3*pi;%f n,x);5.字符串常量字符串常量是用双引号(“”)括起来的字符序列。字符串常量用于表示以空字符0(ascii码值=0的字符)结尾的字符串的字符序列。注意
5、:”a”和a代表不同的含义。”a”和a所占用的字节数。a,sizeof();,sizeof(char)21字符常量的加、减运算。iostream.h%dnmp+1);/ printf(m+p/错2.3 变量及其类型2.3.1 什么是变量变量变量具有三个基本要素:变量名、数据类型、值。1. 变量的名字变量名是变量所分配的存储单元的符号地址。C规定标识符只能同字母、数字和下划线组成,且第一个字符必须是字母或下划线。例如:sum、average、total、month、Student_name变量不能使用系统的关键字(保留字)2. 定义变量在C中变量必须先定义后使用。定义格式:类型 变量名=初值;
6、类型 变量名表; int a,b,c; double x,y,z; int size=100;float a,b,c,d,e;int n=3,m=5,k=7;char c1=a,c2=b,c3=c;定义的关键是说明变量的类型。变量存储的数据类型规定该变量在内存中分配的字节数。3. 为变量赋初值变量的值有两种,一种是存放的数据值,另一种是在内存中所分配的存储单元的地址。 int c; c=7;,c);,sizeof(c);%0xn,&c);运行结果:7 /数据值4 /占用的字节数12ff7c /分配存储单元的地址值4整数在内存中的存储情况int (基本整型)在VC下,占用4个字节,最高位为符号位
7、最高为0,该数为正数,以后各位是该数的值最高为1,该数为负数,以后各位是该数的补码值short int(短整型)在VC下,占用2个字节,最高位为符号位+7: 0000 0000 0000 0111-7: 1111 1111 1111 1001 long int(长整型)无符号型没有符号位,所有各位均为数值位例2.1 short int x=-1; unsigned short y=x;%d,%d,%un,x,(short)y,y);-1,-1,65535不同类型的变量都有其存储数的范围,超过范围,输出的结果是错的。 short int x=32767; x=x+2;x=-32767若用两个字节
8、的二进制数书写程序中的加法运算:0111 1111 1111 1111+0000 0000 0000 0010 1000 0000 0000 0001两正数相加,得一负数,即-111 1111 1111 1111的补码,运算溢出。字符型在VC下,占用一个字节,存储字符的ASCII码,是0-255的整型数5指向基本数据类型的变量的指针变量一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4个字节,字符量占1个字节等。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。内存单元的编号或地址址称为指针,这样变量的地址也称为该变量的指针。
9、变量与指针变量的指针就是变量的地址。在语言中,允许用一个变量来存放指针,这种变量称为指针变量。一个指针变量的值就是某个变量的地址或称为某变量的指针。定义指针变量对指针变量的定义包括三个内容:指针类型说明,即定义变量为一个指针变量;指针变量名;变量值(指针)所指向的变量的数据类型。其一般形式为:数据类型符 * 变量名;int * p1;再如:int * p2; /p2是指向整型变量的指针变量 float * p3; /p3是指向浮点变量的指针变量char *p4; /p4是指向字符变量的指针变量C中指针类型的变量占用4个字节的存储空间,这与指针所指向的数据类型无关,因为存储的都是变量地址类型的数
10、据。int main()%d,%d,%dn,sizeof(int *),sizeof(double *),sizeof(char *); return 0;4,4, 4指针变量的初始化要用变量的地址: int i=200;int * pi= & i;引用指针变量两个有关的运算符:1)&:取地址运算符。2)*:指针运算符(或称“间接访问” 运算符)。语言中提供了地址运算符&来提取变量的地址。形式为: &变量名;a表示变量a的地址b表示变量b的地址。变量本身必须预先说明。指针变量的赋值指针变量名=&变量名;(1)指针变量初始化的方法 int a; int *p=&a;(2)赋值语句的方法 int
11、*p; p=&通过指针变量访问所指向的变量*指针变量名可以通过指针变量ip间接访问变量i,例如: x=*ip;改变指针变量的地址值。设:int i,j,*p1,*p2; i=; j=p1=&i;p2=&j;如执行赋值操作:p2=p1;如果执行操作: *p2=*p1; /等价于执行”j=i;”指针变量可出现在表达式中。int x,y,*px=&x;指针变量px指向整数x,则*px可出现在x能出现的任何地方。例如:y=*px+5; /表示把x的内容加5并赋给yy=+*px;/+*px相当于+(*px)y=*px+;/*相当于y=*px; px+ 2.4 运算符和表达式2.4.1 C运算符简介算术运
12、算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。关系运算符用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。逻辑运算符用于逻辑运算。包括与(&)、或(|)、非(!)三种。位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。赋值运算符用于赋值运算,分为:简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,下标运算符用于通过索引号引用数组中的元素()。函数调用算符圆括号运算符用于说明该标识符为函数并
13、提供参数表()。%d %d %dn,20%7,-20%7,20%-7);6 -6 6输出都是余数。2.4.4 各类数值型数据之间的混合运算变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。1.自动转换遵循以下规则1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2)转换按数据长度(占用的字节数)增加的方向进行,以保证精度不降低。3)值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。下图表示了类型自动转换的规则。 float PI=3.14159f,ss;
14、int s,r=5; ss=r*r*PI; s=r*r*PI;s=%dn,s);ss=%fn,ss);s=78ss=78.5397492. 强制类型转换(数据类型)表达式功能:返回指数据类型的表达式值 int i=100,j=40; float f,ff; f=i/j; ff=(float)i/j; /强制转换 f=%fn,f);ff=%fn,ff);f=2.000000ff=2.5000002.4.5 自增和自减运算符自增1运算符记为“+”,其功能是使变量的值自增1。自减1运算符记为“-”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式:+i i自
15、增1后再参与其它运算。-i i自减1后再参与其它运算。i+ i参与运算后,i的值再自增1。i- i参与运算后,i的值再自减1。+和-运算只能用于变量,而不能用于常量和表达式。如5+和(a+b)+都是不合法的。+和-运算的结合方向是“自右至左”,即按右结合进行运算。 int i=3; int a=-i+;a=%d i=%in,a,i);a=-3 i=4结果说明:程序先执行“a=-i”,后执行”i+”,而不是”(-i)+”,不能对表达式(-i)进行+运算。 int i=8;%d ,+i);,i);,-i);,i+);,i-);,-i+);,-i-); int i=5,j=5,p,q; p=(i+)
16、+(i+)+(i+); q=(+j)+(+j)+(+j);%d %d %d %dn,p,q,i,j);2.4.6 赋值运算符与赋值表达式1. 赋值运算符一个赋值运算把右边操作数的值赋给左边操作数命名的存储位置。因此,一个赋值运算的左边操作数必须是可修改的L(左值)。a=3; a=a+2;L(左)值和R(右)值表达式的概念L值指的是存储器位置的表达式称为“L值”表达式。R值用于描述一个表达式的值,所有的L值都是R值,但R值不都是L值。i=7; /正确 变量名i是一个L值7=i; /错误 常量7是一个R值j*4=7; /错误 表达式j*4产生一个R值const int ci=7; /说明一个con
17、st变量(只读变量)ci=9 /错,ci是不可修改的l值(i3) ? i:j )=7; /错,条件运算返回的是变量的值2. 赋值过程中的类型转换赋值转换:当左值类型与右值类型不一致时,系统强制把右值转换为左值的类型,并在赋值发生后把该值存储在左边操作数中。 int i=5.75;i=%dni=5 float f=5;double ff=5;单步运行可观察到两浮点变量存储的值: double d=123.456789e100; f=d; /溢出,f没有能存储正确的值 单步运行: int c=c=%dnc=97 int i=0x7fffff4a; short s=0x7f4a; long l=0x
18、7fffff4a; char c1=i;char c2=s;char c3=l;单步运行程序:例: 将有符号数据传送给无符号变量。 short b=-1; unsigned short a=b;%d %0xn,a,a);,b,b);65535 ffff /高位的0没有显示-1 ffffffff /按int型显示3. 复合的赋值运算复合赋值运算符组合简单赋值运算符和其它双目运算符。expression1+=expression2可以理解为expression1=expression1+expression2一个复合赋值运算符的操作数必须是整数或浮点类型。复合赋值运算符:*= 乘法赋值/= 除法赋
19、值%= 余数赋值+= 加法赋值-= 减法赋值= 左位移赋值= 右位移赋值= 按位与(AND)赋值= 按位异或(XOR)赋值|+ 按位或(OR)赋值main() int a=5; int b=5; a*=2; b+=5;%d %dn,a,b); a=b; return 1;10 100 104. 赋值表达式赋值运算符构成的“变量名=表达式”结构是一个表达式,称为赋值表达式,其“运算”结果为向左边的变量所赋的值。 int a=0;,a,a=b);5 5在printf函数的表达式表中,计算顺序是自右至左。赋值运算是“自右而左”的结合顺序,即在程序中可以连续用一个数据对多个变量赋值:”a=b=c=5;”,等价于”a=(b=(c=5);”: a=b=c=5;,a,b,c); a=(b=(c=10);5 5 510 10 10 赋值表达式可以包含复合赋值运算符。 int a=5,b=5; a+=a-=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1