C/C++语言-基础运算

1.算数运算

与数学一样,C语言中的算数运算也有运算符:

-取相反数
*乘法
/除法
%求余
+加法
-减法

(1)*乘法

乘号*在C语言中是不可省略且不可用其他符号代替的,以下代码是错误示范

#include <stdio.h>
int main()
{
 int a=2;
 int b=3;
 int c=ab;
 printf("%d",c);
}

报错如下:

加上*号编译器才认得出乘法

(2)/除法

C语言中整数除以整数的结果会被强制转换为整数(即取整),只有实数之间的除法才能产生实数

示例代码及结果如下

#include <stdio.h>
int main()
{
 int a=3;
 int b=2;
 printf("%f",a/b);
}

明显地,出现了错误(一般结果出现0.0000..就意味着程序中有一步或多步要输入输出的数据与控制条件不符),a/b的结果不是实型数据,我们修改一下

#include <stdio.h>
int main()
{
 int a=3;
 int b=2;
 printf("%d",a/b);
}

结果如下

由此可知,输出结果不是1.5而成了1,这就是强制取整的结果

但我们想要的是1.5而不是1,肿么办?这时就要进行类型转换

(3)类型转换

A.自动类型转换

自动类型转换在初始化、赋值时进行,若赋值运算符左侧变量的类型与右侧数据的类型不一致,则自动发生类型转换,将右侧数据转换为左侧变量的类型

以下用自动类型转换解决上面的问题

#include <stdio.h>
int main()
{
 double a=3;
 double b=2;
 printf("%.1f",a/b);
}

3和2是整型数据,而a和b都是实型变量,在初始化后3和2都被自动转换为了实型数据3.00000 和2.000000,a/b的运算结果也就能以实型数据1.5输出了

自动类型转换具有发生数据信息丢失、数值溢出错误的隐患,将取值范围小的类型转换为取值范围大的类型是安全的,否则推荐使用强制类型转换以表明转换意图,便于查错

B.强制类型转换

通过(类型)变量的格式可以将变量的数值强制转换为任意类型,号称C语言的倚天剑

以下用强制类型转换解决上面的问题

#include <stdio.h>
int main()
{
 int a=3;
 int b=2;
 printf("%.1f",float(a)/float(b));
}

float(a)将a的整型数据强制转换为实型数据,float(b)同理,使变量a和b以实型数据参与运算,结果就能以实型1.5输出

注:强制类型转换转换的是变量参与运算的值,而不是变量本身的值和类型

以下代码和结果能揭示转换的本质

#include <stdio.h>
int main()
{
 int a=3;
 int b=2;
 printf("%.1f",float(a)/float(b));
 printf("a=%f,b=%f",a,b);
 printf("a=%d,b=%d",a,b);
}

很明显,转换后变量的类型还是整型,其值还是整型数据3和2,改变的只有参与运算的值

(4)%求余

求余就是求两数相除后产生的余数,左侧为被除数,右侧为除数

求余运算的两参与数必须是整型数据,不能对两实数求余(既没意义也求不出结果)

(5)迭代与简写运算符

变量作为已开辟的内存,其值可以不断改变的特性产生了迭代方法,即对本身的旧值操作后产生本身的新值,如下代码所示

#include <stdio.h>
int main()
{
 int a=5;
 a=2*a;
 printf("%d",a);
}

a=2*a这步意味着将2*(a的旧值)赋值给a,2*(a的旧值)成为a的新值,也就是10

这种迭代步骤可简写,如下:

简写符等价式
a++;(自增)a=a+1;
a - -;(自减)a=a-1;
a*=k;a=a*k;;
a/=k;a=a/k;
a+=k;a=a+k;
a-=k;a=a-k;
a%=k;a=a%k;

(6)运算优先级

以下表格从上到下运算符的优先级递减

++和--
-(取反)
*和/
+和-

()内的内容优先运算,可改变运算优先级

我们看这组代码和运行结果

#include <stdio.h>
int main()
{
	int a = 2;
	a = (5 - 2*a) * 3;
	printf("%d", a);
}

括号内的运算说明*比-优先级高,括号外的运算说明()能改变优先级,这与数学中的运算是一样的

2.幻数的处理

很平常的问题,我们要求圆的周长,\pi怎么处理,C语言中并不能直接使用\pi,也没有对这种幻数(即有现实意义的常用常量)的规定,难不成天天写3.1415926?这是不行的,以下是解决方法


(1)宏常量定义

宏常量在程序的开头设定

格式:#define 幻数标识符  幻数值的字符串

#include <stdio.h>
#define Pai 3.1415926
(2)const(固定)常量定义

const 常量在任意处都能设定

格式:const 对应变量类型 幻数标识符=幻数值的字符串;

const double Pai=3.1415926;

定义后就能直接用Pai来代替3.1415926啦

应用例子如下:

#include <stdio.h>
#define Pai 3.1415926
int main()
{
 double R=5;
 double circumference=0;
 circumference=2*Pai*R;
 printf("%lf",circumference);
}
#include <stdio.h>
int main()
{
 const double Pai=3.1415926;
 double R=5;
 double circumference=0;
 circumference=2*Pai*R;
 printf("%lf",circumference);
}

结果均为正确的31.415926!


小贴士:一定要遵循宏常量的定义格式!不能多加任何符号,编译器无法识别其类型,程序会产生严重错误!下面是常见的错误格式:

#define Pai=3.1415926

#define Pai:3.1415926

#define Pai 3.1415926;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方启光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值