c语言程序设计包云c第3章顺序程序设计_第1页
c语言程序设计包云c第3章顺序程序设计_第2页
c语言程序设计包云c第3章顺序程序设计_第3页
c语言程序设计包云c第3章顺序程序设计_第4页
c语言程序设计包云c第3章顺序程序设计_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章 最简单的最简单的c c程序设计程序设计- -顺序程序设计顺序程序设计2021/11/20第3章 数据类型、运算符与表达式23.1 3.1 顺序程序设计举例顺序程序设计举例3.2 3.2 数据的表现形式及其运算数据的表现形式及其运算3.3 c3.3 c语句语句3.4 3.4 数据的输入输出数据的输入输出主要内容主要内容2021/11/20第3章 数据类型、运算符与表达式33.1 顺序程序设计举例顺序程序设计举例例例3.1将华氏温度转化为摄氏温度。将华氏温度转化为摄氏温度。)32(95fc分析:利用上面的公式,其中分析:利用上面的公式,其中f代表代表华氏温度,华氏温度,c代表摄氏温度

2、代表摄氏温度例例3.2见课本见课本38页页2021/11/20第3章 数据类型、运算符与表达式43.2数据的表现形式及其运算数据的表现形式及其运算3.2.1 常量和变量常量和变量2021/11/20第3章 数据类型、运算符与表达式5概念概念在程序运行过程中,其值不能被改变的量。在程序运行过程中,其值不能被改变的量。分类分类字面常量(字面常量(直接常量直接常量):): 12 -44.6 a hello! 符号常量:用一个符号常量:用一个标识符标识符代表一个常量。代表一个常量。 字符串常量字符串常量符号常量符号常量的定义的定义格式:格式:#define 常量名常量名 字面常量字面常量举例:举例:#

3、define price 100 #define pi 3.14 #define c1 a习惯上常量名用大写,习惯上常量名用大写,变量名用小写。变量名用小写。意义意义1、含义清楚。、含义清楚。2、在需要改变一个常量时,能够做到、在需要改变一个常量时,能够做到“一改全改一改全改”。 符号常量的定义放在符号常量的定义放在函数外面。函数外面。1 1 常常 量量2021/11/20第3章 数据类型、运算符与表达式6常量举例(求某商品总价)#include #define price 100 /定义符号常量int main()int sum;sum=price*20;printf(%dn,sum); r

4、eturn 0;单价单价符号常量符号常量数量数量直接常量直接常量2021/11/20第3章 数据类型、运算符与表达式7表示方法表示方法十进制:十进制: 123, -456, 0八进制:八进制: 0123, -0456,十六进制:十六进制: 0 x123, -0 x456以数字以数字0开头开头以以0 x开头开头1) 整型常量的表示方法分类分类基本整型(数据范围与基本整型(数据范围与int型一样)型一样)长整型长整型 (在数值后面加(在数值后面加“l(l)”, 数据范围与数据范围与long int型一样)型一样)如如123l,315l类型匹配类型匹配规则规则一个整型常量,可以赋给能容纳下其值的整型

5、变量一个整型常量,可以赋给能容纳下其值的整型变量2021/11/20第3章 数据类型、运算符与表达式8表示方法表示方法十进制小数形式:十进制小数形式: 123. 34,-0.0045, 0.0指数形式:指数形式: e(e) 如如0.23e2 ,-0.45e-3, 3.0+5规范化指数形式规范化指数形式数字和小数点组成数字和小数点组成2)浮点类型常量关于分类关于分类浮点型常量是浮点型常量是double型的。一个浮点型常型的。一个浮点型常量,可以赋给一个浮点变量(量,可以赋给一个浮点变量(float型或型或double型)型)。2021/11/20第3章 数据类型、运算符与表达式9指数形式指数形式

6、(数符数符+小数部分小数部分+指数部分指数部分)小数部分占的位数越多小数部分占的位数越多,数的有效数的有效数字越多数字越多,精度越高精度越高.指数部分占的指数部分占的位数越多位数越多,表示的数值范围越大表示的数值范围越大.浮点类型存储方式浮点型数据在内存中是按指数形式存储的。浮点型数据在内存中是按指数形式存储的。规范化指数形式:小数规范化指数形式:小数部分采用纯小数形式,部分采用纯小数形式,且最高位不为且最高位不为0。 .314159 1举例:举例:3.14159在内存中的存放形式为:在内存中的存放形式为:2021/11/20第3章 数据类型、运算符与表达式10表示方法表示方法用单引号括起来的

7、用单引号括起来的一个字符一个字符. a a 9 = ? 不同的两个字符不同的两个字符转义字符转义字符3)字符类型常量语言还允许使用一种特殊形式的字符常量,就是以语言还允许使用一种特殊形式的字符常量,就是以反斜杠反斜杠 开头的开头的转义字符转义字符。将将后面的字符转换后面的字符转换为另外的意义为另外的意义.即是即是一种一种控制符号控制符号.2021/11/20第3章 数据类型、运算符与表达式11 字符形式字符形式 含义含义 n 换行换行,从当前位置移到下一行开头从当前位置移到下一行开头 t 水平制表水平制表(跳到下一个跳到下一个tab位置位置) b 退格退格,将当前位置移到前一列将当前位置移到前

