第三章数据类型、运算符与表达式_第1页
第三章数据类型、运算符与表达式_第2页
第三章数据类型、运算符与表达式_第3页
第三章数据类型、运算符与表达式_第4页
第三章数据类型、运算符与表达式_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1数据类型、运算符与表达式C语言的数据类型常量与变量整型数据浮点型数据字符型数据变量赋初值各类数值型数据间的混合运算算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式2第三章数据类型、常量、变量、运算符与表达式程序=数据结构+算法C数据类型基本类型构造类型指针类型(第10章)整型字符型浮点型枚举型单精度型双精度型数组类型(第7章)结构体类型(第11章)共用体类型(第11章)空类型33.2常量与变量常量与符号常量在程序运行过程中,其值不能改变的量称为常量。1.字面常量或直接常量 12、0、-3; 4.6、-1.23; ‘a’、“good”; 分别为整型常量、实型常量、字符型常量。2.符号常量4例3.1#definePRICE30 /*宏定义*/intmain(void){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);Ave=sum/PRICE;}常量与符号常量5说明:(1)#define命令行定义PRICE代表30,此后凡在此文件中出现PRICE都代表30,可和常量一样运算;(2)这种用标识符代表常量的称为符号常量;(3)符号常量一旦赋值,在其作用域内不能再改变;(4)习惯上符号常量用大写;与之相对变量常用小写。常量与符号常量好处:(1)含义清楚(2)需要改动时能做到“一改全改”6其值可以改变的量称为变量。变量是有类型的。变量变量定义通式:类型标识符

变量名[,变量名];#include“stdio.h”intmain(void){

inta,b,sum;scanf(“%d”,&a);scanf(“%d”,&b);sum=a+b;printf(“%d+%d=%d”,a,b,sum);}7变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。变量由变量名、存储单元、变量值组成。存储单元由系统统一分配,大小依类型而定。3a变量名变量值存储单元内存用户数据区ab200020022004369sum8

sum,average,class,day,month,student_name,_above,lotus_1_2_3,basic不合法标识符:标识符M.D.John,$123,#33,3D64,a>b合法标识符:变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列称为标识符(identifier)。标识符构成规则:

只能由字母、数字、下划线组成。第一个字符必须是字母或下划线,不能是数字。9作为变量名的标识符要求(1)C对大小写敏感,即大小写字母被认为是不同字符;(2)标识符长度有限,如一些系统最大为8个字符;(3)选择标识符时应尽量做到见名知意,这是结构化程序设计的一个特征;也是良好的编程习惯。(4)关键字C语言中已有32个关键字(见附录B),它们有专门含义,不能用做变量名或函数名、数组名等用户标识符。查看identifier.c10C语言程序中,变量必须“先定义,后使用”每个变量被指定为一个确定类型,编译时可据此为其分配相应的存储空间,不同数据类型分配存储空间大小不同。变量定义格式: 类型名变量名intstudent;student=10;...student10变量定义的意义:112)凡未被定义而使用的变量编译时报错,一定程度上保证运算中的变量名使用正确,及时发现手误等问题。3)根据变量类型编译时检查所做运算是否合理intstudent;stadent=10;变量定义的意义a%b是求余运算,若a,b指定为实型变量则报错。123.3整型数据整型常量的表示十进制整数如:123,-456八进制整数以0开头的数如:0123,-011十六进制整数以0x开头的数0x123,-0x1213整型数据所有数值、字符(数字、字母及控制字符)以及多媒体信息都是以二进制比特串形式保存(0110……)计算机中存储的基本单元是位常用单位:字节(byte)1字节(byte)=8位(bit)1字节2字节4字节8字节字符整型实型Char——————Short————Longfloat————double14整数在内存中是以二进制形式存放的……inti;i=10;……10i0000000000001010i二、数据在计算机中的存储0000000000000000000000000000010102字节4字节15二、数据在计算机中的存储……inti;i=-10;……-10i(a)1111111111110110i(b)实际存储形式用补码形式存储正数补码就是其二进制形式负数补码1)绝对值的二进制形式2)按位取反3)+116用最高位表示数的符号:0——+1——-数值以补码形式存放正数补码:该数二进制形式负数补码:该数绝对值二进制形式取反加10的补码是010的补码:0000000000001010-10的补码:(1)将二进制形式取反1111111111110101(2)加1,得1111111111110110二、数据在计算机中的存储1716bit单元存储整数范围:

