基本数据类型及运算课件.pptx

上传人:小飞机 文档编号:3971482 上传时间:2023-03-30 格式:PPTX 页数:197 大小:1.05MB
返回 下载 相关 举报
基本数据类型及运算课件.pptx_第1页
第1页 / 共197页
基本数据类型及运算课件.pptx_第2页
第2页 / 共197页
基本数据类型及运算课件.pptx_第3页
第3页 / 共197页
基本数据类型及运算课件.pptx_第4页
第4页 / 共197页
基本数据类型及运算课件.pptx_第5页
第5页 / 共197页
点击查看更多>>
资源描述

《基本数据类型及运算课件.pptx》由会员分享,可在线阅读,更多相关《基本数据类型及运算课件.pptx(197页珍藏版)》请在三一办公上搜索。

1、2023/3/30,1,第二章 基本数据类型及运算,本章主要内容:数据类型、常量、变量、基本运算、类型转换及运算的优先级与结合性等。,2023/3/30,2,数据类型、运算符和表达式的概念,数据类型:数据存在的组织和形式。程序中用到的所有数据都必须指定其数据类型。,运算符:一些具有事先规定的运算功能的特定的符号。这里的运算功能可以是算术运算(加减乘除)、逻辑运算(与或非)或比较运算(大于小于等于),等等。语言共有种运算符。,表达式:按照运算符的性质,用运算符把数据连接起来以 达到数据运算目的而构成的式子。写表达式的最终目的是要进行计算它求出它的值。求解表达式的过程是由计算机完成的,因此,要想得

2、到正确的结果,就必须写出正确的表达式。而一个表达式中往往包含多个运算符,所以必须熟悉每一种运算符的性质(优先级别和结合性),才能写出有正确求解结果的表达式。,2023/3/30,3,常量与变量 整型、浮点型、字符型数据 变量的初始化 各类数值型数据间的混合运算 算术运算符与算术表达式 赋值运算符与赋值表达式 逗号运算符与逗号表达式,第二章 数据类型、运算符与表达式,2023/3/30,4,2.1 基本数据类型,2023/3/30,5,数据类型,数据类型:数据存在的组织和形式。数据类型是数据的基本属性描述的是数据的存储格式和运算规则.不同数据类型的数据,在内存中所需的存储空间大小、存储格式均有所

3、不同,能支持的运算以及相应的运算规则也会有所不同.,2023/3/30,6,的数据类型,的数据类型,基本类型,构造类型,整 型,单精度型,双精度型,数组类型,结构体类型,浮点 型,联合类型,指针类型,字符型,枚举类型,空类型,2023/3/30,7,2.1 基本数据类型 数据是程序处理的基本对象。根据数据的不同性质和用途可分为不同的数据类型。不同的数据类型具有不同的存储长度、取值范围、允许的操作。,2023/3/30,8,类型修饰符:short int long int unsigned int unsigned char输出浮点型数有效位为 67位十进制数位输出双精度型数有效位为1516位十

4、进制数位 数据分为常量和变量。,2023/3/30,9,2.2 常量与变量,2023/3/30,10,常量,符号常量:用一个标识符代表一个常量实现方式:使用#define 预处理命令 宏定义,直接常量:1,2,3;0.1,10.0;a,1;“hello”,常变量:C+中,可以使用 const 关键字定义常变量,程序运行期间,值不能被改变的量称为常量,使用符号常量的好处是:从标识符名可以清楚地看出该常量的含义,做到“见名知意”在需要修改常量的值时可以做到“一改全改”,容易调整,整型常量,浮点型常量,字符型常量,字符串常量,2023/3/30,11,变量,允许把值存放在变量中,每个变量都由一个变量

5、名来标识。,程序运行期间,值可以被改变的量称为变量,每个变量都必须有一个变量类型。,每个变量根据它的类型不同,在内存中占据一定数目的字节单元,该变量的值就存放在这些内存单元中。,123,prod,变量名 prod 实际上是一个符号地址,变量prod 所占据的内存单元,123是变量prod的变量值,内存单元的地址,内存单元的内容,在对程序编译时由系统给每一个变量按其类型分配内存单元,同时,系统内部维护着变量名和它的内存单元地址的对应信息。,变量就是命名的内存单元,2023/3/30,12,在程序中使用一个变量之前,先要对它进行定义:为每个变量取一个名称(变量名),同时还要规定它的数据类型,以便编

