【C语言探索之旅】 第一部分第五课:运算那点事

内容简介

1、课程大纲

2、第一部分第五课:运算那点事

3、第一部分第六课预告:条件表达式

课程大纲

我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案。还会带大家用C语言编写三个游戏。

C语言编程基础知识

  • 什么是编程?
  • 工欲善其事,必先利其器
  • 你的第一个程序
  • 变量的世界
  • 运算那点事
  • 条件表达式
  • 循环语句
  • 实战:第一个C语言小游戏
  • 函数
  • 练习题
  • 习作:完善第一个C语言小游戏

C语言高级技术

  • 模块化编程
  • 进击的指针,C语言王牌
  • 数组
  • 字符串
  • 预处理
  • 创建你自己的变量类型
  • 文件读写
  • 动态分配
  • 实战:“悬挂小人”游戏
  • 安全的文本输入
  • 练习题
  • 习作:用自己的语言解释指针

用基于C语言的SDL库开发2D游戏

  • 安装SDL
  • 创建窗口和画布
  • 显示图像
  • 事件处理
  • 实战:“超级玛丽推箱子”游戏
  • 掌握时间的使用
  • 用SDL_ttf编辑文字
  • 用FMOD控制声音
  • 实战:可视化的声音谱线
  • 练习题

数据结构

  • 链表
  • 堆,栈和队列
  • 哈希表
  • 练习题

第一部分第五课:运算那点事

《变量的世界》这一课分了三章,小编有点对不住大家。因为一个人,又要上班,所以时间不多。

不过又到周末了,可以有比较多的时间来编辑文章。

今天一起来学习C语言(对大多数编程语言也类似)中的运算。

之前的课中,我们已经说过:电脑是一台“笨笨”的机器,只会做计算。不管你是用电脑来听音乐,还是用电脑来看电影,玩游戏,其实电脑只是在做运算。不然怎么叫“计算机”呢?

这一课我们一起来学习电脑能实现的大多数运算。我们会继续使用我们上一课学到的变量的知识。其实,就是对变量做加,减,乘,除,取模,等等各种操作。

即使你对数学不感兴趣,这一课也是必不可少的。硬着头皮上吧。

基础运算

说到基础运算,无外乎

取模 (如果你是第一次听说,不用担心,我们后面会解释)

其实你的电脑也只知道做这些基础运算,如果你要它做更复杂的运算(平方,乘方,对数等),那你需要编程才行,就是说你需要向电脑解释怎么做。但是,很幸运的是,在这一课中我们会看到其实C语言已经设计好了数学库(关于库的知识,请看以前的课程。简单地说就是已经编写好的,可以供你的程序调用的各种变量和函数的集合),你只要用专家定义好的库里面的内容就好了。不需要自己重复“造轮子”。

一开始,我们从加法开始看吧。

为了在C语言中做加法,我们要用到 + 号,不开玩笑,就是这么简单。

你要把加法的结果放到一个变量里面。我们就来创建一个整数类型的变量,取名叫“result” (英语 “结果” 的意思)。

int result = 0;

result = 4 + 6;

不必是专业数学家,也可以猜想到程序运行后result的值会变为10,我们用printf函数来输出结果:

printf("4 + 6 =  %d", result);

运行程序,显示:

4 + 6 = 10

看吧,加法就是这么简单,一点也不任性。

对于其他的运算类型,也是同样的原理。只有运算符不同,见下表:


运算


符号


加法


+


减法


-


乘法


*


除法


/


取模


%

如果你曾经使用过电脑上的计算器,你肯定知道这些符号。除了最后两个(除和取模),其他应该很熟悉。我们就来说说最后两个符号。

除法

当没有余数时,除法运行得好好的。比如,6 / 3 等于 2,你的电脑给了你正确的答案。到这里为止还没有问题。

但是,我们假如让电脑做 5 / 2,照理结果应该是 2.5,但是,来看看我们的程序:

int result = 0;

result = 5 / 2;

printf ("5 / 2 = %d", result);

运行程序,显示:

5 / 2 = 2

我们让电脑计算 5 / 2,期待的结果是 2.5,但是实际上电脑却给出了 2。这不是很二嘛...亲爱的电脑,你怎么可以这样对我。

其实,内有蹊跷。难道我们的电脑真的在这点上这么蠢笨吗?

