zoukankan      html  css  js  c++  java
  • 《C语言程序设计》第二章 基本数据类型

    目录:

    2.1  常量与变量

    • 2.1.1  常量

    • 2.1.2  变量

    2.2  简单的屏幕输出

    2.3  数据类型

    2.4  如何计算变量或数据类型所占内存空间的大小

    2.5  变量的赋值和赋值运算符

    2.6  本章扩充内容

    2.7  本章知识点小结

    2.8  本章常见错误小结


    2.1.1  常量

    不同类型的整型常量 实例 特点
    有符号整型常量 10,-30,0 默认的int型定义为有符号整数,因此对int型无须使用signed
    无符号整型常量

    30u,

    256U

    无符号整型常量由常量值后跟U或u来表示,不能表示成小于0的数,如-30u就是不合法的

    长整型常量 -256l,1024L 长整型常数由常数值后跟L或l来表示
    无符号长整型常量 30lu 无符号长整型常量由常数值后跟LU、Lu、lU或lu来表示
    不同类型的实型常量 实例 特点
    单精度实型常量 1.25F,1.25e-2f 单精度实型常量由常量值后跟F或f来表示
    双精度实型常量 0.123,-12.35,.98 实型常量隐含按双精度型处理
    长双精度实型常量 1.25L 长双精度型常量由常量值后跟L或l来表示

    2.1.2  变量

    auto :声明自动变量
    break:跳出当前循环
    case:开关语句分支
    char :声明字符型变量或函数返回值类型
    const :声明只读变量
    continue:结束当前循环,开始下一轮循环
    default:开关语句中的“默认”分支
    do :循环语句的循环体
    double :声明双精度浮点型变量或函数返回值类型
    else :条件语句否定分支(与 if 连用)
    enum :声明枚举类型
    extern:声明变量或函数是在其它文件或本文件的其他位置定义
    float:声明浮点型变量或函数返回值类型
    for:一种循环语句
    goto:无条件跳转语句
    if:条件语句
    int: 声明整型变量或函数
    long :声明长整型变量或函数返回值类型
    register:声明寄存器变量
    return :子程序返回语句(可以带参数,也可不带参数)
    short :声明短整型变量或函数
    signed:声明有符号类型变量或函数
    sizeof:计算数据类型或变量长度(即所占字节数)
    static :声明静态变量
    struct:声明结构体类型
    switch :用于开关语句
    typedef:用以给数据类型取别名
    unsigned:声明无符号类型变量或函数
    union:声明共用体类型
    void :声明函数无返回值或无参数,声明无类型指针
    volatile:说明变量在程序执行中可被隐含地改变
    while :循环语句的循环条件
    int main(void)
    {
        int   a;    //用关键字int指定变量a的类型 
        float b;    //用关键字float指定变量b的类型 
        char  c;    //用关键字char指定变量c的类型 
        a=1;        //为int型变量a赋值整型变量1 
        b=2.5;      //为float型变量b赋值实型变量2.5
        c='A';      //为char型变量c赋值字符型变量'A' 
        return 0;
    }
    • 一个C 程序必须且只能有一个用main作为名字的函数,这个函数成为主函数;main后面圆括号内的void表示它没有函数参数;main前面的int表示函数执行后会返回操作系统一个整数型,在main函数的函数体中的最后一条语句使用return语句返回了这个值,通常返回0表示程序正常结束。
    • C语言允许在定义变量的同时对变量初始化(为其赋初值):
    int main(void)
    {
        int   a=1;      //定义整型变量a并对其初始化 
        float b=2.5;    //定义实型变量b并对其初始化 
        char  c='A';    //定义字符型变量c并对其初始化 
        return 0;
    }
    • 如果定义了一个变量,但未对其进行初始化,那么该变量的值是一个随机数(静态变量和全局变量除外)
    • 跨行注释:
    #include<stdio.h>
    #include<stdlib.h>
     
    int main()
    {
        printf("char           %d
    ",sizeof(char));
        printf("int            %d
    ",sizeof(int));
        printf("short int      %d
    ",sizeof(short));
        /*若一行写不完注释
        可以用这样的方法写多行注释
        */ 
        return 0;
    } 
    • 在一条语句中,可同时定义多个相同类型的变量,多个变量之间用逗号作分隔符,其书写的先后顺序无关紧要。
    //定义三个整型变量:
    int a,b,c;
    //在定义变量的同时将其初始化为0:
    int a=0,b=0,c=0;
    //但是不能写成:
    int a=b=c=0;

    2.2  简单的屏幕输出

    #include<stdio.h> 
    int main(void)
    {
        int   a=1;    
        float b=2.5;
        char  c='A';
        printf("a=%d
    ",a);         //按整型格式输出变量a的值 
        printf("b=%f
    ",b);         //按实数格式输出变量b的值 
        printf("c=%c
    ",c);         //按字符串格式输出变量c的值 
        printf("End of program
    "); //输出一个字符串 
        return 0;
    }
    
    
    会输出:
    a=1
    b=2.500000
    c=A
    End of program
    • 程序第一行以#开头而未以分号结尾的不是C语句,而是C的编译预处理命令;尖括号内的文件称为头文件,h为head之意,std为standard之意,i为input之意,o为output之意;编译预处理命令#include可使头文件在程序中生效,它的作用是:将写在尖括号内的输入/输出函数的头文件stdio.h包含到用户源文件中。
    • 格式字符详解:

      1.d格式字符
      功能:用来输出十进制数
      格式:%d:按整型数据的实际长度输出
      %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %ld:输出长整型数据。

      2.o格式字符
      功能:以八进制形式输出整数;
      格式:%o:按整型数据的实际长度输出
      %mo:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lo:输出长整型数据。

      3.x格式字符
      功能:以十六进制形式输出整数
      格式:%x:按整型数据的实际长度输出
      %mx:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lx:输出长整型数据。

      4.u格式字符
      功能:以十进制数输出无符号整数
      格式:%u:按整型数据的实际长度输出
      %mu:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lu:输出长整型数据。

      5.c格式字符
      功能:输出单个字符
      格式:%c:按整型数据的实际长度输出
      %mc:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lc:输出长整型数据。

      6.s格式字符
      功能:输出字符串
      格式:%s:按整型数据的实际长度输出
      %ms:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %ls:输出长整型数据。

      7.f格式字符
      功能:以小数形式输出单、双精度实数
      格式:%f:按整型数据的实际长度输出
      %mf:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lf:输出长整型数据。

      8.e格式字符
      功能:以指数形式输出单、双精度实数
      格式:%e:按整型数据的实际长度输出
      %me:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %le:输出长整型数据。

      9.g格式字符
      功能:以%f、%e中较短的输出宽度输出单、双精度实数
      格式:%g:按整型数据的实际长度输出
      %mg:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补一空格;若大于m,则按实际位数输出。
      %lg:输出长整型数据。

    • 字符串:用一对双引号括起来的若干字符。

    2.3  数据类型

    数据类型分类 关键字 变量声明实例 详细章节

    整型 基本整型 int int a;

    第2章

    第4章

    长整型 long long int a;       或者    long a;
    长长整型 long long long long int a;或者 long long a;
    短整型 short short int a;      或者    short a;
    无符号整型 unsigned

    unsigned int a;

    unsigned long a;

    unsigned short a;

    实型

    (浮点型)

    单精度实型 float float a;
    双精度整型 double double a;
    长双精度整型 long double long double a;
    字符型 char char a;

    第4章

    第10章

    枚举类型 enum

    enum response{no,yes,none};

    enum response answer;

    第12章

    数组

    int score[10];

    char name[20];

    第8章
    结构体 struct

    struct date

    {

          int year;

          int month;

          int day;

    };

    struct date d;

    第12章
    共用体 union

    union

    {

          int single;

          char spouseName[20];

          struct date divorcedDay;

    }married;

    指针类型

    int * ptr;

    char * pStr;

    第9~11章
    无类型 void

    void Sort(int array[] , int n);

    void *malloc(unsigned int size);

    第8章

    第11章

    • 定义整型变量时,只要不指定为无符号型,其隐含的类型就是有符号型,而signed通常是省略不写的。

    2.4  如何计算变量或数据类型所占内存空间的大小

    •  一个字节(Byte)可以表示的整数最小为0,最大为255,一个字节等于8个二进制位(bit),也称比特。bit是binary digit二进制数的缩写,位是衡量物理存储器容量的最小单位。
    英文称谓 中文称谓 字节大小 换算方法
    1b(bite) 比特    
    1B(Byte) 字节 一个字节 1B=8bit
    1KB(Kilobyte) K 一千字节

    1KB=1024B=210B

    1MB(Megabyte) 百万字节 1MB=1024KB=220B
    1GB(Gigabyte) 十亿字节,又称“千兆” 1GB=1024MB=230B
    1TB(Terabyte) 万亿字节 1TB=1024GB=240B
    1PB(Petabyte) 千万亿字节 1PB=1024TB=250B
    1EB(Exabyte) 百亿亿字节 1EB=1024PB=260B
    1ZB(Zettabyte) 十万亿亿字节 1ZB=1024EB=270B
    1YB(Yottabyte) 一亿亿亿字节 1YB=1024ZB=280B
    1BB(Brontobyte)   一千亿亿亿字节 1BB=1024YB=290B
    1NB(Nonabyte)   一百万亿亿亿字节 1NB=1024BB=2100B
    1DB(Doggabyte)   十亿亿亿亿字节 1DB=1024NB=2110B
    #include<stdio.h>
    int main(void)
    {
        printf("Data type      Number of bytes
    ");
        printf("----------     -----------------
    ");
        printf("char           %d
    ",sizeof(char));
        printf("int            %d
    ",sizeof(int));
        printf("short int      %d
    ",sizeof(short));
        printf("long int       %d
    ",sizeof(long));
        printf("long long int  %d
    ",sizeof(long long));
        printf("float          %d
    ",sizeof(float));
        printf("double         %d
    ",sizeof(double));
        printf("long double    %d
    ",sizeof(long double));
        return 0;
    } 


    输出:

    Data type      Number of bytes
    ----------     -----------------
    char           1
    int            4
    short int      2
    long int       4
    long long int  8
    float          4
    double         8
    long double    16

     
    • 注:这个程序在不同的操作系统和编译环境下的运行结果可能有所差异。

    2.5  变量的赋值和赋值运算符

    • 在计算含有不同类型运算符的表达式时,要考虑运算符的优先级,根据优先级确定运算的顺序,即先执行优先级高的运算,然后执行优先级低的运算。
    • 运算符的结合性:一种是左结合,即自左向右计算;另一种是右结合,即自右向左计算。

    C语言中需要两个操作数的算术运算符是左结合的,例如:x/y*z=(x/y)*z。

    而赋值运算符则是右结合的,例如:a=b=c=0;与a=(b=(c=0));是等价的<多重赋值>。


    2.6  本章扩充内容

    1. 有符号整数和无符号整数

    有符号整数和无符号整数的区别在于怎样解释整数的最高位。对于无符号整数,其最高位被C编译器解释为数据位。而对于有符号整数,C编译器将其最高位解释为符号位,若符号位为0,则表示该数为正数;若符号位为1,则表示该数为负数。

    • 原码:将一个整数换算成二进制,就是其原码。
    • 反码:正数的反码就是其原码,负数的反码是除符号位每一位取反(即0变1,1变0)。
    • 补码:正数的补码就是其原码,负数的反码+1就是其补码。

    例:(“┊”前为符号位)

    -1的原码

    1┊0 00 00 00 00 00 00 01

    -1的反码

    1┊1 11 11 11 11 11 11 10

    -1的补码

    1┊1 11 11 11 11 11 11 11

    如图所示,如果将最高位解释为符号位(有符号竖数),则该数为-1;如果将最高位解释为数据位(无符号数),那么该数就是1*20+1*21+1*22+1*23+1*24+1*25+1*26+1*27+1*28+1*29+1*210+1*211+1*212+1*213+1*214+1*215=65535

    • 在计算机内存中用补码表示负数的原因:首先,可以将减法运算转化为加法运算来处理。eg.将7-6转化为(+7)+(-6)来处理;其次,可以用统一的形式来表示0(否则会出现+0和-0),+0和-0的原码不同,补码相同。

            2.实型数据在内存中的存储格式

     对于实数,无论是小数表示形式还是指数表示形式,在计算机内部都采用浮点形式来储存。

    浮点形式是相对于定点形式而言的。所谓定点数是指小数点位置是固定的,小数点位于符号位和第一个数值位之间,它表示的是纯小数;整型数据是定点表示的特例,只不过它的小数点的位置在数值位之后而已。

    所谓浮点数是指小数点的位置是可以浮动的数。例如,十进制数1234.56可以写成:1234.56     0.123456*104     1.23456*103  或者  12345.6*10-1,这里随着10的指数的变化,小数点的位置也会发生相应的变化。

    通常,浮点数是将实数分为阶码和尾数两部分来表示。例如,实数N可以表示为:N=S*rj.  其中,S为尾数(正负均可),一般规定用纯小数形式;j为阶码(正负均可,但必须是整数);r是基数,对二进制数而言,r=2,即N=S*2j。例如:10.0111=0.100111*210

    浮点数在计算机中的存储格式如图所示:

    阶码j 尾数S
    阶码符号 阶码的数值 尾数符号 尾数的数值
    • 阶码:实数的指数部分;尾数:小数部分。
    • 阶码所占的 位数决定实数的表数范围;尾数所占的位数决定实数的精度,尾数的符号决定实数的正负。
    • 浮点表示法的表数范围远远大于定点表示法,而且也更灵活。

            3.单精度实型和双精度实型的有效位数

    //将同一实型数分别赋值给单精度实型和双精度实型变量,然后打印输出 
    #include<stdio.h> int main(void) { float a; double b; a=123456.789e4; b=123456.789e4; printf("%f %f ",a,b); return 0; }

    输出:

    1234567936.000000
    1234567890.000000

    • 原因:单精度实型(float型)变量和双精度实型(double型)变量所接收的实型变量的有效数字位数不同。一般而言,double型变量可以接收实型常量的16位有效数字,而float型变量仅能接收实型常量的7位有效数字,在有效数字后面输出的数字都是不准确的。因此,将double型数据赋值给float型变量时有可能发生数据截断错误,从而产生舍入误差。

    2.7  本章知识点小结


    2.8  本章常见错误小结

    常见错误实例 常见错误描述 错误类型
    变量未定义就使用 编译错误

    int newValue;

    newvalue=0;

    忽略了变量区分大小写,使得定义的变量和使用的变量不

    同名

    编译错误

    printf=("Input n:")

    int n;

    在可执行语句之后定义变量 编译错误
    int n=3.5

    在定义变量时,用于变量初始化的常量类型与定义的变量

    类型不一致

    有的编译器

    不提示错误

    int m=n=0; 在定义变量时,对多个变量进行连续赋初值 编译错误
  • 相关阅读:
    [LeetCode] 399. Evaluate Division Java
    图的遍历
    [LeetCode] 332. Reconstruct Itinerary Java
    [LeetCode] 310. Minimum Height Trees Java
    sql like 查询
    递归树
    用SQL语句,删除掉重复项只保留一条
    Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String
    如何利用java得到当前的时间和前一天的时间
    Java 字符串用逗号并接
  • 原文地址:https://www.cnblogs.com/20201212ycy/p/14317148.html
Copyright © 2011-2022 走看看