我的c语言学习记录(蓝桥)————三
基本的算数运算符
常用的算术运算符表:
- x + y:将 x 与 y 相加
- x - y:将 x 与 y 相减
- x * y:将 x 与 y 相乘
- x / y:x 除以 y
- x % y:求 x 除以 y 的余数
注意
- x/y 中,两个实数相除的结果是双精度实数,两个整数相除的结果为整数。如 5/3 的结果为 1,舍去小数部分。
- % 运算符要求参加运算的对象为整数,结果也是整数。如 7%3,结果为 1,除了%以外的运算符的操作数都可以是任何算数类型。
下面我们举例说明上注意事项。
创建 5-1.c 文件并输入以下代码:
# include<stdio.h>
int main(){
int a=22;
int b=3;
printf("%d\n",a/b);
return 0;
}
输入以下命令编译并运行:
gcc -o 5-1 5-1.c
./5-1
结果如下:
运行后之后,大家可以看到运行的结果是 7 而非 7.33333。
重新编写 5-1.c 作出以下修改:
#include<stdio.h>
int main(){
float a = 22.5;
int b = 3;
printf("%d\n",a%b);
return 0;
}
重新编译运行该程序,显示出以下结果:
编译出现 error 表示编译未成功(如果只出现 warning 表示警告,则其实编译已经成功生成了可执行文件),并提示了错误内容。
这也验证了我们在注意中提到的 % 运算符要求参加运算的对象为整数。
自增、自减运算符
作用是使变量的值加 1 或减 1,例如:++i,--i(在使用 i 之前,先使 i 加(减)1);i++,i--(在使用 i 之后,使 i 的值加(减)1)。
猛地一看,++i 和 i++ 的作用相当于 i=i+1。但是 ++i 和 i++ 的不同之处在于 ++i 是先执行 i=i+1 后,再使用 i 的值;而 i++ 是先使用 i 的值之后,再执行 i=i+1。我们看下面的例子:
编写源程序 5-2.c:
# include<stdio.h>
int main(){
int a = 5;
printf("%d\n",a++);
printf("%d\n",++a);
return 0;
}
编译运行后的结果是:
大家千万不要以为结果应该是:
5
6
因为 a++ 以后 a 的值已经成为了 6,而非是 5,经过 ++a 后的值是 7。 这个程序虽然简单,大家还是需要认真思考一番。
注意: 自增运算符 (++) 和自减运算符 (--) 只能用于变量,而不能用于常量或表达式。如 5++ 或者 (a+b)++ 都是不合法的。因为 5 是常量,常量的值是不能改变的。(a+b)++ 也是不可能实现,假如 a+b 的值是 5,自增后变为 6 放在什么地方呢?无变量可供存放。
现在大家可能还不能感受到自增和自减的用处,等我们学到循环语句和指针的时候,你将会在大量的程序中看到自增和自减。
不同数据之间的混合运算
在程序中经常会遇到不同类型的数据进行运算,比如 7*3.5。如果一个运算符的两侧数据类型不同,则先进行类型的转换,使两者具有同一种类型,然后进行运算。因此整型、浮点型、字符型数据之间可以进行混合运算。 数据类型计算的时候究竟是如何转换类型的呢?大家先看下表:
- 如果 int 类型的数据和 float 或 double 型数据进行运算时,先把 int 型和 float 型数据转换为 double 型数据,然后进行运算,结果为 double 型。其他的大家可以按照上图来做。
- 字符 (char) 型数据和整型数据进行运算,就是把字符的 ASCII 代码与整型运算。如 4+'B',由于字符 'B' 的 ASCII 代码是 66,相当于 66+4=70。字符型数据可以直接和整型数据进行运算。如果字符型数据和浮点型数据运算,则将字符的 ASCII 码先转化为 double 型,然后再进行运算。
我们编写一个程序分析一下他们转换的编译过程,编写程序 5-3.c:
# include<stdio.h>
int main(){
int i = 3;
float f = 4.3;
double d = 7.5;
double sum;
sum = 10 + 'a' + i*f - d/3;
printf("%lf\n",sum);
return 0;
}
在 sum=10+'a'+i*f-d/3; 这条语句中,右边的表达式从左到右扫描,运算次序为:
10 + 'a' 的运算,'a' 的值是整数 97,运算结果为 107。 i*f 的运算。先将 i 与 f 都转换为 double 型,两者运算 12.9,double 型。 整数 107 与 i * f 的值相加,结果为 119.9,doubl