6、译程序根据不同的数据类型分配内存空间。,2023/3/30,13,变量的命名规定,合法的变量名:area,sum,answer,month,name,Name,Step1,step2,number_of_student,average_score,_class1,语言中,变量(标识符)的命名规定:,只能由大小写字母、下划线和数字组成;开头的第一个字符只能是大小写字母或下划线;大小写是敏感的;不能与的关键字重复;名字在整个程序中必须是唯一的;名字的长度不能超过系统的规定。,非法的变量名:3rd_entry(数字开头)all$done(包含非法字符$)the end(包含空格)int(系统关键字)

7、,标识符是用来为变量、符号常量、函数、数组、类型、文件取名字的有效字符序列即用户为程序中各种对象取的名字。,2023/3/30,14,.关键字预先定义的具有特定含义的标识符。也称为保留字,不能另作他用。如:int char float double unsigned structif do while switch return gotodefine include undefsizeof,2023/3/30,15,避免使用无意义的名字,应尽量做到“见名知意”;尽量使用代表变量实际含义的英文单词或缩写作标识符名;当名字包含多个单词时,通常使每个单词的首字母大写;以下划线开头的名字通常是系统内部

8、保留的标识符名;在整个程序中保持统一的命名方式。,变量的命名习惯,语言中,变量(标识符)的命名习惯:,好的变量名:CircleArea,TotalScore,UserSelection,choice,StudentNumber,AverageScore,SampleFrequency,不是很好的变量名:a,aa(不知何意)numberofstudent(全部小写难以辨认)totaltotals(名字太相似),2023/3/30,16,变量的定义和使用,变量定义具有三个目的:定义变量名;定义变量类型;向程序员描述该变量。,语言中,变量必须“先定义,后使用”,int radius;/*the ra

9、dius of circle*/,关键字 int 告诉编译系统我要定义一个整型变量,用它来保存一个整型的数值。,这是变量的名字。以后的程序中就用这个名字来访问这个变量。,注释用来解释这个变量,它是给程序员的信息。对程序主要的变量作注释是很好的习惯。,2023/3/30,17,#include int main()int a,b,sum;a=123;b=456;sum=a+b;printf(“sum=%dn”,sim);return(0);,变量的定义和使用,变量“先定义,后使用”的好处是:,只允许使用定义过的变量。凡是未被事先定义的符号,不作为变量名。这样可以检查出程序中错误使用的变量名。,此

10、处定义的变量名是 sum。,此处由于输入错误或其它原因,出现了名字为 sim 的符号。由于该符号在这之前从未定义过,所以在编译时,便会出现错误信息。,Error:Undefined symbol sim,2023/3/30,18,#include int main()int a,remainder;float c;a=23;c=2.5;remainder=ac;printf(“余数=%dn”,remainder);return(0);,变量的定义和使用,变量“先定义,后使用”的好处是:,定义变量时指明了变量的类型,这样在对源程序进行编译时,可以就此类型检查该变量所参与的运算是否合法。,变量a是

11、整型的,这个表达式中的符号是“求余”运算符,它要求参与运算的数据必须是整型的。此处变量 a是整型,而变量 c 却是浮点型的,所以编译时就会出现错误信息。,Error:Illegal use of floating point,变量c是浮点型的,2023/3/30,19,变量的定义和使用,int age;/*the age of student*/float score;/*the score of student*/float average;/*the average of score*/long number;/*the number of student*/double distance

12、;/*between earth/*key user hit*/,变量定义的一般格式是:type name;/*comment*/类型 名字;/*注释*/,系统将根据变量的定义为其分配相应大小的内存单元。,2023/3/30,20,4.以下不能定义为用户标识符的是。A)scanf B)Void C)_3com D)int,课堂练习,答案:D,5.以下可作为C语言用户定义标识符的是()组标识符。Avoid define WORD Ba3_b3 _123 IFCFor-abc Case D2a Do sizeof,答案:B,注意:这些系统库函数名并非C语言的关键字。,2023/3/30,21,2.

