C语言第3章数据类型.ppt_第1页
C语言第3章数据类型.ppt_第2页
C语言第3章数据类型.ppt_第3页
C语言第3章数据类型.ppt_第4页
C语言第3章数据类型.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1,第 3 章 数据类型、运算符及表达式,基本数据类型的存储方式和表示方式 不同类型间数据转换的原则与方法 有关运算符与表达式的运用,2,一个C程序是由一个或多个函数组成,函数体由若干条C语句组成,那么,C语句又是由什么组成?,思考,主函数 函数n,C语句1 C语句2 C语句n,关键字 标识符 字符集,C 程 序,3,注意:所有关键字都要用小写英文字母表示,且不允许被用作标识符使用!,auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while,关 键 字,4,标 识 符,标识符是由英文字母、数字及下划线构成的字符串,并且首字符必须为字母或下划线。 用来标识常量、变量、函数名、数组名、类型定义符等。 注意:关键字是用户标识符的禁区! 命名原则:见名知意!大小写有区别! 不同C语言版本允许的长度不一样 ANSI C为8个字符 Turbo C 为32,5,练习:请找出不合法的标识符.,union abc_123 2ab3 d+b abc8* INT,stu _bc8 abcdefghi -s10 *&%$# abc.123,6,字 符 集,字符集指的是程序设计语言中所采用的各种符号的集合,如字母、数字、标点符号、运算符号等。 字符是组成语言的最基本的元素。,C语言字符集,7,3.1 C 的数据类型,在程序中对用到的所有数据都必须指定其数据类型,3.2 常量与变量,常量的定义: 在程序执行过程中值不发生改变的量。 常量的分类: 按数据类型分类 整型常量 4 -3 037 0xff 实型常量 -0.001 128.8 1.25e-3 字符常量 1 a D 按表现形态分类 字面常量或直接常量 符号常量,关于常量,9,符 号 常 量,概念 符号常量是一种特殊形式的常量,即用一个标识符表示一个常量。 定义形式 #define 常量名 常量值 含义清楚 在需要改变一个常量时能做到一改全改 一般用大写字母表示 符号常量在程序中的应用,#define PI 3.1415926 #include void main( ) float r,a,c; r=2.5; a=PI*r*r; c=2*PI*r; printf(“r=%f,a=%f;c=%fn”,r,a,c); ,10,关于变量,变量的定义 变量是程序执行过程中其值可以改变的量。 变量的分类 整型变量 实型变量 字符变量 变量的命名(同标识符的命名) 变量的使用 先定义后使用,每一个变量指定为一确定类型 含义清楚 count name day 一般用小写字母表示,11,3.3 整 型 数 据 int,三种形式: 十进制数 如:12、345、0 八进制数(以0开头) 如:012、045 十六进制数(0x开头) 如:0x12、0x345,整型常量,0123 ( )10 0X123 ( )10 0XFF ( )10,83,255,291,例 30000为int型 65536为long int型,例 12与12L,整型常量的类型: 根据其值所在范围确定其数据类型;,在整常量后加字母L或l,认为它是long int型常量。,十进制无符号整常数的范围为065535,有符号数为3276832767 八进制无符号数的表示范围为00177777 十六进制无符号数的表示范围为0X00XFFFF,12,整型常量举例,#include void main( ) printf(“%d,%o,%xn”,123,123,123); printf(“%d,%o,%xn”,023,023,023); printf(“%d,%o,%xn”,0x12,0x12,0x12); ,例:整型常量的不同进制表示。,%d,%o,%x是输入输出的格式字符串 d表示十进制 o表示八进制 x表示十六进制,上述程序中的n 表示输出后回车换行!,13,分 类 基本型(int) 短整型(short int、short) 长整型(long int、long) 无符号型 无符号整型(unsigned int) 无符号短整型(unsigned short) 无符号长整型(unsigned long),整型变量,取值范围 -3276832767 -3276832767 -21亿21亿 065535 065535 042亿,所占位数 16 16 32 16 16 32,14,整型变量在内存中存储,高字节,低字节,符号位 0表示正整数 1 表示负整数,采用补码表示 正整数补码与原码相同 负整数补码 = 原码(取反)+1,例如 47 0x2F 原码 0000,0000,0010,1111 取反 1111,1111,1101,0000 加1得到 - 47的补码 1111,1111,1101,0001,取值范围:-215 215-1 -3276832767,15,整型变量定义,定义形式 数值类型 变量名表; 说明 数值类型即类型说明符int、short、long等。 变量名表可为一个或多个变量名,之间用逗号间隔。 变量被定义后,其取值范围也被确定。,#include void main( ) int a,b,c; a=4; b=5; c=a*b; printf(“a*b=%dn”,c); ,等价于: int a; int b; int c;,16,#include void main( ) int a,b; a=32767; b=a+1; printf(“%d,%d”,a,b); ,运行结果: 32767,32768,a:,b:,整型数据的溢出,32767,-32768,溢出不报错 会出现不可预料后果,17,使用整型数据时的注意事项:,若某系统的C版本确定short int与int型数据在内存中占据的长度相同,则二者等价。 一个int型常量(-3276832767)可以赋值给int型变量或long型变量。 其值在-231231-1内,而在-215215-1外的整数只可赋值给long型变量。 int a; a=111111; 不报错但结果不对 常量无unsigned型,但一个非负整数可赋值给unsigned型整数变量 ,但要注意值的范围。 unsigned a; a=10; 不报错但结果不对 长整型数的表示方法是在数值后面加字母l或L,如234L。 不同的数据类型有不同的存储字长,使用时注意其取值范围。,18,3.4 浮点型数据,浮点型常量 即实数。以十进制形式表示。 表示形式 小数形式:由数字和小数点组成 如1.56、 - 0.231 指数形式(科学计数法):小数E(或e)整数 “小数”表示实数的数值位,即尾数部分。 “E”代表十进制数的基数10。 “整数”表示10的乘幂。,浮点型常量,1.23103,3.918e-2,1.23E3,3.91810-2,注意:字母E 之前必须 有数字!,19,浮点型变量,分 类 单精度(float) 双精度(double) 长双精度(long double),有效数字 7位 1516位 1819位,所占位数 32 64 128,变量的定义 float x,y; /*指定x,y为单精度浮点型变量*/ double z; /*指定z为双精度浮点型变量*/,浮点型常量不分单、双精度,都按双精度double处理。一个浮点型常量可以赋给一个float型或double型,根据变量的类型截取浮点型常量中相应的有效位数字。,如: float a; a=123456.123;,20,浮点型数据的舍入误差,由于浮点型变量的存储单元有限,因而小数部分的有效数字是有限的,超过部分将舍去。,/*例3.4*/ #include void main( ) float a,b; a=123456.789E5; b=a+20; printf(“%f”,b); ,运行结果: 12345678848.000000,避免大数与很小数直接加减 判断两个浮点型变量是否相等,是判断二者的差的绝对值是否小于一个很小的数,21,变量初始化:定义时赋初值,变量的使用:先定义,后使用,变量定义位置:一般放在函数开头,例: 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;,例1 int student; stadent=19; /Undefined symbol statent in function main,例2 float a,b,c; c=a%b; /Illegal use of floating point in function main,22,3.5 字符型数据,概念:指用单引号(撇号)括起来的单个字符。 例 a b = 5 字符常量的值:该字符的ASCII码值,字符常量,字符常量的分类 一般字符常量 x ? a A 2 转义字符常量 以一个反斜杠“”开头的字符序列,有特定含义。,ASCII码(见教材P364附录A) 8 位对字符编码, 码值0-255 032 为控制字符(不可印刷字符) 33-255为可印刷字符 128-255 为扩展ASCII码,23,转义字符常量表,101 - A 012 - n 376 - x61 - a 60 - 0 483 - (),24,#include void main( ) printf(“101 x42 Cn“); printf(“I say:“How are you?“n“); printf(“C Programn“); printf(“Turbo C“); ,运行结果:(屏幕显示) A B C I say:”How are you?” C Program Turbo C,例 #include void main( ) printf(“Yb=n”); ,运行结果: 屏幕显示:= 打印机输出:,转义字符的使用,25,运行结果: 屏幕显示:,屏幕输出在后面的字符会取代原来屏幕上该位置上显示的字符,#include void main( ) printf(“_ab_ct_derftgn“); printf(“htibbj_k“); ,打印机输出:,f,a,b,c,g,d,e,h,j,i,k,转义字符的使用,26,字符变量,关于字符变量 字符变量用来存放字符常量。 一个字符变量只能存放一个字符常量。 一个字符变量在内存中占用一个字节的空间。,字符变量的定义格式: char 变量名表;,字符变量的赋值: 变量名字符常量; 变量名整型数据; 举例: char c; char ch1,ch2; c=97;ch1=B;ch2=C;,27,#include void main( ) char c1,c2; c1=97;c2=98; printf(“%c,%cn”,c1,c2); printf(“%d,%dn”,c1,c2); ,#include void main( ) char c1,c2; c1=a;c2=b; c1=c1-32;c2=c2-32; printf(“%c,%c”,c1,c2); ,运行结果: A,B,字符变量存放字符ASCII码 char与int数据间可进行算术运算 char与int数据可以相互赋值,运行结果: a,b 97,98,28,#define PRICE 12.5 #include void 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,29,分 类 基本型(int) 短整型(short int、short) 长整型(long int、long) 无符号型 无符号整型(unsigned int) 无符号短整型(unsigned short) 无符号长整型(unsigned long),整型变量,取值范围 -3276832767 -3276832767 -21亿21亿 065535 065535 042亿,所占位数 16 16 32 16 16 32,30,浮点型变量,分 类 单精度(float) 双精度(double) 长双精度(long double),有效数字 7位 1516位 1819位,所占位数 32 64 128,31,字符变量,关于字符变量 字符变量用来存放字符常量。 一个字符变量只能存放一个字符常量。 一个字符变量在内存中占用一个字节的空间。,字符变量的定义格式: char 变量名表;,字符变量的赋值: 变量名字符常量; 变量名整型数据; 举例: char c; char ch1,ch2; c=97;ch1=B;ch2=C;,32,概念:字符串常量是指用一对双引号括起来的字符序列。如“ Hello”、 “good”等。 字符串常量的存储: 系统自动在字符串的末尾加上一个字符串结束标记0,以此判断字符串是否结束。 程序中长度为n个字符的字符串常量,在内存中需要用n+1个字节空间来存储它。,字符串常量,例字符串“string”的存储,33,字符常量与字符串常量的区别,二者表示形式不同。 字符常量的定界符是,而字符串常量的定界符是“”。 如:a是字符常量,而“a”是字符串常量。 存储空间不同。 一个字符常量只占1个字节,而一个含有单个字符的字符串常量需要占用2个字节。 如:a在内存中只占1个字节,“a”则需占用2个字节空间。 不允许将一个字符串常量赋给一个字符型变量。 如:ch=a 是正确的;而ch=“a” 不正确。,34,允许定义变量的同时使变量初始化 例如: int a=3; 等价于 int a; a=3; 允许只对其中一部分变量赋初值 例如:int a=3,b,c=4; char ch1=x,ch2; 若有几个变量初值相同,必须分别赋值 例如:int a=2,b=2,c=2;,3.6 变量赋初值,int a=b=c=2;,对字符型变量初始化时,既可以将字符用单引号括起来直接赋值,也可以使用该字符的ASCII码进行赋值。 例如:char ch=A; 等价于 char ch=65;,35,变量的地址,程序运行时,变量的值以二进制的形式存储在内存中。存储空间的大小由变量的数据类型决定。,内存的编址: 内存分为若干个存储单元。 每个单元存放一个字节的数据。 每个单元有唯一的一个地址。 变量存放在内存单元中,若变量所占空间包括多个存储单元,则把首地址作为变量地址。,36,不同类型的数据混合运算,先转换成同一类型,然后进行运算。,3.7 各类数值型数据间的混合运算,double,float,long,unsigned,int,char, short,必定的转换,不同类型数据转换方向,37,隐式转换 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换 显式转换(强制转换) 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 可能发生较高类型向较低类型转换,不同类型数据间的转换,/*例3.8*/ #include void main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); ,结果:x=3.600000 , i=3,38,例如:习题3.9 (1) x+a%3*(int)(x+y)%2/4 x=2.5, a=7, y=4.7,2.5+7%3*(int)(2.5+4.7)%2/4,2.5+7%3*(int)(7.2)%2/4,2.5+1*7%2/4,2.5+7%2/4,2.5+1/4,2.5+0,2.5,39,按照运算类型分 算术运算符 +、-、*、/、% 关系运算符 、=、|、& 赋值运算符 =、+=、-=、*=、/=、%= 条件运算符 ? : 逗号运算符 , 指针运算符 *、& 求字节数运算符 sizeof 强制类型转换运算符 (类型) 分量运算符 .(点)、 下标运算符 其他函数调用运算符 ( ),附录C,C 运算符简介,40,按照运算对象分 单目运算符:! 双目运算符:+、- 三目运算符:? :,41,学习运算符应注意: 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,赋值运算符与赋值表达式,逗号运算符与逗号表达式,逻辑运算符与逻辑表达式,算术运算符与算术表达式,优先级别,低,高,关系运算符与关系表达式,42,例 5/2 = 5/-2 = -5/2.0 =,例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2,2 -2 -2.5,1 -1 1 0 (),基本算术运算符: + - * / %,优先级:- -* / % -+ - 结合方向:从左向右 结果类型:先数据转换再运算,若有一个运算数为实数,结果是double型。 两整数相除,结果为整数;两个实数相除,结果为实数。,3.8 算术运算符和算术表达式,% 要求两侧均为整型数据,注意表达式: 1/3*3 1*3/3 结果是否一样?,43,例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,自增、自减运算符 + -,使变量值加1或减1,+i, -i (在使用i前,使i的值加减1) i+,i- (在使用i后,使i的值加减1 ),说明: + - 不能用于常量和表达式,只能用于变量。 如 5+,(a+b)+是不合法的 结合方向: 自右向左 优先级: - + - - * / % - + -,例 -i+ -(i+) i=3; printf(“%d”,-i+);,44,(1) k=34512 a=6,(2) k=3339 a=6,例:设a=3 ,若执行语句k=(a+)+(a+)+(a+)后的k值为多少?,turbo c运行结果,例:i+j= (i+)+j 还是= i+(+j)?,c编译系统将尽可能多的将多个字符组成一个运算符, 并按自左而右的方法,为避免误解最好采取都能理解的方法,写成(i+)+j;,45,3.9 赋值运算符和赋值表达式,简单赋值运算符 =,变量标识符=常量或表达式,说明: “”是一个双目运算符,需要左右两个运算量。 “”是赋值运算符,不等于等号,没有相等的含义。 “”左端的运算量必须是单个变量,而不能是表达式。 赋值运算中,使运算符左端的变量具有右端表达式的值。,46,(1)a=a+1; 等价于:a+; (2) a=b=c=2; 连续赋值 等价于:a=(b=(c=2); 或者: a=2;b=2;c=2; (3) a=2+(b=3); 等价于:b=3;a=2+3=5; (4) a=(b=2)*(c=3); 等价于:b=2;c=3;a=2*3=6;,允许赋 值表达式中含 有另外的赋值 表达式,进行 连续赋值,举 例,47,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,复合赋值运算符,+= = *= /= %= = &= = |=,在“=”之前加上其他运算符,48,赋值表达式,由赋值运算符将一个变量和一个表达式连接起来的式子,结合方向:自右向左,3=x-2*y; a+b=3;,a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2),/表达式值为5,a,b,c值为5,/ b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,a+=a-=a*a,( ),a+=a*=a-=a*=3,( ),( ),( ),

温馨提示

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

评论

0/150

提交评论