1 / 35

第二章 C 语言基础

第二章 C 语言基础. 数据类型 常量 变量 不同类型数据间的转换 运算符和表达式. 整 型. 基本类型. 单精度型 float. 实型. 双精度型 double. 字符类型 char. C 数 据 类 型. 数组. 短整型 short. 结构体 struct. 整型 int. 共用体 union. 构造类型. 长整型 long. 枚举类型 enum. 指针类型. 空类型 void. 2.1 数据类型 数据类型总表. 数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作. <. >.

Download Presentation

第二章 C 语言基础

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. 第二章 C语言基础 数据类型 常量 变量 不同类型数据间的转换 运算符和表达式

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

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

  4. 整型常量(整常数) • 三种形式: • 十进制整数:由数字0~9和正负号表示.如 123,-456,0 • 八进制整数:由数字0开头,后跟数字0~7表示.如0123,011 • 十六进制整数:由0x开头,后跟0~9,a~f,A~F表示. 如0x123,0Xff • 整型常量的类型 • 根据其值所在范围确定其数据类型 • 在整常量后加字母l或L,认为它是long int型常量 例 12 与 12L <

  5. 实型常量(实数或浮点数) • 表示形式: • 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. • 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 • 例:判断下列指数形式的合法性 • 3E63.5e4.5.e3-1.23456e-2 e • 实型常量的类型 • 默认double型 • 在实型常量后加字母f或F,认为它是float 型 • 规范化的指数形式 • 在字母e(或E)之前的尾数部分中,小数点左边应有一位(且只能有一位)非零的数字。 • %e控制指数形式输出时,按规范化的指数形式输出。 <

  6. 转义字符及其含义: 转义字符 含义 转义字符 含义 \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 例: ‘A’-------’\101’-------’\x41’--------65 例 转义字符举例 main() { printf("I say:\"How are you?\"\n"); } 运行结果:(屏幕显示) Isay:”How are you?” <

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

  8. 2.3变量 标识符 定义:用来标识变量、常量、函数等的字符序列 组成: 只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 大小写敏感 不能使用关键字作为用户标示符 长度:一般计算机系统规定取前8个字符有效,Turbo C中规定最长32个字符 命名原则: 见名知意 不宜混淆 如l与I, o与0 • 例:判断下列标识符号合法性 • 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

  9. 变量的定义 概念:其值可以改变的量 变量名与变量值 变量定义的一般格式: 数据类型 变量1[,变量2,…,变量n]; 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,b,c; float data; • 变量的使用:先定义,后使用 决定分配字节数 和数的表示范围 合法标识符 例: int a=2,b,c=4; float data=3.67; char ch=‘A’; • 根据变量类型检查该变量的运算是否合法 • 变量定义位置:一般放在函数开头 例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

  10. 整型变量 • 整型变量的分类 • 整型变量的基本类型符是int。C语言允许程序员在定义整型变量时,在int前面增加两类修饰符: • 一类是控制变量是否有符号,包括:signed和unsigned • 另一类控制整型变量的值域范围,包括short和long。 • 比如,可以这样定义一个整型变量: • unsigned long int a; • 这样就形成了6类整型变量:

  11. 整型变量

  12. 整型变量 • 整数在内存中的存放形式 整数的数值在内存中用补码表示 比如,整数14的2进制表示是(1110)2,在内存中它是这样存放的: 那么-14呢?14的原码取反: 加1后,成为补码

  13. 整型变量 • 数据溢出 i=32767 main() { int i,j; i=32767; j=i+1; printf(“i=%d,j=%d\n",i,j); } 运行结果: i=32767,j=-32768 i+1 j=i+1(取低16位) 结论:C语言的用法比较灵活,往往出现副作用,而系统又不给出“出错信息”,要靠程序员的细心和经验来保证结果的正确。

  14. 符号位 小数部分 指数部分 0.3457896 2 • 实型变量 • 实数在内存中的存放形式 实数按照指数形式存放 通常一个实数需要4个字节(32位)的内存。计算机将这4个字节分为3个部分,最高位是符号位,剩下的31位,有一部分存放实数的小数部分,另一部分存放实数的指数部分。 小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。 例如:34.57896的存放形式是

  15. 实型变量 • 实型变量的分类和定义 (1)单精度实型,float,这种变量占用4个字节(32位)内存,例如:float f=2.14, F; (2)双精度实型,double,这种变量占用8个字节(64位)内存,例如:double x, y; (3)长双精度实型,数据类型符是long double,这种变量占用16字节(128位)内存,例如:long double x, y;

  16. 实型变量 • 实型数据的舍入误差 由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去。由此可能会产生一些误差。 举例: main() { float x,y; y=2.0e20+1.0; x=y-2.0e20; printf("%f\n",x); } 大数把小数“吃”了 程序的运行结果是:4008175468544.000000 出现这一奇怪结果的原因是:计算机没有保留足够的小数位,以进行正确的操作。

  17. 字符型变量 • 字符变量的定义:字符型变量用来存放字符常量,只能放一个字符 ,如 charc1,c2; • 字符变量在内存中的存放形式:存放字符ASCII码 • char与int数据间可进行算术运算 举例: main() { char c1,c2; int i,j; c1=97;c2=98; /*字符变量接受整型数据*/ i='A';j='B'; /*整型变量接受字符数据*/ printf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); printf("%c %c\n",i,j); printf("%d %d\n",i,j); } 程序的运行结果是: a b 9798 A B 65 66 例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */

  18. 2.4不同类型数据间的转换 自动类型转换 什么情况下发生 运算转换------不同类型数据混合运算时 运算转换规则:不同类型数据运算时先自动转换成同一类型

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

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

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

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

  23. 在将一个数学式子改写成C语言表达式时应注意以下几点:在将一个数学式子改写成C语言表达式时应注意以下几点: 1.乘号不能省。 如:ab应写成 a*b 2.所有符号写成一行。 3.C语言中只有圆括号,可以嵌套使用,但左、右括号必须匹配。 4.避免两个运算符并置。 如a*b/-c应写为: a*b/(-c) 5.由于两个整数相除结果仍为整数,所以要转换成实数运算。 如 5/12应该写成5.0/12或5/12.0

  24. 2.5.2强制类型转换 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 例 main() { float x; int i; x=4.5; i=(int)x; printf(“x=%f,i=%d”,x,i); } 结果:x=4.500000,i=4

  25. 2.5.3 赋值运算符和表达式 简单赋值运算符 符号: = 格式: 变量名=表达式 作用:将一个数据(常量或表达式)赋给一个变量 a+=3 a=a+3 x*=y+8 x=x*(y+8) x%=3 x=x%3 例 a=3; b=a; c=a+2; • 复合赋值运算符 • 种类:+= -= *= /= %= 《= 》= &= ^= |= • 意义:简化程序,使程序精炼。提高编译效率。

  26. 说明: 结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式 • 例 3=x-2*y; • a+b=3; • 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,按存储单元中的存储形式直接传送。 • 赋值表达式的值与变量值相等,且可嵌套 • 例float f; • int i; • i=10; • f=i; • 则f=10.0 例 int i; i=2.56; //结果i=2; 例: a=b=c=5 a=5+(c=6) a=(b=4)+(c=6) //表达式值为5,a,b,c值为5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6

  27. 2.5.4 自增、自减运算符++ -- 作用:使变量值加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

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

  29. 2.5.5 关系运算符和表达式 关系运算符 种类:< <= == >= > != 结合方向:自左向右 优先级别: < <= > >= = = != 优先级6(高) 优先级7(低) • 例 c>a+b //c>(a+b) • a>b!=c //(a>b)!=c • a==b<c //a==(b<c) • a=b>c //a=(b>c) • 关系表达式的值:是逻辑值“真”或“假”,用1和0表示 例 int a=3,b=2,c=1,d,f; a>b (a>b)==c b+c<a d=a>b f=a>b>c //表达式值1 //表达式值1 //表达式值0 //d=1 //f=0

  30. 2.5.6 逻辑运算符和表达式 逻辑运算符 种类: ! && || 逻辑运算真值表 a b !a !b a&&b a||b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假 • C语言中,运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,

  31. ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 例 a>b&&x>y • a= =b||x= =y • !a||a>b //(a>b)&&(x>y) //(a==b)||(x==y) //(!a)||(a>b)

  32. ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: 例 a=4;b=0; !a a&&b a||b 值为0 值为0 值为1

  33. ! :从右向左 && :从左向右 || :从左向右 ! (2) && (11) || (12) 高 低 • 优先级: • 结合方向: • 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符 • 例 a&&b&&c //只在a为真时,才判别b的值; • 只在a、b都为真时,才判别 c的值 • 例 a||b||c //只在a为假时,才判别b的值; • 只在a、b都为假时,才判别 c的值 • 例 a=1;b=2;c=3;d=4;m=1;n=1; • (m=a>b)&&(n=c>d) //结果m=0,n=1 < >

  34. 非0 =0 expr1 例 if (a>b) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,a>b?a:b); 取expr2值 取expr3值 2.5.7 条件运算符与表达式 • 一般形式: expr1 ? expr2 : expr3 • 执行过程 • 功能:相当于条件语句,但不能取代一般if语句 • 优先级: 13 • 结合方向:自右向左

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

More Related