1 / 34

教育程度 代表收入

教育程度 代表收入. 第三章 数据类型. 数据类型 常量与变量 各类数值型数据间的混合运算 运算符和表达式. 3.1 数据类型 数据类型总表. 整 型. 基本类型. 单精度型 float. 实型. 双精度型 double. 字符类型 char. 数组. 短整型 short. 结构体 struct. C 数 据 类 型. 整型 int. 共用体 union. 构造类型. 长整型 long. 枚举类型 enum. 指针类型. 空类型 void. 定义类型 typedef. 数据类型决定:

iris-campos
Download Presentation

教育程度 代表收入

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 教育程度 代表收入

  2. 第三章 数据类型 数据类型 常量与变量 各类数值型数据间的混合运算 运算符和表达式

  3. 3.1数据类型 数据类型总表 整 型 基本类型 单精度型float 实型 双精度型double 字符类型char 数组 短整型short 结构体struct C 数 据 类 型 整型int 共用体union 构造类型 长整型long 枚举类型enum 指针类型 空类型void 定义类型typedef 数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作 < >

  4. 类型 符号 关键字 数的表示范围 所占位数 (signed)int 基本整型 16 -32768~32767 有 16 (signed)short 短整型 -32768~32767 32 (signed)long 长整型 -2147483648~2147483647 整型 16 unsigned int 0~65535 unsigned short 16 无 0~65535 32 unsigned long 0~4294967295 32 float 单精度型 有 3.4e-38~3.4e38 实型 64 有 double 双精度型 1.7e-308~1.7e308 字符型 8 有 char 字符型 -128~127 无 8 0~255 unsigned char 基本数据类型 说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例: < >

  5. int型: 最大:32767 01 11 11 11 11 11 11 11 10 00 00 00 00 00 00 00 11 11 11 11 11 11 11 11 最小:-32768 unsigned int型: 最大:65535 00 00 00 00 00 00 00 00 最小:0

  6. 标识符 作用:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 区分大小写 不能使用关键字(是系统中已预定义的单词) 长度:没限制但不宜过长,最长不超过31个字符 命名原则:见名知意 3.2常量与变量 • 例:判断下列标识符号合法性 • sum Sum M.D.John day Date 3days • student_name #33 lotus_1_2_3 • char a>b _above $123 M.D.John 3days #33 char a>b $123 < >

  7. 常量 • 定义:程序运行时其值不能改变的量(即常数) • 分类: • 符号常量:用标识符代表常量 • 定义格式: #define符号常量 常量 • 一般用大写字母 • 是宏定义预处理命令,不是C语句 • 直接常量: • 整型常量 • 实型常量 • 字符常量 • 字符串常量 例 符号常量举例(ch2_1.c) #include<stdio.h> #define PRICE 30 main() { int num,total; num=10; total=num*PRICE; printf("total=%d",total); } 如 #define PRICE 30 > 运行结果:total=300 > > > < >

  8. 整型常量(整常数) • 三种形式: • 十进制整数:由数字0~9和正负号表示.如 123,-456,0 • 八进制整数:由数字0开头,后跟数字0~7表示.如0123,011 • 十六进制整数:由0x开头,后跟0~9,a~f,A~F表示. 如0x123,0Xff • 整型常量的类型 • 根据其值所在范围确定其数据类型 • 在整常量后加字母l或L,认为它是long int型常量 问题: 0123 = ( 3×80+2×81+1× 82=83)10 0x123 = (3×160+2×161+1× 162=291 )10 0Xff = (15×160+15×161=255 )10 问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10 例 30000 为int型 65536 为long int 型 例 12 与 12L <

  9. 实型常量(实数或浮点数) • 表示形式: • 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. • 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 • 实型常量的类型 • 默认double型 • 在实型常量后加字母f或F,认为它是float 型 <

  10. 转义字符及其含义: 转义字符 含义 转义字符 含义 \t \n 换行 水平制表 垂直制表 \b 退格 \v \r 回车 \f 换页 \a 响铃 \\ 反斜线 \‘ 单引号 \“ 双引号 < 2位16进制数代表的字符 \ddd 3位8进制数代表的字符 \xhh 字符常量 • 定义:用单引号括起来的单个普通字符或转义字符. 如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’ • 字符常量的值:该字符的ASCII码值 • 转义字符:反斜线后面跟一个字符或一个代码值表示 如 ‘A’——65, ‘a’——97, ‘0’——48 , ‘\n’——10 例 转义字符举例(ch3_001.c,ch3_004.c) #include<stdio.h> main() { printf("\101 \x42 C\n"); printf("I say:\"How are you?\"\n"); printf("\\C Program\\\n"); printf("Turbo \'C\'"); } 例: ‘A’-------’\101’-------’\x41’--------65 如 ‘\101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------() 运行结果:(屏幕显示) A B C I say:”How are you?” \C Program\ Turbo ‘C’ 例 #include<stdio.h> main() { printf(“Y\b=\n”); } 运行结果: 屏幕显示:= 打印机输出:¥

  11. h e l l o \0 例 字符串“hello”在内存中 例 空串 “” \0 例 ‘a’ “a” a a \0 例: char ch; ch=‘A’; 字符串常量 • 定义:用双引号(“”)括起来的字符序列。 • 存储:每个字符串尾自动加一个 ‘\0’ 作为字符串结束标志 • 字符常量与字符串常量不同 例: char ch; ch=“A”; <

  12. 变量 • 概念:其值可以改变的量 • 变量名与变量值 • 变量定义的一般格式: 数据类型 变量1[,变量2,…,变量n]; 例: int a,b,c; float data; 决定分配字节数 和数的表示范围 合法标识符

  13. int a=1, b=-3,c; 地址 地址 地址 …... main() { int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%f\n”,data); } 1 a 2字节 变量定义 b -3 可执行语句 2字节 main() { int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%f\n”,data); }  c 2字节 …... 随机数 内存 编译程序根据变量定义为其 分配指定字节的内存单元 • 变量初始化:定义时赋初值 • 变量的使用:先定义,后使用 例: 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 < >

  14. 整型变量 占字节数随机器不同而不同,一般占一个机器字 short≤int≤long 可用sizeof(类型标识符)测量 实型变量 • float:占4字节,提供7位有效数字 • double:占8字节,提供15~16位有效数字 字符型变量 • 字符变量存放字符ASCII码 • char与int数据间可进行算术运算 例 float a; a=111111.111; /* a=111111.1*/ double b; b=111111.111; /* b=111111.111*/ 例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */ 没有字符串变量,用字符数组存放 < >

  15. 宏定义 变量定义 输出结果 例 /*ch3_003.c*/ #include<stdio.h> #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=%c\n”,total,ch1); } 运行结果: total=37.50000, ch1=d

  16. 隐式转换 什么情况下发生 运算转换------不同类型数据混合运算时 赋值转换------把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式 函数调用转换------实参与形参类型不一致时转换 运算转换规则:不同类型数据运算时先自动转换成同一类型 3.3各类数值型数据间的混合运算 < >

  17. double float 说明: 高 必定的转换 long 运算对象类型不同时转换 unsigned 例 int i; float f; double d; long l; int char,short 低 10+‘a’ +i*f - d/l ch/i + f*d - (f+i) 例 char ch; int i; float f; double d; int double double double double int int double double double double double int double double double < >

  18. 显式转换(强制转换) 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 较高类型向较低类型转换时可能发生 例#include<stdio.h> main() { float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); } 结果:x=3.600000,i=3 精度损失问题 < >

  19. 3.4 运算符和表达式 C语言中有多种表达式以及与表达式相对应的运算符,包括算术运算符与算术表达式、关系运算符与关系表达式、逻辑运算符与逻辑表达式,还有赋值表达式、条件表达式、逗号表达式。

  20. 常量、变量、函数是最简单的表达式,表达式加括号、用运算符正确地连接后也是表达式。这种连接的一般规则是:表达式必须写在同一行上,只能使用圆括号且左、右括号个数要相同,多层括号时内层括号中的运算优先常量、变量、函数是最简单的表达式,表达式加括号、用运算符正确地连接后也是表达式。这种连接的一般规则是:表达式必须写在同一行上,只能使用圆括号且左、右括号个数要相同,多层括号时内层括号中的运算优先 1/(1+1/(1+x)) 如 可写成

  21. 算术运算符:(+ - * / % ++ --) 关系运算符:(< <= == > >= !=) 逻辑运算符:((! && ||) 位运算符 :(<< >> ~ | ^ &) 赋值运算符:(= 及其扩展) 条件运算符:(?:) 逗号运算符:(,) 指针运算符:(* &) 求字节数 :(sizeof) 强制类型转换:(类型) 分量运算符:(. ->) 下标运算符:([]) 其它 :(( ) -) C 运 算 符 < >

  22. 运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型 学习运算符应注意: < >

  23. 算术运算符和表达式 基本算术运算符: + - * / % 结合方向:从左向右 优先级: - ---->* / % -----> + - (2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据, 当 <操作数1> % <操作数2>时, 余数 = <操作数1> — <操作数2> × <整商> 例 5/2 = -5/2.0 = 例 5/2 = 2 -5/2.0 = -2.5 例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2 例 5%2 = 1 -5%2 = -1 1%10 =1 5%1 =0 5.5%2() < >

  24. 自增、自减运算符++ -- 作用:使变量值加1或减1 种类: 前置 ++i, --i (先执行i+1或i-1,再使用i值) 后置 i++,i-- (先使用i值,再执行i+1或i-1) 例 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 < >

  25. 例 j+++k; (j++)+k; 自增、自减运算符++ -- • 作用:使变量值加1或减1 • 种类: • 前置 ++i, --i (先执行i+1或i-1,再使用i值) • 后置 i++,i-- (先使用i值,再执行i+1或i-1) • 说明: • ++ -- 不能用于常量和表达式,如5++,(a+b)++ • ++ --结合方向: 自右向左 • 优先级:- ++ -------->* / %----->+ - (2) (3) (4) • 例 -i++  -(i++) • i=3; printf(“%d”,-i++); //-3 • 例 -i++ • i=3; printf(“%d”,-i++);

  26. 单独作为一条语句,“i++;”和“++i;”都表示“i=i+1;”,前缀格式和后缀格式在使用上没有区别,单独作为一条语句,“i++;”和“++i;”都表示“i=i+1;”,前缀格式和后缀格式在使用上没有区别, “i--;”和“--i;”是同样的。

  27. 当自增、自减运算作为某个表达式的一个组成部分时,两种不同格式会产生不同的效果当自增、自减运算作为某个表达式的一个组成部分时,两种不同格式会产生不同的效果 int x=3,y; y=--x+3; printf("%d %d\n",x,y); int x=3,y; y=x--+3; printf("%d %d\n",x,y); 先执行“x=x-1;”,此时x的当前值为2,再执行“y=x+3”,结果是x为2、y为5; 先执行“y=x+3;”,此时x的当前值为3,再执行“x=x-1”,结果是x为2、y为6

  28. 赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量 a+=3 a=a+3 x*=y+8 x=x*(y+8) x%=3 x=x%3 • 复合赋值运算符 • 种类:+= -= *= /= %= 《= 》= &= ^= |= • 含义: exp1 op= exp2 exp1 = exp1 op exp2 例 a=3; d=func(); c=d+2; < >

  29. 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式 说明: • 例 3=x-2*y; • a+b=3; • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 • 赋值表达式的值与变量值相等,且可嵌套 • 例float f; • int i; • i=10; • f=i; • 则f=10.00000 例 int i; i=2.56; //结果i=2; 例: 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 < >

  30. 说明: • 结合方向:自右向左 • 优先级: 14 • 左侧必须是变量,不能是常量或表达式 • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 • 赋值表达式的值与变量值相等,且可嵌套 例: a=12; a+=a-=a*a //a=-264 等价于a=a+(a=a-(a*a)) 例: int a=2; a%=4-1; a+=a*=a-=a*=3; //a=0 等价于a=a+(a=a*(a=a-(a=a*3))) < >

  31. 逗号运算符和表达式 形式:表达式1,表达式2,…… ,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中 • 例 a=3*5,a*4 • a=3*5,a*4,a+5 • 例 x=(a=3,6*3) • x=a=3,6*a • 例 a=1;b=2;c=3; • printf(“%d,%d,%d”,a,b,c); • printf(“%d,%d,%d”,(a,b,c),b,c); //a=15,表达式值60 //a=15,表达式值20 //赋值表达式,表达式值18,x=18 //逗号表达式,表达式值18,x=3 //1,2,3 //3,2,3 < >

  32. 逗号运算符和表达式 • 形式:表达式1,表达式2,……表达式n • 结合性:从左向右 • 优先级: 15 • 逗号表达式的值:等于表达式n的值 • 用途:常用于循环for语句中 例:/*ch3_6.c*/ #include <stdio.h> main() { int x,y=7; float z=4; x=(y=y+6,y/z); printf("x=%d\n",x); } 运行结果:x=3 < >

  33. 在书写表达式时应注意: 表达式中连续出现两个以上的运算符时,最好用空格隔开,如 i++ +j(表明i++后再与+j加) 如果更多的运算符连写系统将根据“尽量最大”的原则进行拆分。如 i+++j拆分为i++ +j。 在写表达式时,如果对某运算符的优先级不清,则要使用括号来改变优先级。 过长的表达式可分成几个短表达式书写

  34. 小结 本课主要内容是:C的算术、运算符,各种运算符的运算优先级,以及不同类型数据运算时的类型转换规则,要求能够正确地书写C的表达式。

More Related