-32768~327670000000000000000~01111111111111111000000000000000~11111111111111110~32767-32768~-1二、整数在计算机中的存储18为了适应不同应用中不同的整数范围,C中有

(1)基本整型,int 16bit(ANSI)/32bit(VC)(2)短整型,shortint(或short)16bit(ANSI)(3)长整型,longint(或long)32bit(ANSI)有无符号的前缀(1)无符号,unsigned(2)有符号(缺省),signed二、整数在计算机中的存储190~4,294,967,29532bit(4byte)unsignedlong[int]-2,147,483,648~2,147,483,64732bit(4byte)[signed]long[int]0~6553516bit(2byte)unsignedshort[int]-32768~3276716bit(2byte)[signed]short[int]0~6553516bit(2byte)unsignedint-32768~3276716bit(2byte)[signed]int整数的详细类型20说明:(1)[]括起来部分表示可选,选否不影响含义(2)带符号数时,signed可省(3)短整型或长整型时int可省(4)int型的长度在不同C语言编译环境中不确定,

但sizeof(short)<=sizeof(int)<=sizeof(long)是 确定的。(5)short,long类型的长度基本确定。二、整数在计算机中的存储21#include<stdio.h>intmain(void){ printf("short:%dbytes\n",sizeof(short)); printf("int:%dbytes\n",sizeof(int)); printf("long:%dbytes\n",sizeof(long)); printf("char:%dbytes\n",sizeof(char)); printf("float:%dbytes\n",sizeof(float)); printf("double:%dbytes\n",sizeof(double)); getch();}检查不同数据类型在计算机中的存储的空间大小的程序查看Length_of_int.c22整型变量的定义方法:

整数类型名变量名inta;unsignedshortc,d;longe,f;23#include<stdio.h>intmain(void){ inta,b,c,d; unsignedintu; a=12; b=-24;u=10; c=a+u; d=b+u; printf("a+u=%d,b+u=%d\n",c,d);}运行结果:

a+u=22,b+u=-14整型变量的定义24整型数据的溢出P44例3.3在turbo

c中,整型变量为2字节,最大为32767#include

<stdio.h>Main(){ inta,b; a=32767; b=a+1; printf(“%d,%d\n”,a,b);}查看identifier.c25整型常量的类型关于常数类型的几点说明:P45263.4浮点型数据浮点型常量的表示方法1.十进制小数形式由数字和小数点组成;如:0.123,123.0,123.,.123,0.0。2.指数形式如:1.23×103表示如下:1.23E3或1.23e3;

整个实数分为两部分:小数部分和指数部分注意:此种表示方法小数部分必须有数,指数部分必须有数且为整数输出按照规范化形式。27规范化的指数形式一个实数如1230.可以有多种指数表示形式,1230.e0,123.e1,12.3e2,1.23e3,0.123e4,0.0123e5,……其中,1.23e3是规范化的指数表示形式即规范化的指数形式小数部分必须是>=1且<10的小数如5689.65对应的规范指数形式为:5.68965e328实型数的存储原理计算机内实数都以其指数形式存储。一个实数按指数形式来存储:分小数和指数分别存储如:

л可表示为

0.314159×100.314159E1计算机中存储:10.314159+1具体各占多少位由编译系统来定如一个字节存储指数,三个字节存储尾数29浮点型变量的分类C中定义浮点型:

float单精度数double双精度数

