第3章基本数据类型和表达式_第1页
第3章基本数据类型和表达式_第2页
第3章基本数据类型和表达式_第3页
第3章基本数据类型和表达式_第4页
第3章基本数据类型和表达式_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、数据类型与表达式Chap 3 基本数据类型和表达式基本数据类型和表达式数据类型与表达式2主要内容 常量和变量 整型数据 实型数据 字符型数据 表达式 数据的存储和类型转换数据类型与表达式3C 语言基本要素数据类型基本数据类型整型int实型(浮点型)float double字符型char构造数据类型数组、结构、联合、枚举指针类型空类型对数据的操作运算运算符和表达式数据类型与表达式4C语言基本要素 标识符:利用符号表示数据 分类: 关键字:系统中已有明确含义 ,不允许改变 (例如:if、else等) 预定义标识符:系统中已有含义,但可以改变 (例如:define、scanf等), 但一般不去改变!

2、但一般不去改变! 用户标识符:用户根据自己的需要定义的符号 (包括符号常量、变量) 先定义,然后才能使用先定义,然后才能使用数据类型与表达式5C语言基本要素用户标识符的基本要求:只能由数字 (09)、26个大小写字母、下划线 (_)构成数字不能作为首字符C语言中区分大小写字母 (即:A与a是两个不同的符号)例如:下列标识符中,不符合C语言语法规范的是: 。Acount B_abc1 Ca#12 DStudentC C数据类型与表达式6常量和变量 之 常量字面常量(常数):数据123 (整型)4.56 (实型) A (字符型)符号常量:用标识符表示的常量数据:PI:EPS基本形式:基本形式: #

3、define 数据类型与表达式7例3.1 求球的表面积和体积# include void main( ) float r, s, v; scanf(%f, &r); s=4.0*3.14*r*r ; v=4.0/3.0*3.14*r*r*r ; printf(s=%f, v=%fn, s, v);s=4.0*3.14159*r*r ; v=4.0/3.0*3.14159*r*r*r ; 数据类型与表达式8例3.2 符号常量# define PI 3.14# include void main( ) float r, s, v; scanf(%f, &r); s=4.0*PI*r

4、*r ; v=4.0/3.0*PI*r*r*r ; printf(s=%f, v=%fn, s, v);# define PI 3.14159 说明:说明: 一般情况下符号常量使一般情况下符号常量使用大写字母表示用大写字母表示 符号常量在程序运行时,符号常量在程序运行时,只能读取,不能修改只能读取,不能修改数据类型与表达式9变量C语言中的量 字面常量(常数):数据 符号常量:用标识符表示的常量数据在程序的运行过程中,其值不能被改变 变量:存放数据的工作单元,在程序的运行过程中,其值可以改变数据类型与表达式10变量的定义变量定义的一般形式变量定义的一般形式 类型名 变量列表;变量名:小写字母,见

5、名知义变量名:小写字母,见名知义类型名:类型名: 整型int 实型(浮点型)float double 字符型char数据类型与表达式11变量的定义int i, j, k; (定义定义i, j, k为整型变量)为整型变量)char c; (定义定义c为字符型变量)为字符型变量)float x, y;double area, length; 变量名代表内存中的一个存储单元变量名代表内存中的一个存储单元 用于存放该变量的值用于存放该变量的值 该存储单元的大小由变量的数据类型决定该存储单元的大小由变量的数据类型决定数据类型与表达式12变量的定义与使用变量必须 # include void main(

6、) int x, y; x = 3; y = x*x ; printf(“%d”, y ) ; 一个变量名只能定义一个变量名只能定义一次。变量一般都定义在一次。变量一般都定义在程序的头上,不能定义在程序的头上,不能定义在程序的中间或后面。程序的中间或后面。先先定义后后使用数据类型与表达式13变量的使用变量变量: 先定义,后使用先定义,后使用# include void main( ) int x, y; y = x*x ; printf(“%d”, y ) ;/没有初始化没有初始化x = 3; 先赋值,后引用先赋值,后引用数据类型与表达式14变量的赋值 赋初值:在定义变量时对它赋值 int a

7、 = 5, b = 3; 赋值表达式:int a, b;a = 5b=3 输入函数: scanf(“%d%d”, &a, &b);数据类型与表达式15整型数据整型常量(整数)三种表现形式三种表现形式 十进制整数:正、负号,09,首位不是0例:10,123 八进制整数:正、负号,07,首位是0例:010,0123 16进制整数:正、负号,09,af,AF,前缀是0 x,0X例:0 x10,0 x123,0 xBF,0Xac数据类型与表达式16123 = 1111011 (B) 二进制 =173 (O) 八进制 =7B (X) 十六进制int i=0173;int j=0 x7b;