8、一列 r 回车回车,将当前位置移到本行开头将当前位置移到本行开头 单撇号字符单撇号字符 反斜杠字符反斜杠字符 ” 双撇号字符双撇号字符 ? 问号字符问号字符 a 产生警告信息(声音或者视觉信号)产生警告信息(声音或者视觉信号) f 将当前位置移到下一页开头将当前位置移到下一页开头 v 将当前位置移到下一个垂直制表对齐点将当前位置移到下一个垂直制表对齐点 ddd 13位位8进制数所代表的字符进制数所代表的字符 xhh 12位位16进制数所代表的字符进制数所代表的字符2021/11/20第3章 数据类型、运算符与表达式12概念概念4)字符串常量用一对双引号用一对双引号 括起来的若干字符序列括起来的

9、若干字符序列字符串字符串长度长度字符串中字符的个数。长度为字符串中字符的个数。长度为0的字符串的字符串(即一个字符都没有的字符串)称为空串,(即一个字符都没有的字符串)称为空串,表示为表示为 (一对紧连的双引号)。(一对紧连的双引号)。存储方式存储方式c语言规定:在存储字符串常量时,由语言规定:在存储字符串常量时,由系统系统在字符串的末尾在字符串的末尾自动自动加一个加一个0作为字符串作为字符串的结束标志。的结束标志。注意:注意:没有专门的字符串变量。如果想将一个字符没有专门的字符串变量。如果想将一个字符串放在变量中保存和处理,必须使用串放在变量中保存和处理,必须使用字符型数组字符型数组或或者者

10、字符指针字符指针2021/11/20第3章 数据类型、运算符与表达式13思考?1、 字符串常量字符串常量how do you do.和和good morning.的长度分别是多少?的长度分别是多少?2、 字符串字符串c:msdosv6.22和和i say: goodbye! 在在c语语言中的字符串常量形式如何表示?言中的字符串常量形式如何表示?3、 字符串字符串china在内存中的实际存储形式是怎样在内存中的实际存储形式是怎样的?占用多少个字节的内存空间?的?占用多少个字节的内存空间?14和和13c:msdosv6.22和和i say:goodbye!china0占用字节占用字节而非字节而非字

11、节内存空间内存空间2021/11/20第3章 数据类型、运算符与表达式14注意:注意:1、a是字符,是字符, a是字符串。是字符串。2、 不能把一个字符串赋给一个字符变不能把一个字符串赋给一个字符变 量。量。如如c=a、c=hello! 都是错误的。都是错误的。3、c语言中没有字符串变量,可以用语言中没有字符串变量,可以用字符字符数组数组来表示。来表示。 2021/11/20第3章 数据类型、运算符与表达式15举例举例#include int main() printf(abcbdnxyz); printf(“rlmntopqn); return 0;abdlmn opq实际中,不会实际中,不

12、会这样使用!这样使用!#include int main() printf(x4fx4bx21n); /* 等价于等价于printf(ok!n); */ printf(x15 xabn); return 0;! 结果:结果:结果:结果:例例3.52021/11/20第3章 数据类型、运算符与表达式165)符号常量)符号常量格式:格式:#define 常量名常量名 字面常量字面常量举例:举例:#define price 100 #define pi 3.14 #define c1 a使用符号常量的好处:使用符号常量的好处:1)含义清楚。)含义清楚。2)在需要改变程序中多处用到的同一个常量时,)在

13、需要改变程序中多处用到的同一个常量时,能做到能做到”一改全改一改全改“。2021/11/20第3章 数据类型、运算符与表达式17概念概念其值可以改变的量称为变量。其值可以改变的量称为变量。2、 变 量要素要素(1)变量名。)变量名。每个变量都必须有一个每个变量都必须有一个名字名字变量名,变量命名遵循标识符变量名,变量命名遵循标识符命名规则。命名规则。(2)变量值。)变量值。在程序运行过程中,变在程序运行过程中,变量值存储在内存中。在程序中,通过量值存储在内存中。在程序中,通过变量名来引用变量的值。变量名来引用变量的值。2021/11/20第3章 数据类型、运算符与表达式18标识符标识符iden

14、tifier1、标识符就是一个名字(如、标识符就是一个名字(如常量名、变量名、常量名、变量名、函数名函数名)。)。2、组成:只能由、组成:只能由字母、数字、下划线字母、数字、下划线组成。且组成。且第一个字符必须为第一个字符必须为字母或下划线字母或下划线。3、长度:标识符的有效长度随系统而异,如果、长度:标识符的有效长度随系统而异,如果超长,则超长部分被舍弃。超长,则超长部分被舍弃。vc+6.0中规定最大中规定最大长度为长度为247个字符。个字符。turbo c中的最大长度为中的最大长度为32.4、标识符命名的良好习惯、标识符命名的良好习惯见名知意见名知意例如,例如,name(姓名)、(姓名)、

