没有规矩,不成方圆。.

Slides:



Advertisements
Similar presentations
第6章 基本的程序语句 6.1 基本数据类型及取值范围 6.2 标识符、变量和常量 6.3 基本运算符、表达式及运算的优先级
Advertisements

第2章 数据类型与表达式 2.1 C++的数据类型 2.2 常量 2.3 变量 2.4 C++的运算符 2.5 算术运算符与算术表达式
大学程序设计技能训练(C).
C/C++语言程序设计 第二章 数据类型和表达式 龚尚福,贾澎涛主编 《C/C++语言程序设计》 西安电子科技大学出版社.
C++程序设计 第二章 数据类型与表达式.
Chapter2 Constants, Variables, and Data Types
第三章 C语言基础 学习目标: 熟练掌握:C语言的基本数据类型、运算符及表达式 掌握:常见的输入、输出函数使用方法;
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
基础篇 基础知识 —C语言程序设计 学习目标 掌握C语言中三种常见的基本类型及其使用方法 掌握常见的算术运算符和表达式的使用
第2讲 C++语言基础 2.1 基本语法成分 2.2 基本数据类型 2.3 变量和常量 2.4 运算符和表达式 2.5 综合案例分析.
第2章 数据类型与表达式 2.1 C++的数据类型 2.2 常量 2.3 变量 2.4 C++的运算符 2.5 算术运算符与算术表达式
C语言程序设计 第三章 数据类型、运算符与表达式
第2章 数据类型与数据运算.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第二章 基本数据类型与输入输出.
程序设计基础 第 二 章 谌 卫 军 清华大学软件学院 2008年秋季.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C语言程序设计基础 刘新国.
C程序设计 第三章 简单的c程序——顺序结构
第二章 Java语言基础.
第2章 数据类型、运算符和表达式.
3 数据类型、运算符 和表达式.
第二章 数据类型、运算符与表达式.
第三章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第三章 数据类型、运算符与表达式.
第2章 数据的存储与运算 2.1 数据在计算机中是怎样存储的 2.2 整型数据的运算与分析 2.3 实型数据的运算与分析
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
目录 2.1数据类型 2.2常量 2.3变量 2.4库函数 2.5运算符及表达式 1.
程序设计基础A(C语言) 主讲教师: 许 康 教师主页:
C程序设计.
第 二 章 数据类型、运算符与表达式.
第9章 位 运 算.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
数据类型与运算规则.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
C语言程序设计 李祥 QQ:
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第3章 数据类型、运算符与表达式.
第九节 赋值运算符和赋值表达式.
第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式
C语言程序设计 李祥 QQ:
第2章 数据类型、运算符与表达式 2.1 程序设计概述
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
C程序设计 实验二 数据类型、运算符和表达式 第6讲
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
程序设计基础A(C语言) 第一章 C语言概述 主讲教师: 许 康
Chap 6 数据类型和表达式 6.1 数据的存储和基本数据类型 6.2 常量和变量 6.3 数据的输入和输出 6.4 类型转换
第3章 数据类型、运算符与表达式 3.1 程序设计概述
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
数据表示 第 2 讲.
第二章 数据类型与表达式 丘志杰 电子科技大学 计算机学院 软件学院.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第9章 位 运 算.
C语言程序设计 第2章 数据类型.
第2章 Java语言基础.
2 Java语言基础 (数据运算与流程控制).
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

没有规矩,不成方圆。

第3章 数据类型、运算符与表达式 3.1 C的数据类型 3.2 常量与变量 3.3 整型数据 3.4 实型数据

3.5 字符型数据 3.6 变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值运算符和赋值表达式 3.10 逗号运算符和逗号表达式

本章大纲 数据类型、运算符与表达式(7学时) 教学内容: C的数据类型:基本数据类型;自定义的数据类型 常量和变量:符号常量与一般常量;变量的定义和赋值 各类型数据的混合运算 运算符与表达式:算术运算符;关系运算符与逻辑运算符;表达式的执行顺序

