《基本数据类型与操作.ppt》由会员分享,可在线阅读,更多相关《基本数据类型与操作.ppt(79页珍藏版)》请在三一办公上搜索。
1、C语言程序设计,中山大学数学与计算科学学院,冯 伟,2011-09-27,ProgramT,C语言程序的建立和运行的基本过程 静态检查 目标程序 可执行程序 编辑 编译 连接 执行 结果 源程序 动态检查,有错,F.c,F.obj,F.exe,有错,有错,有错,(1)新建项目和程序(FileNew)(2)输入或编辑程序(3)保存程序(FileSave Ctrl+S)(4)编译程序(BuildCompile Ctrl+F7)(5)建立程序(BuildBuild F7)(6)运行程序(BuildExecute Ctrl+F5),C程序上机过程,编译程序:Compile(Ctrl+F7)。无错时Ou
2、tput窗口:,建立程序:Build(F7)。无错时Output窗口:,执行程序:Execute(Ctrl+F5)。执行结果:,认识编译器和调试C程序的上机试验,1、上机学习使用 Visual Studio 编译环境:界 面、菜单列表及相应功能。2、通过编辑输入简单C语言程序,建立、编译 并运行这些例题程序,以掌握C语言程序的 建立和运行过程。3、了解和区分C语言程序的基本组成和结构,认真领会程序的书写要求以写出层次清晰、结构分明的C程序。,(二)基本数据类型与基本操作,1、数据类型概述2、基本数据类型3、运算符和表达式4、数据类型转换5、数据输入和输出,数据以特定的形式被储存和操作,不仅是操
3、作的对象,而且是操作的结果。算法或程序本质上是描述数据的变化和流动。特定形式的数据之间还存在某些联系。所谓数据结构指的是数据的组织形式,是相互之间存在一种或多种特定关系的数据元素的集合。不同计算机语言定义和使用的数据结构是不同的,而采用数据结构的不同,也使解决问题的算法不同。程序=数据结构+算法。,2.1 数据类型概述,关于数据类型的理解(1)数据类型名称(2)数据类型占用的内存空间(3)数据类型所能表示的数据及其范围(4)数据类型所能允许的操作,C语言的数据类型,课本P43图3.4,数据类型 常量、变量,1 在程序中对用到的所有数据都必须指定其数据类型,即程序中任何一个数据都必须属于一种数据
4、类型,而且遵循“先定义,后使用”的原则。2 数据类型的作用:确定数据分配内存空间大小、取值范围和允许的操作。3 C语言数据分为常量和变量,分别属于前述数据类型。在程序运行过程中,其值不能被改变的量称为常量;而其值可以改变的量称为变量。4 常量和变量都是运算量,即程序中参与运算的量,是程序运算或处理的对象。函数也可以作为运算量。,C语言的标识符 标识符是程序语言里定义的作为名字的合法有效字符序列,以表示程序中需定义的对象(数据类型、符号常量、变量、函数等)名称。C语言标识符的命名规则是:1)只能由英文字母、数字和下划线三种字符组成。2)必须以英文字母或下划线开头。3)长度有限,超过部分自动截断,
5、一般取前8个字符为有效。用户自定义标识符注意事项:1)大小写字母是不同,即区分字母的大小写。2)尽量不要以下划线开头,避免可能和系统定义名字冲突。3)标识符尽可能选取有意义的词汇,以便“见名知意”。4)一般情况下,符号常量用大写,变量名和函数名用小写。5)在易混淆地方,尽量避免用易认错的字符(0Oo,1Il,2Zz)。,C语言的关键字 C语言中用到一些英语单词,它们符合标识符的定义,但是已为其规定了特殊的含义,不允许再有其它用途。称这些特定的标识符为关键字或保留字。C语言有下述关键字(P378附录C):auto break case char const continue default do
6、 double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while注意:用户自定义的标识符不能是关键字和编译系统库函数名。,几个特殊关键字的说明1)空类型:void void类型一是表示函数无返回值;二是设置空指针。2)类型修饰符:signed、unsigned、short、long3)存取修饰符:常数型(const)、暂态型(volatile)用于控制对变量访
7、问或修改的方式。其中,const型变量在 程序执行期间不可改变,volatile型变量的值可由程序中没 有明确指明的方式改变。4)存储类型符:extern、static、register、auto 根据变量存在时间(生存期):外部、静态、寄存器、自动。,2.2 基本数据类型,1、整型:表示整数2、实型:表示实数3、字符型:表示单个字符 4、字符串型:表示一串字符(字符型数组)5、逻辑型:表示逻辑“真”或“假”(bool类型),基本数据类型的存储空间长度及取值范围,注意:1.长度是比特(位)数,8个比特是1个字节。2.存储长度和取值范围可能因具体机器和编译系统而异,用运算符sizeof求字节数。
8、,课本P45表3.2、P49表3.3、P50表3.4,变量的声明和赋值1)在程序中,数据及其存储空间被抽象为变量。变量名 实际是一个符号地址,对应程序在编译连接时由编译系统分配的一个内存地址,其中存放变量值。2)要引用(使用)一个变量,必须首先声明(定义)其唯一 数据类型,以申请开辟相应存储空间,而后才能使用。3)变量声明语句的一般形式是:type variable-list。其中,type必须是有效的C数据类型,variable-list 可由同类型的一个或多个变量名加上逗号分隔符组成。4)从运算器向变量名所代表的内存地址或存储单元传送 数据叫赋值,赋值用运算符“=”表示。允许声明时对变量进
9、行赋初值(初始化)。,区别:变量名、变量占用的内存空间、变量的值,变量的完整定义,变量的完整定义方法如下:存储类型 数据类型符 变量名列表;变量有auto(自动),static(静态),extern(外部),Register(存储器)四种存储类型,当未指明存储类型时,在函数内部申请的变量默认为auto型变量。区别:定义三个整型变量i,j,k:int i,j,k;定义三个静态整型变量a,b,c:static int a,b,c;,区别:变量的赋值语句与赋值表达式,赋值语句的作用是计算表达式的值后送到变量中。格式:变量名=表达式;“=”在这里表示赋值运算符,是把的值给。区别:赋值语句是语句,有分号
10、;赋值表达式仅表示一个值,不是语句,不能有分号。,强调说明1、在C语言中,在使用变量前必须先对其进行定义(先定义后使用),以申请存储空间。变量名必须 符合标识符的命名规则。变量的数据类型决定了 变量占用的内存空间的大小。2、变量值的改变可由赋值语句(表达式)、键盘输入 等实现。变量在任一时该只能保存一个值,而且 该值只与最后一次赋值有关(当前值)。3、C语言规定:在函数体内部,只能在第一个可执 行语句前定义变量。因此,一般在函数开头声明 部分进行变量定义。,变量的作用域 变量在程序的何处说明对程序其他部分如何使用这个变量影响较大。以变量说明的位置为基础,决定变量存在的空间区域,称为变量的作用域
11、规则。C语言中,程序可在三个位置说明变量。第一是在所有函数(包括main()函数)之外,叫全局变量,程序任何部分都可以使用它;第二是在函数内,叫局部变量,仅本函数内的语句可以使用它;第三是函数的形参说明部分,这些参数除了接受传递到函数的实参信息外,其它功能与局部变量一样。,关于变量的其它说明1)循环变量用简单写法,如 i,j,k 等2)变量名要有意义,见名知意:score分数,age年龄3)变量名不要太长,书写麻烦,记忆麻烦4)不允许两个全局变量同名,否则编译程序时出错5)同一个函数内不能定义两个同名的局部变量,但不同函数内的局部变量可以重名,普通常量与符号常量1)常量可以是任何的基本数据类型
12、,表示方法由其类型决定。2)普通(直接、字面)常量:一般的常量。如整数、实数、字符、转义字符、字符串等。3)符号常量:在程序中指定用标识符名字代表的常量。符号常量有两种定义方法:a.宏常量,在程序文件首部定义:#define PI 3.1459 b.变量常量,按变量说明定义:const float PI=3.14159f;使用符号常量含义清楚,见名知意,且易修改,一改全 改。习惯上,符号常量名用大写(区别变量名用小写)。,普通常量的表示1整型常量 整型常数可用以下3种表示形式:(1)十进制整数:由09组成。(2)八进制整数:由07组成。(3)十六进制整数:由09,AF组成。2实型常量:又称为浮
13、点数 只能用十进制表示,有两种表示形式:(1)小数形式:它由数字和小数点组成 注意:必须有小数点。(2)指数形式:以指数形式表示(指数须为整数)注意:规范化的指数形式是在字母e或E之前 的小数点左边只有一位非零数字,而在字母 e或E之后为整数。如:3.333333e-001。,3字符常量:用一对单撇号括起来的一个字符(课本P377)注意:不能用双撇号代替单撇号。4转义字符:将反斜杠后面字符转成别的意思(课本P40表3.1)(1)用反斜杠开头后面跟一个字母代表一个特殊字符(2)用代表字符“”,用 和”代表字符单和双撇号(3)用后跟1到3个八进制数代表相应的ASCII的字符(4)用x后跟1到2个十
14、六进制数代表相应的ASCII的字符5字符串常量:用一对双撇号括起来的零个或多个字符序列 注意:存储时要多占一个字节,用来存储结束标志0,字符类型数据的表示和存储形式 1、字符类型的数据在内存中以相应的ASCII代码存储。2、字符数据可以等价为与其相应的ASCII码的整数,可以作为整数参与运算(取值范围0255)。字符串型与逻辑型 在C语言中无专门的字符串类型及逻辑型数据,但是可以分别用字符型与数值型表示。1、字符串型:用双撇号定界的一串符号。字符串型都以字符0结束,在C语言中用字符数组(指针)表示。2、逻辑型:逻辑值常只有两个(真、假),在C语言中,用“非0”表示“真”,用0表示假。,01算术
15、运算符(+-*/%+-)02关系运算符(=|&)05赋值运算符(=及其扩展的复合赋值运算符)06条件运算符(?:)07逗号运算符(,)08指针运算符(*)09地址和引用运算符(&)10求字节数运算符(sizeof)11强制类型转换运算符((类型)或类型())12分量运算符(成员运算符指向成员运算赋)13下标运算符()14其它(如函数调用运算符())(课本P52表3.5最常用的算术运算符),2.3 运算符和表达式,学习运算符应注意的问题(1)掌握运算符的功能。(2)清楚运算的优先级别:优先级。(3)明了结合方向:结合性。(4)清楚表达式结果的数据类型。表达式的基本概念概念:运算符连接不同的运算量
16、构成的带有值的运算式。特性:整个表达式是有值的,可把整个表达式看成一个数。不同的运算符连接不同的运算量构成不同的表达式。,(1)、算术运算符与表达式,算术运算符:+*/%+-注意:号的写法*,号的写法/ab,ab,ab等应该写成a*b ab或 应该写成a/b,应写成(a+b)/(c+d),%是取余运算符,即获得两个整数运算的余数运算。注意:%两侧运算量必须是整数!算一下:5/3-5/3 5/(-3)5%3-5%3 5%(-3),(2)、关系运算符与表达式(课本P91-92),关系运算符:=4 3=4 3=4 3=4 3!=4,0 1 0 1 0 1,(3)、逻辑运算符与表达式(课本P93-94
17、),逻辑运算符:!(非)&(与)|(或),注意:关系运算和逻辑运算是任何语言中都有的重要运算,是构成选择、循环结构的关键。,逻辑运算真值表,不等式70X80在计算机中怎样表示?,X=70&X80,当要用&和|连接多个条件时,C语言是怎样计算的呢?1、a|b|c 2、a&b&c,对于1式,只要有一个为非0,表达式的结果一定为非0。因此C语言规定,如果a为真(非0),就不会计算b和c,因为式子一定为真(非0),如果a为假(0),才会计算b。但是如果b为真,也不会计算c。也就是说只有a,b都为假(0)时,才会计算c。对于2式也有同样的问题,a,b,c只要一个为假(0),其结果一定为假(0),不用再往
18、下计算。所以只有a为真,才会计算b,只有a,b为真,才会计算c。,(4)、C语言的其它运算符,位运算符:移位运算符(、=、=、|=、=、=,逗号运算符:表达式1,表达式2,表达式3/都执行 逗号表达式由逗号连接的多个表达式构成,逗号表达式的值只与最后一个表达式相同。如:表达式(a=1,c=2,c+a)的值为3。条件运算符:表达式1?表达式2:表达式3/双分支选择 如:a?b:c(课本P97)表达式的值由a决定,如果a为非0,则表达式的值为b,否则为c。如:a=5,b=3,c=4;则表达式(a5?b+c:b-c)的值为-1。取地址运算符:&获取变量对应的内存地址。取值运算符:*从内存地址指定的内
19、存空间中取出值。,(5)、自加+、自减-运算符(课本P53),(1)前加或前减(先对变量自加或自减1,而后使用变量)+变量名-变量名(2)后加或后减(先使用变量,而后对变量自加或自减1)变量名+变量名-如:+a,a+,-a,a-等。注意:自增或自减运算符只能用于变量,而不能用于变量或表达式。应避免使用中的歧义性,不宜复杂。,数据类型的提升与降格 由低数据类型转换为高数据类型,称为提升;包含:(1)由短数据转换为长数据(2)由整数转换为浮点数 相反方向的转换称为降格。基本数据类型的由高到低的级别 双精度 单精度 长整型 短整型 字符型,2.4 数据类型转换,数据类型降格转换中的问题 降格转换中,
20、当数据值超过了目标类型的取值范围时,均会影响精度。(1)当由一个实数降格转换为整数时,实数的小数部分全部舍去,并按整数形式存储。(2)当由double型转为float型(7位有效数字)时,去掉多余的有效数字,但以四舍五入处理。,不同类型数据的隐式转换 1.算术转换(向高看齐)为使表达式中的各运算量具有共同的类型。2.赋值转换(转换为左边变量的类型)把一个值赋给与其不同的类型的变量。3.输出转换(按格式控制转换)在输出时转换成指定的输出格式。4.函数调用转换(实参转为形参类型)实参与形参类型不一致。不同类型数据的显式转换 强制类型转换符:(类型标识符)(表达式),运算符的优先级和结合性(课本P3
21、78附录D),对涉及多种运算符的表达式进行运算时,应考虑运算符的优先级和结合性。首先,应当考虑运算符的优先级,明确先后计算的顺序;其次,还要考虑运算符的结合性,明确同级运算运算符的结合方向(左至右或右至左)。,一般依次为逻辑非!,算术运算符、关系运算符、逻辑运算符(&,|)等,具体情况请参阅教材。注意:可以括号()来明示和改变运算符的优先级次序。,基本数据类型及操作中需强调的问题和实例1.宏常量和变量常量的区别和使用,#include#define PRICE 30void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,
22、total);,#include const int PRICE=30;void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);,2.实型数据的舍入误差和使用,#include void main()float a,b,pi,area;/double a,b,pi,area;a=123456.78900;b=a+0.0002;printf(%fn,a);printf(%fn,b);pi=3.14159;area=pi*10*10;printf(%fn,pi);printf(%fn,area);,3个Warn
23、ing123456.789063123456.7890633.141590314.158997,123456.789000123456.7892003.141590314.159000,虽然允许隐式转换,但提倡显式类型转换,类型匹配,提高精度。,3.提倡类型匹配,强制转换运算符,区别/和%运算符,#include void main()printf(%dn,5/3);printf(%dn,5%3);printf(%lfn,5.0/3);printf(%dn,(int)5.0/3);printf(%dn,(int)5.0%3);printf(%fn,(float)(5/3);printf(%fn
24、,(float)(5%3);,121.666667121.0000002.000000,4.打印机和显示屏结果理解,#include void main()printf(ab ct derftgn);printf(ab ct den);printf(ab ct derftgn);printf(n);printf(htibbj kn);printf(htin);printf(htibbj kn);,5.字符和字符串的区别和使用,#include#include void main()char c1=a;/char c2=a;/错误!类型不匹配 char c3=a;printf(%dn,sizeo
25、f(char);/1 printf(%dn,sizeof(c1);/1 sizeof测试数据类型或变量字节数 printf(%dn,sizeof(c3);/2 字符数组长度 printf(%dn,strlen(c3);/1 strlen测试字符串长度 printf(%dn,strlen(101a,.00n);/8,6.其它强调注意的问题,字符常量和整数的等价 常用字符与ACSII码对照表中,0255是十进制整数,等价于对应的字符,可以混合运算。注意:八进制ddd和十六进制xdd的表示形式。如:八进制数101代表ASCII码(十进制数)为65的字符A。(American Standard Cod
26、e for Information Interchange)逻辑运算符(!&|)处理的运算对象和结果都是逻辑值 整数0为假,整数非0为真;实数0为假,实数非0为真;空字符为假,非空字符为真。3)自增自减运算符的运算对象是整型、字符型和指针型 a+、a-先使用a的值,后使a的值加、减1+a、-a 先使a的值加、减1,后使用a的值,输入:从输入设备输入数据到内存中。输出:将内存信息由输出设备显示。方式:C语言的输入输出是通过调用函数实现的。建议:C语言的输入/输出函数作为最基本的操作之一,规定繁琐,特别要记忆大量格式符和相应的规则。建议不必花太多精力死抠每一个细节,首先重点 掌握最常用的一些规则,
27、其它部分可在需要时随 时查阅,通过结合上机编写调试程序逐步深入而 自然地掌握其应用。,2.5 数据输入和输出,1、单个字符的输入和输出(课本P78-82)格式:getchar();/没有参数功能:得到从键盘上输入的一个字符。用法:char ch;ch=getchar();格式:putchar(ch);功能:在屏幕上显示一个字符,ch为字符型常量或变量,包括控制字符或其他转义字符。用法如:char a=A;putchar(a);putchar(n);putchar(101);putchar(015);putchar(012);putchar(getchar();/输出输入的字符,2、printf
28、函数(课本P68-75)该函数是最常用的有格式的输出函数。用法如下:printf(“格式控制字符串”,输出表列);注意:1)“格式控制字符串”是用双撇号括起来的字符串,包括格式说明和普通字符。2)格式说明由“%”和格式字符组成,作用是将输出数据转换为指定的格式输出(提倡类型匹配一致,避免隐式转换),即说明对应输出项在输出时的位置宽度及相应的数据类型。3)普通字符是需要原样输出的字符,目的是提示说明,增加输出数据的可读性。4)“输出表列”可以是表达式、变量、常量等列表(建议输出表列不要实现计算功能),每项之间用逗号“,”隔开。5)在使用时,建议严格按照格式要求,提倡个数对应、类型匹配,即格式符的
29、个数应该与输出项的个数相同,并且对应的数据类型应该一致。,格式符,1、格式符的标准写法:%-m.n字母 关于附加格式字符或修饰符的说明:a)正负号:用以指定输出项左右对齐方式,负号是左对齐,缺省正号()为右对齐,剩余位置补空格。b)域宽及精度描述符m.n:m是最小域宽,即输出数据所占最小位数(包括可能的小数点所占的一位),若超出该位数,则按实际位数输出;n是精度,输出实数时是小数位数,输出字符串时是自左端截取的字符个数。,2、常用格式符:,注意:输出实数时,若不指定精度,默认输出6位小数,但输出的数字并非都是有效数字,float和double型实数的有效位数分别是7位和16位,最后一位都采取4
30、舍5入。规范化指数形式输出位数规定。,printf实例应用,printf(“a=%d,b=%d”,a,b);,printf(“Hello,Guys!n”);,特别建议:格式符的使用比较复杂,建议,注意初学时不要花太多时间研究格式,先要学会基本输出格式。复杂格式以后逐步深入学习。,double pi=3.14159267;/3.14159267fprintf(%f,%8.4f,%3.3f,%.2fn,pi,pi,pi,pi);/3.141593,3.1416,3.142,3.14,2、scanf函数(课本P75-78)该函数是标准输入函数,用法如下:scanf(“格式控制字符串”,内存地址表列)
31、;注意:1)“格式串”中“格式符”的含义与printf说明基本一致。格式符的标准写法:%*m格式字符2)“内存地址表列”指的是用逗号分隔的内存地址,可以 是变量地址或字符串的首地址,&是取变量地址符。3)格式串中的格式符与内存地址列表个数必须相同,对应的数据类型必须一致,类型匹配,一一对应。4)在键盘上读入一个字符串,可利用scanf函数的“%s”格式,但遇空格或回车时结束。若输入带空格字符串,可以使用string.h中的函数gets(str),遇回车时结束。,应用中应该强调的问题,1)建议“格式串”中只出现“格式符”,除非必要的提示说明,其它符号最多只出现逗号“,”或空格。如:scanf(“
32、%d,%d,%f”,3)输入数据时不能规定精度,这与printf()函数不同。4)“域宽”指定输入数据所占列数,系统按照域宽截取相 应位数;抑制字符“*”表示本输入项在按格式说明读入数据后不赋给任何变量,即跳过该输入项。,5)输入数据分隔:根据格式项中指定的域宽分隔出数据项 用分隔符(空格、跳格、换行)严格按照格式中输入其他分隔符分隔数据6)输入数据结束:若遇到以下情况则该数据认为结束 遇空格或跳格或回车 读入指定的宽度(域宽)遇非法输入,如输入数据类型与格式字符不一致7)停止与返回:格式参数中的格式项用完时(正常结束)发生格式项与输入域不匹配时(非正常结束)8)输入缓冲区:只有按下回车符之后
33、,输入的数据才进入内存 当输入数据多于一个scanf函数所要求的个数,余下数据可作为下一个scanf函数继续使用(警惕),scanf实例应用,int a,b;float c,d;scanf(%d%d%f%f,输入float型数据时,直接使用%f格式符。输入double型数据时,则宜用%lf格式符。,课后的复习、上机实践、预习,(1)结合课堂课件,仔细阅读和理解课本相关章节内容,基本数据类型、运算符和表达式的理论细节和例题。(2)关于格式输入与输出,不必花太多精力一步到位掌 握每一个细节,建议:首先重点掌握最常用的一些 基本输入输出格式,其它部分可根据需要和理解的 深入,结合上机实验,逐步掌握。(3)关键是结合课件和课本内容,上机编写调试相关程 序,逐步加深理解语法点并掌握其应用。(4)尽可能完成课后每个练习题,并上机调试程序。,特 别 提 示遇到问题时,仔细理解课件、演示程序、课本,结合上机检验,然后请教他人或查阅其它资料。强调上机实践,程序由简到繁,逐步扩充功能,以检验和巩固语法知识,并不断积累编程经验。自力更生为主,请教同学为辅,提倡多讨论。,师生共勉,