15、age(年龄)(年龄)2021/11/20第3章 数据类型、运算符与表达式19下列标识符是否合法,为什么?下列标识符是否合法,为什么?sum a1 b2 s_name123 #ss a.b.c 1a8bc思 考 ?合法合法不合法不合法2021/11/20第3章 数据类型、运算符与表达式20变量定义变量定义数据类型数据类型 变量名变量名, 变量名变量名2;int a1,a2;float x1,x2;double y1,y2;char c1,c2;习惯上,变量名用小写字母。习惯上,变量名用小写字母。常量名用大写字母。常量名用大写字母。#define price 1002021/11/20第3章 数

16、据类型、运算符与表达式21方式:方式:1、定义变量的同时赋初值(也叫变量初始化)。、定义变量的同时赋初值(也叫变量初始化)。 格式:格式: 数据类型数据类型 变量名变量名=初值初值, 变量名变量名2=初值初值2;2、通过一个赋值语句给变量赋初值。、通过一个赋值语句给变量赋初值。 格式格式 : 变量名变量名=初值初值;变量赋初值变量赋初值出现在函数体出现在函数体的的声明声明部分部分出现在函数体出现在函数体的的执行执行部分部分int a,b=3;int a,b;b=3;2021/11/20第3章 数据类型、运算符与表达式221、程序中用到的变量必须、程序中用到的变量必须“先定义(先定义(decla

17、re),),后使用后使用”。2、c语言的语言的关键字关键字不能用作变量名。不能用作变量名。3、c语言对英文字母的语言对英文字母的大小写敏感大小写敏感,即同一字母的,即同一字母的大小写,被认为是两个不同的字符。对于变量的定大小写,被认为是两个不同的字符。对于变量的定义而言,义而言,int i,i;是定义了两个不同的变量。;是定义了两个不同的变量。4、定义变量时,给几个变量赋相同的初值,、定义变量时,给几个变量赋相同的初值, 应写成应写成 : int a=3,b=3,c=3; 不能写成不能写成: int a=b=c=3;5、给变量赋值时,正常情况下应给变量赋相同类、给变量赋值时,正常情况下应给变量

18、赋相同类型的数据。若给变量赋与其类型不同的数据时,需型的数据。若给变量赋与其类型不同的数据时,需进行进行类型转换类型转换。关于变量以及变量赋初值的几点说明关于变量以及变量赋初值的几点说明2021/11/20第3章 数据类型、运算符与表达式23变量变量举例举例include int main() int student,age; int if=adrress=1; float score=90; stadent=2; age=20.7; printf(%d %d %d %f,if,student,age,score); return 0;本程序中有本程序中有几处错误?几处错误?undeclare

19、d identifier错误:错误:1、if:为关键词:为关键词2、int if=address=1;应分别赋初值。应分别赋初值。3、stadent:未定义的标识符,拼写错误:未定义的标识符,拼写错误4、age:未定义的标识符,大小写敏感。:未定义的标识符,大小写敏感。2021/11/20第3章 数据类型、运算符与表达式243、常变量、常变量常变量是指前面加常变量是指前面加const定义的变量,这种变量的特定义的变量,这种变量的特点是其值只能通过初始化给定,在其存在期里总代点是其值只能通过初始化给定,在其存在期里总代表着同一个值,不允许再赋值。如:表着同一个值,不允许再赋值。如: const

20、int num=10; const double pi=3.1415926; const double e=2.71828;注意:课本注意:课本42上的思考:常变量和符号常量的区别。上的思考:常变量和符号常量的区别。2021/11/20第3章 数据类型、运算符与表达式253.2.2数据类型数据类型c语言要求在定义所有的变量时都要指定变量的类语言要求在定义所有的变量时都要指定变量的类型,常量也是区分类型的。型,常量也是区分类型的。为什么用计算机运算时,要指定数据的类型呢?为什么用计算机运算时,要指定数据的类型呢?2021/11/20第3章 数据类型、运算符与表达式26数据类型数据类型基本类型基本

21、类型整型整型字符型字符型浮点型浮点型布尔型布尔型派生类型派生类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型指针类型指针类型空类型空类型单精度型单精度型双精度型双精度型在程序中对用到的在程序中对用到的所有数据都必须指所有数据都必须指定其定其数据类型数据类型.?不同类型的数据不同类型的数据,所占所占内存的字节数内存的字节数不同不同, 对对应的应的操作操作也不相同。也不相同。c的数据类型函数类型函数类型枚举类型枚举类型 计算机内部的数据我们通称为量,描述一个量,我们从计算机内部的数据我们通称为量,描述一个量,我们从如下如下4个方面来考虑:个方面来考虑:一个量一个量名字名字:为:为方便编