13、2.1 整型数据,整型常量 整型变量 整型数据在内存中的存储方式,2023/3/30,22,整型常量,十进制整型常量:如 123,-456,0,八进制整型常量:以数字“0”开头的整型常量如 0123,即(0123)8,等于(83)10-011,即(-011)8,等于(-9)10八进制整型常量中不应出现“7”以上的数码。如 0128,0209 都是非法的八进制整型常量。,整型常量即整常数。中有下面三种形式的整型常量:,十六进制整型常量:以“0 x”开头的整型常量 如 0 xFF,即(0 xFF)16,等于(255)10-0 x11,即(-0 x11)16,等于(-17)10 十六进制整型常量中不

14、应出现“F”以上的数码。C语言中没有二进制整型常量,用十六进制整型常量表示二进制整数,2023/3/30,23,补充:各种计数制间的转换,方法:找出二进制数各数码位的“权”,并按“权”相加,(1 0 1 0.1 1)2=,123+,022+,121+,020+,12-1+,12-2,=8+0+2+0+0.5+0.25=(1 0.75)10,(7 1 0 3)8=,783+,182+,081+,380,=(3 6 5 1)10,(F F)16=,15161+,15160,=(2 5 5)10,2023/3/30,24,2,5 6,2,2 8,2,1 4,2,7,2,3,2,1,0,各种计数制间的

15、转换,方法:整数采用“除2取余法”小数采用“乘2取整法”,“除2取余法”的法则是:将被转换的十进制整数连续用2去除,求得余数(1或0)分别为k0、k1、k2、,直到商为0为止,则所有余数的排列 kn-1 kn-2 k1 k0 即为所转换的二进制整数。,余数 0 k0,余数 0 k1,余数 0 k2,余数 1 k3,余数 1 k4,余数 1 k5,(5 6)10=(1 1 1 0 0 0)2,2023/3/30,25,各种计数制间的转换,方法:整数采用“除2取余法”小数采用“乘2取整法”,“乘2取整法”的法则是:对被转换的十进制小数连续用2去乘,依次求得各整数位(1或0)分别为k-1、k-2、k

16、-m,直到乘积的小数部分为0为止,则所有整数为的排列 k-1 k-2 k-m 即为所转换的二进制小数。,2,0.6 2 5,整数部分为 1 k-1,(0.6 2 5)10=(0.1 0 1)2,1.2 5 0,2,整数部分为 0 k-2,0.5 0 0,2,整数部分为 1 k-3,1.0 0 0,实际上,最后的余数不一定为 0,只要符合精度要求,取够位数即可。,2023/3/30,26,各种计数制间的转换,方法:把二进制数从低位开始每 3 位数码编为一组,把每一组转换为对应的八进制数码(8 23),2,1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 0,结果是:(1 1 1 1 0

17、 0 0 1 0 1 0 1 1 0 1 0)2=(1 7 0 5 3 2)8,3,5,0,7,1,方法:把八进制数从低位开始每 1 位数码转换为3位的二进制数码(8 23),010,1 7 0 5 3 2,结果是:(1 7 0 5 3 2)8=(1 1 1 1 0 0 0 1 0 1 0 1 1 0 1 0)2,011,101,000,111,001,2023/3/30,27,各种计数制间的转换,方法:把二进制数从低位开始每 4 位数码编为一组,把每一组转换为对应的十六进制数码(16 24),2,1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0,

18、结果是:(1010 1111 0000 1001 0101 0010)2=(AF0952)16,5,9,0,F,A,方法:把十六进制数从低位开始每 1 位数码转换为4位的二进制数码。(16 24),0010,A F 0 9 5 2,结果是:(AF0952)16=(1010 1111 0000 1001 0101 0010)2,0101,1001,0000,1111,1010,2023/3/30,28,长整型:-56l;3567L;04L无符号整型:586u;077765U;0 xfffdU无符号长整型:0375ul;0 x45feUL,整型常量的类型,2023/3/30,29,课堂练习,下面四