基本要求: 了解C语言的数据类型; 了解常量的概念、常量的分类; 了解整型、实型和字符型数据的存储形式; 掌握变量的概念、变量的分类及变量的初始化方法; 掌握各类数值型数据间的混合运算规则; 掌握常见的各种运算符及表达式; 理解运算符的优先级与结合性。 重点:基本数据类型;变量定义和赋值;运算符与表达式 难点:自定义的数据类型;运算符优先级。

3.1 C的数据类型 数据类型在数据结构中的定义是一个值的集合以及定义在这个值集上的一组操作。 基本类型:整型,字符型,浮点型(单精度型,双精度型),枚举类型; 构造类型:数组类型,结构体类型,共用体类型,指针类型,空类型。 数据类型决定: 1.数据占内存字节数 2.数据取值范围 3.可对数据进行的操作

补充了解 数据结构 数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。 数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。 常用数据结构 :数组、线性表、链表、队列、栈、树、图等的定义、存储和操作

(1)不同的计算机语言所允许定义和使用的数据结构是不同的。 (2)处理同一类问题,如果数据结构不同,算法也会不同。

在程序运行过程中,其值不能被改变的量称为常量。 3.2 常量与变量 例如 : 12,0,-3为整型常量; 4.6、-1.23为实型常量; ‘a’,‘d’为字符常量。 3.2.1 常量和符号常量 常量: 在程序运行过程中,其值不能被改变的量称为常量。 字面常量或直接常量 符号常量:以用一个标识符代表一个常量 #define PRICE 30

× 例3.1符号常量的使用。 #define PRICE 30 main ( ) { int num, total; num=10; 1.习惯上,符号常量名用大写 2.程序中不能再次对符号常量赋值。 例3.1符号常量的使用。 #define PRICE 30 main ( ) { int num, total; num=10; total=num * PRICE; printf("total=%d",total); } #define PRICE 30 main ( ) { …… PRICE=40; } × total=300

这么麻烦给常量起了名字,有什么好处吗? (1)含义清楚。定义符号常量名时应考虑“见名知意”。 (2) 在需要改变一个常量时能做到“一改全改”。 #define PRICE 30 一看就知道PRICE表示价格,但千万不要在定义圆周率的时候也这样写,虽然不错,但达不到“见名知意”的目的了。 #define PRICE 3.1415926

变量是指在程序运行期间,其值可以改变的量。 3.2.2 变量 变量是指在程序运行期间,其值可以改变的量。 1.用来存放数据 2.对应内存中的一个特定的存储单元 3.有名字,以便被引用 1.怎么对应到特定的存储单元呢? 由编译系统完成。 (参阅《编译原理》) 2.变量的名字要怎么起呢?

? 3 变量怎么对应到特定的存储单元呢? 为了便于引用存储单元而起的名字。 类似于人名 a 变量名 a 3 变量值 存储单元的内容 2004H 存储单元地址 存储单元 存储单元地址一般用十六进制数表示 ,与变量名一一对应,类似于身份证号,唯一但难记,类似于身份证号。 每个存储单元都由一个唯一的存储单元地址和存储在单元里面的内容组成

Class和CLASS,Class,cLass 都不同! 标识符(identifier):用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。 合法的标识符名: while, _total,student_name,lotus_1_2_3,Class,class ,BASIC 标识符的命名规则: (1)只能由字母、数字和下划线三种字符组成, (2)且第一个字符必须为字母或下划线。 必须同时满足以上两个条件。 不合法的标识符名:   M.d.John,¥123,3d64,a>b ×

不合法的变量名:3num,day‘,while “先定义,后使用” 变量的名字要怎么起呢? (1)符合标识符的2个命名规则; (2)不能和关键字(32个)重名。 必须同时满足以上两个条件。 强制类型定义 我是君子,先说了才会用啊! 合法的变量名:num,day,x1 不合法的变量名:3num,day‘,while ×

还记得进制间如何转换吗?忘了的赶快找找啊! 3.3 整型数据 3.3.1 整型常量的表示方法 如123表示十进制数123 以0开头的数是八进制数。如0123表示八进制数123, -011表示八进制数-11 整型常量即整常数。 (1) 十进制整数。 (2) 八进制整数。 (3) 十六进制整数。 单片机程序设计中经常用到 以0x开头的数是十六进制数。如0x123,代表十六进制数123 -0x12等于十进制数-18