22、程,以一个合法的字符串(标识符)方便编程,以一个合法的字符串(标识符)来表征对该量的使用。来表征对该量的使用。值值/内容内容:某个时刻量的大小。根据值在程序执行过某个时刻量的大小。根据值在程序执行过程中是否可以修改产生了程中是否可以修改产生了常量常量和和变量变量的概念。的概念。存储地址存储地址:在内存的什么位置保存该量。对于一些在内存的什么位置保存该量。对于一些深层低端编程人员或者特定程序而言,地址是不可缺深层低端编程人员或者特定程序而言,地址是不可缺少的一种概念少的一种概念/工具。工具。类型类型: 决定了量的基本操作和性质。同地址结合,决定了量的基本操作和性质。同地址结合,产生了产生了空间大

23、小空间大小和和值域值域的概念。的概念。对于量的访问,高级语言一般提供的是名字,而汇编中往对于量的访问,高级语言一般提供的是名字,而汇编中往往直接面对地址的概念来处理。往直接面对地址的概念来处理。2021/11/20第3章 数据类型、运算符与表达式281、在内存中的存储方式、在内存中的存储方式整型数据在内存中是以整型数据在内存中是以补码补码表示的。表示的。(参见教材(参见教材p44)3.2.3 3.2.3 整型数据整型数据编码编码正数表示方法正数表示方法负数表示方法负数表示方法原码原码最高位为符号位(最高位为符号位(0正数,正数,1负数)。其他位为此数绝对负数)。其他位为此数绝对值的二进制表示。

24、值的二进制表示。反码反码同原码同原码最高位为符号位(最高位为符号位(1),其他位为原码表),其他位为原码表示的各位取反。示的各位取反。补码补码同原码同原码最高位为符号位(最高位为符号位(1),其他位为原码表),其他位为原码表示的各位取反再末位加示的各位取反再末位加1。2021/11/20第3章 数据类型、运算符与表达式29例如:例如: 求求-10的补码表示(按的补码表示(按16位存储)。位存储)。-10的原码的原码1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0除符号位外除符号位外各位取反各位取反1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1末位加末位加11 1

25、1 1 1 1 1 1 1 1 1 1 0 1 1 0则得到则得到-10的二进制补码的表示。的二进制补码的表示。2021/11/20第3章 数据类型、运算符与表达式302、整型变量的分类、整型变量的分类分类及取分类及取值范围值范围类型类型比特数比特数范围范围intsigned int 16 -3276832767(215-1)unsigned int 16 065535short int signed short int 16 -3276832767(215-1)unsigned short int 16 065535long intsigned long int 32 -2147483648

26、 2147483647unsigned long int 32 04294967295表示可以省略表示可以省略各类型整型变量各类型整型变量占用的内存字节占用的内存字节数,随系统而异。数,随系统而异。说明:说明:c语言标准并没有规定各种整数类型的表示范语言标准并没有规定各种整数类型的表示范围,只规定了围,只规定了long型的表示范围不能小于型的表示范围不能小于int类型,类型,不同的不同的c语言系统规定不同。语言系统规定不同。tc中的数据类型中的数据类型2021/11/20第3章 数据类型、运算符与表达式31类型类型(visual c+ 6.0)比特数比特数取值范围取值范围signed int3

27、2-231(231-1)unsigned int320(232-1)signed short int16-215(215-1)unsigned short int160(216-1)long int32-231(231-1)unsigned long int320(232-1)2021/11/20第3章 数据类型、运算符与表达式32注意:在注意:在c99中新增了一种数据类型:中新增了一种数据类型:long long int 或或 long long,一般分配,一般分配8个字个字节,但许多节,但许多c编译系统尚未实现。编译系统尚未实现。c标准只要求标准只要求long型数据长度不短于型数据长度不短

28、于int型,型,short不长于不长于int型。型。2021/11/20第3章 数据类型、运算符与表达式33注意:注意: 常量无常量无unsigned型。但一个非负整型常量,型。但一个非负整型常量,只要它的值不超过相应变量的值域(即取值只要它的值不超过相应变量的值域(即取值范围),也可以赋给范围),也可以赋给unsigned型变量。型变量。#include int main() long int c,d=9l; unsigned int e=-3 , f; f =5; c=-6; printf(%ldn%ldn%un%u,c,d,e,f); return 0;/%ld是输出长整型数据是输出长整

29、型数据举例举例-6942949672935tc运行结果运行结果(p46)2021/11/20第3章 数据类型、运算符与表达式343.2.4、字符型数据存储方式存储方式以以ascii码存储码存储,占一个字节(占一个字节(参见教材参见教材)类型及范围类型及范围char 大小写英文字母大小写英文字母,数字数字,运算符运算符,标点符号等标点符号等 注意:注意:字符型数据与整型数据在存储方式字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字上的相似性使得两者之间可以通用。但字符型数据的表示范围是:符型数据的表示范围是:0255。举例举例字符变量字符变量ch中存放字符中存放字符a,其,其a

30、scii码为码为97,在内存中以二进制形式存放,其格式如下:在内存中以二进制形式存放,其格式如下:0 1 1 0 0 0 0 1ch1、字符与字符代码、字符与字符代码2021/11/20第3章 数据类型、运算符与表达式35例例 字符变量的字符形式输出和整数形式输出字符变量的字符形式输出和整数形式输出。 #include int main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); return 0; “%c”是输出字符时使用的格式符。是输出字符

31、时使用的格式符。2、字符变量举例1一个字符型数据,既可以字符形式输出,也可以整数形式输出一个字符型数据,既可以字符形式输出,也可以整数形式输出ch1=a,ch2=bch1=97,ch2=98程序运行结果:程序运行结果:2021/11/20第3章 数据类型、运算符与表达式36字符类型举例2允许对字符数据进行算术运算,此时就是对它们的允许对字符数据进行算术运算,此时就是对它们的ascii码值进行算术运算码值进行算术运算例例字符数据的算术运算(参考教材的字符数据的算术运算(参考教材的ascii码表)。码表)。 #include void main() char ch1,ch2; ch1=a; ch2

32、=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); ch1=a,ch2=bch1+200=297ch1+200=)ch1+256=353ch1+256=a程序运行结果:程序运行结果:2021/11/20第3章 数据

