C语言基础知识讲解课件_第1页
C语言基础知识讲解课件_第2页
C语言基础知识讲解课件_第3页
C语言基础知识讲解课件_第4页
C语言基础知识讲解课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、 C语言程序设计第2章 基本数据类型、运算符与表达式第1页,共49页。2问题:人类的语言书写时,不同国家有不同的要求,基本的如:用字要求格式要求标点要求 C语言作为一种计算机语言,在用于编程时,同样也对数据的类型、标识符、运算符都进行了相关的规范和要求。引子第2页,共49页。 本章要点第2章 数据类型、运算符和表达式 本章难点 C语言的基本数据类型 变量的定义、赋值、初始化及使用方法 基本运算符的运算规则及优先级别 表达式的构成规则和计算 数据类型转换的意义和实质 自增、自减运算符的使用 运算符优先级别 混合表达式运算 类型转换及转换过程中出现的误差第3页,共49页。2.12.22.32.42

2、.5C语言的数据类型常量与变量整型数据实型数据字符型数据本章主要内容第4页,共49页。2.62.72.82.92.10算术运算符与算术表达式赋值运算符与赋值表达式逗号运算符与逗号表达式位运算符数据类型转换与计算类型长度运算符本章主要内容第5页,共49页。6数据类型数据类型基本类型构造类型指针类型空类型void字符类型char枚举类型整 型实 型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1. 数据占内存字节数2. 数据取值范围2.1 C语言的数据类型不可再将其分解成其他类型构造类型数据可以分解成若干个成员或元

3、素 ,各成员的类型可以相同,也可以不同,可以是基本数据类型,也可以是构造类型。值用来表示某个量在内存储器中的地址函数类型说明了返回值的类型,但有些函数没有返回值,这种函数类型定义为空类型(void)。2字节-215-215-14字节-231-231-1第6页,共49页。7常量定义:程序运行时其值不能改变的量(即常数)分类:字面常量:又称直接常量整型常量 : 12、0、3; 实型常量 : 4.6、1.23 字符常量 :a、b符号常量: 2.2 常量和变量第7页,共49页。8标识符定义:就是程序中使用的各种名字,如变量名、数组名、函数名、符号常量名以及一些具有专门含义的名字。分类:关键字、预定义标

4、识符和用户标识符 命名原则:由字母、数字、下划线组成的一串符号,但必修以英文字母或下划线开头。标识符区分大小写。不能使用关键字作为用户标识符。见名知意。建议用户标识符不要与预定义标识符相同。 长度:VC 6.0为255个字符例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab2.2 常量与变量由C语言规定的具有固定含义的标识符,也称为保留字。包括类型说明符、存储类别说明和其他。预定义标识符在C语言中有特定的含义

5、,如printf、include 第8页,共49页。9符号常量也称宏常量定义:用一个标识符代表一个常量。由C语言中的宏定义预处理命令来定义。定义格式:#define 符号常量标识符 常量符号常量应遵循标识符的命名规则。 习惯上用大写字母。常量可以是任何类型。符号常量一经定义,凡在源程序中使用该符号常量时,都用其后指定的常量来替换。 例2.1符号常量的使用#include #define PI 3.14159#define R 5.3main() printf(area=%fn,PI*R*R); /* 输出圆面积 */ printf(circumference=%fn,2*PI*R); /* 输

6、出圆周长 */运行结果:area=88.247263circumference=33.300854如 #define PRICE 30修改程序方便阅读程序方便 第9页,共49页。10变量功能:用来保存程序运行过程中的输入数据、计算获得的中间结果和最终结果。变量定义的一般格式: 类型标识符 变量名1,变量名2,; 变量初始化:定义时赋初值 变量的使用:先定义,后使用例: int a,b,c; float data;类型标识符 变量名=初值;例: 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;/例:

7、int student; stadent=19; /Undefined symbol statent in function main 第10页,共49页。11int a=1, b=-3,c;.地址abc4字节4字节4字节地址地址.-3随机数1定义变量,其实就是用变量名对某个存储单元进行命名,对变量的操作就是对其代表的存储单元进行操作。变量名与变量值第11页,共49页。12三种形式:十进制整数:由数字09和正负号表示.(与日常使用的整数写法一样) 如: 0,-143,87八进制整数:由数字0开头,后面是八进制数字序列, 数字取值范围为07。 如:00、015、037十六进制整数:以0 x或0X

8、开头的十六进制数字序列,数字取值范围为09、af或AF。 如:0 x0、-0 xABC、0X9fc 2.3 整型数据整型常量(整数)非法的八进制数 : 0539、02A、0567 非法的十六进制数 :0 xfg、0 x-89F 第12页,共49页。13 2.3 整型数据整型变量用来存放整数,基本类型为int型 VC 6.0中整型变量所占的字节数和数值范围整型类型符占用字节数数 值 范 围signed int421474836482147483647 即231(2311)signed short int23276832767 即215(2151)signed long int4214748364