8、int k=123;例:16 020 0 x10 10 012 0XA进制补充:进制补充: 十进制十进制 R R进制进制 ( (整数:除法整数:除法求余数;小数:乘法求整数求余数;小数:乘法求整数) ) R R进制进制 十进制十进制 ( (多项式展开多项式展开) )数制的表示数据类型与表达式17整型变量int ai, bi, ci, di = 0;ai = 1;bi = -27;ci = 012; 整型变量的值是整数,它的取值范围有限 最小取值(16位)范围 -32768,32767 整型数据的溢出数据类型与表达式18 正数的原码、反码和补码相同正数的原码、反码和补码相同1的补码的补码 0 0

9、00 0000 0000 000132767的补码的补码 0 111 1111 1111 1111(215-1) 负数负数 -1 原码原码 1 000 0000 0000 0001 反码反码 1 111 1111 1111 1110 原码取反原码取反 补码补码 1 111 1111 1111 1111 反码反码1 -32767: 1 000 0000 0000 0001 -32768: 1 000 0000 0000 0000数据类型与表达式1932767 补码补码 0 111 1111 1111 1111-32767 原码原码 1 111 1111 1111 1111 反码反码 1 000

10、0000 0000 0000 原码取反原码取反 补码补码 1 000 0000 0000 0001 反码反码1-32768 = -32767-1 补码补码 1 000 0000 0000 0000数据类型与表达式20 -32768 -1 0 1 32767 32767 0111 1111 1111 1111 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -32767 1000 0000 0000 0001 -32768 1000 0000 0000 000032

11、768 = 32767+11000 0000 0000 0000 = -32768-32769 = -32768-10111 1111 1111 1111 = 32767数据类型与表达式21整型变量的分类整型变量的分类共六种共六种有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型(signed)int (signed)short (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int) 注意:注意:括号表示其中的内容是可选的。数据类型与表达式22整型常量的类型 一个整常量后

12、面加一个字母一个整常量后面加一个字母u u或或U U,认为,认为是是unsigned unsigned intint型,如型,如12345u12345u。 在一个整常量后面加一个字母在一个整常量后面加一个字母l或或L,则认,则认为是为是long int型常量。型常量。 例如:例如: 123l, 432L,0L数据类型与表达式23实型数据实型常量(实数) 浮点表示:0.123 123.4 1. 科学计数法:123e4 0.2e-1 规范化的指数形式: 在字母e/E之前的小数部分中,在小数点之前有且仅有一位非零数字 例如: 1.23e6, 2.0e-2数据类型与表达式24实型变量 单精度浮点型fl

13、oat x, y, z; 双精度浮点型double u, v, w; 存放形式 浮点型数据是按照浮点型数据是按照指数形式存储的。指数形式存储的。 系统把一个浮点型系统把一个浮点型数据分成小数部分数据分成小数部分和指数部分,分别和指数部分,分别存放。存放。 指数部分采用规范指数部分采用规范化的指数形式。化的指数形式。4 4字节存储字节存储8 8字节存储字节存储数据类型与表达式25数据精度和取值范围 数据精度 取值范围单精度 七位有效数字 (10-38 1038)双精度 十六位有效数字 (10-308 10308 ) 数据精度 与 取值范围是两个不同的概念: float x = 1.2345678

14、9; float y = 123456789; 虽在数据表示范围内,但无法精确表达。 float z = 1.2e55 z的精度要求不高,但数据表示范围超出。 并不是所有的实数都能在计算机中精确表示。 实型常量的类型都是double。x=1.234568y=1.234567e8显示指定:显示指定:1.65f数据类型与表达式26字符型数据字符常量 a A 9 + $ ASCII字符集:列出所有可用的字符每个字符:惟一的次序值( ASCII 码) 0-9 : ASCII值:48-57 数字: 0 =0-48 A-Z: ASCII值:65-90 a-z : ASCII值:97-122数据类型与表达式

15、27转义字符 反斜杠后跟一个字符或数字 字符常量,代表一个字符 n 101 x41 A 所有字符都可以用转义字符表示数据类型与表达式28字符变量 char c1, c2, c3; c1=2; c2=#; c3=A; 或 c3=65; int i; i=65; 或 i=A; 整型变量和字符变量的整型变量和字符变量的定义和赋值可以互换定义和赋值可以互换 【 ASCIIASCII码范围码范围】数据类型与表达式29字符数据的存储形式 字符的存储字符的存储在内存中,每个字符占用一个字节,存储该字在内存中,每个字符占用一个字节,存储该字符的符的ASCII码码字符字符 ASCII码码 内存内存A 65 01