事实上,当电脑看到数字5和2时,它会做一个整数之间的除法(也叫做《欧几里得除法》)。就是说它会把结果截取一段,只留下整数部分(这里是2)。

你也许会说:啊,我知道了,都是因为result这个变量是整数嘛。如果result声明为double类型的浮点数,那它应该可以储存带小数点的数啦。

其实不是,这不是原因。假如你把result声明为double类型,做

result = 5 / 2,你还是会得到2。事实上,这是因为运算符两边的数是整数,所以电脑会做整数之间的除法。

当然,也是可以让电脑输出你想要的结果的,怎么办呢?看下面程序:

double result = 0;

result = 5.0 / 2.0;

printf ("5 / 2 = %f", result);

运行,显示:

5 / 2 = 2.500000

看到了吗,如果要你的电脑显示正确结果,还需要你把运算符两边的数写成 5.0和2.0(同样是5和2,但是电脑却认为这两个是浮点数,因此它就做浮点数的除法),怎么样,电脑任性不?

这个整数除法的特性很重要。所以得记住,对于电脑来说:

  • 5 / 2 = 2
  • 10 / 3 = 3
  • 4 / 5 = 0

有点令人吃惊,不是么?但是这就是电脑做整数运算的方式。

如果你想要得到浮点数的结果,需要运算的数本身是浮点数(提一下,其实不需要两个数都是浮点数,一个是浮点数就够了,电脑会自动把另一个也认为是浮点数来做运算):

  • 5.0 / 2.0 = 2.5
  • 10 / 3.0 = 3.33333
  • 4.0 / 5 = 0.8

事实上,在做整数除法时,比如 5 / 2,你的电脑会回答下面问题:“5里面有多少个2?”,答案是两个。同样的,“10里面有多少个3呢”,答案是三个。

然后你又会问了,我们怎么才能获取到除法剩下的数(余数)呢?

这就要轮到取模运算出场了。

取模

取模运算是获得除法的余数的一种数学运算。可能相比 加、减、乘、除这基本的四则运算来说,它没有那么被人熟知,但对电脑来说,取模是基本的运算之一。很有可能是为了解决上面提到的整数除法的难题。

上面表格里列出来了,取模的符号是 %

以下列出一些取模运算的例子:

  • 5 % 2 = 1
  • 14 % 3 = 2
  • 4 % 2 = 0

取模运算 5 % 2 是除法运算 5 / 2的余数,所以是 1。电脑计算 5 = 2 * 2 + 1,所以取模运算就得出1为结果。

同样地, 14 = 3 * 4 + 2,所以余数为2。

4 = 2 * 2,所以余数为0。

好了,我宣布一个好消息:我们已经学了所有的基础运算了,数学课下课了。

变量之间的运算

诶,怎么数学老师刚走,又来了数学教授啊?没办法,电脑又名计算机,肯定要跟数学打点交道的嘛。幸亏来的不是“叫兽”。

既然我们在上面一节中已经学习了基础的5种运算,那现在可以来看看变量之间的运算咯。

事实上,变量之间的运算也是同理。

result = number1 + number2;

上面这一行代码对number1和number2这两个变量做加法运算,并且把结果储存到result这个变量里。

现在我们的学习越来越有意思了。其实你现在已经可以实现一个迷你的计算器的功能了,不要怀疑自己,你可以的。

想象一个程序,请求用户输入两个数,这两个数,你将其储存在变量里。

然后,你对这两个变量做加法,并且把结果储存在另一个变量里。接下来,你就只需要把计算的结果显示在屏幕上就好了,让用户看看电脑的本领,很多人做加法可没有这么快速呢!

试着自己编写以上程序,很简单的,也可以给你练手。

当然了,我们还是把代码写上:

#include <stdio.h>

int main(int argc, char *argv[])

{

int result = 0, number1 = 0, number2 = 0;

// 请求用户输入number1和number2的值:

printf("请输入数字1 : ");

scanf("%d", &number1);

printf("请输入数字2 : ");

scanf("%d", &number2);

// 做运算:

result = number1 + number2;

// 把运算结果显示在屏幕上 :

printf ("%d + %d = %d\n", number1, number2, result);

return 0;

}

运行,显示:

请输入数字1 : 289

请输入数字2 : 376

289 + 376 = 665

可能你还没意识到:这是我们第一个有点意思的程序。我们的程序请求用户输入两个数,然后做加法,再把结果输出到屏幕上,很棒吧!

