C语言自学《二》中篇 ---- 变量、类型、运算

霸气de小男生 提交于 2020-03-12 19:02:06

##使用浮点数 浮点数包含的值带小数点,也可以表示分数和整数

下面是一些浮点数

1.60.000087655.899100.0

用指数和C语言来表示

1.6== 0.16E1 E代表10,1代表1次方

###定义浮点数变量

<!-- lang: cpp -->

/*
    float类型占用4字节,精确到6至7位小数,小数后面加f
    double类型占用8字节,精确到15位小数
    long double类型占用12字节,精确到18位小数,小数后面加L
*/
int main(){    
    float aa = 45.0f;
    float bb = 7.0f;
    printf("aa/b=%f\n",aa/bb);    //6.428571
    return 0;
}

###控制输出中的小数位数

<!-- lang: cpp -->

//%.2f中的.2说明控制小数位后面为2位,设置成.0f代表后面没有小数位数
printf("aa/bb=%.2f",aa/bb);    //6.42

###控制输出的字段宽度

<!-- lang: cpp -->

//输出的字段宽度是输出值所使用的总字符数(包括空格)
//指定宽度时,数值默认是右对齐,如果希望左对齐,只需要在%的后面添加一个负号
printf("aa/bb=%5.3f",aa/bb);    

###运算的顺序

<!-- lang: cpp -->

//它的计算顺序是
//先计算最内层的括号,即5+4
//然后是先乘除后加减,即9*3,然后27+3
//最后2*30 = 60
2*(3+3*(5+4)) = 60

###利用输入的直径计算周长和面积

<!-- lang: cpp -->

int main(void){

    //设定初始值,以防由于使用未赋值的变量引起垃圾值
    float radius = 0.0f;    //半径
    float diameter = 0.0f;  //直径
    float circumference = 0.0f; //周长
    float area = 0.0f;  //面积
    float Pi = 3.14159265f; //π

    printf("请输入一个直径数字:");

    //scanf()是另一个需要包含头文件stdio.h的函数
    //它专门处理键盘输入,提取通过键盘输入的数据,按照第一个参数指定的方式解释它
    //第一个参数是放在双引号内的一个控制字符串,为float类型
    //scanf()将float类型的数存到变量diameter中
    //控制字符串是控制输入,而不是输出。
    scanf("%f",&diameter);  //&符号叫做寻址操作符,它允许读入的数值存进变量diameter

    radius = diameter / 2.0f;
    circumference = 2.0 * Pi * radius;
    area = Pi * radius*radius;

    printf("\n周长为:%.2f",circumference);    //宽度为默认,小数位为2位
    printf("\n面积为:%.2f\n",area);
    return 0;
}

###读取数据的格式说明符

  1. 读取short类型的数值 ---- %hd
  2. 读取int类型的数值 ---- %d
  3. 读取long类型的数值 ---- %ld
  4. 读取float类型的数值 ---- %f%e %e代表使用指数模式,比如32E-5
  5. 读取double类型的数值 ---- %lf%le %lf代表双精度浮点数 %f代表普通浮点数

###定义命名常量 例如像π的值就是一个不会改变的值,这种值就要设置成常量,使之在程序中保持不变,以免带来计算错误

第一种方法(将π定义为一个符号)

<!-- lang: cpp -->

#define PI = 3.14159f;    //定义了一个常量,常量的命名通常全是大写字母,与变量区分开

int main(){
    printf("π=%f",PI)
}

第二种方法(用const关键字修饰) π的值定义成变量,并且用const关键字修饰,固化变量,告诉编译器,它的值是固定不变的

<!-- lang: cpp -->

const float Pi = 3.14159f;    //定义了Pi是一个float类型的常量值

###极限值

计算机中的数值总是受限于该机器可以存储的值域 对浮点数的极限值使用说明符%e,表示这个数值是指数形式 用%u输出无符号整数值 如果用%d输出无符号类型的最大值,则最左边的为(带符号类型的符号位)为1的数值就得不到正确的解释

整数类型 头文件<limits.h>中定义的符号表示每种类型的极限值,如下所示

  1. char
    • 上限:CHAR_MAX
    • 下限:CHAR_MIN
  2. short
    • 上限:SHRT_MAX
    • 下限:SHRT_MIN
  3. int
    • 上限:INT_MAX
    • 下限:INT_MIN
  4. long
    • 上限:LONG_MAX
    • 下限:LONG_MIN
  5. long long
    • 上限:LLONG_MAX
    • 下限:LLONG_MIN

如何应用

<!-- lang: cpp -->

 //无符号整数类型的下限都是0,所以他们没有特定的符号
#include <limits.h>

int main(){

    //初始化一个int变量,这个语句把number设置为最大值,编译器会利用该最大值编译代码
    int number = INT_MAX;
    //打印整数类型的上限值和下限值
    printf("int MIN AND MIN is %d ~ %d\n",INT_MIN,INT_MAX);
    printf("long MIN AND MIN is %d ~ %d\n",LONG_MIN,LONG_MAX);
    printf("short MIN AND MIN is %d ~ %d\n",SHRT_MIN,SHRT_MAX);
    printf("long long MIN AND MIN is %d ~ %d\n",LLONG_MIN,LLONG_MAX);

    return 0;
}

小数类型 <float.h>头文件定义了表示浮点数的符号

  1. float
    • 上限:FLT_MAX
    • 下限:FLT_MIN
  2. double
    • 上限:DBL_MAX
    • 下限:DBL_MIN
  3. long double
    • 上限:LDBL_MAX
    • 下限:LDBL_MIN

######sizeof运算符

<!-- lang: cpp -->

/*
    sizeof运算符可以确定给定的类型占据多少字节
    例如表达式sizeof(int)会得到int类型的变量所占的字节数
    所得的值是一个size_t类型的整数,对应一个基本整数类型
    size_t类型在标准头文件<stddef.h>和其他头文件中定义
    但是由于不同的C库中有所不同,所以最好使用size_t变量存储sizeof运算符生成的值
    例如size_t size = sizeof(long long);
*/
int main(void){
    
    //因为sizeof运算符的结果是一个无符号整数,所以用%u说明符输出它
    printf("Variables of type char occupy %u bytes\n",sizeof(char));
    printf("Variables of type short occupy %u bytes\n",sizeof(short));
    printf("Variables of type int occupy %u bytes\n",sizeof(int));
    printf("Variables of type long occupy %u bytes\n",sizeof(long));
    printf("Variables of type long long occupy %u bytes\n",sizeof(long long));
    printf("Variables of type double occupy %u bytes\n",sizeof(double));
    printf("Variables of type float occupy %u bytes\n",sizeof(float));
    printf("Variables of type long double occupy %u bytes\n",sizeof(long double));
    return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!