ch3_变量名、数据类型、运算符和表达式(谢汶).pptx_第1页
ch3_变量名、数据类型、运算符和表达式(谢汶).pptx_第2页
ch3_变量名、数据类型、运算符和表达式(谢汶).pptx_第3页
ch3_变量名、数据类型、运算符和表达式(谢汶).pptx_第4页
ch3_变量名、数据类型、运算符和表达式(谢汶).pptx_第5页
免费预览已结束,剩余71页可下载查看

下载本文档

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

文档简介

2019/2/10,主讲教师:四川大学计算机学院 谢汶,1,主讲教师:谢汶 邮件地址:,c语言程序设计(c99版),四川大学计算机学院,四川大学计算机学院,2019/2/10,主讲教师:四川大学计算机学院 谢汶,2,教材:c语言程序设计(c99版),陈良银 游洪跃 李旭伟 主编 李志蜀 唐宁九 李 涛 主审 清华大学出版社 2006年9月出版,2019/2/10,主讲教师:四川大学计算机学院 谢汶,3,本书内容,第1章 基础知识 第2章 c语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 c程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 c89 vs c99 实验 (待安排),2019/2/10,主讲教师:四川大学计算机学院 谢汶,4,常量类型,本章主要内容,arm vector table,fiq,irq,(reserved),data abort,prefetch abort,software interrupt,undefined instruction,reset,1,3,2,基本数据类型,c语言的变量命名,4,变量类型,5,表达式、运算符及其优先级,6,求值顺序、类型转换,2019/2/10,主讲教师:四川大学计算机学院 谢汶,5,本章的节本要求,本变量定义部分定义了程序中可能用到的变量,以及变量的数据类型、变量的名字、甚至还可能设定了变量的初值。 而变量的数据类型则表明了变量在内存中所占据的内存单元字节数、其取值范围、以及可以作用于该变量的运算符。 c程序运算符限定了参与运算的操作数类型,以及程序对参与运算的操作数所作的操作。 表达式则用运算符将变量、常量和函数名等连接起来,以产生一个新的值( 表达式都是有值的,即表达式运算的结果)。这些概念性的问题是本章的主题。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,6,3.1 c语言的变量命名,c程序操作的基本对象是变量和常量。 变量名可由c语言字符集根据相关规则组合而成 . 语言字符包括字母( 含“_”)、数字、空格、标点和特殊字符等。 字母:大、小写字母az各26个。 数字:09共10个。 键盘符号:键盘上所使用的各种符号,共33个。 转移字符:转移字符由“反斜杠字符( )”开始后跟单个字符或若干字符组成 。又称为转义字符,表示其后面的字符具有特殊含义。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,7,空白符,空格符、制表符、换行符等统称为空白符。 空白符只在字符常量和字符串常量中起作用。 在其它地方出现时,只起间隔作用,程序编译时对它们忽略不计。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,8,3.1.2关键字,关键字是由语言规定的具有特定意义的单词,也称为保留字。,关键字不可作用变量名,2019/2/10,主讲教师:四川大学计算机学院 谢汶,9,表3.1 c语言的关键字,最后一行是c99增加的5个,2019/2/10,主讲教师:四川大学计算机学院 谢汶,10,3.1.3 变量命名,第一原则,变量的名字( 变量名也是标识符)只能由字母和数字组成,且变量名的第一个字符必须是字母或下划线。 第二原则,尽量不要使用下划线作为变量的第一个字母。因为许多系统库函数常常使用下划线作为库函数命名的首字母。 第三原则,“见名知意”,也就是名字要能够表达其意义,这是变量命名的又一基本要求。,名字自含性,2019/2/10,主讲教师:四川大学计算机学院 谢汶,11,3.2 c语言的基本数据类型及其大小,c89有5种基本数据类型:char(字符型)、int(整型)、float(浮点型)、double(双精度型)、void(空类型)。在c99中还增加了以下三种基本类型:_bool、_complex、_imagimary。 float和double的精确格式依赖于系统的具体实现。但是标准c规定了其最小表示范围是1e37 1e+37,和-1e+37 -1e-37。 问题:对于大于-1e-37且小于1e-37的数计算机能表示吗?,2019/2/10,主讲教师:四川大学计算机学院 谢汶,12,基本类型可用以下修饰词修饰:signed(有符号类型)、unsigned(无符号类型)、long(长整型)、short(短整型)、long long(长长整型,仅c99)。 int缺省是signed的,而char缺省一般是unsigned的。,long long仅c99具有。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,13,c语言的基本数据类型,2019/2/10,主讲教师:四川大学计算机学院 谢汶,14,3.3 常量及其类型,每一种基本类型都有常量。常量就是其值保持不变的量。 在c语言中的数值常量,在编译时一般会处理为机器指令的一部分。所以它不会在动态数据存储区占据位置,它位于程序区。 有的系统,也将部分常量分配到静态数据存储区中,比如字符串常量,一般就分配在静态数据存储区 。,常量可能位于程序区。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,15,常量可以独立使用,也可以用于表达式。这样的表达式可以在编译期间求值,而不是在运行期间求值,常量表达式可用于常量能够出现的任何地方,比如: #define maxline 1000 /* 定义了一个宏,宏名代表字符串1000 */ char longestmaxline1; /* 用常量表达式定义了一个数组,实际上是10001 */,2019/2/10,主讲教师:四川大学计算机学院 谢汶,16,3.3.1 字符常量,字符常量就是其值保持不变的字符,它实际就是一个整数,在书写时用单引号括起来,比如:a。 最常用的就是ascii编码字符集。 有些字符可以用字符和字符串通过转义字符来表示,比如:n( 换行) 。 一个字节大小的任意字符都可以通过ooo来表示,这里的ooo(字母o)是13位八进制数字( 07);或者通过xhh来表示,这里hh是12位十六进制数字( 09,af,af)。,101,x41,2019/2/10,主讲教师:四川大学计算机学院 谢汶,17,表3.3 常用的转义字符及其含义,2019/2/10,主讲教师:四川大学计算机学院 谢汶,18,3.3.2 整型常量,象1234这样的整数是常量,而且是一个int型( 整型)常量。常量的数据类型通过其书写形式来区分。 一个long型常量在书写时以l或者l结尾,比如:1234l。 无符号整型常量在书写形式上结尾带有u或u。而后缀为ul或者ul的常量则是一个无符号长整型( unsigned long)常量。 整型常量可以用十进制、八进制或者十六进制表示。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,19,以0(零)开头的整型常量是八进制表示。 以0x或者0x开头的整型常量是十六进制表示。 比如:十进制30可以表示为0x1e或者0x1e( 十六进制)。 其余的为10进制常量。 比如:123、345等,2019/2/10,主讲教师:四川大学计算机学院 谢汶,20,图3.2 整型常量0xful在内存中的表示,x、f、u、l分别表示什么意思?,2019/2/10,主讲教师:四川大学计算机学院 谢汶,21,3.3.3 实型常量,浮点型常量包含了一个小数点( 比如:123.4)或者一个指数( 比如:1e-2)或者既包含小数点又包含指数( 1.2e-3)。 没有后缀的浮点型常量都是double类型。,浮点常量自动是double型、 浮点型变量也是吗?,2019/2/10,主讲教师:四川大学计算机学院 谢汶,22,3.3.4 字符串常量,字符串常量是用双引号括起来的零个或者多个字符序列,通常简称为字符串。比如: “i am a student.“ “ /* 空字符串*/ “四川大学国家级示范性计算机( 软件)学院“,末尾自动加0!,2019/2/10,主讲教师:四川大学计算机学院 谢汶,23,“hello“ “, “ “world!“ /* 连接时将双引号之间的空格舍弃 */ 等价于: “hello, world!“,自动连接,很有用!,2019/2/10,主讲教师:四川大学计算机学院 谢汶,24,例题3.1 求字符串的长度,int strlen(char s ) int i = 0; while (si != 0) i+; return i; ,在标准库函数中有求字符串长度的函数strlen( ).,2019/2/10,主讲教师:四川大学计算机学院 谢汶,25,图3.3 字符串内存单元的操作过程及其表示,2019/2/10,主讲教师:四川大学计算机学院 谢汶,26,图3.4 字符串常量和字符常量的内存分配,2019/2/10,主讲教师:四川大学计算机学院 谢汶,27,*3.3.5 枚举常量,还有一种常量叫做枚举常量( enumeration constant),枚举常量是关于常量整数值的一个列表,也叫枚举元素,它是在定义枚举类型时所罗列的一些符号。比如: enum boolean false, true ;,2019/2/10,主讲教师:四川大学计算机学院 谢汶,28,*3.3.6 使用const限定的常量,在变量定义时,可以使用const限定词将其限定为常量。 可以认为使用const修饰的量是一个常量,而使用#define定义的只是一个宏名。所以const限定词会增加程序的安全性。 const double pi =3.1415926535897932384626433832795028841971693993751058209749445923; const char cue = “please input a word: “;,有名字,有类型,在数据区。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,29,/* const表示函数中不能修改数组s中的内容 */ int strlen(const char s ) int i = 0; while (si != 0) i+; return i; ,2019/2/10,主讲教师:四川大学计算机学院 谢汶,30,与const相对应的还有volatile限定词。 volatile限定词告诉编译器,变量的值可能会被程序以外的不确定因素修改。比如:操作系统的时钟程序可能通过一个外部变量来保持系统时间。,随时可能被修改,对它:“变量未写,其值不变”的假定是错误的。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,31,3.4 变量类型及其定义,c语言的所有变量在使用以前都必须定义。变量定义语句规定了变量的数据类型,从而也限定了变量的可能取值范围。 int top, bottom, step; char ch, carray 100;,必须先定义,后使用。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,32,3.4.1基本数据类型变量及其定义,1. 字符类型变量及其定义 char ch ; unsigned char ch2; signed char ch3 ; char代表字符数据类型,其定义的ch就是一个字符数据类型变量,在内存中只占1个字节,可以保存1个字符。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,33,图3.5 char型变量的表示范围,最高位是符号位,其余数值位,2019/2/10,主讲教师:四川大学计算机学院 谢汶,34,2. 整型类型变量及其定义,int i; int表示整型数据类型。i是整型变量,在内存中可能占据2个字节也可能占据4个字节,随编译环境不同而异。 short int scount; int icount; long int lcount;,tc中2字节;vc+中4字节。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,35,图3.6 short型和long型变量,2019/2/10,主讲教师:四川大学计算机学院 谢汶,36,3. 实型类型变量及其定义,实型数据分为float单精度实型、double双精度实型和long double长双精度实型。 float:单精度浮点型数据。在内存中占据4个字节。 double:双精度浮点型数据。在内存中占据8个字节。 long double:长双精度实型( 扩展双精度实型)变量,占据80位,10个字节。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,37,3.4.2 变量的初始化,变量也可以在定义它时初始化。在定义变量时,如果在变量名后面跟上赋值符号( =)和表达式( 也叫初始化算子),那么就表示在定义变量的同时给它赋了一个初始值。比如: char ch = n; int i = 0; int icount = maxline+1; float f = 1.19e-5;,定义时赋值,2019/2/10,主讲教师:四川大学计算机学院 谢汶,38,3.5 运算符和表达式,3.5.1 表达式和表达式的值 表达式由数据和运算符构成,数据可以是变量、常量和函数返回值。 a=b=c=c+,c+5,整个表达式的意义? 但c=c+可行吗?有待探索,2019/2/10,主讲教师:四川大学计算机学院 谢汶,39,3.5.2 赋值运算符、赋值表达式和赋值语句,“=”是赋值运算符,它的意思是将右边表达式的值赋值给左边变量。“=”号左边只能是变量,不能是表达式或常量;而等号右边可以是表达式,也可以是变量或常量。 所谓语句就是一个能够表达完整意思的句子结构。 要注意c语言的“=”(赋值运算符)与数学方程中的“=”( 等于)的意义是完全不同的 .,2019/2/10,主讲教师:四川大学计算机学院 谢汶,40,3.5.3 算术运算符及其表达式,算术运算符包括一元运算符和二元运算符两种。二元算术运算符有:+、-、*、/( 整除)和%( 取余模运算符)。一元算术运算符有“+”和“-”等。 “/”运算符可以作用于整型数据也可以作用于实型数据。 例题3.2 算术运算符及其运算结果:,2019/2/10,主讲教师:四川大学计算机学院 谢汶,41,/* i=1, c1=a,e2=2,f=10.2,*/ i = i / c1; /* i = 1 */ printf(“%dn“,i); /* 输出1 */ i = c1 / e2; /* i = 32, 因为c1=65,e2=2 */ printf(“%dn“,i); /* 输出32 */ f = 100 / f; /* 将100转换为100.0再除以10.2 */ printf(“%fn“,f); /* 输出9.803922 */ i = c1 % 2; /* i = 1 */ /* i = f % i; */ /* 出错。实型数据不能用于% */ printf(“%dn“,i); /* 输出1 */ f = 3 / 2;/* 算术表达式3/2的值为1,1赋值给f转换为1.0 */ printf(“%fn“,f); /* 输出1.000000, */,2019/2/10,主讲教师:四川大学计算机学院 谢汶,42,例题3.3 判断闰年和非闰年,if (year%4 = 0 ,2019/2/10,主讲教师:四川大学计算机学院 谢汶,43,3.5.4 自增和自减算术运算符及其表达式,if (ch = n) +icount; /* icount自增1 */ 或者 icount = icount+1;,在这里前缀、后缀自增均可。,2019/2/10,主讲教师:四川大学计算机学院 谢汶,44,例题3.4 隐藏从键盘输入的密码串中的所有数字,以*取代每一个数字。 if ( si=0 ,数字变*号,其余不变,2019/2/10,主讲教师:四川大学计算机学院 谢汶,45,if ( si=0 ,效果同前,2019/2/10,主讲教师:四川大学计算机学院 谢汶,46,数字被*号取代,2019/2/10,主讲教师:四川大学计算机学院 谢汶,47,例题3.5 自定义strcat函数,连接两字符串.,/* strcat: 将source连接到target末尾; target必须足够大。 */ void strcat(char target , const char source ) int i, j = 0; for (i=0; targeti != 0; i+ ) ; /* 空语句 */ while ( (targeti+ = sourcej+) != 0 ) ; /* 空语句 */ ,寻找0,遇0退出,2019/2/10,主讲教师:四川大学计算机学院 谢汶,48,图3.8 strcat( )的操作过程,首字母复制位置,2019/2/10,主讲教师:四川大学计算机学院 谢汶,49,3.5.5 关系运算符及其表达式,“”( 大于)、“=”( 大于等于)、“”( 小于)、“=”( 小于等于) 以及“=”( 等于)、“!=”( 不等于) 关系运算符的优先级比算术运算符的优先级低。 i maxline-1 等价于 i (maxline-1),2019/2/10,主讲教师:四川大学计算机学院 谢汶,50,3.5.6 逻辑运算符及其表达式,“ ,2019/2/10,主讲教师:四川大学计算机学院 谢汶,51,逻辑运算符“!”是非运算符,它是一元运算符。 它将非0操作数转换为0;而将0操作数转换为1。 逻辑运算符“!”在if结构中使用较多: if ( !valid ) 它也可以如下使用,二者等价: if (valid = 0),广泛使用形式,2019/2/10,主讲教师:四川大学计算机学院 谢汶,52,3.5.7 逗号运算符及其表达式,其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。 其一般形式为: 表达式1,表达式2 int i=0, j=0, k=0; k = +i, j=i+, j+i; /* i=2,j=2,k=2,表达式的值是3,注意“=”比“,”优先级高 */,有求值顺序,2019/2/10,主讲教师:四川大学计算机学院 谢汶,53,3.5.8 条件运算符及其表达式,条件运算符为:“? :”,它是c语言中唯一的一个三元运算符( 三目运算符) 。 由条件运算符组成条件表达式的一般形式为: 表达式1? 表达式2: 表达式3 expr1 ? expr2 : expr3,有求值顺序,2019/2/10,主讲教师:四川大学计算机学院 谢汶,54,1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。 2.条件运算符“? :”是一对运算符,不能分开单独使用。 3.条件运算符的结合方向是自右至左。 x y ? x : y z ? y : z 等价于: x y ? x : (y z ? y : z),2019/2/10,主讲教师:四川大学计算机学院 谢汶,55,3.5.9 位运算符及其表达式,“&” 按位与操作and “|” 按位或操作or “” 按位异或操作or “” 按位右移操作 “” 按位取反(一元运算符,其余位运算符均为二目运算符),2019/2/10,主讲教师:四川大学计算机学院 谢汶,56,图3.9 位运算符的作用,2019/2/10,主讲教师:四川大学计算机学院 谢汶,57,图3.10 c语言逻辑运算符“&“与位运算符“&“的不同,2019/2/10,主讲教师:四川大学计算机学院 谢汶,58,2019/2/10,主讲教师:四川大学计算机学院 谢汶,59,图3.11 c语言的异或运算,2019/2/10,主讲教师:四川大学计算机学院 谢汶,60,图3.12 c语言的左移、右移运算符,2019/2/10,主讲教师:四川大学计算机学院 谢汶,61,图3.13 c语言的按位取反运算符“”,运算符在编制可移植性程序时,用处较大。 0xffff,2019/2/10,主讲教师:四川大学计算机学院 谢汶,62,例题3.6 位运算符的作用,2019/2/10,主讲教师:四川大学计算机学院 谢汶,63,3.5.10 复合赋值运算符及其表达式,还有一种赋值运算符,叫做复合赋值运算符。 象上述i = i + 4这样的表达式,其左边的变量立即在右边重复,可以写成压缩的形式: i += 4 这里“+=”也视为一种运算符,它叫做复合赋值运算符。,适用于大部分运算符,2019/2/10,主讲教师:四川大学计算机学院 谢汶,64,假设variable是变量,而expression是表达式,则复合赋值运算符表达式如下: variable op= expression /* 注意:variable不可是表达式,只能是变量 */ 它等价于: variable = variable op (expression),注意这里的( ),2019/2/10,主讲教师:四川大学计算机学院 谢汶,65,例题3.7 计算从键盘输入的实数中正数的个数,int isnegative(float x) if (fabs(x) =0 ? 1 : -1; ,如何判断实数与0的关系?,2019/2/10,主讲教师:四川大学计算机学院 谢汶,66,iarray iarray i3+i4 + iarray i1 += 2 iarray iarray i3+i4 + iarray i1 = iarray iarray i3+i4 + iarray i1 +2,符合赋值运算符的存在意义!,2019/2/10,主讲教师:四川大学计算机学院 谢汶,67,3.6 运算符的优先级和求值顺序,多数运算符具有左结合性; 一元运算符、三目运算符、赋值运算符等具有右结合性。,运算符的求值顺序、优先级、结合性是完全不同的三个概念。,2019/2/10,主讲教师:四川大学计算机学

温馨提示

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

评论

0/150

提交评论