请你自己也试着用其他四个基础运算符来写程序,看看结果如何。

缩写

之前我们保证过,不会再有新的运算形式出现了。确实如此,我们已经知道了所有的基础运算:加、减、乘、除、取模。用这些基础运算我们可以做所有事情。不需要其他的运算了。我知道这很难令人相信。你会说难道一个很复杂的3D游戏最终也是由加、减、乘、除等构成的?是的,确实如此。

虽然如此,但是在C语言里我们还可以进行运算的缩写。

为什么要缩写呢?因为很多时候我们做的运算都是重复的。下面你就会看到缩写的好处了。

自增运算

你会发现你在编程中经常要对一个变量进行+1操作。

假设你的变量名字是number,你知道怎么对它进行+1操作吗?是这样做的:

number = number + 1;

上面的语句做了什么呢?

首先我们做运算 number + 1,然后我们把运算结果储存到变量 number (它自己)中。

因此,假如我们的变量值是4,运算后变成5了,假如它的值是8,那会变成9,依此类推。

这个运算是重复的。要知道,计算机科学家都是很懒的人,他们可不希望输入两遍number(确实也挺累人的)。

于是他们发明了一个缩写形式,叫做自增运算。它的结果和+1操作是一样的:

number++;

这一行代码,就是用了自增运算符 ++,是不是比刚才那句 number = number + 1简单了?它意味着“对number做+1运算”。

敏锐的读者可能想到了,在编程语言C++中的++符号其实正是自增运算符的意思,我以前也不太理解为什么不是C+,而是C++。原来计算机科学家跟大家开了一个很有意味的玩笑:C++意味着对C做+1操作。当然了,事实上,C++只是用不同的方式来编程,并不是说C++比C更优秀,只是不同而已。

自减运算

知道了自加运算的原理,自减运算应该不难理解吧:就是对变量进行-1运算。

number--;

其他的缩写形式

同理,其他还有好几种运算的缩写形式。比如 number = number * 2; 可以写成 number *= 2;

看以下代码:

int number = 2;

number += 4;  // number变为6

number -= 3;   // number变为3

number *= 5;   // number变为15

number /= 3;   // number变为5

number %= 3; // number变为2 (因为 5 = 1 * 3 + 2)

数学库

在C语言中,我们有一些称之为“标准库”的东西,就是那些很实用的库。我们一般会经常使用那些基础库。

给大家复习一下:库就是指已经定义好的函数和变量的集合。这些函数由前人写成,可以避免我们“重复造轮子”。

我们已经使用过 stdio.h 库中的printf和scanf这两个函数了。

其实还有很多其他很实用的库,其中就有一个叫 math.h,里面包含了数学相关的函数。

实际上,光是加、减、乘、除、取模是不够的。虽然底层都是这五个运算,但是很多时候我们需要做复杂的运算形式,就需要调用库或者自己写函数了。因为电脑并没办法理解除了+,-,*,/,%之外的运算符,比如你如果要电脑做乘方,输入 5 ^ 2,电脑完全不理解什么意思,除非你调用数学库里已经定义好的做乘方的函数。

调用数学库很简单,

#include <math.h>

只要这一行代码,接下来你的程序就可以用里面定义的所有函数了。

我们介绍其中几个最常用的吧。

fabs

这个函数返回绝对值:

如果你传给这个函数 -53,它会返回53

如果你传给这个函数53,它会返回53

double absolut = 0, number = -29;

absolut = fabs(number); // absolut的值变为29

ceil

这个函数返回给出的浮点数后面紧接的整数。这是一种舍入的方式。ceil函数总是舍入紧邻的比参数大的整数。

double above = 0, number = 34.81;

above = ceil(number); // above的值变为35

floor

这个函数与ceil的作用相对,返回给出的浮点数前面紧接的整数。

double below = 0, number = 45.63;

below = floor(number); // below的值变为45

pow

这个函数计算数字的乘方。你要给它两个参数:底数和指数。

double result = 0, number = 2;

result = pow(number, 4); // result的值变为16 (2 ^ 4 = 16)

sqrt

这个函数返回参数的平方根。返回值是double类型

double result = 0, number = 100;

result = sqrt(number); // result的值变为10

sin, cos, tan

这三个函数是计算正弦,余弦,正切的值。

