《高级程序语言》PPT课件.ppt_第1页
《高级程序语言》PPT课件.ppt_第2页
《高级程序语言》PPT课件.ppt_第3页
《高级程序语言》PPT课件.ppt_第4页
《高级程序语言》PPT课件.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1,第二讲 基本数据类型,教材:C程序设计导论,2,本讲重点,掌握C的几种基本数据类型。 掌握标识符的概念,熟悉变量和符号常量先定义后使用的特点。 熟练掌握整型、长整型、短整型、无符号整型数据的定义与存储特点。 熟练掌握单精度、双精度浮点数的定义与存储特点。 熟练掌握字符型数据的定义与存储特点,并熟悉整型数据与字符型数据间的关系。 掌握定义变量的同时赋初值的方法。 掌握不同类型数据间的混合运算规则。,3,一个程序应包括对数据的描述和对数据处理的描述。 1对数据的描述,即数据结构。数据结构是计算机学科的核心课程之一,有许多专门著作论述,本课程就不再赘述。 在C语言中,系统提供的数据结构,是以数据类型的形式出现的。 2对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 数据结构 + 算法 = 程序 实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示。,4,2.1 字符集及词法约定,一、字符集 C语言中可用到的字符集有: 数字:、。 字母:大、小写英文字母,注意C程序中严格区分大小写字母,如 A和a是不同的字符。 空白符:空格符、制表符、换行符和换页符统称为空白符。它们主要用于分隔单词,一般无其它特殊意义。 图形符号:29个图形(可见)符号,即 ! “ # % : ? _ | 主要用作各种运算符。 转义字符:程序中有时需要用到某些不可见或难以打印的字符,C语言中采用转义字符来表示,如: “n”表示一个换行符;字符“”被称为转义符,表示其后的字符“n”具有特定的含义。 (常用的转义字符及其含义参看课本2.2.3字符常量),5,2.1 字符集及词法约定,二、词法约定 C语言中共有六类单词:注释符、标识符、关键字、常量、运算符和标点符。 注释符 注释符是以“/*”开头、以“*/”结束的一个字符串,其作用是对相应程序段的功能作一个注解。 标识符 用于标识变量名、符号常量名、数组名、函数名、 类型名、文件名或其他各种由用户定义的对象名的有效字符序列。 标识符的组成:由字母、数字和下划线组成。必须由字母或下划线中任一字符开头。标准C 规定有效长度为前31个字符。 例如,以下为合法的标识符: name NAME _a1 x1 Sum_2 以下不是合法的标识符: 12a 以数字开头 #we 以#开头 num$1 包含$字符 sum 1 中间有空格,6,标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为个字符,缺省值为。 标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。,7,2.1 字符集及词法约定,二、词法约定 关键字 又称保留字,指具有特定含义、专门用作系统的特定成分的一类标识符。 C语言的关键字不能用作变量名。 标准语言中共有个关键字,按用途分为类: 数据类型:如char int等 存储类:如auto return等 流程控制:如if else switch等 运算符:sizeof (关键字参看书16) 注意关键字不能用作一般标识符,即不允许用作变量名或函数名等。C语言的关键字都是小写的。例如else是关键字,但ELSE就不是关键字。 常量 在程序运行过程中,其值不能被改变的量称为常量。 运算符 C语言中含有相当丰富的运算符。运算符与变量、函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。 标点符 C语言中的标点符共有13个,即: ( ) * , : = ; . #,8,2.2 常量,1、常量的定义:在程序运行过程中,其值保持不变的量。 常量的类型:根据字面形式可将常量区分为不同的类型。 2、整型常量: C语言表示整型常量的方法有以下三种: 十进制整数:用不带任何修饰的整数表示。如123、-456、0等; 八进制整数:以数字0开头的整数。如0123、-011等; 十六进制整数:以数字0x开头的整数。如0x123、0x2ef; C语言中普通整型常量在机器中占用一个字长,但由于各机器字长不同,所以整数所能表示的数值范围也不同。 系统根据整型常量的具体数值确定其类型。使用整型常量时要注意是否超出数值表示范围之外,例如在一个16位字长的机器上,十进制整数的表示范围是-3276832767,那么0200000和0x10000均为超出表示范围的长整型常量。,9,整型变量 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型(unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。 2.占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在16位操作系统中,一般用字节表示一个int型变量,且long型(字节)int型(字节)short型(字节)。,2.2 常量,10,显然,不同类型的整型变量,其值域不同。占用内存字节数为n的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1-1);无符号整型变量的值域为:0(2n*8-1)。 例如,PC机中的一个int型变量,其值域为-22*8-1(22*8-1-1),即-3276832767;一个unsigned型变量的值域为:0(22*8-1),即065535。,2.2 常量,11,3.分类 (1)基本整型。在16位机中,用2字节存储,其数据范围与int型变量一样。 (2)长整型(在数值后面加“L(l)”)。对超出基本整型值域的整型常量,可使用长整型常量表示,其取值范围可达-(-)。例如,123l、315等。 .类型匹配规则 类型匹配规则为:一个整型常量,可以赋给能容纳下其值的整型变量。 例如,其值在-(-)的整型常量,可以赋给int型变量和long int型变量;其值在-(-)的整型常量,就只能赋给long int型变量。 注意:常量无unsigned型。但一个非负整型常量,只要它的值不超过相应变量的值域(即取值范围),也可以赋给unsigned型变量。,12,2.2 常量,整型常量后缀 无符号整型后缀:u或U,如986u、0xfedU都是无符号整型常量。 长整型后缀:l或L,如:0234l1、9666L都是长整型常量。 二者可以同时使用,例如: 9999LU、 077777LU 3、实型常量(浮点数) 十进制数形式的浮点数:由数字和小数点组成。 如:123.456、0.123、123.0、0.0、123.等。 指数形式的浮点数:用字母e表示十进制指数中的10。 如:123e3(表示123*103)、6.E5、.123e+4都是合法的浮点常量。 注意:e字母前必须有数字,且e后的指数必须为整型。 如:e3、2.1e3.5、.e3为不合法。 浮点常量如不带后缀,如上所示,都是双精度类型(double)。 浮点常量可带后缀f或F,如3.14f,那么其类型为单精度浮点型(float) 浮点常量可带后缀l或L,如3.14L,那么其类型为长双精度型(long double),13,语言的实型常量,分为两种: (1)单精度型。类型关键字为float,一般占字节(位)、提供位有效数字。 (2)双精度型。类型关键字为double,一般占个字节、提供1516位有效数字。 .表示形式 实型常量即实数,在语言中又称浮点数,其值有两种表达形式: (1)十进制形式。例如3.14、9.8。 (2)指数形式:E(e)。例如3.0+5等。,14,2.2 常量,4、字符常量: C语言规定以单引号包围的单个字符为字符常量。 如:A、a、2、!等。 注意: 请区别A和a的不同; 中的字符引用的是该字符的ASCII码值。 字符常量的存放形式与整数的存放形式相类似,所以C中的字符数据与整型数据之间具有相通性。 转义字符常量(也称控制字符常量) 用开头的特殊形式的字符常量,用以产生一个动作。 如:n、r、t、v、123等。 请同学们理解并记忆常用的转义字符,学会其使用方法。,15,2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符。 注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、。 案例2.1 用转义字符输出可打印字符和不可打印字符。 /*案例代码文件名:AL_1.C*/ /*程序功能:用转义字符输出可打印字符和不可打印字符*/ main() printf(“x4Fx4Bx21n”); /* 等价于printf(“OK!n”); */ printf(“x15 xABn”); 程序运行结果如下: ! ,16,转义字符常量,转义字符 功能 例AL_2.C : n 换行 void main( ) t 横向跳格 printf(“?ab?c?derftgn“); v 竖向跳格 printf(“htbtj?kn“); b 退格 r 回车 程序在屏幕上的输出结果为: f 走纸换页 f gde “”字符 h j?k “”字符 注:横向和纵向跳格均以8个字符为1格。 ddd 1至3位八进制数所代表的字符 xhh 1至2位十六进制数所代表的字符,17,5、字符串常量 C语言中用双引号将一串字符括起来称为字符串常量。 如 “asee”、“011”、“We are studying C”等。 字符串常量可以看作是一个数组,这个数组的每个元素是一个字符。 编译程序在编译源程序时自动在每个字符串末尾放空字符0,作为字符串结束标记。 要点:请区别”A”与A的不同。 因为它们各自在内存中存放的长度不同。 “A” A,2.2常量,ASCII码为0的字符,18,6、符号常量 1)含义:用一个标识符表示的常量。 2)定义方法:#define 符号常量 数值 例:#define PRICE 30 作用是定义符号常量PRICE的值为30,在程序任何用到PRICE符号常量的地方,系统将自动用常量30代替。 3)使用要点: 为区分符号常量与变量的不同,通常符号常量用大写字母表示(但不是必须)。 例 2.1 求圆的周长和面积 (CH02-01.C) #include #define PI 3.14159 /*宏定义*/ void main(void ) /*主函数*/ float c, s, i; printf(“输入圆的半径:“); scanf(“%f“, ,2.2常量,19,2.3 变量,1、变量的含义: 在程序执行过程中,其值可以被改变的量。 变量的构成:变量名、变量值。 (注意区分变量名和变量值:存储单元地址与存储单元内容),例: int a, b, c; /*说明a, b, c为整型变量*/ char cc; /*说明cc为字符变量*/ double x, y; /*说明x ,y为双精度实型变量*/ C语言要求,程序里使用的每个变量都必须“先定义,后使用”。 不同类型的变量应分开定义。 在同一程序的同一部分,不允许对同一变量做重复定义,也就是说,不允许有同名的变量。,20,2.3 变量,2、变量的初始化: 在定义变量同时可以对变量赋予初值。 例如: int i1=3, i2=4; float f1, f2=3.5;,还可以在定义后赋初值。 例如: int i1, i2; /* 定义整型变量i1和i2 */ i1=3; i2=4; /* 为i1赋初值为3,i2赋初值为4 */,21,2.3 变量,3、左值和右值: 左值(lvalue):在C语言中表示位于赋值运算符左边的值,左值通常指可以定位的值,即有地址的值,可以用来存储其它的值。 右值(rvalue):在C语言中表示位于赋值运算符右边的值。 例: int i=5;,22,2.3 变量,3、左值和右值: x = 5; 5 = x; C中有些运算符仅仅需要右值,例如“+”的两侧、赋值运算符的右边; 有些运算符仅仅需要左值,例如赋值运算符“=”的左边; 有些运算符需要操作数同时有右值与左值的角色,例如+或-。,23,2.4 基本数据类型,C语言的数据类型,24,2.4 基本数据类型,1、整型 int 基本整型 short int 短整型,可简写为short long int 长整型,可简写为long unsigned int 无符号整型,可简写为unsigned unsigned short 无符号短整型 unsigned long 无符号长整型 整型存储特点: C语言没有具体规定各类型数据所占内存的字节数,根据机型不同而不同,一般以一个机器字长存放一个int 型数据(见P25表2.2),即2Byte。,25,整型数据可表示的数据范围,如果值在-32768至32767之间,可以赋值给int,long int型变量。 如果值超出上述范围在-2147483648至2147483647内,可以赋值给long int型变量。 只有数值后面加上“l”或“L”的常量才认为是长整型常量,如123L。 无符号型变量只能存放不带符号的整数,而不能存放负数。 无符号型整型变量中可以存放的数的范围比一般整型变量中数的范围扩大一倍。,26,整型数据的溢出,例,阅读以下程序(在TURBO C中运行) (AL_03.C) #include void main(void) int a,b; a=32767; b=a+1; printf(“a=%d,b=%d”,a,b); ,因为a+1的类型为int类型,其表示范围为-3276832767; 而a+1在16位计算机中的结果表示成二进制为1000 0000 0000 0000,最高位表示符号位,该二进制码是补码形式,是-32768的补码。,程序运行结果为: A=32767,b=-32768,为什么b的取值不是32768?,27,整型数据的溢出,/*第一种改法*/ (AL_4.C) #include void main(void) long a,b; a=32767; b=a+1; printf(“a=%ld, b=%ldn”,a,b); ,如何更改?,注意printf中%d是用于输出int类型数据的,应该改为%ld.,/*第二种改法*/(AL_5.C) #include void main(void) int a; long b; a=32767; b=a+1L; printf(“a=%d,b=%ld”,a,b); ,28,2.4 基本数据类型-字符型,2、字符类型 (存储ASCII码字符或8位二进制数) 定义变量方式:char 字符变量名 如: 1) char c1,c2; c1=d; c2=s; 2) unsigned char sum; 字符数据在内存中的存放形式: 字符数据在内存中存放的是它的ASCII编码,通常占用一个字节。当以字符格式输出时,输出为字符;当以整型输出时,输出为整型数。 char 数值范围-128127 unsigned char 数值范围0255,29,2.4 基本数据类型-字符型,例CH02_02.C: #include void main(void) char c1,c2; c1=a; c2=A; printf(“c1=%c,c2=%cn”,c1,c2); printf(“c1=%d,c2=%dn”,c1,c2); 程序输出为: c1=a,c2=A 说明:字符数据与整型数据之间可以相互赋值。 c1=97,c2=65 字符数据可以字符或整型数据两种方式输出。,30,例:将两个小写字母转换成大写字母。 (AL_6.C) #include void main(void) char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c1=%c,c2=%cn”,c1,c2); 程序输出为: c1=A,c2=B,31,允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。 字符数据的算术运算。 /*案例代码文件名:AL_7.C*/ /*程序功能:字符数据的算术运算*/ main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小写转换*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式输出一个大于256的数值*/ printf(“ch1+200=%dn“, ch1+200); printf(“ch1+200=%cn“, ch1+200); printf(“ch1+256=%dn“, ch1+256); printf(“ch1+256=%cn“, ch1+256); ,32,程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a 程序演示 思考题:用字符形式输出一个大于256的数值,会得到什么结果?(见例AL_8.C) 2.6.3 字符串常量 1.字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。,33,例如,“How do you do.”、“Good morning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。 如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。 例如:(1)C:msdosv6.22 “C:msdosv6.22“ (2)I say:“Goodbye!“ “I say:“Goodbye!“ 2.字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字符0,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实际存储如下所示: 最后一个字符0是系统自动加上的,它占用字节而非字节内存空间。,34,综上所述,字符常量A与字符串常量“A“是两回事: (1)定界符不同:字符常量使用单引号,而字符串常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; (3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,35,2.4 基本数据类型-浮点型,3、浮点型:用于存放实型(浮点型)数据的变量,其基本关键字为float。 定义变量方法: 单精度实型变量的定义: float 实型变量名; 双精度实型变量的定义: double 实型变量名; 长双精度型变量的定义: long double 实型变量名; 如: float x,y; double z; 存储特点:在PC机中 float型变量一般占4B内存空间,并提供6位有效数字; double型变量一般占8B内存空间,并提供12位有效数字; long double型变量一般占16B内存空间,并提供24位有效数字。,36,不同类型数据之间的混合运算: 排序标准:数据类型所占内存存储空间的长度,37,不同类型数据之间的混合运算,一、自动转换的原理 1、要点:以数据类型所占内存存储空间的长度最大者为准。 如: int + char + float float 2B 1B 4B 4B 2、例: 设一表达式中含有int,long,unsigned,char类型的常数和变量,则表达式的最后结果是 D 。 (A)int (B)char (C) unsigned (D)long Note: int (2B), char (1B), unsigned (2B), long (4B),38,二、强制类型转换 1、功能:由用户根据自己的要求来决定数据类型的转换结果。 2、格式:(类型名) 表达式 注意()不可缺少。 3、应用: (1)为满足运算的要求: 如: int i=3; float x=13.6; (int)x%i; (13%3=1) (2)提高运算精度: 如: int i=10; float x; x=i/3+25.5; (3+25.5=28.5) 或 x=(float)i/3+25.5; (3.33+25.5=28.83) 4、例:,39,例(ch02_03.c) #include void main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 程序的运行结果为: x=3.600000,i=3 注意:x本身的值和类型都没有改变,强制类型转换只改变数值的类型和值,不改变变量的类型和值。,40,2.5 数据输入输出-输出函数,1、putchar( )函数 功能:将一个字符输出到标准输出设备。 格式:putchar(c) 使用要点: putchar(c)中的c可以是字符型或整型数据; c=98; putchar(c) 输出字符变量c的值 putchar(a) 输出字符常量 putchar(0x41) 输出字符常量(16进制) 使用输出函数需要调用C的标准I/O库函数,故需用预编译命令: #include putchar()也可以输出一个控制字符或其它转义字符。 如:putchar(n) 输出一个换行符 putchar(101) 输出字符A putchar() 输出字符单引号,41,例 #include void main(void) char a,b,c; a=B;b=o;c=y; putchar(a);putchar(b);putchar(c); 输出结果为:Boy,42,2、 printf( )函数 (展开课本讲) 功能:按指定的格式向终端输出若干任意类型的数据。 格式:printf(格式控制,输出表列) 如:printf(“x=%d”,x) 使用要点 格式控制部分的用法(下页)。 输出表列:可以是合法的常量、变量和表达式,输出表列中的各输出项之间要用“,”分隔。 当格式符个数少于输出项时,多余的输出项不予输出。 若格式符多于输出项时,各系统的处理有所不同,TC对于缺少的项将输出不定值。 每次调用printf( )函数之后,将得到一个整型的函数值,该值等于正常输出的字符个数。,2.5 数据输入输出-输出函数,43,printf( )函数的格式控制,格式控制字符是用双引号括起来的字符串,用来确定输出项 的格式和需要原样输出的字符串。其组成形式为: “普通字符串 % + 0 m .nl格式控制字符” 其中: 输出数据项的顺序一般按从左至右的顺序输出。格式控制中的普通字符串,照原样输出; 如:printf(“a= %d,b= %d”,a,b) ; %:为C语言规定的标记符; +:指定输出数据的对齐方式:+为右对齐(可缺省),-为左对齐; 0:指定输出的数据中不使用的位置是否填数字“0”; m.n(数据输出宽度),l(输出long型数据); 格式控制字符用于指定数据的输出形式,可以包含转义字符; 用两个连续的“%”表示输出字符“%”。,44,格式控制字符,45,(1)printf(“%4d,%4d”,a,b); 若a=123,b=12345 则输出为: 123,12345 如果数据位数小于m,则左端补空格,若大于m,则按实际输出。 (2)long a=135790; printf(“%ld”,a); 长整型数据应采用%ld格式输出,若采用%d格式则出错。 (3)int a=-1; printf(“%d,%o”,a,a); 输出为:-1,177777 对于八进制输出不会输出带符号的数据,长整型数据用%lo格式输 出,也可以指定宽度。如:printf(“%lo,%8o”,a,a); (4)int a=-1; printf(“%x,%o,%d”,a,a,a); 输出结果为:ffff,177777,-1 同样,也可以用%lx输出长整型数据或指出输出宽度, 如:printf(“%lx,%12x”,(long)a,a),46,例(ch02_04.c): #include void main(void) unsigned int a=65535; int b=-2; printf(“a=%d,%o,%x,%un”,a,a,a,a); printf(“b=%d,%o,%x,%un”,b,b,b,b); 输出为 a=-1,177777,ffff,65535 b=-2,177776,fffe,65534,47,例:字符输出 #include void main(void) char c=a; int k=97; printf(“%c,%dn”,c,c); printf(“%c,%dn”,k,k); 输出为: a,97 a,97,48,例:输出字符串 printf(“%s”,”china”); 输出字符串china printf(“%7sn”,”china”); 输出字符串china printf(“%3sn”,”china”); 输出字符串china printf(“%5.3sn”,”china”); 输出字符串chi printf(“%-5.3sn”,”china”); 输出为chi,49,例:实型数据(ch02_05.c) #include void main(void) float x,y,z; double a,b; x=11111.111;y=22222.222;z=123.456; a=1111111111111.111111111; b=2222222222222.222222222; printf(“%fn%fn”,x+y,a+b); printf(“%10f,%10.2fn”,z,z); printf(“%en

温馨提示

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

评论

0/150

提交评论