4,运算符之算数运算符

5 阅读2分钟

##基本计算式

#include <stdio.h>
int main(){
    //加减乘
    int a = 10;
    int b = 3;
    printf("%d\n", a + b);
    printf("%d\n", a - b);
    printf("%d\n", a * b);
    //除法
    printf("%d\n", a / b);//两个整数计算 结果还是一个整数 向下取整 就是剪掉小数部分
    printf("%f\n", 123.0 / 100);//含有小数的计算 结果是一个小数 要用f
    printf("%f\n", 3.33333333 + 6.66666666);//小数相加 结果是一个小数但结果会不精确
    //取余 此时计算式内必须为整数 小数无法计算
    printf("%d\n", 10 % 3);//取余数 10除以3余1 结果为1
    printf("%d\n", 10.0 % 3);//小数无法计算


    return 0;
}

##将一个三位数拆成个位十位百位

#include <stdio.h>
int main(){
    //将一个三位数拆成个位十位百位
    //定义一个变量保存这个三位数
    int num;
    //输入这个三位数
    printf("请输入这个三位数:");
    scanf("%d",&num);
    //计算百位上的数字
    printf("百位上的数字是:%d\n",num/100);
    //计算十位上的数字 
    printf("十位上的数字是:%d\n",(num/10)%10);
    //计算个位上的数字
    printf("个位上的数字是:%d\n",num%10);

    return 0;
}

##隐式转换 数据类型不一致 不能直接运算 要把格式转换一致 隐式转换:把一个小范围的转成大的 自发的 double>float>longlong>long>int>short>char

#include    <stdio.h>
int main(){
    int a = 3;
    int b = 2;
    double c = 2.0;
    printf("%d\n",a / b);
    printf("%f\n",a / c);//此时的c是double类型 因此结果也是double类型
    printf("%f\n",1.0 * a / b);//1.0将结果转换成了double类型

    return 0;
}
问题1:为什么1.0乘了后就一定变成double类型 而不是其他类型
问题2:上面的计算过程中没有double出现 那上面计算得出的小数是double
问题3scanfprintf的区别
解答:scanf是代码写好后实际操作时需要操作者自己输入的,printf是实际操作时输出的部分

##强制转换 如果把取值范围大的赋值给取值范围小的 就需要进行强制转换

#include    <stdio.h>
int main(){
    int d = 3;
    short i = (short)d;//强制类型转换
    int e = 65536;
    short f = (short)e;//int类型转换成short类型,会发生溢出 即e的值大于short类型所能表示的最大值,会发生溢出 
                   //int类型是32位(4个字节)的,short类型是16位(2个字节)的,所以e的值大于65535时,会发生溢出

    return 0;
}

##字符相加 char在参与运算时 会转成int再运算 char的取值范围:ASCII中的所有内容 一个字节

#include <stdio.h>
int main(){


    char ch = 'A';
    char ch1 = ch + 1;
    printf("%c\n", ch1); // ASCII value of A is 65 so 65 + 1 = 66 which is B
    printf("The character is %c\n", ch1);
    printf("The character is %d\n", ch1);// ASCII value of B is 66

    return 0;
}