当前课程知识点:C语言程序设计 >  第3章 基本数据类型、运算符与表达式 >  3.4 如何进行算术运算 >  如何进行算术运算

返回《C语言程序设计》慕课在线视频课程列表

如何进行算术运算在线视频

下一节:赋值运算符和逗号运算符

返回《C语言程序设计》慕课在线视频列表

如何进行算术运算课程教案、知识点、字幕

同学们大家好

在前面的课程中我们介绍了C语言中的基本数据类型

同时我们也了解这些数据类型在计算机中是以

常量和变量的形式表现出来的

在日常生活中可以用C语言编写程序

来解决实际问题

如在超市购物计算商品的价格

旅游前制定行程计划和花销预算等

所以说所有的程序都需要对数据进行加工处理

否则程序就没有意义

这时我们就需要使用运算符对数据进行处理

这节课我们来讲解C语言的运算符

和表达式C语言的运算符极其丰富

根据运算符的性质分类

C语言的运算符可分为算术运算符

关系运算符

逻辑运算符

赋值运算符

条件运算等

我们来看这样一个表达式

12+3*2-6/3 按照先乘除后加减

同级从左至右的原则

这个表达式的执行顺序是先执行3乘2

再执行6除3

然后依次从左到右完成12+6-2

最后得到结果16

在C语言要正确使用运算符

必须清楚这种运算符优先级和结合性

C语言中不同的运算符具有不同的优先级

在计算表达式的值时

先计算优先级比较高的运算符

如果表达式中运算符的优先级相同

还要按照运算符的结合方向确定计算的先后次序

通常单目运算符比双目运算符的优先级高

下面我们先介绍C语言中的算术运算符

算术表达式

C语言提供的算数运算符以及

优先级和结合性如下表所示

需要说明是

1.在C语言中用*代替数学上的×

用斜杠代替数学上的÷

2.在C语言中如果两个操作数均为整数相除

结果为整数

下面我们来看几个例子

编写简单程序进行5/3的运算

编译运行后结果值为1

舍去小数部分

那么如果除数或被除数中有一个为负数

结果会如何呢

依据不同的编译系统结果有所不同

比如将上例中的5改成-5/3

有的系统中得到的结果为-1

在有的系统中则得到结果为-2

在VC中采取向零取整的方法

也就是说取整后向零靠拢

现在我们来运行程序

输出结果为-1

上面我们看到的都是整型数据的运算

实型数据是如何进行除法运算的呢

在除法运算中如果两个操作数中有一个是浮点数

完成的是浮点数除法

编程实现1.0/2的运算

编译运行后结果值为0.500000

缺省默认6位小数

3

求余运算符要求参加运算的运算对象(即操作数)为整型数据

结果也是整型数据

现在我们通过下面的程序来学习求余运算符

编译运行后的结果如图所示

我们分别对变量X进行不同的赋值

分析它的结果

这时我们发现

当被除数为负数时

得到的余数的结果也为负数

当被除数为正数时

得到的余数为正数

由此我们等到一个结论

求余运算的正负取舍和被除数符号相同

用运算符和括号将运算对象如常量

变量和函数等连接起来的

符合C语言语法规则的式子

就称之为表达式

表达式中的运算符都是算术运算符的

表达式称之为算术表达式

3 + 5 * 8- (x + y) / 2 - 1等

我们可以看到在一个表达式可以包含2个或更多算术运算符

在表达式中可以使用括号改变运算顺序

如表达式( 10 – ( 3 + 1 ) ) * 2 =

在这个表达式中先执行最内层括号中的运算3+1

在再执行外层括号中的运算10-(3+1)

最后执行括号外的运算

得到结果12

在C语言中除了所讲的算术运算符外

还提供了两个用于算术运算的单目运算符自增自减

自增自减运算符的作用是使变量值加1或减1

首先我们来看运算符的形式

用两个连续的++或--表示

优先级与负号运算符同属于2级单目运算符

结合方向自右向左

自增自减运算符有以下两种用法

前置运算

运算符放在变量之前如

++i

--i

先执行自加或自减

再取i值参与其他运算

后置运算

运算符放在变量之后如

j++

j--

先取j的值参与其他运算

再执行自加或自减

下面我们编程验证

给变量j

赋初值2

在第4行语句中

变量 j首先完成自加

这时j为3

再执行j+1操作

得到最终结果4

在第6行语句中

先取变量j的值3

输出-3

然后j变量做自加操作

这时候的变量j的值为4

在第8行语句中

变量j先自减

然后输出3

这时就的值为 3

在第10行语句中

先取变量j的值3

输出-3

然后j变量做自减操作

这时候的变量j的值为2

使用自增

自减运算符要注意以下几个方面

①自增自减运算符只能用于变量

不能用于常量和表达式

因为++和--蕴含着赋值操作

例如

5++

--

a+b

都是非法的表达式

②负号运算符

++--等优先级相同运算符

当这些运算符连用时

按照从右向左的顺序计算

例如

-i++ 等价于 -(i++)

③在表达式中有多个连续的运算符时

C编译系统在处理时尽可能多的自左而右

将多个运算组成一个运算符

例如

i+++j等价于

(i++)+j

而不是i+(++j)

④在表达式中

连续使同一变量进行自增或自减运算时

很容易出错

所以最好避免这种用法