3.3.2 整型变量 1.整型数据在内存中的存放形式 例子: 10=(1010)2 数据在内存中是以二进制形式存放的。 3.3.2 整型变量 1.整型数据在内存中的存放形式 每一个整型数据(包含变量和常量)在内存中占2个或4个字节。 例子: 10=(1010)2 (a)存放的示意图 (b)实际存放图

掌握 补码(complement) 在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 负数补码的求法: (1)写出该数的绝对值的二进制形式; (2)按位取反; (3)再加1。 一个正数的补码和其原码的形式相同。 原码又是什么呢?

了解 补充内容:原码(true form) 原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数,其余位表示数值的大小。 ②整数原码的定义 [X]原=X (0≤X <2n) =2n-X(-2n<X≤0)例如:[+1011]原=00001011   [-1011]原=10001011 ①小数原码的定义 [X] = X (0≤X<1)  =1-X (-1<X≤0 ) 例如: X=+0.1011 , [X]原= 0.1011    X=-0.1011 , [X]原= 1.1011   

2. 整型变量的分类 (1) 基本整型(int) 修饰符: (1)有符号(signed) (2) 短整型(short int) 2. 整型变量的分类 有符号基本整型 [signed] int 无符号基本整型 unsigned int 修饰符: (1)有符号(signed) (2)无符号(unsigned) (1) 基本整型(int) (2) 短整型(short int) (3) 长整型(long int) 有符号短整型 [signed] short [int] 无符号短整型 unsigned short [int] 有符号长整型 [signed] long [int] 无符号长整型 unsigned long [int] [ ]里的关键字可以省略!

如果内存中有个数据是这样存储的,那么它是多少? 例子 如果是无符号数,它是65535 如果是有符号数,它是-1

对变量的定义,一般是放在一个函数的开头部分的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)。 C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义” 3. 整型变量的定义 int a,b; unsigned short c,d; long e,f; 对变量的定义,一般是放在一个函数的开头部分的声明部分(也可以放在函数中某一分程序内,但作用域只限它所在的分程序)。