19、个选项中,均是不合法的整型常量的选项是,(A)0f1-0 xffff 0011,(B)0Xcdf 017 12,456,(C)018 999 5e2,答案:(D),答案:(A),(D)0 x48eg-068 03f,下面四个选项中,均是合法的整型常量的选项是,(A)160-0 xffff 011,(B)0Xcdf 01a 0 xe,(C)01 986,012 0668,(D)0 x48a 2e5 0 x,2023/3/30,30,整型变量的分类,注:有符号整型变量中,关键字signed可以省略。(有符号与无符号不同的取值范围详见教材P23页),2023/3/30,31,整型数据在内存中的存储方

20、式,数据在内存中是以“二进制数”的形式存放的。,数据在内存中是以“二进制数的补码”形式存放的。,例如:int a=10;那么内存中实际存放的是 10 的补码,如果是:int a=-10;那么内存中实际存放的是-10 的补码,-10 的原码是:,最高位不动,其余各位取反:,整个数加上1:,求-10补码的方法:,2023/3/30,32,计算机中数的表示,一个数据总要占据一定数目的字节单元(整数个、有限个)不同类型的数据占据不同数目的字节单元(比如,PC机DOS环境下一个整数占2个字节,一个实数占4个字节)所有数据都是以二进制数的形式表示的 数据有正有负。计算机中表示一个数据时,总是用它所占字节单

21、元的所有位中最高位表示数的符号:0 表示正,1 表示负。,符号位,最高位:第7位,最低位:第0位,1 个字节,符号位,最高位:第15位,最低位:第0位,2个字节,2023/3/30,33,对于有符号变量:把最高位作为符号位保存数据的符号(0为正,1为负),其余位保存具体数值,因此可以用于正确保存限值范围内的正数或负数。,有符号和无符号的区别,有符号和无符号的区别是什么?,关键在于“最高位”的性质。,如果有:int a;那么a的有效数值范围为-3276832767,有符号整型变量 a=32767:,如果有:unsigned int b;那么b的有效数值范围为 065535,最高位代表符号,对于无

22、符号变量:最高位不作为符号位,全部的位都用来保存数据的数值,因此可以用于正确保存限值范围内的正数。,无符号整型变量 b=65535:,最高位代表数值,2023/3/30,34,整型数据的表示范围,由于每一种整型数据占有的字节单元数目都是有限的,所以每一种整型数据可表示的数的范围也是有限的。,由于不同类型的整型数据占有的字节单元数目是不同的,所以不同类型的整型数据可表示的数的范围也是不同的。,2023/3/30,35,整型变量的定义,变量的定义一般放在函数体的开头部分。,定义方法:类型符 变量名列表;(用逗号分隔),如:int num;unsigned int age,score;long di

23、stant,SampleTimes;,2023/3/30,36,#include int main()int max,over;max=32767;over=max+1;printf(“max=%d,over=%d”,max,over);return(0);,整型变量的溢出,由于每一种整型数据可表示的数的范围都是有限的,所以在使用整型变量时要特别注意“数据溢出”的问题。,int型的有效表示范围是-32768+32767。,max是:,max+1over是:,32767,-32768,数据溢出了!,将变量over定义成long型就能得到正确的结果。,2023/3/30,37,作业1:将下列各数用

24、八进制和十六进制表示:,(1)617(2)111(3)28654(4)21003,2023/3/30,38,2.2.2 浮点型数据,浮点型常量 浮点型变量 浮点型数据在内存中的存储方式,2023/3/30,39,浮点型常量,十进制小数形式:由数字和小数点组成。(小数点必须有,且小数点的前面或后面必须有数字)如 10.23,-0.456,78.0,0.0,89.,指数形式:s E n 或 s e n 形式。注意:E或e前面必须有数字,后面的指数必须为整数。如 218.3=218.3E0=2183E-1=0.02183E+4,浮点数又叫“实数”。浮点数常量有两种表示形式:,指数形式的浮点型常量,有

