第2章数据类型定.ppt

上传人:sccc 文档编号:5639911 上传时间:2023-08-05 格式:PPT 页数:90 大小:935.01KB
返回 下载 相关 举报
第2章数据类型定.ppt_第1页
第1页 / 共90页
第2章数据类型定.ppt_第2页
第2页 / 共90页
第2章数据类型定.ppt_第3页
第3页 / 共90页
第2章数据类型定.ppt_第4页
第4页 / 共90页
第2章数据类型定.ppt_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《第2章数据类型定.ppt》由会员分享,可在线阅读,更多相关《第2章数据类型定.ppt(90页珍藏版)》请在三一办公上搜索。

1、例1:main();,复习 简单的C程序介绍,1.main代表主函数.每个c程序有且只有一个主函数.2.函数体是由 括起来的.3.C语言规定分号为语句的结束符,每条语句都用分号结束.4.对于单独一个分号来说也是一条语句,只不过语句部分为空,即空语句,所以例1是包括空语句的C程序.,printf是C语言中的输出函数,功能:将双引号内的字符串原样输出.2.n在C语言中表示换行符,是一个控制字符,表示在输出这条语句后回车换行./*/间的内容作为注释部分,只起到说明的作用,不影响程序的运行.它只是给人看的,可以提高程序的可读性,对编译和运行不起作用,因此注释可以加在程序中的任何位置.,例2:main(

2、)printf(“Its a book!n”);/*输出语句*/,例3:main()int a,b,sum;a=123;b=456;sum=a+b;printf(“sum is%d n”,sum);,4.%d是输入输出“格式字符串”,用来指定数据的类型.%d表示以十进制整数类型输出,在执行输出时,此位置上代以一个十进制整数数值.(其他的格式字符串:%c,%s,%f).5.第一个sum原样输出.第二个sum表示要输出的变量,它的值就是a+b的值(579),而且这个值就会替代%d的位置.6.执行结果:sum is 579,第2章 数据类型、运算符与表达式,2.1 C的数据类型2.2 常量与变量2.

3、3 整型数据2.4 浮点型数据运行2.5 字符型数据,2.1 C的数据类型,数据类型,构造类型,指针类型,空类型(无值类型)void,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由8个二进制位组成每个二进位的值是0或1,数据在内存中的存储形式,数值的表示方法原码、反码和补码原码:最高位为符号位,其余各位为数值本身的绝对值正数:原码、反码、补码相同负数:负数反码:符号位为1,其余位对原码取反负数补码:最高位为1,其余位为原码取反,再对整个数加1,例:int i,j;i=10;j=-10;,对于 int a=8,

4、b=-8;,0 0000000 00001000,符号位:0正数 1负数,1 0000000 00001000,1 1111111 11110111,正数的原码=正数的补码 负数的原码和补码按以下规则相互转换:符号位不变,数值位各位取反得反码,末位加1得补码。,0 0000000 00001000,原码,补码,符号位,数值位,a=810=10002,b=-810=-10002,真值,1 1111111 11111000,注意事项,数据存储形式 字符型按ASCII码存储,其余以补码存储,示意图 字符型(字符a)用一个字节存放该字符的ASCII值(ASCII值表见P374)整 型(十进制数2503

5、7)用两个字节存放该数值的补码 注:第一位均为符号位,01100001,01100001 11001101,2.2 常量与变量标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线(起个1a变量试一下,area,_abc 4dd)大小写敏感(演示:int A,int a;)不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆 如l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,M

6、.D.John,3days,#33,char,$123,ab,二、标识符分类1、关键字:系统已经给(定义)好了,即这个标识符是做什么用的 如:if while 39个关键字。系统已经给定义好了含意,不能再做它用。(演示 int if;)2、预定义标识符:系统也已经给其含义了,即它必须做什么用的。但是我们也可以改作其他的用途。如scanf(),printf()(举例:int scanf=11;printf(scanf=%d”,scanf);系统不提示错误,结果正确。)尽管系统已给定义好了,但我们也可以把它改作其他它用途。但原有的含义将被替代丢失,所以尽量不要更改。3、用户定义标识符:符合标识符的