33、类型、运算符与表达式37总结:字符与字符串的区别有哪些?定界符不同:字符常量使用单引号,而字定界符不同:字符常量使用单引号,而字符串常量使用双引号;符串常量使用双引号;长度不同:字符常量的长度固定为长度不同:字符常量的长度固定为1,而字,而字符串常量的长度,可以是某个整数;符串常量的长度,可以是某个整数;存储要求不同:字符常量存储的是字符的存储要求不同:字符常量存储的是字符的ascii码值,而字符串常量,除了要存储有码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志效的字符外,还要存储一个结束标志0。2021/11/20第3章 数据类型、运算符与表达式383.2.5 浮点型数据浮

34、点型数据类型名称类型名称字节数字节数有效数字有效数字表示范围表示范围floatfloat4 46 6(-3.4-3.41010-38-38 3.43.410103838) )doubledouble8 81515(-1.7-1.71010-308-308 1.71.71010308308) )long doublelong double16161919(-1.1-1.11010-4932-4932 1.11.1101049324932) )在在vc中中long double由由8字节构成字节构成在在codeblocks中由中由12字节构成字节构成可用例可用例3.3.1测试测试2021/11/2

35、0第3章 数据类型、运算符与表达式39例例3.3.1#includeint main()printf(the length is %dn,sizeof(long double);return 0;2021/11/20第3章 数据类型、运算符与表达式40上例是在上例是在codeblocks中实验的结果。中实验的结果。因此,在因此,在anci c中并未具体规定每种类型数据的中并未具体规定每种类型数据的长度、精度和数值范围。随着系统的升级和计算机长度、精度和数值范围。随着系统的升级和计算机硬件水平的提高,每种类型的数据的范围都会有所硬件水平的提高,每种类型的数据的范围都会有所增大。增大。2021/1

36、1/20第3章 数据类型、运算符与表达式41浮点型数据的舍入误差浮点型数据的舍入误差由于浮点型变量是由有限的存储单元组成的,因此由于浮点型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的。在有效位以外的数能提供的有效数字总是有限的。在有效位以外的数字将被舍去。因此可能会产生一些误差。字将被舍去。因此可能会产生一些误差。2021/11/20第3章 数据类型、运算符与表达式42例例#includeint main() float a,b; a=123456.789e5; b=a+20; printf(%fn,b);将将a和和b改为改为double类型类型再试试再试试2021/11/20

37、第3章 数据类型、运算符与表达式433.2.6怎样确定常量的类型怎样确定常量的类型整型常量:不带小数点的数值是整型常量,但应注整型常量:不带小数点的数值是整型常量,但应注意其有效范围。意其有效范围。浮点型常量:凡以小数形式或指数形式出现的实数,浮点型常量:凡以小数形式或指数形式出现的实数,是浮点型常量,在内存中以指数形式存储。是浮点型常量,在内存中以指数形式存储。c编译编译系统中把浮点型常量都按双精度处理。系统中把浮点型常量都按双精度处理。2021/11/20第3章 数据类型、运算符与表达式44(一)(一)c c运算符简介运算符简介(二)算术运算符和算术表达式(二)算术运算符和算术表达式(三)

38、赋值运算符和赋值表达式(三)赋值运算符和赋值表达式(四)逗号运算符和逗号表达式(四)逗号运算符和逗号表达式3.2.73.2.7运算符与表达式运算符与表达式2021/11/20第3章 数据类型、运算符与表达式451、算术运算符算术运算符 + - * / %2、关系运算符、关系运算符 = = != 3、逻辑运算符、逻辑运算符 ! & |4、位运算符、位运算符 | &5、赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符6、条件运算符、条件运算符 ? :7、逗号运算符、逗号运算符 ,8、指针运算符、指针运算符 * &9、求字节数运算符、求字节数运算符 sizeof1