25、“规范化指数形式”,即在字母E或e之前的小数部分中,小数点左边必须有且只有一位非零的数字。如 218.3=2.183E+2;0.002183=2.183E-3程序以指数形式输出实数,就是以“规范化指数形式”输出,2023/3/30,40,课堂练习,下面四个选项中,均是不合法的浮点数的选项是,(A)160.0.12 e3,(B)123 2e4.2.e5,-.18 123e4 0.0,答案:B),答案:(B),(D)e3.234 1e3,下面四个选项中,均是合法的浮点数的选项是,(A)+1e+1 5e-9.4 03e2,(B).60 12e-4-8e5,(C)123e 1.2e-.4+2e-1,(

26、D)e3.8e-4 5.e-0,2023/3/30,41,浮点数,在计算机中,既有整数部分又有小数部分的数称为浮点数,P S 2 N,可见,浮点数表示中的各部分又都是定点数。在一个浮点数所占字节单元中,一部分位用来保存阶码,一部分位用来保存尾数。,P的尾数(定点小数),P的阶码(定点整数),尾数符号,阶码符号,例如:浮点数N=210 0.0101 在计算机中表示为(假设占2字节),阶码符号,阶码数值,尾数符号,尾数数值,阶码部分:占5位,尾数部分:占11位,2023/3/30,42,浮点型数据在内存中的存储方式,浮点型数据在内存中是以“尾数”和“阶码”的形式存放的。,在一个浮点型数据(浮点数)

27、所占字节单元中,一部分位用来保存阶码,一部分位用来保存尾数。,不同的编译系统位数分配不同。总之,尾数部分位数越多,可以表示的数的有效数字位数就越多,精度就越高;阶码部分位数越多,可以表示的数的范围就越大。,例:float 7.45623 0.745623101,2023/3/30,43,浮点型变量的分类,由于不同的浮点型数据是用不同数目的有限字节单元保存的,所以它们能表示的数值范围是不同的,能保留的有效数字位数也是不同而且是有限的。,2023/3/30,44,浮点型变量的定义,变量的定义一般放在函数体的开头部分。,定义方法:类型符 变量名列表;(用逗号分隔),如:float SinValue,

28、CosValue;double area,result;,注:语言中的所有关键字都是小写的。,2023/3/30,45,2.2.3 字符型数据,字符常量 字符变量 字符型数据在内存中的存储方式,2023/3/30,46,字符型常量,比如:a,A,d,D,?,%,$,2,4,注意:a 和 A,d 和 D 都是不同的字符常量。,的字符常量是用单引号()括起来的一个字符。,另外:语言还存在另一种形式的特殊的字符常量。,它是用单引号括起来的以一个“”字符开头的规定的字符序列。,“”字符叫反斜杠字符。这种特殊的字符常量称为“转义字符”。,2023/3/30,47,转义字符常量及其含义,注意:表示字符的转

29、义16进制数与十六进制整型常量写法不同 x 0 x,2023/3/30,48,课堂练习,下面四个选项中,均是合法的转义字符的选项是,(A)n,(B)017,018 f xab,答案:A),答案:(B),(D)0 101 xlf,下面四个选项中,均是不合法的字符选项是,(A)xf,(B)1011 m,011 f,(D)abc 101 xlf,2023/3/30,49,字符型变量,字符型变量用来存储字符型常量。一个字符变量只能保存一个字符。,如 char InputKey,UserSelection;unsigned char lines,grade;,定义方法:类型符 变量名列表;(用逗号分隔)

30、,2023/3/30,50,字符型数据在内存中的存储方式,每个字符型数据在内存中只占一个字节,该字节中实际保存的是该字符的代码。,ASCII(美国信息交换标准代码)American Standard Code for Information Interchange,ASCII 代码实际上是一个0255之间的整数。每一个整数对应着一个不同的字符,即每一个字符都有一个不同的整数代码。对字符型数据来讲,它的那一个字节中保存的就是这个整数。,2023/3/30,51,常用字符及对应ASCII码,常用字符及对应ASCII码,2023/3/30,52,可见,字符型数据存储对应的 ASCII 码,而 ASC

31、II 码是一个整数,按整型数据的存储方式存储,因此在语言中两者的存储方式是类似的,从而在一定范围内可以通用,即两种类型的数据可以相互赋值,相互输出,也可以在一起进行运算。,字符型数据在内存中的存储方式,“一定范围内”指的是“一个字节”所能保存的整数范围内。有符号型整数:-127128 无符号型整数:0255,65,这个字节存储的内容是01000001。如果它是一个整型数据,那就是整数65;如果它是一个字符型数据,那就是字符A。,ASCII 值65,2023/3/30,53,#include int main()char c1,c2;int n1,n2;c1=b;c2=97;n1=98;n2=a