16、00 0001 B 66 0100 0010 字符的数值特征字符的数值特征字符可以当整数用,其值就是其ASCII码A+1 =?数据类型与表达式30字符运算 大小写英文字母转换 b - a = B - A z - a = Z - A m M l数字字符和数字数字字符和数字 9 - 0 = 9 - 0 9 = 9 + 08 8a-AA-a0lm (a - A) = MlM + (a - A) = ml8 - 0 = 8l 8 + 0 = 8数据类型与表达式31字符串常量 字符串常量是一对双撇号双撇号括起来的字符序列 合法的字符串常量: “How do you do.”, “CHINA”, “a”

17、, “$123.45” 字符串的输出,如: printf(“How do you do.”); 注意注意: :不能把一个字符串常量赋给一个字符变量 char c; c=a; c”a”;c”CHINA”; 数据类型与表达式32 规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串是否结束。 规定以字符作为字符串结束标志。 如:如:如果有一个字符串常量” ,实际上在内存中是:CHINA0 它占内存单元不是个字符,而是个字符,最后一个字符为0。但在输出时不输出输出时不输出00。字符串常量数据类型与表达式331. 在定义变量的同时初始化变量。如如: : int a=3; f

18、loat f=3.56; char c= a;2. 可以使被定义的变量的一部分赋初值。如如: : int a,b,c=5;3. 如果对几个变量赋以同一个初值,应写成: int a=3,b=3,c=3;不能写成int a=b=c=3;数据类型与表达式34不同类型数据的混合运算不同类型数据的混合运算类型转换1. 自动转换2. 强制转换数据类型与表达式35自动类型转换(非赋值运算)水平方向:自动垂直方向:低 高 高 double float unsigned long long unsigned unsigned short 低 int char, short数据类型与表达式36自动类型转换(非赋值

19、运算)A + 12 10.05 65 77 66.95高 double float unsigned long long unsigned unsigned short 低 int char, short数据类型与表达式37自动类型转换(赋值运算)变量 赋值运算符 表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左侧的变量的值作为表达式的值将赋值运算符右侧表达式的类型将赋值运算符右侧表达式的类型自动转换成赋值号左侧变量的类型自动转换成赋值号左侧变量的类型数据类型与表达式38自动类型转换(赋值运算)double x;x = 1;x = ?short a =

20、1000;char b = A;long c = 80000;c = a + b;c = ?int ai;ai = 2.56;ai = ?short int bi;bi = 0 x12345678Lbi = ?数据类型与表达式39例例3.3# include void main( ) double x; int ai; short int bi; short a = 1000; char b = A; long c = 80000; c=a + b; x=1; ai=2.56; bi = 0 x12345678L; printf(%f,%ld,%d,%xn, x, c, ai,bi);1.00

21、0000,1065,2,56781.000000,1065,2,5678数据类型与表达式40强制类型转换运算符u功能: 强制类型转换运算符将一个表达式转换成所需类型。 优先级同+,从右向左 一般形式: (类型名)(表达式)u例如:例如: (double) 将转换成double类型 (int)(x+y) 将x+y的值转换成整型 (float)(5%3) 将5%3的值转换成float型数据类型与表达式41例3.4 强制类型转换。#include #include void void () ) ; ; ; ();(); printf(“x=%fprintf(“x=%f, i=%dn”i=%dn”,x