9、82147483647 即231(2311)unsigned int404294967295 即0(2321)unsigned short int2065535 即0(2161)unsigned long int404294967295 即0(2321)第13页,共49页。14整型变量的定义在定义整型变量时,某些类型修饰符可以省略int a,b,c; /* a,b,c为有符号整型变量 */ long x,y; /* x,y为有符号长整型变量 */ unsigned p, q; /* p,q为无符号整型变量 */在存储正数时,无符号整型变量的数值范围比有符号整型变量的数值范围扩大一倍,如果能事先

10、确定存储的数是正整数(如年龄、库存量、人数等),则可将变量定义为无符号类型,以充分利用变量的数值范围。第14页,共49页。15整型数据在内存中的存放形式在内存中数据是以二进制形式存放的有符号整型数无符号整型数0111111111111111signed short(最大值)unsigned short(最大值)1111111111111111符号位 0123456789101112131415第15页,共49页。16实际上,整型数据是以补码的形式来存储的。 正数的补码 负数的补码 原码相同 将原码的符号位保持不变,数值位逐位取反(变为反码)末位(即最右边的那一位)加1求:10的补码 (1)写出

11、10的原码(2)数值位取反,得10的反码 (3)末位加1,得10的补码100000000000000000000000000010101111111111111111111111111111010111111111111111111111111111110110第16页,共49页。17整型数据的溢出short型变量的最大允许值为32767,如果再加1,会出现什么情况? 例2.2 整型数据的溢出。#include main() short a,b; a=32767; b=a+1; printf(%d,%d,a,b);a和b的存储格式:a 0111111111111111b 10000000000

12、00000运行结果为:32767,-32768第17页,共49页。18整型数据的溢出课后习题:写输出结果。#include main() unsigned short a=65536; int b; printf(%dn,b=a);65536的存储格式: 0000000000000001 0000000000000000 a得到的结果:a 0000000000000000b 0000000000000000 0000000000000000运行结果为:0第18页,共49页。19整型常量的类型整型常量也有基本整型、长整型、有符号和无符号之分 在表示无符号整型常量时,需要在数值后添加字母U或u作为

13、后缀。无论是基本整型数还是长整型数,都被识别为有符号整数有符号整数例:148、013、1、 0 x38Au 、358U、0 x16int型和long型数据均占4个字节,在21474836482147483647范围内的常量认为是int型。需要明确地指出整数是否属于long int类型,要在整数的末尾要加上字母L或l。 第19页,共49页。20表示形式:小数形式:数学中常用的实数形式,由数字09和小数点组成。(必须有小数点) 如:0.0、25.0、5.789、.13、5.0、300.、267.8230 指数形式:也称为科学记数法,由尾数(可带符号)、阶码标志“e”或“E”以及阶码(只能为整数,可

14、以带符号)组成。(字母e或E的前后必须有数字且之间不能插入空格,e或E后必须为整。) 例如:2.1E5(等于2.1105),3.7E-2(等于3.7102),0.5E7(等于0.5107),2.8E-2(等于2.8102),.1e0(0.1100),3.e5(3.0105) 2.4 实型数据实型常量(浮点型常量、实数或浮点数)错误的:E7553.-E32.7E阶码标志E之前无数字无阶码标志负号位置不对 无阶码第20页,共49页。21float(单精度):占32位,提供6-7位有效数字double(双精度):占64位,提供15-16位有效数字long double(长双精度型):占64位,提供1

15、5-16位有效数字 2.4 实型数据实型变量的分类float a=1.5,b=0.35,c; /* 定义单精度实型变量a、b、c,并对a、b初始化 */double x,y,z; /* 定义双精度实型变量x、y、z */实型变量的定义第21页,共49页。22实型数据在内存中的存放形式 无论表示形式是小数还是指数,均以指数格式存储 实数的存储由符号位、指数(阶码)以及尾数(小数)等三部分组成。 例如:实数31.4159 指数尾数+2314159符号位float:共占32位。1位符号位、8位指数和23位尾数;double:占64位。1位符号位、11位指数和52位尾数。指数部分占的位数多,则表示的数

16、值范围大。尾数部分占的位数多,实型数据的有效数字就多,精度就高。有效位数是近似值。第22页,共49页。23实型变量的舍入误差由于实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,往往会产生误差。 一个很大的数和一个很小的数直接进行加或减时,可能会“丢失”小的数。例2.3 实型变量的舍入误差。#include main() float a,b; a=123456.72e5; b=a+20; printf(a=%fn,a); printf(b=%fn,b);运行结果为:a=12345671680.000000b=12345671680.000000第23页,共49页。24例 4.5E1