32、;printf(“c1=%c,c2=%cn”,c1,c2);printf(“n1=%d,n2=%dn”,n1,n2);printf(“c1=%d,c2=%dn”,c1,c2);printf(“n1=%c,n2=%cn”,n1,n2);return(0);,整型数据和字符型数据通用:例,既可以把整型数据赋值给字符型变量。,也可以把字符型数据赋值给整型变量。,既可以把字符型数据按整数形式输出。(%d 整型格式符),也可以把整型数据按字符形式输出。(%c 字符型格式符),2023/3/30,54,#include int main()char c1,c2,c3;c1=A;c2=b;c3=;c1=c1

33、+32;c2=c2 c3;printf(“c1=%c,c1=%dn”,c1,c1);printf(“c2=%c,c2=%dn”,c2,c2);return(0);,整型数据和字符型数据通用:例,字符数据可以和整型数据一起进行算术运算。,字符型数据之间也可以进行算术运算。,既可以把字符型数据按字符形式%c输出,也可以把字符型数据按整数形式%d输出。,实际上都是整数之间的算术运算。,运行结果:c1=a,c1=97 c2=B,c2=66,空格的ASCII码=32,2023/3/30,55,2.2.4 字符串常量,字符串常量字符串结束标志字符字符型数据在内存中的存储方式,2023/3/30,56,字符

34、串常量,比如:“a”,“”,“Hello,world”,“9811113”,“LCS”,?,的字符串常量是用双引号(“)括起来的若干个字符。,字符串常量在内存中占用连续的字节单元,每个字符按顺序占一个字节。,语言规定:自动在每一个字符串常量的结尾加一个“字符串结束标志字符”,以便系统据此判断字符串是否结束。,一个字符串常量中包含的字符个数是不确定的。那么,系统在处理字符串常量时如何知道何处结束呢?,2023/3/30,57,字符串结束标志字符,0 是ASCII码为0的字符,即位于字符表中的第一个NUL字符。它是一个“空操作字符”,就是说,它既不引起任何控制动作,也不产生任何显示。,的字符串结束

35、标志字符是 0。,因此,的字符串常量在内存中占用的字节数等于可见字符数加上1,即结束标志字符占用的一个字节。,“HELLO”,字符串结束标志字符也是一个字符,也要占用一个字节。,总共占用6个字节,5个可见字符,2023/3/30,58,A和“A”的区别,由于语言对每一个字符串常量均在其末尾自动添加一个字符串结束标志字符0,因此:A 占一个字节单元“A”占两个字节单元,包括 A 和 0 两个字符,不能把一个字符串常量赋值给一个字符变量。如 char c1=“A”;是错误的。,?,为什么是错误的。,原因1:“A”占两个字节单元,而字符变量c1只有一个字节,所以无法赋值;,原因2:真正的原因。语言实

36、际上把字符串处理成字符指针,把一个指针赋值给一个字符变量当然是错误的。,2023/3/30,59,课堂练习,问题3:1 和 1 是否相同?为什么?,问题4:10 和 1 是否相同?为什么?,答案:(c),答案:(B),答案:不相同。因为前者是整数1,它的值是1,而后者是字符 1,它的值是49(ASCII码)。,答案:相同。因为字符 0 的值是48,加1等于49,正好是字符 1 的值。,2023/3/30,60,课堂练习,下面四个选项中,均是正确的八进制数或十六进制数的选项是,(A)-10 0X8f-011,(B)0abc-017 oxc,0010-ox11 Oxf2,答案:c),答案:(D),

37、(D)0a12-0 x123-0 xa,下面四个选项中,均是正确的数值常量或字符常量的选项是,(A)0.0 0f 8.9e&,(B)”a”3.9E-2.5 1e1”,5 011 0 xff00 0a,(D)+001 0 xabcd 2e250.,2023/3/30,61,2.2.5 符号常量,预处理 符号变量的实现 使用符号常量的注意事项,2023/3/30,62,预处理,编译预处理:是指在对源程序进行正式编译之前所作的一些处理。这些处理是由预处理命令指定的。源程序经过预处理后,再由编译程序进行正式的编译。,#define预处理命令 宏定义 的用法:#define 标识符 字符串它的作用是用指