39、0、强制类型转换运算符、强制类型转换运算符 (类型)类型)11、分量运算符、分量运算符 . 12、下标运算符、下标运算符 13、其他、其他 如函数调用运算符()如函数调用运算符()分类分类 运算符运算符 详见详见55页!页!2021/11/20第3章 数据类型、运算符与表达式46基本算术运算符基本算术运算符+ - * / %说明说明 例:例: 5/3=1 -5/3=-1模运算符或求余运算符模运算符或求余运算符算术表达式算术表达式用算术运算符和括号将用算术运算符和括号将运算对象运算对象(也称操作数)连接起(也称操作数)连接起来的、符合来的、符合c语法规则的式子。语法规则的式子。优先级和结合性优先

40、级和结合性先乘除、后加减,有括号先算括号。先乘除、后加减,有括号先算括号。自左至右自左至右常量、变量、函数等常量、变量、函数等说明说明如果一个运算符两侧的数据类型不同,先自动进行如果一个运算符两侧的数据类型不同,先自动进行类型转换类型转换,使二者具有同一类型,然后进行运算。,使二者具有同一类型,然后进行运算。 两个整数相除的结果为整数,舍去小数部分。两个整数相除的结果为整数,舍去小数部分。当商为负数时,多采用当商为负数时,多采用“向零取整向零取整”的方法。的方法。求余运算的两侧均应为整数求余运算的两侧均应为整数 例:例:5%3=2例:例: a*b/c-1.5+a (二)算术运算符和算术表达式(

41、二)算术运算符和算术表达式2021/11/20第3章 数据类型、运算符与表达式47自增、自减自增、自减运算符运算符作用:自增运算符()使单个变量的值增作用:自增运算符()使单个变量的值增1; 自减运算符()使单个变量的值减自减运算符()使单个变量的值减1。例例i=3;a) j=+i;b)j=i+;c)j=-i+;i=i+1i=i-1? j,i a) j=4 i=4b)j=3 i=4c)j=-3格式:格式: 前置:前置:+i , -i (在使用(在使用i之前,使之前,使i的值加(减)的值加(减)1) 后置:后置:i+ , i- (在使用(在使用i之后,使之后,使i的值加(减)的值加(减)1)+和

42、和-结合方向结合方向是是“自右至左自右至左”2021/11/20第3章 数据类型、运算符与表达式48例例i=3;a) c=(i+)+(i+);b) a=i+; b=i+; c=a+b;? c, i a) c=6 i=5b) c=7 i=5两处两处i值都为值都为3例例i=3; j=4;i+j (i+)+j? i, j i=4 j=4表达式的值:表达式的值:7自左而右组合自左而右组合例例i=3; printf(“%d,%d”,i,i+)? 4, 3函数参数自右至左求值函数参数自右至左求值有的系统中,从左至右求值,输出有的系统中,从左至右求值,输出“3,3”。2021/11/20第3章 数据类型、运

