大学计算机C语言.ppt_第1页
大学计算机C语言.ppt_第2页
大学计算机C语言.ppt_第3页
大学计算机C语言.ppt_第4页
大学计算机C语言.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

数据类型与表达式,第2章,本 章 内 容,1. C语言的数据类型 2. 常量和变量 3. 整型数据 4. 实型数据 5. 字符型数据 6. 系统函数 7. C运算符概述 8. 算术运算符 9. 关系运算符和逻辑运算符 10. 位运算符与长度运算符 11. 赋值运算符和赋值表达式 12. 逗号运算符和逗号表达式 13. 运算符的优先级与表达式的分类,2.1 C语言的数据类型,数据类型是一个值的集合和定义在这个值集上的一组操作的总称。 数据类型明显或隐含地规定了在程序执行期间变量或表达式所有可能的取值范围,以及在这些值上允许进行的操作。 C语言的各种数据类型:,2.2 常量和变量,常量和符号常量 1常量 在程序运行过程中,其值不能被改变的量称为常量,又叫常数。 常量区分为不同的类型,如100,0,-8为整型常量,25.32,0.142为实型常量,A,B是字符型常量。 常量不需要事先定义,只在程序中需要的地方直接写出即可。常量的类型也不需要事先说明,它们的类型是由书写方式自动默认的。 2符号常量 用一个符号(标识符)代表一个常量,例如: #define MAXNUM 1000 #define TRUE 1 #define FALSE 0 符号常量的定义格式如下: #define 符号常量 常量,2.2 常量和变量,标识符与变量 1标识符 在C 语言中,标识符是对变量、符号常量、函数、数组、文件等用户定义对象的命名。 标识符可以是一个或多个字符。标识符的第一个字符必须是英文字母或下画线,随后的字符必须是字母、数字或下画线。不能以数字打头。 下面是一些正确或错误标识符命名的示例。 正确标识符 错误标识符 weight 2x length a|#b color2 red!color save _$123,2.2 常量和变量,2变量 在程序运行过程中,其值可以改变的量称为变量。 在C语言中,要求对所有用到的变量 “先定义,后使用”。 例如:定义两个整型变量a、b和三个实型变量x、y、z。 int a,b; float x,y,z; C语言有五种基本数据类型:字符型、整型、实型、双精度实型、 和空类型。定义这五种类型的变量时须使用的类型说明符分别为 char、int、float、double和void。,2.3 整型数据,整型常量 1不同进制数的使用 十进制整数的表示与通常在算术中的表示一样,例如:321,+321。 八进制整数必须以数字0开头,例如:0123表示(123)8。 十六进制整数必须以0x开头,例如0x123 表示(123)16。,2.3 整型数据,整型变量 1整型数据在内存中的存放形式 在计算机中,数是用二进制表示的,把一个数连同其符号在计算机中加以数值化,这样的数称为机器数,机器数可以用不同的码制(原码、补码)表示。 2整型变量的分类 根据数值的范围将整型变量分为以下六种类型: 有符号基本整型:signed int。 有符号短整型:signed short int。 有符号长整型:signed long int。 无符号基本整型:unsigned int。 无符号短整型:unsigned short int。 无符号长整型:unsigned long int。,2.3 整型数据,ANSI标准定义的整数类型,2.3 整型数据,3.不同类型的整型常量赋值给整形变量 整型变量可分为int、short int、long int、unsigned int、unsigned short、unsigned long等类别,将整型常量赋值给上述类别的整型变量时如何做到类型匹配? 一个整型常数,若值在-32768+32767范围内,可将它赋值给int型和long int型变量。 一个整型常数,若值在-2147483648+2147483647范围内,可以赋值给一个long int型变量。 常量无unsigned型。但一个非负值的整数可以赋值给unsigned int型变量,只要它的范围在065535范围内。 在一个整常数后面加一个小写字母l或大写字母L,则认为是long型常量。例如,-123l、123L、0L、0775L、0x9EL等。,2.3 整型数据,3. 整型变量的定义 对变量的定义,一般是放在一个函数的开头的声明部分。 【例2-1】 main() int a; unsigned int b; long c; unsigned long d; a=-100; b=60000; c=-2123456789; d=4123456789; printf(“a=%d,b=%u,c=%ld,d=%lu“,a,b,c,d); 运行结果为 a=-100,b=60000,c=-2123456789,d=4123456789,2.4 实型数据,实型常量的表示方法 实型常数也称为浮点数,在C语言中实型常数只使用十进制数表示,它的书写方式有两种: 小数形式。它是由整数、小数点、小数三部分组成,最多只能省略其中的整数或小数部分,但不能二者都省略,也不能省略小数点。例如:123.,-.123,1.23,-1.23,12.0,0.,.0,0.0都是合法的十进制小数形式。 指数形式。它是由尾数、字母e或E、指数三部分组成。尾数可以是一个十进制小数形式,也可以是一个整数形式, 如123e-3或123E-3都代表12310-3的值。 注意:字母e(或E)之前必须有数字,且后面指数必须为整数,如-0.32E-2,2E4,-.23E-2,.0E3,0.E-5,0E0等都是合法的指数形式,而E-5,.E2,12.3E5.4却是非法的指数形式。,2.4 实型数据,实型变量 1实型数据在内存中的存放形式 实型数据是按指数形式存储的。系统把一个实型数据分成尾数部分和指数部分分别存放。实型数据在内存中小数点位置不是固定的,或者说是浮动的,故这种表示法称为浮点表示法。 2实型变量的定义 对每一个实型变量都应在使用前加以定义。如 float x,y; 3实型数据的舍入误差 由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。在有效范围以外的数字将被舍去。由此可能会产生一些误差。请分析下面的程序:,【例2-3】分析实型数据的舍入误差。 main() float a; a=12345.6789; printf(“n%f“,a); printf(“n%e“,a); 在Turbo C中程序运行结果为: 12345.678711 1.234568e+002,2.4 实型数据,双精度型数据 1双精度常数 双精度常数的书写方式与实型常数的书写方式相同,有十进制小数形式和指数形式两种,比实型数据的范围广、精度高。 2双精度数据在内存中的表示形式 ANSI并未具体规定每种类型数据的长度、精度和数值范围。 微机上常用的C编译系统(如Turbo C、MS C、Borland C)实型数据: 3双精度变量的定义 双精度类型标识符double前还可加修饰符long,long double 比double型的精度更高,表示的数值范围更大。,2.5 字符型数据,字符常量 字符常量是用单引号()括起来的单个字符。例如A、!、#、a、* 等。 除字符常量外,将“”开头的特定字符串称为“转义字符”,意思是将反斜杠后面的字符串转换成另外的意义。,2.5 字符型数据,【例2-4】下面程序中使用了几种转义字符。 main() printf(“abxbcdtefghtijkln“); printf(“xxxxxxxxrmnoptqrstuvwxn“); ,程序运行时在显示屏上得到以下结果: abcd efgh ijkl mnop qrst uvwx,2.5 字符型数据,字符变量 字符变量用来存放字符常量,一个字符变量只能放一个字符。 字符变量的定义形式: char 变量名表列; 例如: char c1,c2; c1=A; c2=B; C语言编译系统规定用一个字节来存放一个字符,将一个字符常量赋值给一个变量,实际上是将该字符的ASCII代码放到存储单元中。,【例2-5】将字符数据以不同的方式输出。 main() char c1,c2; c1=A; c2=B; printf(“%c,%cn“,c1,c2); printf(“%d,%d“,c1,c2); ,A,B 65,66,【例2-6】大小写字母的转换。 main() char c1,c2,c3,c4; c1=A; c2=B; c3=c1+32; c4=c2+32; printf(“%c,%c“,c3,c4); ,a,b,2.5 字符型数据,字符串常量 定义:字符串就是用两个双引号(“)括起来的若干个字符。 例如,“China“、“88383872“、“AJ200“ 存储:每个字符串尾自动加一个 0 作为字符串结束标志 例如:字 符串“CHINA”在内存中 字符串的长度:字符串中所有字符的个数,其中每个转义字符当作一个字符。 例如,字符串“China”,、“ABCD“、“101102x43x44”的长度分别为5、4、6、4。 字符常量与字符串常量不同,没有字符串变量,用字符数组存放,2.6 系统函数,简例 【例2-7】假设根据自变量x不同的值求下式的值: x7+sinx-log10(x+3) 在C语言中可使用以下程序: #include main() float x,y; scanf(“%f“, ,2.6 系统函数,函数:是可以被调用的一段程序。 库函数:软件开发商编写了很多标准函数,作为运算符的补充,供用户调用,称之为库函数或系统函数。 库函数存储在扩展名为.lib的文件中。 按库函数类划分为:数学函数、字符函数、字符串函数、输入输出函数、动态存储分配函数等。其声明分别包含在math.h、ctype.h、string.h、stdio.h和stdlib.h等文件中。如果程序需要调用这些库函数,就要在源程序文件中使用文件包含命令: #include 或 #include“文件名“ 输入输出函数scanf()和printf()也是库函数,称为标准输入输出函数,它们的声明包含在文件stdio.h中。由于Turbo C允许使用标准输入输出函数的时候省略头文件,所以上述例子中我们未使用#include。,常用数学函数,2.7 C运算符概述,C的运算符有以下几种: 算术运算符:(+、-、*、/、%),自加自减运算符(+、-)。 类型转换运算符((类型符))。 关系运算符(、=、=、!=)。 逻辑运算符(!、&、|)。 条件运算符(? :)。 位运算符:移位运算符(),位逻辑运算符(、&、|、)。 求字节数运算符(sizeof)。 赋值运算符:基本赋值运算符(=),算术自反赋值运算符(+=、-=、*=、/=、%=),位自反赋值运算符(=、&=、|=、=)。 逗号运算符(,)。 指针运算符(*、&)。 下标运算符( )。 分量运算符(.、-)。,2.8 算术运算符,算术表达式和运算符的优先级与结合性 算术表达式:用算术运算符和括号将运算对象连起来的、符合C语言规则的式子。 例如:合法的算术表达式:a+b*(y/(-3)+x*x-pow(c,3)+15%6 不合法的算术表达式:a*/5+3,x(y+4),a/b%3.5 运算符的优先级和结合性:先按运算符的优先级别高低次序执行。如果优先级别相同,则按规定的“结合方向”处理。 各种运算符的结合方向: 算术运算符中的二元运算的结合方向为“自左至右”。 例如:9/2*3%7:先执行“/”,再执行“*”,最后执行“%”。 算术运算符中的单目运算符+、-的结合方向为“自右至左” 。 例如:-+-5等价于-(+(-5)。,可以适当使用小括号“()”来改变表达式的优先级和结合性。,2.8 算术运算符,自加、自减运算符 使变量的值加一或减一。 前缀形式:+i, -i 先改变i的值,再使用i的值。 后缀形式:i+,i- 先使用i的值,再改变i的值。 相当于:i = i + 1 i = i 1 例如: int i=3,j,k; j=i+; k=+i; printf(“%d,%d,%d“,i,j,k);,2.8 算术运算符,说明: +和-运算符只能用于变量,不能用于常量或表达式。 分析:(a + b)+ ? +和-的结合方向是“自右至左“。 例如:-x+ 相当于-(x+),2.8 算术运算符,类型转换运算符及类型转换 类型转换运算符 一般形式:(类型名)(表达式) 例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,2.8 算术运算符,类型转换 当表达式中出现不同类型的操作数时,要按一定的规则将其转换为相同的类型。遵循以下转换规则: 【例2-8】设a是整型变量,其值为2,c是字符变量,其值为A,x是实型变量,其值为1.5,则表达式: x+c*a/10-3/2,横向朝左的箭头表示必定的转换。 纵向箭头表示当运算对象为不同类型时转换的方向。低级类型转换为高级类型。 转换是由系统自动进行。,2.9 关系运算符和逻辑运算符,关系运算符,2.9 关系运算符和逻辑运算符,在比较时注意以下规则: 如果两个操作数是数值型,则按其大小比较。 如果两个操作数是字符型,则按字符的ASCII码值进行比较,即ASCII码值大的字符大。 表中前四种运算符优先级相同,后两种优先级相同。前四种的优先级高于后两种。关系运算符具有自左至右的结合性。 关系运算符的优先级低于算术运算符。 例 当a的值为2时,一个表达式的运算次序及结果如图2-2所示。,2.9 关系运算符和逻辑运算符,逻辑运算符 C语言中提供了三种逻辑运算符: 单目逻辑运算符:!(逻辑“非”)。 双目逻辑运算符:&(逻辑“与”)。 双目逻辑运算符:|(逻辑“或”)。,表2-7 逻辑运算的真值表,2.9 关系运算符和逻辑运算符,例 a=4.5,b=5.0,c=2.5,d=3.0,2.9 关系运算符和逻辑运算符,条件运算符 条件运算符是C语言中唯一的三目运算符,一般格式为 表达式1? 表达式2 :表达式3 【例2-9】将大写字母转换为小写字母,可编如下程序实现。 main() char ch; scanf(“%c“, ,2.10 位运算符与长度运算符,原码、反码和补码 当真值 x=+xn-2xn-3x0时,它的原码、反码和补码完全相同, x原=x反=x补=0xn-2xn-3x0 当真值x=-xn-2xn-3x0时,它的原码、反码和补码与x的关系: 其中 表示xi取反,即,n位,2.10 位运算符与长度运算符,【例2-10】假设某计算机的字长为16位,试写出二进制数+100010和-100010的原码、反码和补码。 解:x=+000000000100010 y=-000000000100010 x对应的机器数如下:x原=x反=x补=0000000000100010 真值y为负,则有 y原=1000000000100010 y反=1111111111011101 y补=1111111111011110 【例2-11】已知x补=1111111111110010,求真值x。 解:由x补求出x反,则得 x反=1111111111110010-1=1111111111110001 x原=1000000000001110 x原对应的符号位为1,故其对应的真值为负,且数值位与原码各位相同,即有 x=(-000000000001110)2=14,2.10 位运算符与长度运算符,移位运算符 1左移位运算符 e1n 例如: x=-32767,手工计算x2的步骤如下: 第一步:x原=1111111111111111 第二步:x反=1000000000000000 第三步:x补=1000000000000001 第四步:将x补左移位两次得 0000000000000100 第五步:将上式看作结果数所对应的补码,求原码。由于符号位为0,其原码还等于补码。 第六步:由原码得到真值为4,这正是x2的运算结果。 一般来说,一个整数左移一位,其结果相当于这个整数乘以2(数值溢出时例外)。 例如: -21 的值为-4。,2.10 位运算符与长度运算符,2右移位运算符 e1n 注意: 对无符号数,右移时,左边高位移入0。 对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0;如果符号位原来为1(该数为负),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。Turbo C及多数C编译系统是移入1,即保持数的正负性不变。 一般来说,一个整数右移1位,其结果相当于这个整数除以2。 例如: 142,相当于14连续两次除以2并取整,即其值为3。,2.10 位运算符与长度运算符,位逻辑运算符 1按位取反运算符 以int型数据为例,若a的值为2,则 a补=0000000000000010 按位取反得 1111111111111101 上式对应的原码为 1000000000000011 从而知(a)的值为-3。 2按位与运算符& 按位与运算符&的作用是对两个操作数按位求逻辑与。,2.10 位运算符与长度运算符,3按位或运算符| 按位或运算符|的作用是对两个操作数按位求逻辑或。 4按位异或运算符 按位异或运算符使参加运算的两个数按位求异或,即当两个二进位相异则结果为1,相同则结果为0。,2.10 位运算符与长度运算符,求长度运算符sizeof sizeof(类型符或变量名) 运算结果为操作数对应的类型在内存中所占用的字节数。 例如:在微机上,int型的长度为2,float型的长度为4,所以sizeof(int)的值为2,sizeof(float)的值为4。 假设n为int型变量,x为float型变量,则 sizeof(n)=2,sizeof(x)=4。 注意:运算对象必须用圆括号括住。,2.11 赋值运算符和赋值表达式,赋值运算符和赋值表达式 例如:a=2+5 类型转换问题 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。 算术自反赋值运算符 在赋值符“=”之前加上二元算术运算符+、-、*、/、%,可以构成算术自反赋值运算符。例如,a+=3相当于a=a+3。 【例2-12】整型变量n1的值为10,则: n1+=2运算后,n1的值为12,表达式的值也为12。 n1-=2运算后,n1的值为8,表达式的值也为8。 n1*=2运算后,n1的值为20,表达式的值也为20。 n1/=2运算后,n1的值为5,表达式的值也为5。 n1%=2运算后,n1的值为0,表达式的值也为0。,2.11 赋值运算符和赋值表达式,

温馨提示

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

评论

0/150

提交评论