38、定的标识符去代表一个字符串。在预处理时,源程序中所有在该#define命令后出现的该标识符全部用指定的字符串代替。,预处理命令是由 规定的,但它不是语言本身的组成部分,不能直接对它进行编译。预处理命令都是以符号“”开头的。,2023/3/30,63,#include“stdio.h”#define PI 3.14159int main()float r,c,s,v;r=20;c=2*PI*r;printf(“周长=%f”,c);s=PI*r*r;printf(“面积=%f”,s);v=4*PI*r*r*r/3;printf(“体积=%f”,v);return(0);,符号常量的实现,这个字符串

39、将要在预处理时去替换符号PI,标识符名:PI编译预处理时,这一行以后的源程序中出现的PI都会被指定的字符串代替。,预处理后进行正式编译,替换进去的3.14159就会被理解为是一个实数。,2023/3/30,64,#include“stdio.h”#define PI 3.14159int main()float r,c,s,v;r=20;c=2*PI*r;PI=100;return(0);,使用符号常量的注意事项,错误,注意1:符号常量不是变量,不能被赋值。,2023/3/30,65,#include“stdio.h”#define PI 3.14159int main()float r,c,

40、s,v;r=20;c=2*PI*r;printf(“PI=%fn”,PI);return(0);,使用符号常量的注意事项,不替换,注意2:如果指定的符号出现在双引号中,则不被替换。,要替换,2023/3/30,66,#include“stdio.h”const PI=3.14159;int main()float r,c,s,v;r=20;c=2*PI*r;printf(“周长=%f”,c);s=PI*r*r;printf(“面积=%f”,s);v=4*PI*r*r*r/3;printf(“体积=%f”,v);return(0);,常变量,const关键字的用法:const 标识符 常量值,常

41、变量名:PI,常变量必须初始化,在定义的同时给以值,同样要注意的是:虽然PI是变量,但是它是用 const 关键字定义的常变量,所以也不能被赋值。,PI=100;,2023/3/30,67,小 结,习惯上,符号常量用大写字母表示;定义符号常量时,不能以“;”结束;一个#define占一行,且要从第一列开始书写;一个源程序文件中可含有若干个define命令,不同的define命令中指定的“标识符”不能相同;,2023/3/30,68,2.3.2 变量赋初值,2023/3/30,69,当一次定义多个变量时,不能用连续号的方式对多个变量进行初始化,变量赋初值,一个变量在定义之后,第一次赋值之前,它的

42、值是不确定的。在赋初值前,不能让其参与运算,否则会得到不可预知的结果。对变量进行定义的同时给变量赋初值,称为 初始化,,在定义变量的同时进行初始化除static,extern 变量外,初始化与定义,赋值等价,当一次定义多个变量时,可以对其全部或部分进行初始化,如:int TotalStudent=40;等价于:int TotalStudent;TotalStudent=40;,如:int TotalStudent=40,TotalScore=0,average;,如:int TotalScore=AverScore=0;是错误的。,正确的应该是:int TotalScore=0,AverSco

43、re=0;,2023/3/30,70,下列变量定义中合法的是,A)short_a=1-.1e1;B)double b=1+5e2.5;C)long do=0 xfdaL;D)float 2_and=1-e-3;,2023/3/30,71,一、已定义ch为字符型变量,在下列赋值语句中错误的是:A)ch=;B)ch=62+3;C)ch=NULL;D)ch=xaa;二在以下选项中可做为C语言合法整数的是:A)10110B B)0386 c)0Xffa D)x2a2三、在以下选项中可做为C语言合法常量的是:A)-80 B)-080 C)-8e1.0 D)-80.0e,2023/3/30,72,字符输出