43、算符与表达式49(1) 自增、自减运算是语言特有的,常用于循环语句中,使循环控自增、自减运算是语言特有的,常用于循环语句中,使循环控 制变量加(或减),以及指针变量中,使指针指向下(或上)一个制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。地址。(2) 自增、自减运算符,不能用于常量和表达式。自增、自减运算符,不能用于常量和表达式。例如,例如,5+、-(a+b)等都是非法的。等都是非法的。(3) +和和-的结合方向为自右至左。(的结合方向为自右至左。(p58)(4) 如果对一个变量的自增自减运算,单独构成语句,而不是作为如果对一个变量的自增自减运算,单独构成语句,而不是作为表达

44、式的一部分时,前置和后置运算效果一样,都是使变量自加。表达式的一部分时,前置和后置运算效果一样,都是使变量自加。如如i+;和和 +i;是一样的,都是使是一样的,都是使i加。加。(5) 在表达式中,连续使用同一变量进行自增或自减运算时,很容易在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。出错,所以最好避免这种用法。说明说明2021/11/20第3章 数据类型、运算符与表达式504 4、不同类型数据间的转换(、不同类型数据间的转换(隐式转换(自动转换)转换发生条件转换发生条件v运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时v赋值转换赋值转换-把

45、一个值赋给与其类型不同的把一个值赋给与其类型不同的 变量时变量时v输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式v函数调用转换函数调用转换-实参与形参类型不一致时实参与形参类型不一致时 转换转换先转换、后运算先转换、后运算2021/11/20第3章 数据类型、运算符与表达式51转换规则转换规则doublefloatlongunsignedintchar,short高高低低详见教材详见教材54页页 1、纵向向上的箭头表示不同类型的、纵向向上的箭头表示不同类型的 转换方向(由低类型转化为高类转换方向(由低类型转化为高类 型),不表示转换所经的步骤。型),不表示转换所经的步骤

46、。 2、横向向左的箭头表示必须的转换。、横向向左的箭头表示必须的转换。 隐式转换(自动转换)隐式转换(自动转换)说明说明:必定的转换必定的转换运算对象类型运算对象类型不同时转换不同时转换2021/11/20第3章 数据类型、运算符与表达式52int i;float f;double d;long e; i=2;f=2.5;d=3.9;e=3; 10+a+i*f-d/e1075.01.3112. 0110. 7intdoubledoubledoubledouble 思考:思考:根据已知变量定义及赋值语句,根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得计算以下表达式的值,并说明每

47、一步所得结果的数据类型。结果的数据类型。2021/11/20第3章 数据类型、运算符与表达式535 5、显式转换(强制转换)、显式转换(强制转换)一般形式一般形式 (要转换成的数据类型要转换成的数据类型)(被转换的表达式被转换的表达式)注:当被转换的表达式是一个简单表达注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。式时,外面的一对圆括号可以缺省。举例举例 float x,y; x=2.3 ; y=4.5; (int)(x+y) / 6 (int) (int)x+y / 6.5 (double)说明说明强制转换得到的是所需类型的中间变量,强制转换得到的是所需类型的中间变量,原

48、变量或表达式的类型不变。原变量或表达式的类型不变。2021/11/20第3章 数据类型、运算符与表达式54#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程序运行结果:程序运行结果:结论:结论:较高类型较高类型向较低类型转换向较低类型转换时可能发生时可能发生精度精度损失问题损失问题2021/11/20第3章 数据类型、运算符与表达式55举例:举例:已知三角形的边长已知三角形的边长a a、b b、c c

49、,求,求三角形周长的一半。三角形周长的一半。#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s);s= 0.00程序运行结果:程序运行结果:?s= 6.00程序运行结果:程序运行结果:改为:改为:1.0/2 (1/2.0)或或 (float)1/2 (1/(float)2)2021/11/20第3章 数据类型、运算符与表达式563.3.1 c语言的语句 与其它高级语言一样,语言也是利用函数体中的可执行语句,向计与其它高级语言一样,语言也是利用函数体中的可执行语句,向计算机系统发出操

50、作命令。按照语句功能或构成的不同,可将语言的语句分算机系统发出操作命令。按照语句功能或构成的不同,可将语言的语句分为五类。为五类。1.控制语句控制语句控制语句完成一定的控制功能。语言只有条控制语句,又可细分控制语句完成一定的控制功能。语言只有条控制语句,又可细分为三种:为三种:( 1)选择结构控制语句)选择结构控制语句 if()else, switch()(2)循环结构控制语句)循环结构控制语句 dowhile(), for(), while(), break, continue(3)其它控制语句)其它控制语句 goto, return3.3 c语句语句2021/11/20第3章 数据类型、运

51、算符与表达式572. 函数调用语句 函数调用语句由一次函数调用加一个分号(语句结束标志)构成。函数调用语句由一次函数调用加一个分号(语句结束标志)构成。例如,例如,printf(this is a c function statement.);3. 表达式语句表达式语句由表达式后加一个分号构成。最典型的表达式语句是,表达式语句由表达式后加一个分号构成。最典型的表达式语句是,在赋值表达式后加一个分号构成的赋值语句。在赋值表达式后加一个分号构成的赋值语句。例如,例如,num=5 是一个赋值表达式,而是一个赋值表达式,而num=5;却是一个却是一个赋值语句。赋值语句。4. 空语句空语句仅由一个分号构

52、成。显然,空语句什么操作也不执行。空语句仅由一个分号构成。显然,空语句什么操作也不执行。 例如,下面就是一个空语句:例如,下面就是一个空语句: ; 2021/11/20第3章 数据类型、运算符与表达式585. 复合语句复合语句是由大括号括起来的一组(也可以是复合语句是由大括号括起来的一组(也可以是1条)语句构成。例如:条)语句构成。例如: main() /*复合语句。注意:右括号后不需要分号。复合语句。注意:右括号后不需要分号。*/ 复合语句的性质: (1)在语法上和单一语句相同,即单一语句可以出现的地方,也可)在语法上和单一语句相同,即单一语句可以出现的地方,也可以使用复合语句。以使用复合语

53、句。(2)复合语句可以嵌套,即复合语句中也可出现复合语句。)复合语句可以嵌套,即复合语句中也可出现复合语句。 2021/11/20第3章 数据类型、运算符与表达式5959#include #include void main() float a,b,c,p,s; printf(请输入三角形的三边:请输入三角形的三边:); scanf(%f%f%f,&a,&b,&c); p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c); printf(s=%7.2fn,s);请输入三角形的三边:请输入三角形的三边:3 4 5 s=6.00分析分析a,b,c:

