c#发展

注册

 

发新话题 回复该主题

C语言入门第六课C语言里的计算 [复制链接]

1#
儿童治疗白癜风 http://baidianfeng.39.net/a_zhiliao/140529/4397241.html

上一节中,我们详细学习了printf和scanf两个基础的输入输出函数,并通过这两个函数实现了一个“一次性”的加法计算器程序,课后让同学们自行思考和实现简单的“一次性”四则运算计算器程序,不知道你有没有去做这样的尝试呢?如果你去尝试了就会发现,四则运算中,除法的处理比较特殊,尤其是不能整除的情况下,其计算结果是不是与我们常识里的计算结果有所不同?这里我们先“卖个关子“,在今天课程的最后,我再为大家解答一下这个疑惑。

运算符

如我们之前有提到的,在C语言中,四则运算加减乘除对应的符号叫作运算符。只有四则运算显然无法满足我们对于各种复杂的计算的要求,我们需要的计算方式有很多种,除了四则运算以外,还有乘方运算、开方运算、对数运算、阶乘运算等,是不是每一种运算都有对应的运算符呢?并不是的,在我们常见的运算中,C语言就只支持四则运算,但并不是只有四则运算这几种运算符,由于计算机中还有很多逻辑运算(与、或、非等)以及其他编程语言中常用的运算方式,故而C语言还有其他很多运算符,我们列举一些经常会用到的如下图:

除了4则运算,我们将其他的运算符做一些简要的说明。

++:自增运算符,需要与变量联合起来使用。假设我们声明一个变量inta=0;那么这个自增运算符可以用作:a++;或者是++a;二者的一般意义皆为将变量a对应的值增加1并保存在a当中,即程序如上述定义时,a的值会从0变成1。

--:自减运算符,需要与变量联合起来使用。与自增运算符相似,假设我们声明一个变量inta=1;那么这个自增运算符可以用作:a--;或者是--a;二者的一般意义皆为将变量a对应的值减少1并保存在a当中,即程序如上述定义时,a的值会从1变成0。

%:取模运算符,变量a%b代表的意义是a除以b的余数。例如7%3=1,3%4=3。这个运算符可以用来在某种情况下限制数字的大小。举例来说,我们需要一个不大于的随机整数,那么我们可以用随机数产生的函数生成一个随机数,但随机数的大小范围远超,那么我们把随机的结果%上,就一定会得到一个不大于的整数。

sizeof:这是一个特殊的运算符,使用时类似一个函数的使用,即使用时形如:sizeof(int);我们注意到小括号中的内容不是普通的变量,而是变量类型标识符,所以这个运算符的作用是计算一个变量或者一个变量类型的占用空间大小。

我们注意到对于自增和自减运算符,二者都是既可以放在变量的前面,也可以放在变量的后面,实际上这两种情况并不完全相同。相同的部分是无论是放在前面还是放在后面,在语句执行完成后,变量的结果是一致的;不同的部分是变量的“变化时机“有所不同,运算符放在前面的情况下,变量先自增或自减,然后才会被使用;运算符放在后面时,变量先被使用,而后再自增或自减。听起来有些绕,我们举个例子。请看下面的代码:

直觉上我们可能会认为当语句都执行完时,new1和new2的值都是2,old1和old2的值也是2,但实际上并不是。其中,old1和old2确实都是2,正如我们所说,这是运算符在变量前后的相同点;new1的值是2,因为实际执行过程中,old1会首先自增变成2,然后才赋值给new1;new2的值是1,因为old2的值会首先赋值给new2,然后再自增变成2。你明白了吗?合理利用这个差异,可以在以后你是用它们的时候使你的代码更加简洁。

优先级

在我们常识中,一个算式中,在没有括号的情况下,先算乘除,后算加减,在编程语言中也是如此。考虑到编程语言中不止有四则运算,所以除四则运算外,其他运算符也是需要有优先级的,上面的自增和自减运算符的优先级就要高于四则运算。正如我们在学习四则运算时所接收到的信息一样,在一个算式中进行的运算比较多时,依靠自然的运算优先级计算结果有时候不是很可靠(与编译器相关),另外也不是很容易让人理解,所以这里强烈建议在编码时如果需要一个较长的算式时,请按照希望的计算顺序加上括号!

最后,我们来解答一下除法不能整除时,为什么会计算结果与平时不同的情况。考虑下面的代码:

实际结果会输出什么?result的结果是整数3,real是小数0.33……。所以实际上请大家记住,在C语言中的运算,整数与整数的运算结果一定是整数,小数部分会直接丢弃,没有四舍五入。只有浮点数参与运算时且保存结果的变量也是浮点数时,才能保存浮点数的结果,切记切记!

好了,今天的课后,希望大家能够完善一下自己的小程序,尤其是除法,最好是可以显示商和余数哦!

分享 转发
TOP
发新话题 回复该主题