44、函数putchar 字符输入函数getchar 格式输出函数printf 格式输入函数scanf 各种格式控制字符的含义和用法 简单的程序设计,2.7 数据的输入输出,2023/3/30,73,输入输出的概念及在语言中的实现,2023/3/30,74,输入输出的概念及在C 语言中的实现,输入是指从外部设备(如键盘,扫描仪,文件等)向计算机主机送入数据;输出是从计算机主机向外部设备(如显示器,打印机,文件等)送出数据。,C语言本身没有输入输出语句。要实现这些操作,必须调用相应的系统库函数。比如 printf 函数用于输出,scanf 函数用于输入,等等。,不同版本的C 语言(C 编译器)均带有不

45、同数量不同用途的系统库函数,以.obj 文件或.lib 文件的形式提供,供用户与自己的.obj 文件链接以形成.exe 的可执行文件。,注意:这些系统库函数名并非C语言的关键字。,2023/3/30,75,C 语言中的头文件,要想正确成功的调用C 系统库函数,就必须在源程序文件开头用预编译命令“#include”将有关的“头文件”包括进来。如:要想调用系统输出库函数printf,在源程序文件开头必须有如下预编译命令#include,C语言中的头文件(header file)是指后缀名习惯为“.h”的一些文本文件。在头文件中,包含有关系统库函数的原型、有关系统全局变量的声明、有关系统符号常量的宏

46、定义、有关数据类型的定义等等信息。其中,系统库函数的原型就告诉编译系统该函数的名称、返回值类型、形参数量及类型等信息,这样编译系统才能正确编译,否则会给出出错信息。,2023/3/30,76,C 语言中的头文件,stdio.h头文件中包含了与标准I/O操作有关的系统库函数的声明,所以调用如printf、scanf等标准输入输出函数时,必须在源程序文件中包含该头文件。否则,编译时会给出错误信息如下:Function printf should have a prototype函数 printf 应该 有 一个 原型,提示:要想知道某个版本的C语言提供哪些系统库函数以及各种库函数所对应的头文件的名

47、称,必须参考该版本C语言的系统库函数手册或联机帮助。,2023/3/30,77,2.7.1 字符数据的输入输出,字符输出函数putchar 字符输入函数getchar,2023/3/30,78,字符输出函数putchar,原型:int putchar(int ch);参数:一个字符型或整型的数据功能:在默认的输出设备(显示器)上输出一个字符用法:putchar(字符型或整型数据);返回值:所输出的字符。绝大多数情况下不使用该返回值。,2023/3/30,79,#include int main()char a,b;int c,d;a=B;b=O;c=65;d=66;putchar(a);put

48、char(b);putchar(Y);putchar(n);putchar(c);putchar(d+32);return(0);,字符输出函数putchar:例,参数可以是int或char型变量,运行结果:BOYAb,参数可以是int或char型常量,参数也可以是int或char型表达式,2023/3/30,80,字符输入函数getchar,原型:int getchar(void);参数:无功能:从默认的输入设备(键盘)上接收用户键入的一个字符,并把该字符作为函数值返回用法:ch=getchar();返回值:用户从键盘键入的字符。绝大多数情况该字符都会被赋值给某个字符型或整型的变量,或者作为

49、表达式的一部分参与其它的运算。,注意:getchar 函数只能接收并返回一个字符。,执行过程:当程序运行到包含有getchar 函数调用的语句时,会暂时停下来,此时屏幕上有一个闪烁的光标,等待用户从键盘上的输入。用户必须键入有关信息并按Enter键后程序才能继续向下执行。,2023/3/30,81,#include int main()char ch;ch=getchar();putchar(ch);return(0);,字符输入函数getchar:例,由于 getchar 函数要接收用户从键盘输入的字符,所以程序执行流程到这儿会暂时停下来等待用户的输入。,B(用户键入字符B后,在打“回车”键

50、)B(putchar函数再在屏幕上输出一个字符B),运行结果:,当用户键入一个字符并按下Enter键后,该字符被getchar函数接收并作为函数值返回。此处,将这个返回值同时赋值给一个字符型的变量ch,保存起来以作后用。,见习题P141页71,2023/3/30,82,字符输入函数getchar进一步说明 键盘输入有1k以上的缓存空间,一次键盘输入是以键入enter为结束。getchar等待键盘缓存空间中出现enter,当其出现enter,getchar从键盘缓存空间中取一个字符返回。如果键盘缓存空间还有字符,下一个getchar就不再等待,立刻从键盘缓存空间中取一个字符返回。#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号