longdouble长双精度类型比特数有效数字数值范围float32(4字节)6~7-3.4×10-38~3.4×1038double64(8字节)15~16-1.7×10-308~1.7×10308longdouble128(16字节)18~19-1.2×10-4932~1.2×10493230由于float的指数部分对应的指数范围为-128~128,所以取值范围为:-2^128到2^128,约等于-3.4E38—+3.4E38精度(有效数字)主要看尾数位:float的尾数位是23bit,对应7位十进制数类型比特数有效数字数值范围float32(4字节)6~7-3.4×10-38~3.4×103831浮点型变量及舍入误差floata,b;a=123456.789e5;b=a+20;printf(“a=%f,b=%f”,a,b);输出情况:a=12345678848.000000,b=12345678848.000000一个实型变量的存储位数的有限性导致其表示数的有效数字数也是有限的,如float的有效数字只有7位。32浮点型常量的类型f=2.45678*4523.65系统将运算数作为双精度数来进行存储和运算。取结果的前7位赋给实型变量f。精度高,但速度慢;若想让运算数作为单精度数来存储和运算,可强制指定,方法是:在数后加字符F(或f)关于实型常量的一点说明:333.5字符型数据3.5.1字符常量‘a’,‘A’,‘x’,‘D’,‘!’,……字符:用单引号括起来的单个字符。34字符在计算机中的存储C语言的字符型数据在计算机中以相应的ASCII(AmericanStandardCodeforInformationInterchange)代码存放。ASCII码表:P364附录A35控制字符:如换行、回车等

C语言中用转义字符表示转义字符形式:以“\”开头的字符序列。反斜杠如‘\n’代表换行。常用的以“\”开头的特殊字符:转义字符及其作用36字符形式含义ASCII代码\n换行10\t制表符(TAB)9\b退格8\r回车13\f换页12\\反斜杠92\’单引号39\”双引号34\ddd1-3位8进制数所代表的字符\xhh1-2位16进制数所代表的字符转义字符及其作用37三、C中对字符型的定义main(){printf(“abc\tde\rf\tg\n”);printf(“h\ti\b\bjk”);}demo305.c特殊字符的程序示例:P48例3.5

383.5.2字符型变量类型用关键字char标识字符[signed]char8(bit)-128~127unsignedchar8(bit)0~255printf(“char:%dbytes\n”,sizeof(char));39‘a’的ASCII码为97,其在内存中存储形式为:…charc;c=‘a’;…‘a’c01100001c字符型变量定义40#include<stdio.h>intmain(void){charc1,c2;c1=‘a’;c2=‘b’;printf(“%c%c\n”,c1,c2);}输出:

ab

标准的字符操作程序示例97c198c201100001c101100010c241因其在内存中以二进制编码形式存储,因此在输出时可与相应范围内整数相互转换。ab9798#include<stdio.h>intmain(void){charc1,c2;c1=‘a’;c2=‘b’;printf(“%c%c\n”,c1,c2);printf(“%d%d”,c1,c2);}42#include<stdio.h>intmain(void){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d”,c1,c2);}ab9798在输入时可与相应范围内整数通用。查看demo306.c43#include<stdio.h>intmain(void){charc1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);}AB例3.7小写字母转大写字母3.5.4字符串常量双撇号”括起来的字符序列是字符串常量“Hello,World!\n”,“CHINA”,“a”,“1234”注意’a’和”a”是不同的。字符串的存储44CHINA\0aa\0查看char_string.c45(1)C语言允许在定义变量的同时将变量初始化;如:

inta=3;charm,n=‘k’;(2)inta=b=c=3;

是不允许的;要写成:inta=3,b=3,c=3;或者inta,b,c; a=b=c=3;3.6变量赋初值463.7各种数值型数据间的混合运算doublelongunsignedintfloatchar,short必定进行的转化运算类型不同时的转化方向允许不同类型间混合运算:字符,整数,实数。但运算方法是:运算前先将运算数转为同一类。示例i整型,f浮点型,d

double型,e

long型 10+’a’+i*f-d/e47查看int_unsignedint.c48