22、 x,i);i);当自动类型转换不能实现目的时,可以用强制类型转换。 运行结果:运行结果: x3.600000, i=3数据类型与表达式42算术运算符和算术表达式 算术运算符 单目 + - + - 双目 + - * / % 注意! % 模(求余) ,必须是整型数据565,941,10040 / 整数除整数,得整数;如有一个是实数,得实数1/20,9/42 双目运算符两侧操作数的类型要相同数据类型与表达式43自增、自减运算符u作用作用: 使变量的值增或减使变量的值增或减,有两类:有两类:1. +i,-i(在使用之前,先使的值加(在使用之前,先使的值加(减)减)2. i+,i- (在使用之后,使的

23、值加(减)在使用之后,使的值加(减) 例如:例如: ; i的值先变成的值先变成4, 再赋给再赋给, j的值均为的值均为 ; 先将先将 i的值的值3赋给赋给,的值为,然后变为的值为,然后变为数据类型与表达式44注意:注意: (1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式, (2)和的结合方向是“自右至左”。 自增(减)运算符常用于循环语句中使循环自增(减)运算符常用于循环语句中使循环变量变量 自动加。也用于指针变量,使指针自动加。也用于指针变量,使指针指向下一个地址指向下一个地址自增、自减运算符数据类型与表达式45自增运算和自减运算int i, k;i=2;k=+i;

24、i=2;k=i+;i=3k=3i=3k=2k=ii=i+1i=i+1k=i数据类型与表达式46例3.5#include void main( ) int a, b, c; b=5; c=5; a=+b+c-; printf(%d,%d,%dn, a, b, c); a=b-c; printf(%d,%d,%dn, a, b, c); a=-b+c; printf(%d,%d,%dn, a, b, c);b=b+1, a=b+c, c=c-1a=b-c, b=b-1a=-(b+)+ca=(b-)-ca=-b+c, b=b+1建议: 不要写别人看不懂的程序;不要写别人看不懂的程序; 不要写不知道系

25、统会怎样执行的程序不要写不知道系统会怎样执行的程序数据类型与表达式47算术运算符的优先级和结合性单目 + - + -双目 * / %双目 + -高低从右向左从右向左-5+3%2 = (-5)+(3%2) = -43*5%3 = (3*5)%3 = 0-i+ -(i+)数据类型与表达式48算术表达式例3.16 数学式 - C表达式s(s-a)(s-b)(s-c)(x+2)e2xs*(s-a)*(s-b)*(s-c)(x+2)*exp(2*x)数据类型与表达式49赋值表达式 赋值运算符 = 赋值表达式: 变量=表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左

26、侧的变量的值作为表达式的值n = 2;n = n+1; 赋值运算符的优先级和结合性优先级较低,从右向左x=y=3; x=(y=3)数据类型与表达式50赋值表达式实例分析 实例1 请分析下面的赋值表达式 (a=3*5)=4*3 请分析下面的赋值表达式 a=3*5=4*3 实例2 int a = 12; a+=a-=a*a; 求求a的值的值数据类型与表达式51例 大小写字母转换输入一个小写字母,输出对应的大写字母 # include void main( ) char ch ; scanf(%c, &ch); ch = ch - a + A; printf(%cn, ch); 数据类型与表

27、达式52复合算术赋值运算符 赋值运算符 简单赋值运算符 = 复合(算术)赋值运算符 += -= *= /= %= 赋值表达式变量 赋值运算符 表达式x += expx = x + (exp) 等价功能:等价功能:变量变量= 数据类型与表达式53例3.6#include void main( ) int x, y, z; z=(x=7)+(y=3); printf(%d,%d,%dn, x, y, z); x=y=z=x+2; printf(%d,%d,%dn, x, y, z); x*=y-3; printf(%d,%d,%dn, x, y, z);x=7, y=3, z=x+yz=x+2,

28、y=z, x=zx=x*(y-3)数据类型与表达式54逗号表达式 表达式1, 表达式2, ,表达式n先计算表达式,然后计算表达式,,最后计算表达式n的值,并将表达式n的值作为逗号表达式的值. 逗号运算符的优先级最低,从左向右a = (3+5 , 4*6 ) a = 3+5 , 4*6 a=24a=8数据类型与表达式55注意注意: :并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。 如如: printf(“%d,%d,%d”,a,b,c);“,”并不是一个逗号表达式,它是printf函数的3个参数printf(“%d,%d,%d”,(a,b,c),b,c) “(,)”

29、是一个逗号表达式,它的值等于的值。 数据类型与表达式56运算符优先级小结 ( ) - + + - (类型名) * / % +- = += -= *= /= %= ,高高低数据类型与表达式57数据与运算符举例例1 1 1 下 列 关 于下 列 关 于 C C 语 言 变 量 定 义 的 描 述 中 , 错 误 的语 言 变 量 定 义 的 描 述 中 , 错 误 的是:是: 。A A在在C C语言中,要求对所有用到的变量作强制定义,语言中,要求对所有用到的变量作强制定义,也就是也就是“先定义,后使用先定义,后使用”B B每个变量被定义为一个确定类型,在编译时就能每个变量被定义为一个确定类型,在编

30、译时就能为其分配相应的存储单元为其分配相应的存储单元C C指定每一变量属于一个类型,这便于在编译时,指定每一变量属于一个类型,这便于在编译时,据此检查该变量所进行的运算据此检查该变量所进行的运算D DC C语言中,变量名可以是系统关键字,此时系统语言中,变量名可以是系统关键字,此时系统关键字自动失效关键字自动失效D D数据类型与表达式58数据与运算符举例例22. 下列程序执行后的输出结果是: 。main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(“%d,%d,%d,%d”,i,j,m,n); A9,10,9,11 B9,11,9,10 C9,11,8,11 D8,10,9,10B B数据类型与表达式59数据与运算符举例 例33. 假设整型变量a、b、c已经正确定义,并且已被赋予大于1的值,则下列表达式中能够正确表示代数式 的是 。A1/a*b*c B1/(a*b*c)C1/a/b/(float)c D1.0/a/b/cB B1abc数据类型与表达式60数据与运算符举例 例4 4. 下列关于C语言注释的描述中,错误的是

温馨提示

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

评论

0/150

提交评论