17、F、-4.5E-2F实型常量的类型默认double型在实型常量后加字母f或F,认为它是float 型第24页,共49页。aaa25定义:用单引号()括起来的一个字符。 2.5 字符型数据字符型常量如 a b = + ?存储:字符常量占用一个字节,具体存放的是该字符对应的ASCII代码值。如 A65, a97, 048 , 149可以进行运算例如:a+5、A5、1+101026059第25页,共49页。26字符常量的特点 :字符常量只能用单引号括起来,不能用双引号或其他括号abc是非法的字符常量只能是单个字符C语言规定,字母是区分大小写的,所以a和A是不同的字符常量第26页,共49页。27转义字

18、符是一种特殊形式的字符常量某些控制字符(如回车符、换行符等)和一些ASCII字符却无法使用字符常量进行表示转义字符以反斜线“”开头,后跟一个或几个字符。每个转义字符是一个字符。转义字符及其含义:转义字符含义nvradddtbf“xhh转义字符含义换行垂直制表回车响铃单引号13位8进制数代表的字符(ASCII码)水平制表退格换页反斜线双引号12位16进制数代表的字符(ASCII码)如 101 -A 012 -n例:A-101-x41-65第27页,共49页。28定义:用双引号()括起来的字符序列 字符串常量 CHINA , ,12365478 , C 转义字符也可以出现在字符串ABCD、1011

19、02x43x44字符常量与字符串常量的区别字符常量由单引号括起来,字符串常量由双引号括起来字符常量只能是单个字符,字符串常量可以为空字符串,也可以含1个或多个字符可以把一个字符常量赋予一个字符变量,语言中没有字符串变量,不能把一个字符串常量赋予一个字符串变量。但可以用一个字符数组来存放一个字符串常量字符常量占1个字节的内存空间。字符串常量占的内存字节数等于字符串中字符数加1,增加的一个字节由系统自动存入字符0(ASCII码为0),作为字符串结束的标志。第28页,共49页。29h e l l o 0例 字符串hello在内存中例 空串 0a a 0例 aa例: char ch; ch=“A”;

20、例: char ch; ch=A; 第29页,共49页。30例 转义字符举例 main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C);运行结果:(屏幕显示)A B CIsay:How are you?C ProgramTurbo C第30页,共49页。31字符变量用于存放单个字符常量,使用char来定义。字符变量在内存中占一个字节例2.4 字符变量的值。#include main() char a=0 x1261,b; b=a-32; printf(%c,%cn%d,

21、%dn,a,b,a,b);没有字符串变量,用字符数组存放字符型变量char c1=x,c2=y,c3;char optr;字符型数据和整型数据之间可以通用。程序运行的结果为: a,A 97,65当整型变量按字符变量处理时,只有低八位参与处理。第31页,共49页。32基本算术运算符基本算术运算符: + - * / %说明:双目运算符两边的运算对象的类型不一致,使运算符两边的类型达到一致后,再进行运算。除运算的结果与运算对象的数据类型有关,两整数相除,结果为整数%要求两侧均为整型数据C语言中,所有实型数的运算均以双精度方式进行。运算符:+和。例 5/2 = -5/2.0 =例 5%2 = -5%2

22、 = 1%10 = 5%1 = 5.5%2例 5/2 = 2 -5/2.0 = -2.5例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 () 2.6 算术运算符和算术表达式例 5*2.0 第32页,共49页。33算术表达式及算术运算符的优先级和结合性算术表达式:用算术运算符将运算对象连接起来的表达式称为算术表达式。算术表达式运算规则和要求:可使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。按运算符的优先级别由高到低进行,若表达式中运算符的级别相同,则按运算符的结合方向进行。算术运算符的结合性两个优先级相同的运算符,则

23、按结合方向顺序处理 。自左至右(称为左结合性)和自右至左(称为右结合性)同级单目算术运算符的结合性是自右向左,同级双目算术运算符的结合性是自左向右。例 -5例 x-y+z第33页,共49页。34算术运算符的优先级当表达式中出现多个运算符时,就会碰到哪个先算,哪个后算的问题,这个问题称为运算符的优先级。若一个运算对象两侧有不同的运算符,应先执行“优先级别”高的运算,例如先乘除后加减。第34页,共49页。35基本算术运算符对 象 数优 先 级名 称运 算 符运 算 规 则运 算 对 象结 合 性单目2正+取原值整型或实型自右向左负-取负值双目3乘*乘法整型或实型自左向右除/除法模%整除取余整型4加