3.8算术运算符与算术表达式C运算符范围很宽:除了控制语句和输入输出以外几乎所有操作都作为运算符处理。C的运算符有以下几类:49C运算符简介1.算术运算符(+-*/%)2.关系运算符(><==>=<=!=)3.逻辑运算符(!&&||)4.位运算符(<<>>~|^&)5.赋值运算符(=及其扩展赋值运算)6.条件运算符(?:)7.逗号运算符(,)8.指针运算符(*和&)9.求字节数(sizeof())10.强制类型转换运算符((类型))11.分量运算符(.->)12.下标运算符([])13.其他(如函数调用运算符())50算术运算符与算术表达式1.基本算术运算符+加法运算符(双目)或正值运算符(单目)-减法运算符或负数运算符*乘法运算符/除法运算符%模运算符或求余运算符,只对整数进行运算(1)‘/‘运算符与传统意义上除法不尽相同:若两个运算数有一个是实数则结果也为实数;但若两个都是整数则结果一定为整数。如:5/3=1说明查看divide.c51算术表达式和算符的优先级与结合性用算术运算符和括号将合法的运算对象连接起来的、符合C的语法规则的式子,称为C算术表达式。说明:(1)运算对象可以是常量、变量、函数等。(2)C规定了运算符的优先级和结合性。按优先级别高低次序执行。C中规定:*%/优先级相同+-优先级相同且*/%优先级高于+-表达式:a-b*c123+456a+ba-b*ca-(b*c)优先级:52若两运算符优先级别相同则按规定结合方向处理。

C规定:算术运算符的结合方向是:“自左至右”

即“先左后右”,又称“左结合性”算术表达式结合性可能有两种运算方法(a-b)+c或a-(b+c)按C左结合性的规定:

b应先左后右的方法结合即(a-b)+cC中某些运算符是规定为右结合性的。表达式a-b+cP378附录D53强制类型转换可以利用强制类型转换运算符将一个表达式转换成所需类型。(double)a(int)(x+y)(float)(5/3)注意(int)x+y54强制类型转换运算符[例3.8]intmain(void){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}x=3.600000,i=3运行结果:查看divide.cpart255强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成任意所需类型。(int)(x+y)(double)a(float)(5%3)一般形式:

(类型名)(表达式)|变量名说明:(1)强制类型转换运算符优先级较高,见附录D(2)强制类型转换时得到一个所需中间变量,原变量类型并未发生改变56自增、自减运算符++i,--ii++,i--在使用i之前先将i值加(或减)1并赋给i使用i之后再将i值加(或减)1并赋给ii=i+1写做:i++或++ii=i-1写做:i--或--i程序1:i=3;j=++i;程序2:i=3;j=i++;j=4i=4j=3i=457自增、自减运算符1.++和--只能用于变量,不能用于常量和表达式。只能用于左值,因其包含一赋值过程;5++

(x*y)++2.结合方向:右结合-i++相当于-(i++)例如inti=3;printf(“%d”,-i++);查看divide.cpart358表达式使用中的问题说明避免歧义产生inti=3;表达式(i++)+(i++)+(i++)值是多少?i的值是多少?i+++j(i++)+jori+(++j)?59inta;a=3;“=”即为赋值运算符a=3为赋值表达式3.9赋值运算符和赋值表达式赋值运算符将一个数据或表达式的值赋给一个变量。60原则是将右边数据结果转变成左边变量类型P60赋值类型转换当赋值运算符两侧类型不一致时系统自动进行类型转换1.将实型数据赋给整型变量:截取整数部分2.将整型数据赋给单双精度变量:增加精度3.将double数据赋给float变量:取前7位将float数据赋给double变量:扩展为16位4.字符型数据赋给整型变量:符号位扩展5.int,short,long型数据赋给char型变量:截断6.int型数据赋给long型、long型赋给int型:符号位扩展7.unsigned型数据赋给signed型变量:数值不变,按照有符号数理解8.signed型数据赋给unsigned型变量:数值不变,按照无符号数理解不同类别的整型之间的赋值规则:将存储单元的存储形式直接传送。达到的效果:值尽量不变化,但高级类型赋给低级类型时,会高位被截。61复合的赋值运算符a+=3x*=y+8x%=3等价于a=a+3等价于x=x*(y+8)等价于x=x%3复合赋值运算符:在赋值运算符前加上其他运算符形成的一个新运算符。(1)C规定了10种复合赋值运算符:+=,-=,*=,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论