第二讲 C语言基础Word文档下载推荐.docx
《第二讲 C语言基础Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第二讲 C语言基础Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
0X+数字部分
以0X或0x为前缀,由0123456789abcdefABCDEF组成,没有小数部分
◇整数可以加后缀:
uU——无符号后缀
lL——长整数后缀
几个long整数常量的格式如下:
/*长十进制常量*/10L、79L
/*长八进制常量*/012L0115L
/*长十六进制常量*/0xaL、0X4fL
/*无符号长十进制常量*/776745UL、778866LU
2.实型常量——浮点数的表示方法
一个“浮点数常量”是一个表示带符号实数的十进制数。
十进制小数形式:
定点数
指数形式:
包括一个整数部分、一个小数部分和一个指数。
整数部分+小数部分+指数部分
指数部分以E或e开头,紧跟一整数,表示E前面的数值乘以10的多少次幂。
15.75
1.575E1/*=15.75*/
1575e-2/*=15.75*/
-2.5e-3/*=-0.0025*/
25E-4/*=0.0025*/
实型常数分类:
单精度(float)4字节
双精度(double)8字节
长精度(longdouble)8字节
◇在VC下,不区分双精确度和长精确度数。
3.字符常量
⑴普通字符常量
字符常量——是由可表示字符集中单个字符由单引号(′′)括起来构成的。
例2.1查看字符的ASCII码值,并用字符参加算术运算。
%c:
%d\n"
'
a'
);
A'
%d\n"
+'
程序运行输出:
a:
97
A:
65
162
转义字符常量
格式:
\ascii字符
这里"
\"
表示转义,取消字符的原有含义,其后面的字符与”\”一起被处理成一个字符,在内存中占用一个字节。
转义序列表示
\a响铃(警告)
\b退格符(backspace键)
\f换页
\n换行
\r回车
\t水平制表(tab键)
\v垂直制表
\′单引号
双引号
\\反向斜杠
\?
文字问号
\0空字符
\nnn八进制表示的ASCII字符
(注:
nnn为三位八进制数=一字符的ascii码值)
\xhh十六进制表示的ASCII字符
hh为二位十六进制数=一字符的ascii码值)
例1:
查看转义字符的ASCII码值。
%s:
%0x\n"
"
\\n"
\n'
\\t"
\t'
\\r"
\r'
%c:
%d\n"
\x41'
\x42'
例2大小写字母转换。
从上面的例可知,大小写字母的ASCII码值相差32,即:
大写字母的ASCII码值=小写字母的ASCII码值-32
小写字母的ASCII码值=大写字母的ASCII码值+32
%c\n"
+32);
b'
-32);
a
b:
B
4.符号常量(文字常量)
符号常量——用标识符来表示一个常量,该常量称为符号常量,在C中用预处理命令#define来定义,如:
#definePI3.14159265
符号常量的使用。
#definepi3.141592625
doublex;
x=3*pi;
%f\n"
x);
5.字符串常量
字符串常量——是用双引号(“”)括起来的字符序列。
字符串常量用于表示以空字符’\0’(ascii码值=0的字符)结尾的字符串的字符序列。
注意:
”a”和’a’代表不同的含义。
”a”和’a’所占用的字节数。
a"
sizeof("
));
sizeof((char)'
2
1
字符常量的加、减运算。
iostream.h>
%d\n"
m'
p'
+1);
//printf("
m"
+"
p"
//错
2.3变量及其类型
2.3.1什么是变量
变量
变量具有三个基本要素:
变量名、数据类型、值。
1.变量的名字
变量名是变量所分配的存储单元的符号地址。
C规定标识符只能同字母、数字和下划线组成,且第一个字符必须是字母或下划线。
例如:
sum、average、total、month、Student_name
变量不能使用系统的关键字(保留字)
2.定义变量
在C中变量必须先定义后使用。
定义格式:
类型变量名[=初值];
类型变量名表;
inta,b,c;
doublex,y,z;
intsize=100;
floata,b,c,d,e;
intn=3,m=5,k=7;
charc1=‘a’,c2=‘b’,c3=‘c’;
定义的关键是说明变量的类型。
变量存储的数据类型规定该变量在内存中分配的字节数。
3.为变量赋初值
变量的值有两种,一种是存放的数据值,另一种是在内存中所分配的存储单元的地址。
intc;
c=7;
c);
sizeof(c));
%0x\n"
&
c);
运行结果:
7//数据值
4//占用的字节数
12ff7c//分配存储单元的地址值
4.整数在内存中的存储情况
⑴int(基本整型)
在VC下,占用4个字节,最高位为符号位
最高为0,该数为正数,以后各位是该数的值
最高为1,该数为负数,以后各位是该数的补码值
⑵shortint(短整型)
在VC下,占用2个字节,最高位为符号位
+7:
0000000000000111
-7:
1111111111111001
⑶longint(长整型)
⑷无符号型
没有符号位,所有各位均为数值位
例2.1
shortintx=-1;
unsignedshorty=x;
%d,%d,%u\n"
x,(short)y,y);
-1,-1,65535
不同类型的变量都有其存储数的范围,超过范围,输出的结果是错的。
shortintx=32767;
x=x+2;
x=-32767
若用两个字节的二进制数书写程序中的加法运算:
0111111111111111
+0000000000000010
1000000000000001
两正数相加,得一负数,即-111111111111111的补码,运算溢出。
⑸字符型
在VC下,占用一个字节,存储字符的ASCII码,是0-255的整型数
5.指向基本数据类型的变量的指针变量
◆一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4个字节,字符量占1个字节等。
◆根据一个内存单元的编号即可准确地找到该内存单元。
内存单元的编号也叫做地址。
◆内存单元的编号或地址址称为指针,这样变量的地址也称为该变量的指针。
⑴变量与指针
◆变量的指针就是变量的地址。
◆在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
◆一个指针变量的值就是某个变量的地址或称为某变量的指针。
⑵定义指针变量
对指针变量的定义包括三个内容:
①指针类型说明,即定义变量为一个指针变量;
②指针变量名;
③变量值(指针)所指向的变量的数据类型。
其一般形式为:
数据类型符*变量名;
int*p1;
再如:
int*p2;
//p2是指向整型变量的指针变量
float*p3;
//p3是指向浮点变量的指针变量
char*p4;
//p4是指向字符变量的指针变量
C中指针类型的变量占用4个字节的存储空间,这与指针所指向的数据类型无关,因为存储的都是变量地址类型的数据。
intmain()
%d,%d,%d\n"
sizeof(int*),sizeof(double*),sizeof(char*));
return0;
4,4,4
指针变量的初始化要用变量的地址:
inti=200;
int*pi=&
i;
⑶引用指针变量
两个有关的运算符:
1)
&
:
取地址运算符。
2)
*:
指针运算符(或称“间接访问”运算符)。
C语言中提供了地址运算符&
来提取变量的地址。
形式为:
&
变量名;
a表示变量a的地址
b表示变量b的地址。
变量本身必须预先说明。
指针变量的赋值
指针变量名=&
变量名;
(1)指针变量初始化的方法
inta;
int*p=&
a;
(2)赋值语句的方法
int*p;
p=&
通过指针变量访问所指向的变量
*指针变量名
可以通过指针变量ip间接访问变量i,例如:
x=*ip;
改变指针变量的地址值。
设:
inti,j,*p1,*p2;
i='
;
j='
p1=&
i;
p2=&
j;
如执行赋值操作:
p2=p1;
如果执行操作:
*p2=*p1;
//等价于执行”j=i;
”
◆指针变量可出现在表达式中。
intx,y,*px=&
x;
指针变量px指向整数x,则*px可出现在x能出现的任何地方。
例如:
y=*px+5;
//表示把x的内容加5并赋给y
y=++*px;
//++*px相当于++(*px)
y=*px++;
//*相当于y=*px;
px++
2.4运算符和表达式
2.4.1C运算符简介
⑴算术运算符
用于各类数值运算。
包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。
⑵关系运算符
用于比较运算。
包括大于(>
)、小于(<
)、等于(==)、大于等于(>
=)、小于等于(<
=)和不等于(!
=)六种。
⑶逻辑运算符
用于逻辑运算。
包括与(&
)、或(||)、非(!
)三种。
⑷位操作运算符
参与运算的量,按二进制位进行运算。
包括位与(&
)、位或(|)、位非(~)、位异或(^)、左移(<
<
)、右移(>
>
)六种。
⑸赋值运算符
用于赋值运算,分为:
简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&
=,|=,^=,>
=,<
=)三类共十一种。
⑹条件运算符
这是一个三目运算符,用于条件求值(?
)。
⑺逗号运算符
用于把若干表达式组合成一个表达式(,)。
⑻指针运算符
用于取内容(*)和取地址(&
)二种运算。
⑼求字节数运算符
用于计算数据类型所占的字节数(sizeof)。
⑽强制类型转换运算符
用于数据类型的转换((类型))。
⑾成员运行符——分量运算符
用于对象引用其成员(.)。
⑿指向成员运算符——分量运算符
用于通过指向对象的指针访问对象中的成员(->
⒀下标运算符
用于通过索引号引用数组中的元素([])。
⒁函数调用算符——圆括号运算符
用于说明该标识符为函数并提供参数表(())。
%d%d%d\n"
20%7,-20%7,20%-7);
6-66
输出都是余数。
2.4.4各类数值型数据之间的混合运算
变量的数据类型是可以转换的。
转换的方法有两种,一种是自动转换,一种是强制转换。
1.自动转换遵循以下规则
1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2)转换按数据长度(占用的字节数)增加的方向进行,以保证精度不降低。
3)值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。
如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。
下图表示了类型自动转换的规则。
floatPI=3.14159f,ss;
ints,r=5;
ss=r*r*PI;
s=r*r*PI;
s=%d\n"
s);
ss=%f\n"
ss);
s=78
ss=78.539749
2.强制类型转换
(数据类型)表达式
功能:
返回指数据类型的表达式值
inti=100,j=40;
floatf,ff;
f=i/j;
ff=(float)i/j;
//强制转换
f=%f\n"
f);
ff=%f\n"
ff);
f=2.000000
ff=2.500000
2.4.5自增和自减运算符
自增1运算符记为“++”,其功能是使变量的值自增1。
自减1运算符记为“--”,其功能是使变量值自减1。
自增1,自减1运算符均为单目运算,都具有右结合性。
可有以下几种形式:
++ii自增1后再参与其它运算。
--ii自减1后再参与其它运算。
i++i参与运算后,i的值再自增1。
i--i参与运算后,i的值再自减1。
++和--运算只能用于变量,而不能用于常量和表达式。
如5++和(a+b)++都是不合法的。
⑵++和--运算的结合方向是“自右至左”,即按右结合进行运算。
inti=3;
inta=-i++;
a=%di=%i\n"
a,i);
a=-3i=4
结果说明:
程序先执行“a=-i”,后执行”i++”,而不是”(-i)++”,不能对表达式(-i)进行++运算。
inti=8;
%d"
++i);
i);
--i);
i++);
i--);
-i++);
-i--);
inti=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
%d%d%d%d\n"
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值
constintci=7;
//说明一个const变量(只读变量)
ci=9//错,ci是不可修改的l值
((i<
3)?
i:
j)=7;
//错,条件运算返回的是变量的值
2.赋值过程中的类型转换
赋值转换:
当左值类型与右值类型不一致时,系统强制把右值转换为左值的类型,并在赋值发生后把该值存储在左边操作数中。
inti=5.75;
i=%d\n"
i=5
floatf=5;
doubleff=5;
单步运行可观察到两浮点变量存储的值:
doubled=123.456789e100;
f=d;
//溢出,f没有能存储正确的值
单步运行:
intc='
c=%d\n"
c=97
inti=0x7fffff4a;
shorts=0x7f4a;
longl=0x7fffff4a;
charc1=i;
charc2=s;
charc3=l;
单步运行程序:
例:
将有符号数据传送给无符号变量。
shortb=-1;
unsignedshorta=b;
%d%0x\n"
a,a);
b,b);
65535ffff//高位的0没有显示
-1ffffffff//按int型显示
3.复合的赋值运算
复合赋值运算符组合简单赋值运算符和其它双目运算符。
expression1+=expression2
可以理解为
expression1=expression1+expression2
一个复合赋值运算符的操作数必须是整数或浮点类型。
复合赋值运算符:
*=乘法赋值
/=除法赋值
%=余数赋值
+=加法赋值
-=减法赋值
=左位移赋值
=右位移赋值
=按位与(AND)赋值
^=按位异或(XOR)赋值
|+按位或(OR)赋值
main()
inta=5;
intb=5;
a*=2;
b+=5;
%d%d\n"
a,b);
a^=b;
return1;
1010
010
4.赋值表达式
赋值运算符构成的“变量名=表达式”结构是一个表达式,称为赋值表达式,其“运算”结果为向左边的变量所赋的值。
inta=0;
a,a=b);
55
在printf函数的表达式表中,计算顺序是自右至左。
⑴赋值运算是“自右而左”的结合顺序,即在程序中可以连续用一个数据对多个变量赋值:
”a=b=c=5;
”,等价于”a=(b=(c=5));
”:
a=b=c=5;
a,b,c);
a=(b=(c=10));
555
101010
⑵赋值表达式可以包含复合赋值运算符。
inta=5,b=5;
a+=a-=