例如:++i++是非法的

自增自减运算

常用于循环语句中

使循环控制变量加1或减1

以及指针变量中

使指针指向下或向上一个地址

在C程序设计中

为保证良好的程序设计风格

建议在一行语句中

一个变量只能出现一次增1或者减1操作

因为过多的增1和减1运算混合

不仅使程序的可读性差

而且还因为编译器实现的方法不同

导致不同编译器产生不同的运行结果

对于多数C编译器

利用自增自减运算生成的代码

比等价的赋值语句生成的代码运行效率高

但要确保所编写的程序的可读性

不要写别人看不懂的

也不知道系统会怎样执行的程序

正所谓简单就是美

同学们

下次课再见

C语言程序设计课程列表:

第1章 C语言程序设计预备知识

-计算思维与计算机

--计算思维与计算机

--计算思维与计算机

--计算思维和计算机

第2章 C语言程序设计基础

-2.1 程序设计语言的发展及其特点和应用

--程序设计语言的发展及其特点和应用

--程序设计语言的特点及发展

- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤

-- C语言程序的基本结构及编制C语言程序的基本步骤

--C语言程序的结构和编制步骤

第3章 基本数据类型、运算符与表达式

-3.1 C语言的数据类型

--C语言的数据类型

--C语言的数据类型

-3.2 常量

--常量

--常量

-3.3 什么是变量

--什么是变量

--什么是变量

-3.4 如何进行算术运算

--如何进行算术运算

--如何进行算术运算

-3.5 赋值运算符和逗号运算符

--赋值运算符和逗号运算符

--赋值运算符和逗号运算符

-3.6 数据类型转换

--数据类型转换

--数据类型转换

第4章 基本输入输出和顺序程序设计

-4.1 格式化输出printf

--格式化输出printf

--格式化输出

-4.2 格式化输入scanf及字符数据的非格式化输入输出

--格式化输入scanf及字符数据的非格式化输入输出

--格式化输入

第5章 选择结构程序设计

-5.1 关系运算符和关系表达式

--关系运算符和关系表达式

--关系运算符和关系表达式

-5.2 逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

-5.3 条件运算符和条件表达式

--条件运算符和条件表达式

--条件运算符和条件表达式

-5.4 if语句

--if语句

--if语句

-5.5 switch语句

--switch语句

--switch语句

第6章 循环结构程序设计

-6.1 while语句

--while语句

--while语句

--do-while语句

-6.2 for语句

--for语句

--for语句

-6.3 循环的嵌套

--循环的嵌套

--循环的嵌套

-6.4 break语句和continue语句

--break语句和continue语句

--break和continue语句

第7章 数组

-7.1 一维数组的定义和引用

--一维数组的定义和引用

--一维数组的定义和引用

-7.2 一维数组的赋值

--一维数组的赋值

--一维数组的赋值

-7.3 二维数组的定义和引用

--二维数组的定义和引用

--二维数组的定义和引用

-7.4 二维数组的赋值

--二维数组的赋值

--二维数组的赋值

-7.5 字符串的本质

--字符串的本质

--字符串的本质

-7.6 字符串操作的常用函数

--字符串操作的常用函数

--字符串常用函数

-7.7 字符串数组

--字符串数组

--字符串数组

第8章 函数

-8.1 函数概述

--函数概述

--函数概述

-8.2 有参函数

--有参函数

--有参函数

-8.3 函数参数的传递方式

--函数参数的传递形式

--函数参数的传递方式

-8.4 变量的作用域和生存期

--变量的作用域和生存期

--变量的作用域和生存期

-8.5 变量的存储类型

--变量的存储类型

--变量的存储类型

-8.6 函数的嵌套和递归调用

--函数的嵌套和递归调用

--函数的嵌套和递归调用

-8.7 函数的作用域与封装

--函数的作用域与封装

--函数的作用域与封装

第9章 指针

-9.1 指针变量的概念(上)

--指针变量的概念(上)

--指针变量的概念(上)

-9.2 指针变量的概念(下)

--指针变量的概念(下)

--指针变量的概念(下)

-9.3 指向一维数组的指针变量

--指向一维数组的指针变量

--指向一维数组的指针变量

-9.4 指向二维数组的指针变量(上)

--指向二维数组的指针变量

--指向二维数组的指针变量(上)

-9.5 指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

-9.6 动态内存分配

--动态内存分配

--动态内存分配

第10章 预处理命令

-10.1 编译预处理

--编译预处理

第11章 复杂数据类型

-11.1 用户自己建立数据类型

--用户自己建立数据类型

--用户自己建立数据类型

-11.2 定义结构体类型变量

--定义结构体类型变量

--定义结构体类型变量

-11.3 结构体变量的引用与初始化

--结构体变量的引用与初始化

-11.4 结构体数组

--结构体数组

--结构体数组

-11.5 指向结构体类型数据的指针

--指向结构体类型数据的指针

--指向结构体类型数据的指针

第12章 文件

-12.1 文件的基本概念和文件指针

--文件的基本概念和文件指针

--文件的基本概念和文件指针

-12,2 文件的打开和关闭

--文件的打开和关闭

--文件的打开和关闭

-12.3 文本文件读写

--文本文件读写

--文本文件读写

-12.4 二进制文件读写

--二进制文件读写

--二进制文件读写

如何进行算术运算笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。