7、规则即可。,一般用大写字母(小写也对,只是习惯)是宏定义预处理命令,不是C语句,结尾无分号 直接常量:整型常量 实型常量 字符常量 字符串常量,如#define PRICE 30,常量定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量(举例)定义格式:#define 符号常量 常量值,有正负之分,又叫数值型常量,例3.1 符号常量的使用#define PRICE 30#include void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);,说明:程序中用#define命令行定义PR

8、ICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算,说明:用一个标识符代表一个常量的,称为符号常量,即以标识符形式出现的常量。符号常量的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。,说明:如再用赋值语句给PRICE赋值是错误的。PRICE=40;/*错误,不能给符号常量赋值。,运行结果:total=300,整型常量(整常数)三种表现形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0(不是o)开头,后跟数字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xf

9、f(八进制整数、十六进制整数中非法数字,不会提示,只是结果不正确。用一串连续的数字来表示,中间不允许有空格或其它字符如1 234就不对),计算机的逻辑,计算机根本不知道什么是字母、数字、指令或程序,在它的内核只是一些电路,在某个给定的结点要么有很多电路要么几乎没有电。工程师根据计算机的这种特性,用1和0来代表一段电路的真实状态(通电或者断电),计算机所知道的0或者1,其实就是通电时为1,断电为0,而这种简单的逻辑又可以延伸到任何方面,即判断眼下坐在电脑跟前的人“是你,还是不是你?”,如果是你则为1,不是你则为0。,为什么使用十六进制,十六进制由于机器指懂得0和1,而二进制数字又难以阅读,采用一

10、种更简单的方法来表示相同的值,二进制转换为十进制涉及到大量的数的操作,二进制转换为十六进制就简单了。可以将任何长度的一个二进制数,缩减为每4位一组的十六进制数,然后拼在一起就得到十六进制中的结果。而十六进制转换为十进制又非常的简单。这就是汇编语言为什么使用十六进制的原因。,整型常量,整型常量的分类:signed 有符号整型,unsigned无符号整型1)signed 有符号整型A)int:基本整型B)short:短整型C)long:长整型2)unsigned无符号整型A)unsigned int 无符号基本整型B)unsigned short无符号短整型C)unsigned long 无符号长

11、整型,基本数据类型,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,求某一类型数据所占存储字节数,可用运算符:sizeof(类型关键字),Example:main()printf(“char:%d字节n”,sizeof(char);printf(“float:%d字节n”,sizeof(float);,结果显示:char:1字节 float:4字节,可知对不同数据类型占用的存储空间:charshort=intlong=floatdouble,记住int、unsigned int范围,3.3 整型数据存储,例如:整数13在内存中实际存放的情况:,3.3整型数据存储,注意

12、:1)如果一个足够大的数,即使面值在长整型范围内,但数字后未加L,也不可代表长整型数。long i;i=200L;i=32768;2)注意:无符号常量不能表示成小于0的负数。-200u是不合法的。,例 12 与 12L,往往用于函数调用中。如果函数的形参为long int型,则要求实参也为long int型。,整型常量的类型根据其值所在范围确定其数据类型整型数据:计算机默认为有符号整数。在整常量后加字母l或L,认为它是long int 型常量加字母u或U,是unsigned int型,如12345u,在内存 中按unsigned int规定的方式存放(最高位用来存储数据)。长整型无符号整数常量

13、,加“lu”或者是“LU”,例 30000 为int型 65536 为long int 型,举例:Int a,b,c;A=13;b=013;c=0 x13;Printf(“%d,%d,%d”,a,b,c);Printf(“%x,%x,%x”,a,b,c);Printf(“%o,%o,%o”,a,b,c);,不同形式的整数的赋值和输出,结果为:13,11,19 d,b,13 15,13,23,3.整型数据的溢出,整型整数 int 的范围:3276832767Example:#include#include main()int a;printf(“Input:”);scanf(“%d”,运行结果:

14、Input:12345 a=12345 Input:1234567 a=-10617,Why?!,Because:12345的补码是 0011000000111001 1234567的补码是 100101101011010000111 截去多余部份(超过2个字节的左边部分)后 其原码为 1010100101111001(-10617),3.4 浮点型数据,(1)浮点型数据在内存中的存放形式 按照指数形式存储。系统把一个浮点型数据分成小数部分和指数部分,分别存放。采用规范化的指数形式,(2)浮点型数据表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数

15、形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4找错:e3,2.1e3.5注意:一个实数可以有多种指数的表示形式.其中1.23e4称为“规范化的指数形式”,即在字母e/E之前的小数部分中,小数点左边应有一位(且只能有一位)非零数字.,例如:f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数进行相乘运算,得到的乘积也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),编译系统就按单精度处理。,(3)实型常量的类型单精度(float型)、双精度(double型)和长双精

16、度型(long double)三类形式。默认double型在实型常量后加字母f或F,认为它是float型,浮点型数据,(2)浮点型数据的分类 浮点型数据分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。,Double和float的区别,Double精度高,有效数字位,float精度位。但Double消耗内存是float的两倍,Double运算速度比float慢得多,能用单精度不要用双精度(以省内存,加快运算速度)。,字符型数据,例,a,A,1,?,n abc、“a”,字符常量定义:用单引号括起来的单个普通字符或转义字符.注意:只能包含一个字符,

17、字符常量的值:该字符的ASCII码值,如 A65,a97,048,n10,31,转义字符:反斜线后面跟一个字符或一个代码值表示,例:A-101-x41-65,字符型常量只占一个字节,是8位二进制数。取值范围为0-255之间的256个值。计算机中所有的大小写字母、数字、标点符号均被指定了一个介于1128之间的数,而后面的128个值则为计算机制造者保留。(目前也已经分配给了汉字字符。),计算机中字符型数据的表示,#includeint main()using std:cout;using std:endl;for(int i=0;iint main()using std:cout;using st

18、d:endl;for(int i=0;i=255;i+)cout(char)i;return 0;,输出格式化字符:#includeint main()using std:cout;using std:endl;/for(int i=0;i=255;i+)char i=t;cout(char)i;return 0;,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,转义字符:反斜线后面跟一个字符或一个代码值表示,字符常量定义:用单引号括起来的单个普通

19、字符或转义字符.,字符常量的值:该字符的ASCII码值,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch3_001.c,ch3_004.c)#includemain()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CI say:”How are you?”C ProgramTurbo C,字符常量定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,转义字符:反斜线后面跟一个字符或一个代码值表

20、示,例#include main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,转义字符例题分析,Example:main()char ch;ch=362;printf(“%c,%d”,ch,ch);运行结果:,14ch=3628=24210=111100102 111100102 化为原码为 10001110=1410,Example:#include main()printf(“an”x41n”);printf(“%dn”,strlen(“an”x41”);运行结果:a“A 4注:strlen为求字符串字节数函数(不计结束标志0)。,Example:P49例3.5m

21、ain()printf(“_ _ a b _ c t _ d e r f t g n”);printf(“h t I b b j _ _ _ k”);运行结果:,_ _ a b _ c,_ _ a b _ c _ _ _ d e,f _ a b _ c _ _ _ d e,f _ _ _ _ _ _ _ g d e,h,h _ _ _ _ _ _ _ l,h _ _ _ _ _ _ _,h _ _ _ _ _ _,h _ _ _ _ _ _ j _ _ _ k,“r”使当前位置回到本行开头,自此输出的字符(包括空格和跳格所经过的位置)将取代原来屏幕上显示的字符.,什么时候要使用转义字符?,转义

22、字符只在特殊情况下才使用:C程序中需要实现某些特写打印或显示动作时 如 printf(“123t56n”);C程序中需要打印或显示以下三个字符时(斜杠)(双引号)(单引号)如 printf(“Youre a”a bad egg!”);C程序中需要打印或显示ASCII表中非键盘字符时 如 printf(“Look 16 and x80!”);,字符常量与字符串常量不同,字符串常量定义:用双引号(“”)括起来的字符序列。存储:每个字符串尾自动加一个 0 作为字符串结束标志,以便系统据此判断字符串是否结束。,它占内存单元是个字符,最后一个字符为。但在输出时不输出。,合法的字符串常量:“How do

23、you do.”,“CHINA”,“$123.45”可以printf()输出一个字符串,如printf(“How do you do.”);,变量综述,变量是存储信息的地方,是内存中的地址,在这个地址中可以进行数据的存储和读取。变量及数据如何存储在内存上?计算机内存单元都有内存地址。变量名是贴在这些单元的一个标签,用户可以通过变量名,无需知道变量的具体地址就可以方便地插到变量。程序运行时,自动将一部分数据从磁盘文件上加载到RAM上,所有变量都在RAM中生成,程序员在谈到内存时通常都是指RAM。RAM不能将数据和变量永久地保存在内存上,因此当程序运行结束或者断电后,这些数据和变量便从内存中释放或

24、者丢失。如何将变量永久地存储在计算机上,以后讨论。定义变量时,应该告诉编译器该变量的数据类型,编译器将根据我们定义的类型自动为变量预留出空间,然后做好放置该种类型值得的准备。,变量概念:其值可以改变的量变量的实质:内存中的存储单元。变量名与变量值先定义后使用,计算机根据类型开辟空间变量定义的一般格式:数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;(错)

25、,变量变量名与变量值变量定义的一般格式:数据类型 变量1,变量2,变量n;,变量初始化:定义时赋初值,从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,4)当程序中用以上方式定义变量时,编译程序会为变量开辟存储单元,但并没有在存储单元中存放任何初值,因此这些存储单元中原有的信息垃圾并没有被清除,这时,变量中的值是无意义的,称变量值“无意义”。我在宾馆里订了三个房间,但是在人没有去之前,里面可能住着房客,但不能说里面房客是我。赋初值以后才有意义。定义三个变量,然后打印输出,演示一下看看。再赋值。定义好后,一定赋初值,以防系统随机给一个值。,变量特性:1)凡未被事先定义

26、的,不作为变量名2)每一变量被指定为一确定类型,在编译时就 能为其分配相同的存储单元。3)指定每一变量属于一类型,这就便于在编译进行编译时,据此检查该变量所进行的运算是否合法。,例1 int student;stadent=19;/Undefined symbol statent in function main,变量概念:其值可以改变的量,变量的使用:先定义,后使用,变量定义位置:一般放在函数开头,整型变量占字节数随机器不同而不同shortintlong分类:短整型、基本整型、长整型、无符号型,实型变量float:占4字节,提供7位有效数字double:占8字节,提供1516位有效数字,例

27、float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/,字符型变量字符变量在内存中占一个字节,只能存放一个字符,存放字符ASCII码。char与int数据间可进行算术运算,可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出,例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,没有字符串变量,用字符数组存放,字符变量的赋值形式:c1a;c2 b;,字符型变量字符变量在内存中占一个字节,只能存放一个字符,存放字符ASCII码。字符型变量用来存放字

28、符常量。字符变量的定义形式:char c1,c2;字符变量的赋值形式:c1a;c2 b;结论:不能把一个字符串常量赋给一个字符变量。,例:char ch;ch=“A”;,注意:用char定义的字符变量只能接受字符常量,而不能接受字符串常量(C语言中无字符串变量)char a=U;char b=“U”;(b被置为某随机值)问题(判断正误):char c=“China”;char c=China;,Example:main()char c1=a,c2;c2=98;printf(“%d,%dn”,c1,c2);,结果:97,98,Example:main()char c1=“a”,c2;c2=98;

29、printf(“%d,%dn”,c1,c2);,结果:-108,98若让c1分别等于“U”、“ABC”、“A”结果不变,随机值,例/*ch3_003.c*/#include#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);,运行结果:total=37.50000,ch1=d,3.6变量赋初值,(1)语言允许在定义变量的同时使变量初始化如:int a=3;/指定为整型变量,初值为 float f

