整数与浮点实数运算时,其中的整数操作数在运算之前被自动转换为了浮点数;
求余运算限定参与运算的两个操作数必须为整型,不能对两个实型数据进行求余运算;
++x
Prefix 运算符是在变量使用之前线对其执行加 1 操作;x++
Postfix 运算符是先使用变量的当前值,然后对其进行加 1 操作;提倡在一行语句中一个变量最多只出现一次增 1 或减 1 运算;
宏常量没有数据类型(都是字符串):
#define 标识符 字符串
表达式中的自动类型转换:在运算前将所有操作数都转换成取值范围较大的操作数类型;
赋值中的自动类型转换:将右侧表达式的值转换成左侧变量的类型;
类型自动转换机制给程序带来错误的隐患,在某些情况下有可能会发生数据信息丢失、类型溢出等错误;
如确实需要在不同类型数据之间运算时,应使用强制类型转换运算符:
(类型)表达式
强制类型转换运算符
(float)m
只是将m
的值强转为实型数据,并不能改变变量m
的数据类型;常用标准数学函数:
#include <math.h> sqrt(x) /*计算 x 的平方根,x 应大于或等于 0*/ fabs(x) /*计算 x 的绝对值*/ log(x) /*计算 lnx 的值,x 应大于 0*/ log10(x) /*计算 lgx 的值,x 应大于 0*/ exp(x) /*计算 e 的 x 次方的值*/ pow(x,y) /*计算 x 的 y 次方的值*/ sin(x) /*计算 sinx 的值,x 为弧度值,而非角度值*/ cos(x) /*计算 cosx 的值,x 为弧度值,而非角度值*/
例:从键盘输入获取边长 a、b、c,计算三角形面积:
#include <stdio.h> #include <math.h> main() { float a, b, c, s, area; printf("Input num of a, b, c\n"); scanf("%f, %f, %f", &a, &b, &c); s = (a + b + c) * 0.5; area = sqrt(s * (s - a) * (s - b) * (s - c)); printf("Area: %f\n", area); }