C语言探索之旅 | 第一部分第七课:运算那点事

做者 谢恩铭,公众号「程序员联盟」。 转载请注明出处。 原文:www.jianshu.com/p/7bc4493eb…git

《C语言探索之旅》全系列程序员

内容简介


  1. 前言
  2. 基础运算
  3. 变量之间的运算
  4. 缩写
  5. 数学库
  6. 总结
  7. 第一部分第八课预告

1. 前言


上一课是 C语言探索之旅 | 第一部分第六课:变量的世界(三),显示变量内容github

今天,咱们一块儿来学习 C语言(对大多数编程语言也相似)中的运算。编程

以前的课中,咱们已经说过:电脑是一台“笨笨”的机器,只会作计算。bash

无论你是用电脑来听音乐,仍是用电脑来看电影,玩游戏,其实电脑只是在作运算。否则怎么叫“计算机”呢?编程语言

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

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

2. 基础运算


说到基础运算,无外乎:ui

  • 取模 (若是你是第一次据说,不用担忧,咱们后面会解释)

其实你的电脑也只知道作这些基础运算,若是你要它作更复杂的运算(平方,乘方,对数,等),那你须要编程才行,就是说你须要向电脑解释怎么作。spa

可是,很幸运的是,在这一课中咱们会看到其实 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。

好了,我宣布一个好消息:“咱们已经学了全部的基础运算了。数学课下课了~”

3. 变量之间的运算


诶,变量之间的运算?

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

既然咱们在上面一节中已经学习了基础的 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
复制代码

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

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

4. 缩写


以前咱们保证过,不会再有新的运算形式出现了。确实如此,咱们已经知道了全部的基础运算:加、减、乘、除、取模。用这些基础运算咱们能够作全部事情。不须要其余的运算了。

我知道这很难使人相信。你会说难道一个很复杂的 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++ 比 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)
复制代码

5. 数学库


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

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

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

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

实际上,光是加、减、乘、除、取模是不够的。虽然底层都是这五个运算,可是不少时候咱们须要作复杂的运算形式,就须要调用库或者本身写函数了。

由于电脑并没办法理解除了 +,-,*,/,% 以外的运算符,好比你若是要电脑作乘方,输入 5 ^ 2,电脑彻底不理解什么意思,除非你调用数学库里已经定义好的作乘方的函数。

调用数学库很简单,

#include <math.h>
复制代码

只要用这一行代码,接下来你的程序就能够用里面定义的全部函数了。

咱们介绍其中几个最经常使用的吧。

fabs


这个函数返回绝对值:

  • 若是你传给这个函数 -53,它会返回 53 。
  • 若是你传给这个函数 53,它会返回 53 。
double absolute = 0, number = -29;
absolute = fabs(number);   // absolute 的值变为 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 为底的对数值。

6. 总结


  1. 电脑只知道计算。

  2. 电脑会的运算类型很基本:加、减、乘、除、取模(取模就是作除法后剩下的部分)。

  3. 自加是将变量加一的运算,写成 variable++ 。

  4. 自减是将变量减一的运算,写成 variable-- 。

  5. 为了增长电脑能知道的运算形式,须要载入数学库(#include <math.h>)。

  6. 数学库里有更高级的函数,例如 乘方,平方根,舍入,指数,对数,等。

7. 第一部分第八课预告


今天的课就到这里,一块儿加油吧!

下一课:C语言探索之旅 | 第一部分第八课:条件表达式


我是 谢恩铭,公众号「程序员联盟」运营者,慕课网精英讲师 Oscar 老师,终生学习者。 热爱生活,喜欢游泳,略懂烹饪。 人生格言:「向着标杆直跑」

相关文章
相关标签/搜索