例3.2整型变量的定义与使用。 main() {int a,b,c,d; /*指定a、b、c、d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf("a+u=%d,b+u=%d\n",c,d); }

0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 (a=12) + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 (u=10) ----------------- 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 0 (c=22)

求b=-24的补码 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 + 1 ----------------- 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 ( b=-24的补码) + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 (u=10) 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 (d的补码) - 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 (d的绝对值=14) a+u=22,b+u=-14

在Turbo c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况? 4. 整型数据的溢出 main() { int a,b; a=32767; b=a+1; printf("%d,%d",a,b); } 32767+1不等于32768吗? 32767,-32768

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (a=32767) + 1 ----------------- 既然是这样,那要怎么改才能得到预期的结果32768呢?想一想啦! 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (a=32767) + 1 ----------------- 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (负数)? - 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (b的绝对值,即32768 ) 真值为 - 32768

3.3.3 整型常量的类型 (1) 一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。 (2) 一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是长整型,可以将它赋值给一个long int型变量。 (3)一个整常量后面加一个字母u,认为是unsigned int型,如12345u,在内存中按unsigned int规定的方式存放。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。 (5) 在一个整常量后面加一个字母l或l,则认为是long int型常量。例如123l、432l、0l等。

3.4 浮点型数据 3.4.1 浮点型常量的表示方法 浮点数(floating-point number)即实数(real number)。 指数形式 十进制小数形式。它由数字和小数点组成 123e3,123E3 .123,123., 123.0, 0.0 注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数 e3 2.1e3.5., e ×

知道了! 123.456可以表示为123.456e0, 12.3456e1、 1.23456e2、 0.123456e3、 0.0123456e4、 0.00123456e5…… 无数种?…… 原来1.23456e2是规范化的指数形式。 “规范化的指数形式”: 即在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。一个实数在用指数形式输出时,是按规范化的指数形式输出的。

一个浮点型数据在内存中占4个或8个字节(32位或64位) 了解 3.4.2 浮点型变量 1.浮点型数据在内存中的存放形式 按照指数形式存储的 一个浮点型数据在内存中占4个或8个字节(32位或64位) 小数位数越多,精度越高 指数位数越多,表示的数的范围越大。 采用规范化的指数形式 纯小数部分 图3.7 实数 3.14159 在内存中的存放形式示意

2.浮点型变量的分类 C浮点型变量分为三类: 单精度(float) 双精度(double) 长双精度型(long double) float x,y; 2.浮点型变量的分类 C浮点型变量分为三类: 单精度(float) 双精度(double) 长双精度型(long double) 占4个字节(32位) double z; 占8个字节(64位) long double t; 占16个字节(128位)

main() {float a,b; a = 123456,789e5; b = a + 20 ; printf("%f",b); } 3.浮点型数据的舍入误差 浮点型用有限的存储单元存储,所以提供的有效数字也就有限,故会产生舍入误差。 main()  {float a,b;   a = 123456,789e5;  b = a + 20 ;  printf("%f",b);   } 应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。 12345678848.000000

3.4.3 浮点型常量的类型 * f = 2.45678 * 4523.65 单精度 双精度 双精度 3.4.3 浮点型常量的类型 提高精度 运算速度降低 f = 2.45678 * 4523.65 取前7位 * 单精度 双精度 双精度 难道不能就按单精度计算吗? f = 2.45678 f* 4523.65F

3.5 字符型数据 不同! 2.以一个“\”开头的字符序列。是 “控制字符”,在屏幕上是不能显示的 3.5.1 字符常量 3.5 字符型数据 2.以一个“\”开头的字符序列。是 “控制字符”,在屏幕上是不能显示的 3.5.1 字符常量 1.用单引号(即撇号)括起来的一个字符。 如‘a’,‘x’,‘D’,‘?’,‘$’ 。 如‘\n’,‘\t’,‘\b’,‘\r’,‘\\’, ‘\’’, ‘\’’’, ‘\ddd’, ‘\xhh’ ‘a’和‘A’相同吗? 不同!

例3.5转义字符的使用。 main() {printf(" ab c\t de\rf\tg\n"); printf("h\ti\b\bj k"); } 打印机 fab c gde h jik 白纸黑字 f gde h j k 屏幕 空说无凭

3.5.2 字符变量 1.字符型变量用来存放字符常量 2.只能放一个字符 3.一个字符变量在内存中占一个字节 字符变量的定义: 3.5.2 字符变量 字符变量的定义: char c1,c2; 1.字符型变量用来存放字符常量 2.只能放一个字符 3.一个字符变量在内存中占一个字节 字符变量的定义和赋值: char c1=‘a’,c2='b'; 字符变量的赋值: c1='a';c2='b';

3.5.3 字符数据在内存中的存储形式及其使用方法 存储 输出 将该字符的相应的ASCII代码放到存储单元中 1.以字符形式输出 3.5.3 字符数据在内存中的存储形式及其使用方法 将该字符的相应的ASCII代码放到存储单元中 存储 1.以字符形式输出 2.以整数形式输出 输出 示意图 实际存储情况

※ ※ 通用 例3.6 向字符变量赋以整数。 a b 97 98 main() %c表示以字符形式输出。 { char c1,c2; c1=97; c2=98; printf("%c %c\n",c1,c2);/*以字符形式输出*/ printf("%d %d\n",c1,c2);/*转换为整数形式输出*/ } %c表示以字符形式输出。 %d表示以带符号的十进制整数形式输出。 通用 ※ ※ a b 97 98

