版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章数据类型、运算符与表达式§3.1C的数据类型§3.2常量与变量§3.3整型数据§3.4实型数据§3.5字符型数据§3.6变量赋初值§3.7各类数值型数据间的混合运算§3.8算术运算符和算术表达式§3.9赋值运算符和赋值表达式§3.10逗号运算符和逗号表达式
#include<stdio.h>voidmain(){
int
a,b,area;a=2;b=4;area=a*b;
printf(“%d\n”,area);}
#include<stdio.h>voidmain(){
int
a,b;floatarea;a=2;b=4;area=a*b;
printf(“%f\n”,area);}
运行结果:8运行结果:8.000000例3.1求矩形的面积。3.1C的数据类型1、一个程序应包括以下两个方面的内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(datastructure)。(2)对操作的描述。即操作步骤,也就是算法(algorithm)著名的计算机科学家(NikiklausWirth)提出一个公式:程序=数据结构+算法
程序=数据结构+算法+软件设计方法+语言环境和工具
基本类型:系统自己定义的一些简单的数据类型。构造类型:用户根据需要由已知的基本类型按一定的规则构造出的有结构的数据类型。
程序在使用某一数据之前,一定要将该数据进行说明。说明的目的是使计算机了解所使用的数据类型,以便安排合适的存储空间,进行合适的运算。2、C语言提供的数据结构以数据类型出现基本数据类型数值型整型单精度(float)双精度(double)字符型(char)构造类型数组结构(struct)实型(浮点型)基本型(int)短整型(short)长整型(long)共用体(union)其它类型指针(point)空类型(void)字符字符串数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作枚举型(enum)3.2常量与变量3.2.1常量与符号常量
在程序运行过程中,其值不能改变的量称为常量。1、直接常量
整型常量
12,-3,0
实型常量
4.60.,-1.23,4.0
字符常量
‘a’,‘b’
这些常量称为字面常量或直接常量。2、符号常量(1)整型常量
整型常量即整常数,是一个数字序列。C语言的整型常量有三种表示形式:十进制整数。如,2006,0,-3八进制整数(以数字0为前缀的整数)。如:例:0567表示八进制数“567”,对应十进制的值为7×80+6×81+5×82,即“375”。例:-023表示八进制数“-23”,对应十进制的值为-(3×80+2×81),即“-19”十六进制整数(以0x或0X为前缀的整数)。如:
例0x567表示十六进制数“567”,其十进制的值为7×160+6×161+5×162,即“1383”
例-0x2e6表示十六进制数“-2e6”,其对应的十进制值为:-(6×160+14×161+2×162),即“-742”#include<stdio.h>voidmain(){printf("%d,%o,%x\n",10,10,10);printf("%d,%d,%d\n",10,010,0x10);printf("%d,%x\n",012,012);
}例3.2关于十进制、八进制、十六进制的例子(2)实型常量
实数(realnumber)又称浮点数(floating-pointnumber),实型常量也称为浮点型常量,表示实型常量的方法有两种(1)十进制小数形式。由数字和小数点(必须包含小数点)组成。如,2006.3,0.15267,0.0,-3.14是实型常量;“0”是整型常量(2)指数形式,也称为指数表示法。同一个实型常量,可以有多种指数表示法。一般地,对于一个a×10b形式的实型常量,在C语言中可以表示为aEb或aeb
其中,a为一个绝对值不小于1且不超过9的小数(带有小数点),称为尾数;b是一个整数,称为指数。该种表示方法称为实型常量的科学表示法或规范表示法(3)字符常量字符常量是指用一对单撇号括起来的单个字符。如,a,2,#等。计算机中所使用的各种字符和文字都需要进行编码,即赋予每个文字或字符唯一的值常用的字符采用美国信息交换标准码(AmericanStandardCodeforInformationInterchange,简称为ASCII编码)方式。如,字符0的ASCII码值为48,字符R的ASCII码值为82一个字符型常量的值是其在C语言字符集中对应的编码值(4)字符串常量
字符串常量是由双撇号括起来的字符序列。如,"IloveChina","3prog","A"等。字符串常量可由多个字符组成,也可由单个或零个字符组成字符串常量须用双撇号括起来。双撇号仅起定界符的作用,并不是字符串中的字符如,"w"是一个字符串常量,而'w'是一个字符常量。字符串常量中不能直接包含单撇号(“'”)、双撇号(“"”)和反斜杠(“\”),若要使用,可参照转义字符中介绍的方法一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量实型常量字符常量字符串常量如#definePRICE30定义:程序运行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define
符号常量常量<>例符号常量举例(ch2_1.c)#definePRICE30main(){
intnum,total;num=10;total=num*PRICE;
printf("total=%d",total);}运行结果:total=300常量#definePRICE30#defineNUM12voidmain(){......total=NUM*PRICE;total2=84*PRICE2;
printf("total=%d",total);......}不会被替换=>total=12*
30;常量符号常量符号常量示例(1)#define定义结束时不加分号(;)(2)符号常量在整个运行中其值不变(3)符号常量一般用大写,以示区别,但不是必须的。注意使用符号常量的好处(1)含义清楚。“见名知意”,如上面的程序,从PRICE就知道它代表价格(2)在需要时一个常量时能做到“一改全改”。
一处修改=多处修改。变量程序内存编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修改这个数据的值。通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需要显示数据或执行数据操纵。存储
RateRate*5%将值存储为DiscAmtRate-DiscAmt100.5将值存储为Result9.52.3.2变量1.变量的概念在程序运行过程中,其值可以被改变的量称为变量。变量的两个要素:(1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。2.标识符命名规则
标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。变量命名在C语言中,变量命名需要遵循一定的规则有效名称principalcost_pricemarks_3lastnamecity无效名称123ratecurrency$discount%zipcode变量的命名规则:变量名可以由字母、数字和_(下划线)组合而成变量名不能包含除_以外的任何特殊字符,如:%、#、逗号、空格等变量名必须以字母或
_(下划线)开头变量名不能包含空白字符(换行符、空格和制表符称为空白字符)C语言中的关键字(例如int
和float等)称为保留字,具有特殊意义,不能用作变量名C语言区分大小写,因此变量price与变量PRICE是两个不同的变量习惯上,变量名和函数名中的英文字母用小写,以增加可读性。标识符命名的良好习惯──见名知意:通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。变量定义的一般格式:
数据类型变量1[,变量2,…,变量n];变量初始化:定义时赋初值
例:
inta,b,c;floatdata;决定分配字节数和数的表示范围合法标识符例:
inta=2,b,c=4;floatdata=3.67;charch=‘A’;
intx=1,y=1,z=1;
intx=y=z=1;(x)变量的使用:先定义,后使用例1
intstudent;
stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
变量定义位置:一般放在函数开头main(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;
printf(“data=%f\n”,data);}变量定义可执行语句3、变量的定义3变量在使用之前必须定义,否则不可以使用;(1)每个变量在定义时被指定为一确定类型,编译时为其分配相应存储单元;(2)每个变量属于一确定类型,据此检查该变量所进行的运算是否合法,以避免运算时类型出错;比如求余运算:
floata;
intb,c; a=50;b=10; c=a%b;/*编译系统报告错误*/3、变量的定义34a变量名存储单元(地址)变量值变量的存储3.3.1整型常量的表示方法十进制(Decimal)八进制(Octal):以0开头,不得含有8或9十六进制(Hexadecimal):以0x或0X开头,用a~f或A~F表示10~153.3整型数据1、整型数据在内存中的存放方式二进制形式举例,inti=10;/*int类型占2字节*/补码(Complement)正数:与原码一致,首位为0负数:绝对值取反加1,首位为1零:各位全为00000000000001010高地址字节低地址字节3.3.2整型变量补码举例举例inti=-10;/*int类型占2字节*/00000000000010101111111111110101111111111100111010的原码-10的补码取反加一最左边的一位是符号位,该位为0,表示数值为正;为1表示为负。基本数据类型数据属于不同类别AfricaThequickbrownfoxTRUE数据
非数值数值整型非整型9002.129999/12/20032.175123JackieChanchar数据类型非数值数值整型intshortintlongintdoublefloat非整型
有三类整型变量:
(1)基本型:以int表示
(2)短整型:以shortint
或short
表示
(3)长整型:以longint
或long表示为充分利用变量的表数范围,可以将变量定为“无符号型”类型:unsignedint
unsignedshort
unsignedlong2、整型变量的分类计算机中数的表示法(补充内容)3.3.2整型变量各类整型型数据长度、取值范围
数据类型
所占位数
取值范围
int
16
-32768~32767
short
16
-32768~32767long
32
-21亿~21亿unsignedint
16 0~65535
unsignedshort16 0~65535 unsignedlong32 0~42亿
1.注意不同类型整型数取值范围;
2.对变量的定义,放在函数的开头的变量说明部分;
3.对整型变量赋值时,注意表示数的范围匹配。
有符号数与无符号数有符号数二进制补码表示,首位为符号位指定signed或缺省情况,即为有符号数若指定signed,则存储单元中最高位代表符号位(0为正数,1为负数)无符号数没有符号位,只能表示非负数,不能存放负数,如-123,-3无符号数类型必须指定为unsigned无符号整型变量中可以存放的的正数的范围比一般整型变量中正数的范围扩大一倍(-32768~32767)(0~
65535)若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理定义学号,库存号等等这些编号,不需要符号,可以定义为无符号类型有符号数与无符号数举例voidmain(){
int
i;unsignedj;
i=j=-50;
i=i/2;
/*-25*/
j=j/2;
/*32743*/}1111111111001110-50的补码i,j/211111111111001110111111111100111i/2-25的补码j/232743的补码/原码3、整型变量的定义
int
a,b;unsignedshortc,d;longe,f;
对于变量的定义,一般是放在一个函数的开头部分的声明部分3.3.2整型变量
#include<stdio.h>voidmain(){int
a,b,c,d;/*指定a,b,c,d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);}3、整型变量的定义与使用示例运行结果为:
a+u=22,b+u=-144、整型数据的溢出(Overflow)溢出:数据超出了变量能够存储的范围,造成数据丢失或数值改变等举例voidmain(){inta=32767;b=a+1;/*32768*/}01111111111111111000000000000000+132767的补码-32768的补码
注意:
1.一个整型变量只能容纳-32768~32767范围内的数,无法表示大于32767的数,遇此情况发生溢出,系统并不报错。
2.定义变量之后,就意味着它的值的范围,赋值时就要注意。
3.3.3整型常量的类型
1.整常量在-32768~32767之间可赋给int
或longint;
2.超过上述范围而在-2147483648~2147483648之间,可赋给longint
;
3.若shortint
与int
型常量在内存中占据的长度相同,它可以赋给int型或shortint型变量;
4.12345u或U为unsigned型,123L,123l
为长型常量。
整型常量使用中的类型问题
1、对整型变量赋值常量的值不要超过变量的取值范围
2、直接使用常量带有l、L、u、U等后缀的整型常量一般用于函数调用不带有后缀的整型常量的类型,是根据其数值大小所处的范围来确定的总结1、数据类型:基本数据类型2、常量:基本常量符号常量3、变量:变量的概念标识符的命名规则变量的定义4、整型变量:整型变量在内存中的存放形式整型变量的分类整型变量的定义整形数据的溢出3.4.1实型常量又分两种形式:(1)十进制形式:它由数字和小数点组成(注意必须有小数点)。如:.123,123.0,0.0(2)指数形式:如123e3或123E3都代表123×103注意字母e(或E)之前必须有数字,且e后面指数必须为整数。不合法的指数形式:e3,2.1e3.5,.e3,e浮点数的多种表示形式。例如123.456可以表示为
123.456e0,12.3456e1,1.23456e2,
0.123456e3,0.0123456e4,0.00123456e53.4实型数据(又称浮点数)3.4.1实型常量规范化的指数形式为:1.23456e2规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只有一位)非零的数字。如规范化的指数形式:
2.3478e2,3.0999E5,6.46832e12不规范化的指数形式:
12.908e0,0.4578e3,756e0浮点数在按指数形式输出时是按规范化的指数形式输出。例如,指定将实数5689.65按指数形式输出,必然输出5.68965e+003例:#include<stdio.h>Voidmain(){floata=12345.678;
printf(“%e”,a);}运行结果:1.234568e+0043.4.2实型变量1、实型变量的分类:按变量所能表示的数据范围和精度单精度float,在内存中占4Bytes,7位有效数字双精度double,在内存中占8Bytes,提供15~16位有效数字长双精度型(longdouble)不同的编译系统,规定的实型变量所能表示的数据的长度、精度和数值范围有所不同。2、微机上常用的C编译系统的规定类型比特数有效数字数值范围float326~710-37~1038double6415~1610-307~10308longdouble12818~1910-4931~1049323、实型变量的定义实型变量在使用前要加以定义floatxy;/*定义了一个单精度实型变量xy*/floatx,y,z;
/*定义了三个单精度实型变量x,y,z*/doubles1,s2;
/*定义了两个双精度实型变量s1,s2*/4、赋值实型变量可以在定义时赋初值,也可以在程序的运行阶段被赋予一个实型常量,还可以通过一个已被赋值的变量进行赋值。
intmain()
{
/*变量的声明部分*/
floata,b=3.067;
/*定义了两个基本整型变量a和b*/floatc=3.14e3;
doubled; /*定义了一个长整型变量d*/…
/*函数的执行部分*/
a=b;
d=56.000;
}注意实型变量所能表示的数据范围比整型变量表示的数据范围要大一些。实型变量也是用有限的存储单元存储的,因此能提供的精度(即有效数字)也是有限的。在有效位以外的数字将被舍去。对实型变量进行一些操作,可能引起一些误差。内存floatdouble213.5671435568967
64位取值范围:10-308
至
1030816
位有效数字声明:doublepressure_level;初始化:pressure_level=213.5671435568967;doubledvalue=35.4;例main(){floata,b;a=123456.789e5;b=a+20;
printf(“b=%f\n”,b);}3、实型变量的舍入误差运行结果:
b=12345678848.000000思考:1.0/3*3=?由于实型数据是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。因为实型变量能保证的有效数字是7
位,后面的数字是无意义的,并不准确地表示该数。a和b的值都是:
12345678848.000000建议:应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。3.5.1字符常量1.字符常量的定义用一对单引号括起来的单个字符,称为字符常量。例如,‘a’,‘A’、‘1’、‘+’,‘$’等。2.转义字符C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符。
注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:‘\\’、‘\’‘。3.5字符型数据字符形式含义\n换行,将当前位置移到下一行开头\t移到下一制表位\b退格,将当前位置移到前一列\r将当前位置移到本行开头\f换页,将当前位置移到下一页开头\\反斜杠\\′单引号\xhh1到2位16进制数(ASCII)所代表的字符\ddd1到3位8进制数(ASCII)所代表的字符转义字符表转义字符
\123的含义是,将八进制的“123”(十进制的“83”)转换成ASCII码值为83的字符。\123等价于X\x23代表ASCII码值为十六进制的“23”(十进制的“35”)的字符,即,#在程序中,使用转义字符时,和普通的字符常量一样,必须用单撇号括起来。如,\n
1到3位8进制数所代表的字符:’\ddd’,如:’\101’代表ASCII值为65的字符’A’;
1到2位16进制数所代表的字符:’\xhh’,如:’\x41’也代表ASCII值为65的字符’A’;例用转义字符输出可打印字符和不可打印字符。
/*程序功能:用转义字符输出可打印字符和不可打印字符*/
main()
{printf(“\x4F\x4B\x21\n”); printf(“\x15\xAB\n”);
printf("□ab□c\t
□de\rf\tgn");
printf("h\ti\b\bj□k\n"); }
[程序演示]打印机上结果:
OK!i1/2fab_c___
gdeh______jik后两行屏幕显示结果:
f_______gde h______
j_k练习:printf(“a\1011\”\\\’\x414”);屏幕显示结果:
aA1”\’A4字符变量的类型关键字为char,用1个字节内存单元存储。1、字符变量的定义形式
字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到该字符变量所分配的内存单元中。例如:charch1,ch2;
/*定义两个字符变量:ch1,ch2*/ch1=’a’;ch2=’b’;
/*给字符变量赋值*/3.5.2字符变量2、特性字符数据在内存中存储的是字符的ASCII码──一个无符号整数,其形式与一个字节的整数的存储形式一样,以该字符的ASCII码值的二进制形式存储,所以C语言允许字符型数据与整型数据之间通用(注意:字符型数据ASCII码值是有范围的)。01100001c1='a'(ASCII=97)00110010c1='2'(ASCII=50)(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。
(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。(一个字符和整型数据在内存中存储形式都是二进制,所以一个字符型和整型可以进行运算。)(3)一个字符型变量,可以被赋予单个的字符,也可以被赋予一个0-255之间的整数。例如,
charc1,c2;
c1='a';c2=97;则c1和c2都被赋值为字符'a'例:字符型和整型数据转换
main()
{charc1,c2;
c1='a';ch2='b';printf(“c1=%c,c2=%c\n”,c1,c2);
printf(“c1=%d,c2=%d\n”,ch1,ch2);
}运行结果:
ab9798例大小写字母的转换
main(){charc1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;
printf(“%c,%c\n”,c1,c2);}例字符数据的算术运算。
main()
{charc1,c2;
c1=‘a’;c2=‘B’;/*字母的大小写转换*/
printf(“c1=%c,c2=%c\n”,c1-32,c2+32);
/*用字符形式输出一个大于256的数值*/
printf("c1+200=%d\n",c1+200);
printf("c1+200=%c\n",c1+200);
printf("c1+256=%d\n",c1+256);
printf("c1+256=%c\n",c1+256);
}3.5.3字符串常量1.字符串常量的概念和字符串长度字符串常量是用一对双引号括起来的若干字符序列。字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为""(一对紧连的双引号)。例如,“Howdoyoudo.”其长度为14(空格也是一个字符);“CHINA”;“A”;“123.45”如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(1)C:\msdos\v6.22→"C:\\msdos\\v6.22"
(2)Isay:"Goodbye!"→"Isay:\"Goodbye!\""不要将字符常量与字符串常量混淆。‘a’
是字符常量,”a”是字符串常量,二者不同。
假设c被指定为字符常量:
charc;c=‘a’;
是正确的。而
c=”a”;
是错误的。不能把一个字符串赋给一个字符变量。3.5.3字符串常量
2.字符串的存储
C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志。注意:在源程序中书写字符串常量时,不必加结束字符‘\0’,否则画蛇添足。
如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示:最后一个字符‘\0’是系统自动加上的,它占用6字节而非5字节的内存空间。CHINA\0可以在定义变量时进行初始化
inta=2; inta;a=2;也可以初始化一部分变量
int
a,b,c=3; int
a,b,c;c=3;如果对不同变量赋同一初值,应该分别赋值如:inta=4,b=4,c=4;
而不能写成:
inta=b=c=4;3.6变量赋初值
整型、实型、字符型数据间可以混合运算。例如:
10+’a’+1.5-8765.124*’b’
在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。表达式中出现不同的类型的数据时,系统要将不同类型数据转换成同一种类型,然后才进行运算。1、转换规则:doublelongunsignedintchar,shortfloat高低说明:1、运算时,表达式的类型以最高类型为准。2、为保证计算结果的精度,两个float型运算,先转换成double型再运算。必定的转换必定的转换可转换方向3.7各类数值型数据间的混合运算例
charch;
inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例
inti;floatf;doubled;longl;intintdoubledoubledoubledoubledoubledouble1.算术运算符
(+-*/%)
2.关系运算符
(><==>=<=!=)
3.逻辑运算符
(!&&||)
4.位运算符
(<<>>~
|
^&)
5.赋值运算符
(=)
6.条件运算符
(?:)c中唯一的一个三目运算符
7.逗号运算符
(,)
8.指针运算符
(*&)
9.求字节运算符
(sizeof)10.强制类型转换运算符
((类型))11.分量运算符
(.->)12.下标运算符
([])13.其它
(函数调用运算符())3.8算术运算符和算术表达式3.8.1C的运算符简介3.8.2算术运算符和算术表达式+(加、正号),-(减、取负),*(乘),/(除),%(模运算)特别说明:(1)/(除):在两侧均为整数时,相除的结果为整数,舍去小数部分(向零取整),如7/3=2。(2)%(模运算或求余运算符):%两侧的操作数必须为整数,如7%3=1(3)如果参加+、-、*、/运算的两个数中有一个数为实数,则结果是double型。如5.2/31、算术运算符2、算术表达式用算术运算符和括号将常量,变量及函数连起来的式子称为算术表达式。例1代数式
3x2+x-2
在计算机中,不能直接对代数式进行运算,而要将它转化成相应的算术表达式。相应的算术表达式为:3.0*pow(x,2.0)+x-2.0例2代数式
相应的算术表达式为:a/2.0-(6.0*y)/(5.0*x)3、运算符的优先级()*,/高低
%+,-,
=
-++,--例:i=5;i=++i*4+2;i的值为:26i=5;i=i++*4+2;i的值为:23在四则运算中,有先乘除,后加减的规则。在C语言中,也存在哪个运算符先进行运算,哪个后进行运算的问题,这些,称为运算符的优先级。i=i*4+2,i++;4、运算符的结合方向
C规定了运算符的结合方向(结合性)。即在一个变量(或其它表达式、常量等)的左右两侧有优先级别相同的运算符时应从左至右还是从右至左进行结合运算的问题。
如式:
a-b+c
即b先与减号结合,执行a-b的运算,再将结果加上c。
在C语言中还有从右至左进行结合的运算符。5、强制类型转换运算符(类型名)(表达式)例:(double)a(int)(x+y)(int)x+y(float)(5%3)思考题:假设变量num的数据类型为float,其值为2.5,则执行“num=(int)num”后,num的值等于多少?注意:如果X原来指定为float型,进行强制类型转换后得到一个int型的中间变量,它的值等于X的整数部分,而X的类型不变(仍未float型)main(){floatx;
inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}
例:强制类型转换6、自加自减运算符作用:使变量的值增1或减1形式:++i,--i,i++,i--注意:
++i(--i)是先将i加1(减1)后再使用i
i++(i--)是先使用i,再将i的值加1(减1)i=i+1(i=i-1)注意:自加自减运算符按自右而左的结合顺序如:-i++,i应先++,再取负。如果i的原值等于3,则执行下面的赋值语句:(1)j=++i;(2)j=i++;例main(){inta,b;a=5;b=5;
printf(”a=%d,++a=%d”,a,++a);
Printf(”b=%d,b++=%d”,b,b++);}输出结果:a=6,++a=6b=6,b++=5(1)自增自减运算符只能用于变量,不能用于常量或表达式。即5++,(a+b)++是不合法的。(2)++和--的结合方向是“自右至左”,-i++相当于-(i++)。1、赋值运算符
“
=”是赋值运算符,作用是将一个数值赋给一个变量。如:
a=3;x=a+b;a=y;
注意:赋值运算的方向,右结合性。“
=”的左边只能是变量。如:3=a;a+b=x;是错。当将表达式或变量赋给一个变量时,表达式或变量一定要有具体数值。3.9赋值运算符和赋值表达式
2、类型转换
赋值运算符两侧的类型可以不一致,但都是数值型或字符型。赋值前要进行类型转换。如:(1)将实型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中
(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。floata;a=23;a=23.000000(3)将一个double型的变量赋给float型的变量。截取前面的7位有效数字,存放到float变量的存储单元(4个字节)中。注意不能溢出。如:
floatf;doubled=123.45678e100;f=d;
/*将会出现溢出错误*/
如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储。(4)字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此将字符数据(8个二进位)放到整型变量存储单元的低8位中。第一种情况:
如果所用系统将字符处理为无符号的字符类型,或程序已将字符变量定义为unsignedchar型,则将字符的8位放到整型变量低8位,高8位补零例如:将字符’\376’赋给int型变量i
第二种情况:
如果所用系统(如TurboC++)将字符处理为带符号的(即signedchar),若字符最高位为0,则整型变量高8位补0;若字符最高位为1,则高8位全补1。这称为“符号扩展”,这样做的目的是使数值保持不变,如变量c(字符‘\376’)以整数形式输出为-2,i的值也是-2。(5)将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:inti=289;charc=′a′;c=i;
赋值情况:(6)
将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中:如果int型数据为正值(符号位为0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。反之,若将一个long型数据赋给一个int型变量,只将long型数据中低16位原封不动地送到整型变量(即截断)。(7)将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的非unsigned型整型变量(例如:unsignedint>int,unsignedlong->long,unsignedshort->short),将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。
(8)将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的符号位也作为数值一起传送)。
(4)字符型数据赋给整形数据时,
如果字符型数据是最高位是0,高8位补0;如果最高位为1,高8位补1。
chara;intb;
a=‘\376’;
b=a;printf(“%c,%d”,a,b); ■,-211111111
11111110表1被赋值变量的存储单元较大表达式类型被赋值变量类型转换规则charunsignedchar无需转换charint将char的8位存入int的低8位中,高8位符号扩展unsignedcharint将char的8位存入int的低8位中,高8位补0intunsignedint无需转换intlongint的16位存入long的低16位中,高16位符号扩展unsignedintlongunsigned的16位存入long的低16位,高16位补0intfloat将int型用实型表示floatdouble将float的小数位和指数位分别存入double的小数位和指数位表2被赋值变量的存储单元较小表达式类型被赋值变量类型转换规则unsignedcharchar无需转换intchar截去int的高8位intunsignedchar截去int的高8位,低8位按无符号数据处理unsignedintint无需转换longint或char截去long的高位longunsignedint截去long的高位floatint截去float的小数部分doublefloat将double多余的小数位四舍五入3.复合的赋值运算符复合的赋值运算:将“=”之前加上一个其它运算符。如:
+=,-=,=,/=,%=, <<=,>>=,&=,^=,|=例:i+=j+8i=i+(j+8)x*=j+4x=x*(j+4)注意:复合运算符相当于赋值号后有一括号,实际上是自右至左进行运算的。4.赋值表达式:
由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式
赋值表达式的值就是被赋值的变量的值;赋值运算符:“自右至左”进行运算。如:
a=b=c=55
a=5+(c=6)11
a=(b=4)+(c=6)10
a+=a-=a(a=12)-264a=12;a=a-a*a;a=a+a;变量可以多次赋值当多次给同一个变量赋值后,该变量保留最后所赋的值。例如,
intnum=3;
printf("%d\n",num);num=4;
printf("%d\n",num);
则分别输出3和4
3.10逗号运算符和逗号表达式用逗号将两个表达式连接起来,叫逗号表达式。
一般形式:表达式1,表达式2
如:3+5,6+8逗号运算符又称顺序求值运算符。计算过程:先计算表达式1的值,再计算表达式2的值,整个逗号表达式的值等于最后一个表达式的值。
注意:逗号运算符的运算级别最低。a=35,a4
(a=35,a4),a+5
x=(a=3,6a)x为18
x=a=3,6ax为3函数的参数用逗号分开,但不是逗号表达式
,如6065printf(“%d,%d,%d”,a,b,c);printf(“%d,%d”,(a,b),c);第三章结束重点:常量与变量不同类型混合运算三个表达式算术表达式赋值表达式逗号表达式B1计算机中的数和编码必须明确,在计算机内部,不管是数值、符号、指令或程序,都是用二进制的代码来表示的,即用0、1代码来表示各种不同信息的。B2
计算机运算基础1.进位计数制概念进位计数制的两要素:基数和位权任何一种数制表示的数都可以写成按位权展开的多项式之和,其一般形式为:N=dn-1bn-1+dn-2bn-2+…d0b0+d-1b-1+…d-mb-m
式中:n--整数的总位数
m--小数的总位数
d--某位的数码(位权)
b--基数
例:(345.17)8=3×82+4×81+5×80+1×8-1+7×8-2
2、常用计数制的基数和数码数码二进制八进制十进制十六进制基数281016010123456701234567890123456789ABCDEF数制 十进制二进制八进制十六进制
0000A1111B21022C3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年货车租赁及货运保险理赔协议3篇
- 拱墅区2024年中考语文二模试卷
- 二零二五年度运动品牌广告设计制作授权协议3篇
- 二零二五年度建筑消防设施检测与维修合同3篇
- 二零二五版住宅小区保洁服务外包合同2篇
- 二零二五年防盗门原材料供应与采购合同2篇
- 二零二五版ICP证互联网数据跨境传输合规咨询合同3篇
- 二零二五版个人年收入证明格式要求与合同范本6篇
- 二零二五年度民宿改造装修与运营管理合同3篇
- 2025办公大楼物业管理委托合同范本
- 跌倒-坠床不良事件鱼骨图分析
- 2022矿产地质勘查规范盐类第2部分:现代盐湖盐类
- 发展汉语初级口语I-第18课课件
- 海关HS编码对照表
- 原木桩驳岸施工方案
- 大庆油田几种高难套损井修复技术
- 产品方案技术白皮书模板(含系统架构说明书)
- 有害生物防治合同书
- 羊、羊绒针织物起毛起球性能的研究
- 脑恶性肿瘤的护理查房
- 格物致胜:中国中低压电器盘柜厂市场白皮书-2023-精华版
评论
0/150
提交评论