24、+加法整型或实型减-减法第35页,共49页。36自增、自减运算符+ -作用:使变量值加1或减1种类:前置 +i, -i (先执行i+1或i-1,再使用i值)后置 i+,i- (先使用i值,再执行i+1或i-1)例2.5 自增、自减运算符的使用。#include main() int i=5,x; x=i+; printf(i=%d,x=%dn,i,x); printf(%dt,+i); printf(%dt,-i); printf(%dt,i-); printf(%dt,-i+); printf(%dn,-i-);使用自增、自减运算符时应注意:运算对象不能是常量和表达式当出现难以区分的若干个+

25、或-组成运算符串时,自左向右取尽可能多的符号组成运算符。不要在一个表达式中对同一个变量进行多次诸如i+或+i等运算例如写成:i+*+i+i*i如i+j应理解为(i+)+j,而不是i+(+j)。第36页,共49页。37简单赋值运算符符号: =格式: 变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量复合赋值运算符种类:+= -= *= /= %= = = &= = |=含义: exp1 op= exp2 exp1 = exp1 op exp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; c=d+2; 2.7 赋值运算符和赋值表达式第37页,共49页。

26、38说明:结合方向:自右向左优先级:只高于逗号运算符,比任何其他运算符的优先级都低左侧必须是变量,不能是常量或表达式赋值表达式嵌套赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型例 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=(b=5) a=5+(c=6) a=(b=4)+(c=6) /表达式值为5,a,b,c值为5/ b=5;a=5/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6例: a=12; a+=a-=a*a/a=-26

27、4 等价于a=a+(a=a-(a*a)第38页,共49页。39形式:表达式1,表达式2,表达式n结合性:从左向右优先级:在所有运算符中是最低的逗号表达式的值:等于表达式n的值例 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 2.8 逗号运算符和逗号表达式第39页,

28、共49页。40位运算符种类: & |位运算:对运算对象按二进制位进行操作。位运算对象:只能是整型或字符型数据,不能是其他类型的数据,其运算结果仍是整型或字符型数据:运算对象在运算符的右边功能:对运算对象的各二进位按位求反,即,使每一位上的0变1;1变为0。例 9:运算结果为-10 9的二进制表示:0000000000001001 按位求反后为:1111111111110110即:-10:左移例如:a :右移例如:a2功能:把a的各二进位向右移动2位若a= 0000000000001111(十进制15),右移2位后为0000000000000011(十进制3)。 “&”:按位与例如: 9&(-5

29、) 00000000 00001001 (9的二进制补码) &11111111 11111011 (-5的二进制补码) =00000000 00001001 (9的二进制补码)可见9&(-5)=9。 “”:按位异或例如: 9(5) 00001001 (9的二进制补码) 00000101 (5的二进制补码) = 00001100 (十进制为12) “|”:按位或例如: 9 |(5) 00001001 (9的二进制补码) | 00000101 (5的二进制补码) = 00001101 (十进制为13) 2.9 位运算符和表达式位复合赋值运算符种类: = &= = |=第40页,共49页。41自动类

30、型转换算术转换-不同类型数据混合运算时赋值转换-把一个值赋给与其类型不同的变量 时 2.10 不同类型数据间的转换强制类型转换第41页,共49页。42doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledouble转换规则:赋值转换第42页,共49页。43赋值转换在赋值转换时,与算术转换类似,低级别数据类型向高级别类型的转换一般不会出现问题,如float型

31、向double型、整型向浮点型转换。但有些情况的赋值转换可能会出现问题。(1)将长整型数据赋给短整型或字符型变量时,高位字节的数据将丢失。 例2.7 赋值转换时高位字节的丢失。#include main () short a=289; char c; long b=98304; c=a; /* 截取a的低8位赋给c */ a=b; /* 截取b的低16位赋给a */ printf(a=%dtc=%dn,a,c); 运行结果如下:a=32768 c=33a:00000001 00100001b:0000000000000001 1000000000000000第43页,共49页。44(2)将有符

32、号整型数据赋给无符号整型变量时,把内存中存储的二进制数字原样复制,所以负数将转换为正数。 例如: short a; a=65535u printf(“%hd” ,a);a的值为-1。(3)将无符号整型数据赋给有符号整型变量时,复制机制同上。这时若符号位为1,将按负数处理。(4)将浮点型数据赋给整型变量时,舍弃浮点数的小数部分。 例如: int i; i=3.567 printf(“%d” ,i);i的值为3(5)将double型数据赋给float型变量时,截取前面7位有效数字存到float型变量,所以右边的数值不能超出左边变量的数值范围。1111111111111111例如: unsigned short a; a=1 printf(“%u” ,a);a的值为65535。1111111111111111第44页,共49页。45强制转换一般形式:(类型标识符)(表达式)例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明: 习题:若有定义:int b=7;float a=2.5,c=4.7;表达式为:a+(int)(b/3*

温馨提示

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

最新文档

评论

0/150

提交评论