C语言程序设计第2章.ppt
《C语言程序设计第2章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第2章.ppt(89页珍藏版)》请在三一办公上搜索。
1、第2章 基本数据类型与运算符,返回总目录,目录,2.1数据类型和取值范围,2.2运算符,2.3输入/输出函数,2.4习题二,返回总目录,基本要求:)熟悉C语言的常用数据类型;)熟悉C语言的常用运算符;)熟练掌握输入/输出函数的使用。学习重点:)C语言运算符的使用;)输入/输出函数的使用。,2.1基本数据类型和取值范围,2.1.1 基本数据类型和取值范围,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,数据类型总表,返回目录,2.1基本数据类型和取值范围,2.1.1 基本数据类型和取值范围,整型数的取值范围:,2.1基本数据类型和取值范围,2.1.1 基本数据类型和取值范
2、围,浮点型数的取值范围:,2.1.2 常量与变量,标识符,定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字命名原则:见名知意不宜混淆 如l与I,o与0,2.1基本数据类型和取值范围,2.1.2 常量与变量,标识符,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,3days,#33,char,$123,ab,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量,定义:程序运
3、行时其值不能改变的量(即常数)分类:符号常量:用标识符代表常量定义格式:#define 符号常量 常量,如#define PRICE 30,例 符号常量举例#define PRICE 30main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);,一般用大写字母是宏定义预处理命令,不是C语句直接常量:整型常量 实型常量 字符常量 字符串常量,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-整型常量(整常数),三种形式:十进制整数:由数字09和正负号表示.如 123,-456,0八进制整数:由数字0开头,后跟数
4、字07表示.如0123,011十六进制整数:由0 x开头,后跟09,af,AF表示.如0 x123,0Xff,示例:0571=(377)100 x179=(377)100X179=(377)10,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-整型常量(整常数),两种长度:整型常量按长度划分为两种:短整型和长整型(后缀为小写字母l或大写字母L),从长度来看:Turbo C中默认为短整型,如-377是一个短整型数,而-377l或-377L表示-377是长整型数。而在Visual C+6.0中默认为长整型,如-377、-377l或-377L均表示-377是长整型数。例:语句:print
5、f(“%d,%d”,sizeof(-377),sizeof(-377L);在Turbo C中的运行结果为:2,4而在VC中的结果为:4,4小结:从数据类型角度来分析,整型常量默认为int类型,而加上后缀(l或L)后,就是long int类型。,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-实型常量(实数或浮点数),表示形式:十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,实型常量的类型默认double型在实型常量后加字母f或F,认为它是float
6、型例:语句:printf(“%d,%d”,sizeof(0.123),sizeof(0.123F);在Turbo C和VC中的运行结果均为:8,4,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-字符常量,定义:用单引号括起来的单个普通字符或转义字符.,1)普通字符:其值就是该字符的ASCII码值,如 a A?n 101,2)转义字符:反斜线后面跟一个字符或一个代码值表示,如 A65,a97,048,n10,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-字符常量,2.1基本数据类型和取值范围,注:1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。2)v 垂
7、直制表和f 换页符对屏幕显示无影响,但会影响打印机响应。,2.1.2 常量与变量,常量-字符常量,如 101-A 012-n x61-a 60-0 483-(),例:A-101-x41-65,转义字符示例:,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-字符常量,例 转义字符举例 main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(Turbo C);,运行结果:(屏幕显示)A B CI say:”How are you?”C ProgramTurbo C,例 main()pr
8、intf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,2.1基本数据类型和取值范围,2.1.2 常量与变量,常量-字符串常量,定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,字符常量与字符串常量不同,例:char ch;ch=“A”;,2.1基本数据类型和取值范围,2.1.2 常量与变量,变量,概念:其值可以改变的量变量名与变量值变量定义的一般格式:数据类型 变量1,变量2,变量n;,例:int a,b,c;float data;,决定分配字节数和数的表示范围,合法标识符,2.1基本数据类型和取值范围,2.1.2 常量与变量,变量,例:in
9、t a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,变量初始化:定义时赋初值,2.1基本数据类型和取值范围,2.1.2 常量与变量,变量,例1 int student;stadent=19;,例2 int a,b,c;c=a%b;,变量的使用:先定义,后使用,2.1基本数据类型和取值范围,/本行语句有错,a、b没有具体的值就参与运算,/本行语句有错,符号“stadent”未定义,2.1.2 常量与变量,变量,/*right.c*/#includemain()int a,b=2;float data;a=1;dat
10、a=(a+b)*1.2;printf(“data=%fn”,data);,变量定义位置:一般放在函数开头,2.1基本数据类型和取值范围,文件名改成wrong.cpp在VC中编译可通过,因C+语法允许!,2.1.2 常量与变量,变量,整型变量占字节数随机器不同而不同,一般占一个机器字shortintlong可用sizeof(类型标识符)测量,#include stdio.hmain()printf(int length=%d,sizeof(int);,VC运行结果:int length=4,2.1基本数据类型和取值范围,2.1.2 常量与变量,变量,实型变量float:占4字节,提供67位有效数
11、字(跟C编译系统有关,将实型数据按指数形式存储时,一般若以24位二进制位表示小数部分(含符号),则对应的十进制有效数字为7位)double:占8字节,提供1516位有效数字,2.1基本数据类型和取值范围,#includemain()double a=1.234567890123456789e18;float b=a;printf(a=%.20len,a);printf(b=%.20len,b);,程序输出结果为:a=1.23456789012345680000e18b=1.23456793955060940000e18,2.1.2 常量与变量,变量,字符型变量字符变量存放字符ASCII码cha
12、r与int数据间可进行算术运算,例 a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,没有字符串变量,字符串用字符数组存放,2.1基本数据类型和取值范围,2.1.2 常量与变量,变量,变量综合示例:#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=%cn”,total,ch1);,运行结果:total=37.500000,ch1=d,2.1基本数据类型和取值范围,2.2运算符,2
13、.2.1 优先级与结合规则,运算符,返回目录,2.2运算符,2.2.1 优先级与结合规则,优先级和结合规则总表,2.2运算符,2.2.1 优先级与结合规则,不同级别的运算符按运算符的优先级别确定计算顺序,优先级别高(即优先级别数小)的运算符先计算:相同级别的运算符按结合规则(左结合性:从左至右;右结合性:从右至左)确定计算顺序。,运算符的计算规则,2.2运算符,2.2.1 优先级与结合规则,运算符的计算规则,例:表达式3+4*(12-6)/(1+2)的计算顺序按优先级和结合规则可以简单理解为:(126)6(12)3 4*624 24/3=8 3+8=11注:表达式的求值问题属于“栈”的典型应用
14、,在数据结构课程中会详细介绍。,2.2运算符,2.2.2 赋值运算与连续赋值,在C中,运算符“=”是赋值运算符。简单赋值运算的一般形式为:变量=表达式其功能是将一个表达式的值赋给变量。如下表达式a=b+c该式读作将表达式b+c的值赋给a。其本意是改写变量a的值,而不是判断b+c与a是否相等。,赋值运算,2.2运算符,2.2.2 赋值运算与连续赋值,连续赋值,在C语言中,赋值运算符的级别较低,为14级,并满足右结合规则。因此表达式:x=y=z=1是连续赋值表达式,其功能相当于如下表达式的功能x=(y=(z=1)它是先执行表达式z=1,即将1赋给z,表达式值也为1,然后将表达式值1赋给y,即执行y
15、=1,表达式值也仍为1,再将表达式值1赋给x,即执行x=1。,2.2运算符,2.2.3 算术运算,结合方向:从左向右优先级:-*/%+-(2)(3)(4)说明:“-”为单目运算符时(表示负号),为右结合性两整数相除,结果为整数%要求两侧均为整型数据,例 5/2=2-5/2.0=-2.5,例 5%2=1-5%2=-1 1%10=1 5%1=0 5.5%2(),基本算术运算符:+-*/%,2.2运算符,2.2.3 算术运算,自增、自减运算符+-,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置 i+,i-(先使用i值,再执行i+1或i-1),例 j=3;k=+j
16、;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,“先加后用”,“先用后加”,2.2运算符,2.2.3 算术运算,自增、自减运算符+-,说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%+-(2)(3)(4),例-i+-(i+)i=3;printf(“%d”,-i+);/-3,2.2运算符,2.2.3 算术运算,自增、自减运算符+-,特别提示:慎用
17、+,-运算符!,4,34 5,3,2,2,3,34 3,2,2,2,a=3;printf(%d,%dn,a,a+);printf(%dn,a);a=3;printf(%d,%d,%d,%dn,+a,a+,a+,-a);,TC中结果:,VC中结果:,从例中可分析出:1、函数参数均按从右到左的顺序求值;2、对于后置运算,都遵循“先用后加”规则,但“加”的时机不同,TC中是用后马上加,这样下个左边的参数用到的值是加后的值,而在VC中,用后不马上加,而是在函数调用(printf)完成后才加。,例:,2.2运算符,2.2.3 算术运算,自增、自减运算符+-,特别提示:慎用+,-运算符!,由上例知,由于+
18、,-运算符在不同版本的C编译系统中使用时会出现非预期的结果,因此要慎用!例如:a=3;printf(“%d,%d”,a,a+);在有的系统中,函数参数是从左至右求值,输出“3,3”,在多数系统(如TC和VC)中是从右至左求值,输出“4,3”或“3,3”。因此,以上写法不宜提倡,最好改写成:a=3;b=a+;printf(“%d,%d”,a,b);或:a=3;b=a;a+;printf(“%d,%d”,a,b);则结果都是明确的(输出“4,3”)。,2.2运算符,2.2.3 算术运算,自增、自减运算符+-,特别提示:慎用+,-运算符!,总之,不要编写让人很难看懂,也不知道系统会怎样执行的程序。所
19、以,我们可以通过一些含+,-比较多的表达式来加深对其运算规则的理解,但在实际编程中,除非不得已,否则绝对不要编写含+,-比较多的表达式。从上面的介绍可知,含+,-比较多的复杂语句或有歧义的语句完全可以用简单易懂、结果明确的语句组替代。,2.2运算符,2.2.4 关系运算,关系运算又称为比较大小运算,它有六个运算符:、=、=、=等四个运算符级别为6级,它们比=、!=等两个运算符级别为7级的要高.,2.2运算符,2.2.4 关系运算,关系运算的结果为逻辑真或逻辑假,关系成立时为逻辑真(值为1),关系不成立时为逻辑假(值为0)。如下表达式:53 5=3 53 5=3 5=3 5!=3的逻辑值分别为
20、1 1 0 0 0 1,2.2运算符,2.2.4 关系运算,关系运算的等于运算符=与数学上的等于运算符=具有相同的含义,与C语言中的赋值运算符=是完全不同的,这一点对初学者而言往往容易搞错。,2.2运算符,2.2.5 逻辑运算、连续比较和逻辑优化,C语言中逻辑运算符有三个:逻辑与&(11级、左结合)。逻辑与表达式a&b表示a与b中只要有一个条件不满足(值为0),其运算结果为0。逻辑或|(12级、左结合)。逻辑或表达式a|b表示a与b中只要有一个条件满足(值为1),其运算结果为1。逻辑非!(2级、右结合)。逻辑非表达式!a,当a为1时,结果为0,当a为0时,结果为1。,逻辑运算,2.2运算符,2
21、.2.5 逻辑运算、连续比较和逻辑优化,表2.4逻辑运算真值表,在C语言的逻辑运算中,任何非0值都当作逻辑值1处理,因此表达式0.1|0的结果值为1。,逻辑运算,2.2运算符,2.2.5 逻辑运算、连续比较和逻辑优化,数学上的连续比较532在数学上是恒成立的。但在C语言中,上式却不成立,因为首先计算第一个大于号,其值为1,而后计算第二个大于号时,成为计算12,显然不成立,其值为0。实际上,连续比较大小时,表示几个条件同时满足,因此若将上式改写为条件表达式53&32后,则与数学上的的连续比较含意相符,表达式也是成立的。,连续比较,2.2运算符,2.2.5 逻辑运算、连续比较和逻辑优化,逻辑优化,
22、逻辑与优化。从逻辑与运算a&b的真值表中,我们可以看出,只要a值为0,不管b值如何,其运算结果都为0,因此,在进行逻辑与运算时,只要计算出a值为0,则不需计算b值,这种情况,我们称之为逻辑与优化。逻辑或优化。对于逻辑或运算a|b,只要计算出a值为1,则也不需计算b值,此时表达式值恒为1,这种情况称之为逻辑或优化。,2.2运算符,2.2.5 逻辑运算、连续比较和逻辑优化,例2.4逻辑运算综合举例,#include main()int x,y,z;x=y=z=0;+x|+y|+z;printf(“x=%d y=%d z=%dn”,x,y,z);x=y=z=0;+x,程序运行结果为:,x=1 y=0
23、 z=0 x=1 y=1 z=0 x=1 y=1 z=1x=1 y=0 z=0,2.2运算符,2.2.6 位运算,位运算操作符,表2.5位运算符号表,2.2运算符,2.2.6 位运算,异或运算,异或运算真值表见表2.6,即对应位相同时为0,不同时为1.表2.6异或运算真值表,2.2运算符,2.2.6 位运算,移位运算,左移位运算ab:右边移出的部分将丢弃,左边空出的高位部分填补方法则根据a是否为带符号数又分为两种:a为带符号数时,左边空出的高位部分用符号位填补;a为不带符号数时,左边空出的高位部分用0填补。,注意:参与运算的数以补码形式出现.,2.2运算符,2.2.6 位运算,例2.5,#in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6504130.html