54、表示三角形的三边。表示三角形的三边。 p:中间变量。中间变量。 p=(a+b+c)/2s:三角形面积。三角形面积。以上变量均为实型。以上变量均为实型。输入输入a,b,c输出输出sp (a+b+c)/2ssqrt(p*(p-a)*(p-b)*(p-c)?若输入若输入3 4 8-2 -3 9运行情况:运行情况:例例3.4给出三角形的三边长,求三角形面积。给出三角形的三边长,求三角形面积。3.3.2最基本的语句最基本的语句-赋值语句赋值语句2021/11/20第3章 数据类型、运算符与表达式6060include void main() int num1,num2,num3,sum; float a

55、ver; printf(请输入三个整数请输入三个整数:); scanf(%d,%d,%d,&num1,&num2,&num3);/*输入三个整数输入三个整数*/ sum=num1+num2+num3; /*求累计和求累计和*/ aver=sum/3.0; /*求平均值求平均值*/ printf(num1=%d,num2=%d,num3=%dn,num1,num2,num3); printf(sum=%d,aver=%7.2fn,sum,aver);例例输入任意三个整数,求它们的和及平均值。输入任意三个整数,求它们的和及平均值。num1,num2,num3:表示三个整数。

56、表示三个整数。 sum:求和结果求和结果aver:平均值平均值分析分析?数据类型?数据类型请输入三个整数:请输入三个整数:3,6,10 num1=3,num2=6,num3=10sum=19,aver= 6.333.0改为改为3可以么?可以么?2021/11/20第3章 数据类型、运算符与表达式611、赋值运算符、赋值运算符简单赋值运算符:简单赋值运算符:=复合赋值运算符:复合赋值运算符:+=, -=,*=,/=,%= 简单赋值运算符的一般形式为简单赋值运算符的一般形式为: 变量变量 = 表达式表达式它的作用是将一个表达式的值赋给一个变量。它的作用是将一个表达式的值赋给一个变量。 复合赋值运算

57、的一般格式为:复合赋值运算的一般格式为: 变量变量 双目运算符双目运算符 = 表达式表达式 复合赋值运算符复合赋值运算符 它等价于:变量它等价于:变量 = 变量变量 双目运算符双目运算符 (表达式表达式)。只有当表达式。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。简化为一个变量或一个常数时,两边的括号可以省略。2、复合赋值运算符、复合赋值运算符2021/11/20第3章 数据类型、运算符与表达式62例例1float a; int b;a=1.2;b=a*3;? b b=3例例2a+=3;x*=y+8a=a+3;x=x*(y+8)例例3a=b=5;a=7+(b=8)? a,b a

58、=5 ;b=5a=15;b=8自右而左自右而左的结合性的结合性3、赋值表达式、赋值表达式格式:格式: 赋值表达式的值:被赋变量的值赋值表达式的值:被赋变量的值类型转换类型转换转换条件:当赋值运算符两侧的数据类型不一致时转换条件:当赋值运算符两侧的数据类型不一致时转换原则:转换为被赋值变量的类型。具体见转换原则:转换为被赋值变量的类型。具体见p59。2021/11/20第3章 数据类型、运算符与表达式63注意:赋值表达式左侧的标识符称为注意:赋值表达式左侧的标识符称为“左值左值”;右侧;右侧的表达式称为的表达式称为“右值右值”。并不是任何对象都可以作。并不是任何对象都可以作为左值的,变量可以作为

59、左值,而表达式和常变量为左值的,变量可以作为左值,而表达式和常变量不能。不能。赋值表达式中的赋值表达式中的“表达式表达式”又可以是一个赋值表达式又可以是一个赋值表达式如:如:a=(b=5)赋值表达式作为左值时应加括号,赋值表达式作为左值时应加括号,如:(如:(a=3*5)=4*3/这种写法在这种写法在codeblocks是不允许的。是不允许的。赋值表达式也可以包含复合的赋值运算符。赋值表达式也可以包含复合的赋值运算符。如:如:a+=a-=a*a赋值表达式还可以出现在其他语句中,如输出语句和赋值表达式还可以出现在其他语句中,如输出语句和循环语句等中。循环语句等中。2021/11/20第3章 数据

60、类型、运算符与表达式644、赋值过程中的类型转换、赋值过程中的类型转换如果赋值运算符两侧的类型一致时,则直接进行赋值。如果赋值运算符两侧的类型一致时,则直接进行赋值。如果赋值运算符两侧的类型不一致时,但都是算数类型时,如果赋值运算符两侧的类型不一致时,但都是算数类型时,在赋值时要进行类型转换。转换规则为:在赋值时要进行类型转换。转换规则为:1)将浮点型数据赋给整型变量时,先对浮点数取整,舍弃)将浮点型数据赋给整型变量时,先对浮点数取整,舍弃小数部分,然后赋予整型变量。小数部分,然后赋予整型变量。2)将整数数据赋值给单、双精度变量时,数值不变,但以)将整数数据赋值给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。浮点数形式存储到变量中。3)将一个)将一个double型数据赋

温馨提示

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

评论

0/150

提交评论