学习C语言的第三天

接着上回内容继续。

在表现上可能不同,但计算机能干的事情归根到底是计算,而最基本的运算是算术运算。最常见运算有赋值运算、算运输、增1和减1运算、类型强制转换、关系运算、逻辑运算和位运算。

我们熟知的加(+)、减(-)、乘(*)、除(/)以及求余(%),就是运算符。在进行算术运算时除运算符外,还应额外有两个操作数。

除法计算时有两种计算形式:第一是11/5=2,这种时整数除法。要求是必须要有两个整数;第二种时11.0/5=2.2,这种事浮点数除法。要求两个运算符中至少有一个是浮点数

求余时返回操作数相除后的余数,而余数这个操作数必须是整数。比如:11%5=1、11%(-5)=1、(-11)%5=-1。上面第二个例子中除数是负,余数需要为正,而最后一个当被除数是负时,余数也要求是负。

算术表达式包括两个或两个以上操作数(运算符),需要根据运算符的优先级来确定运算顺序,不同的优先级从高到低运算,相同优先级时,在二元算数符中为左结合(从左到右)。负号属于一元运算符,是最高级,运算时需从右至左运算;*、%、/属于二元运算符,是较低一级的存在,运算时从左至右运算;+、-是最低级的二元运算符,运算时从左向右运算。圆括号可以强制改变运算顺序,属于最高级存在。

计算并输出一个三位数个位、十位、百位这种问题上,在运算符的使用上可以有多种方式,比如:158这个数,百位:153/100=1;十位:153/10%10=5;个位:158%10=3。以上是我个人推荐的运算方式,当然也可以用其他方式来。

rand()是随机函数,能够生成0—32767之间的随机数。如果希望生成指定范围的随机数,如1-100之间的随机数,可以列这个式子,magic=rand()%100+1.

赋值方式有三种,第一种是简单赋值,即变量=表达式;,注意我这里的“;”有这个就叫赋值表达式语句,没有这个就叫赋值表达式,赋值顺序是由右到左;第二种是多重赋值,即变量1=变量2=表达式;第三种是复合的赋值,即变量X   运算符OP(+、-、*、/、%) = 表达式;,这样的式子可以写成变量X  = 变量X   运算符OP   表达式;,比如:num  =  num + 5;,这里读出num的值 +5 后再赋值给num,这个式子也就可以写成num += 5;。这种简写更直观,执行效率也更高。

a +=a -= a*a,假设这里的a=3,那么要注意这里的计算结果应为-6。如果不知道如何计算也可以留言,我看到会进行解答的。

增1和减1运算符,有四种情况,即++n、--n、n++、n--。其中++和--就是在计算时使参与运算的变量+1或-1。作为前缀时运算要先+或-1最后再取值,即m =  ++n;—> n = n+1;且m = n;作为后缀时运算要先取值,最后再+或-1,即m =  n++;—> m = n;且n = n+1;。

若i=5,则j = ++i-2和j=i++-2的值就分别是j=4,i=6;j=3,i=6。再比如我 int a = 3;printf("%d",-a++); 那最后打印出的值就是-3,但a的值最后是4,也就是可以把这个语句理解成printf("%d",-a);a = a+1;,这里(-a++) 负号和自增作为两个一元运算符优先级应该是从右到左运算,但是虽然是先括起来,但是++作为后缀要求最后算。以上如果还有那里不理解的话可以留言,我看到会进行解答的。

良好的程序设计风格提倡在一行语句中,一个变量只出现一次增1和减1运算。因为不同的编译器实现方法不一样,这样过多会导致不同的编译器运行出的结果不一样。

在程序中直接使用的常数称为幻数。如果幻数使用过多会导致可读性变差,易发生书写错误。且当数需要改变时要修改所有引用它的代码,还可能会遗漏。解决方法是我们可以把幻数定义为常量(宏量)进行宏替换。不过首先需要进行宏定义,即#define  标识符(宏名)  字符串。这个宏定义也就是编译预处理指令,和#include<stdio.h>一样,都是程序编译前需要做的,比如我想给一段程序中所有的兀规定成3.14159,那么就要写成#define  PI  3.14159,注意一般宏名采用全大写字母表示,是为了与变量的名字进行区分,变量通常使用小写来表示。

宏定义是编译预处理指令不是语句,后面不能有“;”,这个替换过程中的替换就称为宏替换,如果加上“;”的话不仅不会改变语句,而且还会在替换的数后面多加一个;,最后计算就会发生错误。

const常量就是const定义的变量,这个不是预处理,在main(){...}里写的时候要加“;”。const与宏常量相比有数据类型,在某些集成化调试工具中可以对const进行调试。

算术运算中相同类型的数据的运算结果类型还是该类型,即11/5=2(整形),反之不同的话就是取值范围较大的那种类型,即11.0/5=11.0/5.0=2.2。

C语言编译器会将所操作数据都转换成占内存字节数最大的操作数的类型,这称之为类型提升。规则是低级可以转向高级,且是自转换。如double>float>int>short>char,其中char—>short—>int和float—>double是必须这样转换的,而int—>unsigned—>long—>double是由低级转向高级的。

转换成占内存字节数高的运算安全,取值范围小的类型赋值给取值范围大的类型是安全的,反之不安全。因为取值范围大的赋值给取值范围小的会由于存不下这么一个数,超出取值范围会发生数值溢出。

从高精度向低精度转换时会因低精度的数据位数比高精度的少,容纳不下高精度的所有信息,就会丢失信息,出现舍入,也称截断。浮点数转为整数会丢失小数部分,这种情况下整数部分精度也会损失,可能因有效数字位数不够而出现精度损失。尾数所占位数决定实数的精度,不同的系统下实数度不同。

把表达式的值转化成任意类型就是类型强转。(类型)表达式   ,这就是类型强转,比如:int x = 10;float y; y = (float)x;那么x=10,y=10.000000,这里面x不会因此变成10.000000,最后还是属于int的整数类型。在强制类型转换时只改变一个变量即可。强转要注意强转是强转一个变量还是强转一个表达式的问题。变量可以强转,但是表达式强转结果是错误的。强转不改变变量原来的类型。

要进行复杂的数学运算,如 对数或开方,就要到常用的标准数学函数,在使用时要用#indule<math.h>这个预处理指令。

以上就是今天的所以C语言学习内容了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值