asin, acos, atan

这三个函数是计算反正弦,反余弦,反正切的值。

exp

这个函数是特殊的乘方形式,返回以e(自然对数的底数,近似等于2.7182)为底数的指数运算的值

log

这个函数返回以e为底的对数值(我们学数学时也写成 ln)

log10

这个函数返回以10为底的对数值

总结

  1. 电脑只知道计算
  2. 电脑会的运算类型很基本:加、减、乘、除、取模(取模就是做除法后剩下的部分)
  3. 自加是将变量加一的运算,写成 variable++
  4. 自减是将变量减一的运算,写成 variable--
  5. 为了增加电脑能知道的运算形式,需要载入数学库(#include <math.h>)
  6. 数学库里有高级一些的函数,例如 乘方,平方根,舍入,指数,对数,等

第一部分第六课预告:条件表达式

今天的课就到这里,一起加油咯。

下一课我们学习第六课,来认识条件表达式吧。

程序员联盟
微信公众号*您若觉得本文不错,请点击画面右上角《···》按钮“分享到朋友圈”或“发送给朋友”或“收藏”

*新朋友请关注「程序员联盟」微信搜公众号
 ProgrammerLeague

小编的微信号:frogoscar

小编的QQ号:  379641629

小编的邮箱:    [email protected]

(微信和邮箱最常用)

PS: 有朋友反映看手机端的文章太累,其实是可以用浏览器网页来看的

方法1. 点击画面右上角的《···》按钮,然后选择“复制链接”,再把链接黏贴到你的浏览器里面或用邮件发送给自己,就可以在电脑的浏览器里打开了

方法2. 头条网www.toutiao.com,搜索我的自媒体“程序员联盟”,里面有所有文章,也可以直接进这个链接:http://www.toutiao.com/m3750422747/

新朋友如何查看所有文章:

点击“查看公众号”,再点击“查看历史消息”

“程序员联盟”公众号专为程序员,App设计师,各位喜爱编程和热爱分享的小伙伴们推送各样编程相关知识,优秀软件推荐,业界动态等。搜索ProgrammerLeague
加关注~

持续关注 程序员联盟 微信公众号,更多有趣,有料,有亮点的内容等着你哦!

时间: 2024-10-12 14:52:01

【C语言探索之旅】 第一部分第五课:运算那点事的相关文章

【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!

内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型

【C语言探索之旅】 第二部分第九课: 实战&quot;悬挂小人&quot;游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建

【C语言探索之旅】 第二部分第九课: 实战[悬挂小人]游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建

【C语言探索之旅】 第一部分第九课:函数

内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写 动

C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 基本运算 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量

【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做了介绍,也带大家配置了SDL的开发环境.请大家按照上一课的步骤创建一个SDL工程,能够初步运行. 如果遇到问题,可以百度,Google相关平台SDL的配置.或者联系小编. 当然了,有些朋友可能会说开发C语言游戏还可以用GTK+这个库,但是个人认为GTK+没有SDL那么适合开发游戏,其创建图形界面的能

【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见

内容简介 1.第一部分第五课:Unity桌面,人生若只如初见 2.第一部分第六课预告:Linux如何安装在虚拟机中 Unity桌面,人生若只如初见 不容易啊,经过了前几课的学习,我们认识了Linux是什么,以及如何安装Linux系统(我们以Ubuntu这个Linux发行版为以后的演示系统),我们也在上一课终于把Ubuntu安装好了. "很不错,掌声给自己". 安装Ubuntu遇到什么问题,可以在我们的QQ群和微信群提问,也可以私信小编,QQ.微信.邮件都行.联系方式在下面. Linux

【C++探索之旅】第一部分第五课:简易计算器

内容简介 1.第一部分第五课:简易计算器 2.第一部分第六课预告:控制流程,随心所至 简易计算器 上一课<[C++探索之旅]第一部分第四课:内存,变量和引用>中,我们已经学习了挺重要的内存的概念,变量的知识,对引用这个C++中常用的技术也有了初步的了解. 我们在上一课开头处用一个小小计算器的存储技术引出内存的概念.其实我们的电脑兄也是一个计算器,只不过高端大气上档次了很多,不然怎么会被称为 computer呢?英语中compute这个词,正是<计算>的意思,而加上r就构成了名词.c

【C语言探索之旅】 第二部分第一课:模块化编程

内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量