A B 例3.7 大小写字母的转换。 main() {char c1,c2; c1='a'; c2='b'; c1=c1-32; 掌握 例3.7 大小写字母的转换。 main() {char c1,c2; c1='a'; c2='b'; c1=c1-32; c2=c2-32; printf("%c %c",c1,c2); } A B

如: “CHINA”, ”a”,“how do you do.”,”123.45” 3.5.4 字符串常量 字符串常量是一对双引号括起来的字符序列。 “a” ‘a’ ? × = “a”是字符串常量 ‘a’是字符常量 a \0 a

√ × × char c; c=“CHINA" c="a"; 考考你 下面3个赋值语句中哪些是对的?为什么? 2.必须使用字符数组,数组中每一个元素存放一个字符。   

? × 3.6 变量赋初值 1.允许在定义变量的同时使变量初始化 3.同种类型的可以合并定义 2.部分赋初值 3.6 变量赋初值 1.允许在定义变量的同时使变量初始化 2.部分赋初值 3.同种类型的可以合并定义 int a=3,b=3,c=3; int a,b,c=5; int a=3;   float f=3.56;  char c='a'; ? int a=b=c=3; ×

3.7 各类数值型数据间的混合运算 转换规则 纵向的箭头表示数据转换的方向 横向向左的箭头表示必定的转换 图3.10

10 + ‘a’ + i * f - d / e 107 + i * f - d / e 107 + 6.0 - d / e 假设i是int变量,值为3,f是float变量,值为2.0,d是double变量,值为4.0,e为long型,值为8 优先级相同 10 + ‘a’ + i * f - d / e ①算10+‘a’:把‘a’转换成int为97,再加10,等于107 *优先级高于+,- 107 + i * f - d / e ②算i*f:把i和f都转换成double,然后相乘得6.0 +和-优先级相同 107 + 6.0 - d / e ③算107+6.0:把107转换成double,和为113.0 /优先级高于- 113.0 - d / e ④算d/e:把e转换成double,商为0.5 113.0 - 0.5 ⑤把113.0 转换成double,差为112.5

3.8 算术运算符和算术表达式 1.算术运算符 (+ - * / %) 2.关系运算符 (> < >= <= = = !=) 3.8 算术运算符和算术表达式 1.算术运算符 (+ - * / %) 2.关系运算符 (> < >= <= = = !=) 3.逻辑运算符 (! && ||) 4.位运算符 (<< >> ~ & ∧ |) 5.赋值运算符 (=及其扩展赋值运算符) 6.条件运算符 (? :) 7.逗号运算符 (,) 8.指针运算符 (*和&) 9.求字节数运算符 (s i z e o f) 10.强制类型转换运算符 ( (类型) ) 11.分量运算符 (. ->) 12.下标运算符 ([ ]) 13.其他 (如函数调用运算符())

3.8.2 算术运算符和算术表达式 1. 基本的算术运算符 *不能写成× 如3+5、+3 +:加法运算符 或正值运算符 如5-2、-3 3.8.2 算术运算符和算术表达式 1. 基本的算术运算符 如3+5、+3 +:加法运算符 或正值运算符 -:减法运算符 或负值运算符 *:乘法运算符 /:除法运算符 %:模运算符 或求余运算符 如5-2、-3 如3*5 *不能写成× 如5/3=1, 5/3的结果可能是-1,也可能是-2 大部分是“向零取整” %两侧均应为整型数据 如7%4的值为3

2.如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。  2.算术表达式和运算符的优先级与结合性 优先级: 1.先按运算符的优先级别高低次序执行 2.如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。 运算对象 运算符 常量 变量 函数 + - * / 结合性: 1.左结合性:即运算对象先与左面的运算符结合 2.右结合性:有些运算符的结合方向为“自右至左”. 算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合c语法规则的式子.例如:a*b/c-1.5+'a'

3.强制类型转换运算符 两种类型转换 若x为float型,则 “x%3”不合法,必须用:“(int)x%3” 如3+6.5 自动类型转换

先将x与y相加,然后将他们的和转换成整型 表达式应该用括号括起来 一般形式: (类型名)(表达式) (int)(x+y) 先将x与y相加,然后将他们的和转换成整型 (int)x+y 只将x转换成整型,然后与y相加 原来是这样!

在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化 例3.8强制类型转换。 main() {float x; int i; x=3.6; i=(int)x; printf("x=%f,i=%d“,x,i); } 在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化 x=3.600000, i=3

4.自增、自减运算符 自增(减)运算符常用于: ++ 1.循环语句中,使循环变量自动加1或减1。 2.指针变量,使指针指向下一个地址。 -- ++i 先使i的值加1,然后再使用i 自增(减)运算符常用于: 1.循环语句中,使循环变量自动加1或减1。 2.指针变量,使指针指向下一个地址。 自增运算符 ++ i++ 先使用i,然后再使i的值加1 --i 先使i的值减1,然后再使用i 自减运算符 -- i-- 先使用i,然后再使i的值减1

不合法 i=3; printf("%d",++i); i=3; printf("%d", i ++); i=3; j=++i; 5++ (a+b)++ i=3; printf("%d",++i); 不合法 4 i=3; printf("%d", i ++); 自增运算符(++)和自减运算符(--),只能用于变量,而不能用于常量或表达式, ++和--的优先级:第2级。 ++和--的结合方向是“自右至左”。 3 i=3; j=++i; printf("%d",j); 4 i=3; j= i++; printf(“%d”,j); 3

3.9 赋值运算符和赋值表达式 赋值运算符就是“=” 作用是执行一次赋值操作 优先级:第14级 结合性:右结合性 如a=3 a=3+c 3.9 赋值运算符和赋值表达式 1.赋值运算符 赋值运算符就是“=” 作用是执行一次赋值操作 优先级:第14级 结合性:右结合性 如a=3 a=3+c

2.类型转换的赋值规则 实质:按存储单元中的存储形式直接传送。 数值不变,以浮点数形式存储到变量中 单精度 整 型 舍弃实数的小数部分 整 型 舍弃实数的小数部分 数值不变有效值位数扩展到16位 截取前7位有效数字 字符的8位放到整型变量的低8位 将低8位放到字符变量中,(截断) 高8位补零 符号扩展 无符号 有符号 双精度 字 符 型

int i; i=3.56; printf(" i= %d",i); i=3 main() {unsigned a; int b=-1; 例 把浮点型传送给整型变量。 int i; i=3.56; printf(" i= %d",i); i=3 例3.9有符号数据传送给无符号变量。  main() {unsigned a; int b=-1; a=b; printf("%u",a); } 65535

C语言规定可以使用10种复合赋值运算符。即: +=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|= 3. 复合的赋值运算符 C语言规定可以使用10种复合赋值运算符。即: +=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|= 例如: a+=3 等价于 a=a+3 x*=y+3 等价于 x=x*(y+3) x%=3 等价于 x=x%3 ① x %= y+3 ② x %= (y+3) ③ x = x %(y+3) (不要错写成x=x%y+3)

赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子 。 a=b=c=5 a=5+(c=6) a=(b=4)+(c=6)  4. 赋值表达式 赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子 。 a=(b=10)/(c=2) printf(“%d”,a=b); 一般形式为: <变量><赋值运算符><表达式> 如果a的初值是12,a+=a-=a*a 运算后a的值是多少? 求解的过程是:将赋值运算符右侧的“表达式”的值赋给左侧的变量。

3.10 逗号运算符和逗号表达式 如: 3+5,6+8 (a=3*5,a*4),a+5 1.逗号运算符,又称为“顺序求值运算符” 3.10 逗号运算符和逗号表达式 如:    3+5,6+8 1.逗号运算符,又称为“顺序求值运算符” 2.逗号运算符是所有运算符中级别最低的 3.用来将两个表达式连接起来 ① x=(a=3,6*3) ② x=a=3,6*a x值是多少?表达式值是多少? 逗号表达式的一般形式:表达式1,表达式2 逗号表达式的扩展形式: 表达式1,表达式2,表达式3……表达式n (a=3*5,a*4),a+5 运算后a的值是多少?表达式的值是多少? 求解的过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。

注意:并不是任何地方出现的逗号都是作为逗号运算符。 例如: printf("%d,%d,%d",a,b,c);  printf("%d,%d,%d",(a,b,c),b,c); 逗号运算符

一分耕耘,一分收获!