第3章 数据和C(1)

发布于 2021-03-17  94 次阅读


第3章 数据和C

本章介绍以下内容:

  • 关键词

  • 运算符:sizeof()

  • 函数scanf()

  • 整数类型和浮点数类型的区别

  • 如何书写整型和浮点型常数,如何声明这些类型的变量

  • 如何使用printf()和scanf()函数读写不同类型的值
    C语言提供两大系列的多种数据类型。本章详细介绍:整数类型和浮点类型(还将介绍常量和变量的区别)

    3.1 示例程序

    //platinum.c   -- your weight in platinum
    #include<stdio.h>
    int main()
    {
    float weight;  //你的体重
    float value;   //相等重量的白金价值
    
    printf("Are you worth your weight in platinum?\n");
    printf("Let't check it out.\n");
    printf("Please enter your weight in pounds:");
    
    //获取用户的输入
    scanf("%f",&weight);
    value = 1700.0*weight*14.5833;
    printf("Your weight in platinum is worth $%.2f.\n",value);
    printf("You are easily worth that! If platinum prices drop,\n");
    printf("eat more to maintain your value.\n");
    
    return 0;
    }

    getchar()可以让一闪而过的终端等待你的键入;

    3.1.1程序中的新元素

  • float类型可以存储带小数的数字

  • 打印新类型的变量,在printf()中使用%f来处理浮点值.%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位。

  • scanf()函数用于读取键盘的输入。%f说明scanf ()要读取用户从键盘输入的浮点数,&weight告诉scanf()把输入的值赋给名为weight的变量。scanf()函数使用&符号表明找到weighht变量的地点。

  • 人机交互

    3.2 变量与常量数据

    有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)。其他数据类型在程序运行时期可能会改变或被赋值,这些称为变量(variable)

    3.3 数据:数据类型关键字

    file

  • 在C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short、unsigned)和C99新加的signed用于提供基本整数类型的变式。

  • char关键字用于指定字母和其他字符,另外char类型也可以表示较小的整数。

  • float、double和long double表示带小数点的数。

  • _book类型表示布尔值(true和false)

  • _Complex和 _Imaginary分别表示复数和虚数。

  • 计算机存储方式分为两大类:整数类型和浮点数类型
    位、字节和字是描述计算机存储单元的术语.这里主要指的是存储单元。
    最小的存储单元是位(bit),可以存储0或1(or开关)。位是计算机内存的基本够块。
    字节(byte)是常用的计算机存储单位。1byte=8bit。
    8位(一字节)可以表示0-255的整数或者一组字符
    字(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机、一个字只有八位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。

    3.3.1 整数和浮点数

    3.3.2整数

    整数是没有小数部分的数。计算机以二进制存数。
    file

    3.3.3浮点数

    3.16E7表示
    3.16\times 10^7
    计算机把浮点数分成为小数部分和指数部分来表示,而且分开存储这两部分。

  • 整数没有小数部分,浮点数有小数部分

  • 浮点数可以表示的范围比整数大。

  • 对于一些算术运算,浮点数损失的精度更多。

  • 因为在任何区间都存在无穷多个实数,所以计算机的浮点数不能表示区间内的所有数,浮点数通常只是实际值的近似值。

  • 过去,浮点运算比整数运算慢。现在CPU加入了浮点处理器

    3.4 C语言基本数据类型

    3.4.1 int类型

    一般而言,存储一个int要占一个机器字长

    1. 声明int变量
      如何赋值:
      (1)赋值 x=1;
      (2)通过函数scanf()获得
      (3)初始化变量
    2. 初始化变量
      初始化(initialize)变量就是为变量赋一个初始值。

      int hogs=21;
      int cows=32,goats=14;
      int dogs,cats=94;   //有效;但是容易让人误解;真实只赋值了cats

      声明变量创造和标记存储空间,并未其指定初始值;
      file

    3. int类型常量
      C语言把不含小数电和指数的数作为整数。
    4. 打印int值
      可以使用printf()打印int类型的值。%d称为转换说明
//print1.c -printf()的一些特性
#include<stdio.h>
int main(void)
{
    int ten =10;
    int tw0 =2;

    printf("Doing it right:");
    printf("%d minus %d is %d \n",ten,2,ten-two);
    printf("Doing it wrong:");
    printf("%d minus %d is %d \n",ten);   //漏掉两个参数

    return 0;
}

运行后的结果
file
未报错,问题出在printf("")函数的参数数目不定,可以有多个。
注意使用printf()函数时候,要确保转换说明的数量与待打印值的数量相等

  1. 八进制和十六进制
    10000H表示十进制为65536
    在C语言中,用特定的前缀表示使用哪种进制,0x和0X前缀表示十六进制;
    0前缀表示表示八进制例如十进制的十六用十六进制表示为0x10或者0X10;用八进制表示为020.

    • 使用不同进制是为了方便,不会影响被存储的方式。(因为计算机内部都是以二进制进行编码的)
  2. 显示八进制和十六进制
    以十进制显示,使用%d
    以八进制显示,使用%o
    以十六进制显示,使用%x。
    另外,要显示个各进制前端的0、0x、和0X,必须风别写%#o、%#x、%#X

    //bases.c ----以十进制、八进制、十六进制打印十进制数100
    #include<stdio.h>
    int main(void)
    {
    int x = 100;
    
    printf("dec = %d;octal = %o;hex = %x\n",x,x,x);
    printf("dec = %d;octal = %#o;hex = %#x\n",x,x,x);
    
    return 0;
    }

    显示结果为:
    file

    3.4.2 其他整数类型

    C语言提供了3个附属关键字修饰基本整数类型:short、long、unsigned。

    • short int类型(或简写short)占用的存储空间可能比int少,常用于较小数之的场合。与int相比,short是由符号类型;
    • long int或者long 占用的存储空间可能比int多,适用于大数值场合,与int相比,long long是由符号类型;
    • long long int或long long(C99标准加入)占用的存储空间可能比int多,适用于较大数值场合。该类型至少占64位。与int相比,long long是由符号类型;
    • usigned int 或unsigned 只用于非负数场合。这种类型与有符号数表示的范围不同。例如:16位的usigned int永续的取值范围位0~65535,而不是-32768~32767.用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
    • 在C90标准中,添加了unsigned long int 或者unsigned long和 usigned short int或usigned short类型;
    • C99标准又添加了usigned long long int或者usigned long long;
    • 在仍和有符号数类型前面加上signed,刻意强调使用有符号类型的意图。
      留坑

擦肩而过的概率