加、减、乘、除是常见的数学运算,C语言当然支持它们。 不过C语言中的运算符号与数学中的略有不同,如下表所示。
加法、减法、乘法、除法、余数(余数)
数学
X
÷
没有任何
C语言
C语言中的加号和减号与数学中的相同,但乘号和除号不同; 另外,C语言还多了一个计算余数的运算符,就是%。
下面的代码演示了如何用C语言进行加、减、乘、除运算:
#includeint main() { int a = 12; int b = 100; float c = 8.5; int m = a + b; float n = b * c; double p = a / c; int q = b % a; printf("m=%d, n=%f, p=%lf, q=%d\n", m, n, p, q); return 0; }
输出结果:
m=112, n=850., p=1., q=4
您还可以直接使用数字进行计算:
#includeint main() { int a = 12; int b = 100; float c = 8.9; int m = a - b; // 变量参与运算 int n = a + 239; // 有变量也有数字 double p = 12.7 * 34.3; // 数字直接参与运算 printf("m=%d, n=%d, p=%lf\n", m, n, p); printf("m*2=%d, 6/3=%d, m*n=%ld\n", m*2, 6/3, m*n); return 0; }
输出结果:
m=-88,n=251,p=435。
m*2=-176, 6/3=2, m*n=-22088 除法的解释 C 语言中的除法运算有点奇怪,不同类型的除数和被除数会导致不同类型的运算结果:
请看下面的代码:
#includeint main() { int a = 100; int b = 12; float c = 12.0; double p = a / b; double q = a / c; printf("p=%lf, q=%lf\n", p, q); return 0; }
运行结果:
p=8.,q=8。
a和b都是整数,a/b的结果也是整数,所以赋给p变量的值也是整数,即8。
另外要注意的是除数不能为 0,因为任何数字除以 0 都是没有意义的。
然而,编译器一般对此错误无能为力。 很多情况下,编译器在编译阶段无法计算出除数的值,无法做出有效的预测。 “除数为0”的错误只有在程序运行后才能发现,而程序在运行阶段一旦出现任何错误,结果只能有一个,那就是崩溃并被操作系统终止。
请看下面的代码:
#includeint main() { int a, b; scanf("%d %d", &a, &b); //从控制台读取数据并分别赋值给a和b printf("result=%d\n", a / b); return 0; }
这段代码使用了一个新函数 scanf。 scanf和scanf的功能相反,用于输出数据,scanf用于读取数据。 这里,scanf从控制台读取两个整数,并将它们分别赋给a和b。 关于scanf的具体用法,我们将在《C语言scanf:读取键盘输入的数据(含输入格式汇总表)》一节中详细讲解。 。 程序开头定义了两个int类型的变量a和b。 程序运行后,从控制台读取用户输入的整数并分别赋值给a和b。 这时才能知道a和b的具体值,才能知道除数。 b不为0。这种情况下,b的值在程序运行过程中会发生变化,这与用户输入的数据有关,编译器根本无法预测,所以出现“除数为0”的错误” 无法及时找到。 求余运算的解释 取余,即求余数,所用的运算符是%。 C语言中的求余运算只能对整数进行,也就是说%两边都必须是整数,不能出现小数,否则编译器会报错。
此外,余数可以是正数也可以是负数,由 % 左边的整数决定:
请参阅下面的示例:
#includeint main() { printf( "100%=%d \n100%%-12=%d \n-100%=%d \n-100%%-12=%d \n", 100, 100%-12, -100, -100%-12 ); return 0; }
运行结果:
100=4
100%-12=4
-100=-4
-100%-12=-4
在 中,% 是格式控制字符的开头。 为特殊字符,不能直接输出; 如果要输出%,则必须在前面加一个%。 此时%就变成了普通字符,不再用来表示格式控制字符。
加、减、乘、除运算的简写 有时我们想对一个变量进行某些运算,然后将运算结果赋给变量本身,请看下面的例子:
#includeint main() { int a = 12; int b = 10; printf("a=%d\n", a); a = a + 8; printf("a=%d\n", a); a = a * b; printf("a=%d\n", a); return 0; }
输出结果:
a=12
a=20
a=200
a = a + 8 相当于a的原始值(即12)加上8,然后将运算结果(即20)赋值给a,此时a的值就变成了20。
a = a * b 相当于将a的值(即20)乘以b的值(即10),然后将运算结果(即200)赋值给a,则a的值a 变为 200。
上述操作可以理解为对变量本身进行一定的操作。
在C语言中,对变量本身的操作可以有简写形式。假设用#来表示某种运算符,那么
a = a # b
可以简写为:
一个#=b
#代表+、-、*、/、%中的任意运算符。
上例中,a=a+8可以简写为a+=8,a=a*b可以简写为a*=b。
下面的简写也是正确的:
int a = 10, b = 20; a += 10; //相当于 a = a + 10; a *= (b-10); //相当于 a = a * (b-10); a -= (a+20); //相当于 a = a - (a+20);
注意:a#=b只是简写形式,不会影响程序的执行效率。