【C程序设计】02:数学运算

2.1数学运算


1.C语言基本运算符:
运算符说明举例
=赋值运算符a = b;
+、-、*、/、()基本运算符a = (b + c) * d;
%求余运算符a = b % 2;
&、|、^、~位运算(imp.)a = ~b | c;
<<、>>左移和右移a = b >> 2;
(1)位运算:一种二进制位下的高速运算
  • 按位与 &:先将左右两边的数表示成二进制的形式,对应二进制位上进行的一种运算,a与b必须同时为真

  • 按位或 |:先将左右两边的数表示成二进制的形式,对应二进制进位上行的一种运算,a与b有一边为真即可

  • 异或运算 ^:先将左右两边的数表示成二进制的形式,对应二进制位上进行的一种运算,相同则为0,不同则为1(逆运算满足交换律)

    注意:

    ①由a ^ b = c 可得 c ^ a = b; c ^ b = a;

    ②n ^ n = 0 ; 0 ^ n = n;

  • 按位取反 ~:

(2)右移和左移:将数字转换为二进制,然后向左or右移动(重难点理解)
  • 左移 <<:等价于二进制数整体乘2
  • 右移 >>:等价于二进制数整体除2下取整(补原数字的符号位)
2.C语言中的数学函数库:
常用函数说明
pow(a, n)指数函数
sqrt(x)开平方函数
ceil(x)上取整函数
floor(x)下取整函数
abs(x)整数绝对值函数(引入stdlib.h)
fabs(x)实数绝对值函数
log(x)以e为底对数函数
log10(x)以10为底对数函数
acos(x)三角函数
1.pow函数
(1)头文件:math.h
(2)原型:double pow(double a, double b);

2.sqrt函数
(1)头文件:math.h
(2)原型:double sqrt(double x);

3.ceil函数
(1)头文件:math.h
(2)原型:double ceil(double x);

4.floor函数
(1)头文件:math.h
(2)原型:double floor(double x);
    
5.abs函数
(1)头文件:stdlib.h
(2)原型:int abs(int x);

6.fabs函数
(1)头文件:math.h
(2)原型:double fabs(double x);
    
7.log函数
(1)头文件:math.h
(2)原型:double log(double x);
(3)返回值:loge(x)

8.log10函数
(1)头文件:math.h
(2)原型:double log10(double x);
(3)返回值:log10(x)
//求数字n的数字位数:floor(log10(n)) + 1
    
9.acos函数
(1)头文件:math.h
(2)原型:double acos(double x);
(3)注意:x为角度的弧度值
    

注意:

  • 不同于其他math函数,abs(absolute)函数需要引入stdlib.h库;
  • 三角函数、对数函数返回值、四舍五入函数都是双精度浮点值;

注:极客学院c程序设计参考:http://wiki.jikexueyuan.com/project/c/

3.代码演示:
  • 位运算代码演示(位运算只支持映射成整型值的数据的运算)
//1.循环输入实现
#include <stdio.h>

int main(){
    int n;
    while(~scanf("%d", &n)){	
        printf("n = %d", n);
    }
    return 0;
}

/*
~:对scanf函数的返回值(-1)进行按位取反
(1)计算机对于负数用补码表示
(2)补码 = 反码 + 1
(3)反码 = ~源码
-1 = (111...111)32个
*/

//2.判断奇偶数
#include <stdio.h>

int main(){
    int n;
    while(~scanf("%d", &n)){
        //if(n % 2){...}
        if(n & 1){
        	printf("%d is even\n", n);
        }else{
            printf("%d is odd\n", n);
        }
    }
    return 0;
}

/*
n & 1:在判断奇偶数时等价于 (n % 2)
(1)二进制数最后一位为0:偶数、二进制最后一位为1:奇数

//3.交换变量值
#include <stdio.h>

int main(){
    int a = 3, b = 4;
    printf("a = %d, b = %d\n", a, b);
    
    a ^= b;		//int temp = a;
    b ^= a;		//a = b;
    a ^= b;		//b = temp;
    
    printf("swap: a = %d, b = %d\n", a, b);
    
    return 0;
}

/*
temp = a ^ b
a ^= b : a = a ^ b
b ^= a : b = b ^ a = b ^ (a ^ b) = a
a ^= b : a = a ^ b = (a ^ b) ^ a = b
*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值