30、=3.56;/指定为浮点型变量,初值为.56 char c=a;/指定为字符变量,初值为a,3.6变量赋初值,(2)可以使被定义的变量的一部分赋初值。如:int a,b,c=5;表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:int a=3,b=3,c=3;或int a,b=a=3+5;表示、的初值都是。不能写成 int a=b=c=3;(除非b,c定义过),注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。,3.8算术运算符和算术表达式,3.8.1 运算符简介 的运算符有以下几类:(1)算术运算符(+-*/%

31、)(2)关系运算符(!)(3)逻辑运算符(!|)(4)位运算符(|)(5)赋值运算符(及其扩展赋值运算符)(6)条件运算符(?:)(7)逗号运算符(,),3.8算术运算符和算术表达式,(8)指针运算符(*和)(9)求字节数运算符()(10)强制类型转换运算符((类型))(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符(),3.8算术运算符和算术表达式,一、算术运算符和算术表达式 1、基本的算术运算符:(加法运算符,或正值运算符。如:、)(减法运算符,或负值运算符。如:、)*(乘法运算符。如:*)(除法运算符。如:)(模运算符,或称求余运算符,两侧均应为整型数据,如:

32、的值为)。优先级:先括号,后乘除,再加减,注意:(1)/:运算对象可以是各种类型的数据 但两个整数相除的结果为整数;如5/10,5/3%:两侧的运算对象必须是整型数据,如:4.2%2,1%10;余数符号与被除数的符号相同;如11%3的值为2,-11%3的值为-2,2%-5的值为2,1%10(3)+、-、*、/运算的两个数中有一个为实数,则结果为双精度实型数据,即double型。因为所有实数都按double型进行运算。如 5.0/10,3.8算术运算符和算术表达式,例 float a,b,c;c=a%b;/Illegal use of floating point in function mai

33、n,3.8算术运算符和算术表达式,2、算术表达式:是指用算术运算符和括号将运算对象(也称操作数,如常量、变量、函数等)连接起来、符合C语法规则的式子,如:a*b/c-1.5+a 表达式中的运算对象可以是各种类型的数据,包括整型、实型或字符型的常量、变量及函数调用。例如:*.5a 是一个合法的表达式,3、算术运算符的优先级、结合性 优先级:*、/和%的优先级相同且高于+、-结合性:只有单目运算符“+”和“-”的结合性是从右到左,其余运算符的结合性都是从左到右,简称左结合。运算规则:先按优先级,若优先级相同,按规定的结合方向处理。,例:a-b+c 2.5+7%3*7%2/4(5+1)/2=3 5*

34、-2=10,3.8算术运算符和算术表达式,二、不同类型数据间的混合运算,1.隐式类型转换,不同类型数据混合运算时系统自动转换成同一类型,这种转换称为隐式转换。,数据的类型级别 P32图2-8 类型转换:当一个运算符的两侧的数据类型不同时,就要进行数据的类型转换。类型转换分为隐式类型转换和强制类型转换。,隐式转换的类型:运算转换-不同类型数据混合运算时基本原则:自动将精度低、表示范围小的运算对象类型向精度高、表示范围大的运算对象转换。以保证不丢失信息 赋值转换-赋值运算符两侧的类型不一致时,基本规则:按赋值号左边的类型进行转换。即右边表达式的值自动转换成左边变量的类型。若右边表达式的类型高,则左

35、边变量所得到的值将失去右边数据的精度。输出转换-输出时转换成指定的输出格式函数调用转换-实参与形参类型不一致时转换,二、不同类型数据间的混合运算,例 int i;i=2.56;/结果i=2;,例 float f;int i;i=10;f=i;则 f=10.00000,遵守“向高看齐”的类型一致化规则,将实型常量赋给整型变量,将被自动取整 int a=7.999999;等效于 int a=7;float型只要参加运算,均自动转为double。main()float i=3,j=4;printf(“%dn”,sizeof(i);printf(“%dn”,sizeof(i/j);/*结果为8(双精度

36、)*/,运算对象类型不同时转换,2、显式转换(强制转换)一般形式:(类型名)(表达式),注意:(1)类型名的()不可省,表达式应该用括号()括起来,根据需要可省略。(into)(x+y)/*将x+y的值转换成整型*/(float)(5%3)/*将5%3的值转换成float型*/(int)3.324=3,(double)(5%2)=1.2,()不能丢(2)强制转换得到所需类型的中间变量,原变量类型不变。,(3)int 型强制转换成float/double型-小数点后填0 float/double 型强制转换成int型-小数点后数字全部抹去,例#include main()float x;int

37、i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3,精度损失问题,2、显式转换(强制转换),将实型常量赋给整型变量,将被自动取整 int a=7.999999;等效于 int a=7;以整数形式存储在整型变量中.,不同数据类型转换具体说明,将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中 如:float=,先将23转换成23.000000,再存储在中。double d=23;即执行=23,则将23补足有效位数字为23.0000000000000,然后以双精度浮点数形式存储到变量中。,将一个double型数据赋给fl

38、oat变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。如:float f;double d=123.456789e100;f=d;就出现溢出的错误。如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储,4、字符型数据赋值给整型变量,有两种情况如果所用系统将字符处理为无符号的量,则将字符的8位放到整型变量低8位,高8位补0。如果所用系统将字符处理为带符号的量,则进行符号扩展。,3.9 赋值运算符和赋值表达式,5、将一个int、short、long型数据赋给一个char型变量时,只将其低8位

39、原封不动的送到char变量。,3.9 赋值运算符和赋值表达式,3.9 赋值运算符和赋值表达式,将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中:如果int型数据为正值(符号位为),则long型变量的高16位补;如果int型变量为负值(符号位为),则long型变量的高16位补,以保持数值不改变。反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。,3.9 赋值运算符和赋值表达式,将无符号整型int数据赋给long int型变量时,只需将高位补即可。将一个unsigned类型数据

40、赋给一个占字节数相同的signed型整型变量(例如:unsigned int-int,),将unsigned型变量的内容原样送到signed型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。,(8)当有符号整型型数据赋值给长度相同无符号整型变量时,原样赋值(原有的符号位作为数值一起传送).即按有符号型进行转换。若最高位是1,将按负数处理。,不同类型的整型数据间的赋值总原则:按存储单元的存储形式直接传送.,3.9 赋值运算符和赋值表达式,将unsigned int型数据赋给long int型变量时。将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量(8)

41、将非unsigned型数据赋值给长度相同的unsigned型变量,也原样赋值(连原有的符号位也作为数值一起传送).,不同类型的整型数据间的赋值总原则:按存储单元的存储形式直接传送.,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),说明:+-运算对象只能是整型变量,不能用于常量和表达式,因为不能给它们赋值。如5+,(a+b)+都是不合法的。若要参加其他运算,前缀是先变化后运算,后缀运算是先运算后变化。变化先后对于变量本身具有相同的效果,但作为表达式却有不同的值。,例-i+i=3;printf(“%d”,-i+)

42、;判断结果及i的值,三、自增、自减运算符+-,说明+-结合方向:自右向左优先级:+-*/%-+-(2)(3)(4)常用于循环语句中,使循环控制变量加(或减)1,以及指针变量中,使指针指向下(或向上)一个地址。,三、自增、自减运算符+-,简单赋值运算符符号:=(被视为一个运算符)格式:变量名=常量或表达式,例 a=3;d=func();c=d+2;,四、赋值运算符和表达式,-结合方向:自右向左右侧必须是C语言合法的表达式.左侧必须是变量,不能是常量或表达式与数学中的等号不同,有区别,例 3=x-2*y;a+b=3;,赋值表达式一般有值,其值与变量值相等,且可嵌套.,例:a=b=c=5+3 a=(

43、b=10)/(c=2)例:b=(a=3+5)(结果均为8)例:c=3+(a=5)*6(结果:c=33,a=5)(一个语句可以有几个赋值运算),/表达式值为5,a,b,c值为5,/表达式值5,a=5,b=10,c=2,a=b作用:将b所代表的存储单元中的内容赋给变量a所代表的存储单元,a中原有的数据被替换掉,a的内容保持不变。赋值表达式x=x:赋值号右边的x表示变量x所表示的存储单元中的值,赋值号左边的x代表以x为标识符的存储单元,含义是取变量x中的值放到变量x中去。在赋值表达式n=n+1中,作用是取n中的值加1后再放到变量n中,使n的值增1。,四、赋值运算符和表达式,对赋值表达式求解的过程是:

44、求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量。例如:赋值表达式“=3*5”,表达式的值为15,变量a的值是15,注意:一个表达式应该有一个值,赋值表达式的赋值操作可以以表达式形式出现在其他语句(如输出语句、循环语句等)中.如:printf(%d,a=b);,分析:如果b的值为3,则输出a的值(也是表达式a=b的值)为3。在一个语句中完成了赋值和输出双重功能。,复合赋值运算符:在=前加上其它运算符,两个运算符之间不能有空格,否则就认为是两个运算符种类:+=-=*=/=%=&=|=含义:exp1 op=exp2 exp1=exp1 op exp2,复合赋值运算符,例:a=12;a+=

45、a-=a*a,/a=-264 等价于a=a+(a=a-(a*a),关于优先级和结合方向:C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行。如果在一个运算对象两侧的运算符的优先级别相同,则按规定的结合方向处理。(各种运算符的优先级和结合性见P375附录)【例】设i、j初值分别为3和4,则执行 j+=i-=1;后 i,j的值为多少?【例】若x=7;则x+=x-=x+x的值是多少?,(i=2,j=6),(-14),解法:从右到左,先做x=x-(x+x)=-7,再做x=x+x=-14,逗号运算符和表达式形式:表达式1,表达式2,表达式n结合性:从左向右优先级:15,

46、优先级别最低。逗号表达式的值:等于表达式n(最后一个表达式)的值用途:常用于循环for语句中,例#include main()int x,y=7;float z=4;x=(y=y+6,y/z);printf(x=%dn,x);,运行结果:x=3,3.10 逗号运算符和逗号表达式,例:逗号表达式*5,*,分析:赋值运算符的优先级别高于逗号运算符,因此应先求解*5.,一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 如:(*,*)先计算出的值等于,再进行*的运算得60(但值未变,仍为15),再进行得,即整个表达式的值为。,3.10 逗号运算符和逗号表达式,注意:并不是任何地方出现的逗号都是

47、作为逗号运算符。例如函数参数也是用逗号来间隔的。如:a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c),“,”并不是一个逗号表达式,它是printf函数的3个参数,/1,2,3,/3,2,3,“(,)”是一个逗号表达式,它的值等于的值。,数据类型、运算符、表达式,数据类型整型:12,0,-3实型:4.6,-1.23字符型:a,b,试一试,求50除23的余数。求两个数的和、差、积、余数分别输出和起来输出,站位符不动,改变变量位置结果是否正确,变量,什么是变量其值可改变的量称为变量,也把变量看成用来装数据的容器变量

48、的作用增加程序的灵活度,可以说任何一个程序基本上都用到了变量(想想excel求两个数的和的时候,我们在excel是怎样做的),变量定义的一般格式:数据类型 变量1,变量2,变量n;如:int a;Float a,b,c;Char c1,c2;注意:数据类型不要混了,变量命名规则:,只能以字母、数字、下划线三种字符组成,且第一个字符必须为字母或下划线。在c语言中,变量名是区分大小写的。Int a=3Int A=4变量命名的良好习惯见名知意如:年龄:intage/intnl,变量类型的范围IntFloatChar:该类型的变量只能容纳一个字节,变量的赋值Int a=3;Int a=3.4(错误)Int a=3,b=4;注意:定义什么类型的变量就赋什么类型的数据,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号