zoukankan      html  css  js  c++  java
  • 考研c语言基础 66++6

    1.数据类型

    对于基本的数据类型,如整型int,long,...(考研中涉及处理的整数题目,如果没有特别要求用int足够了),字符型char,浮点型float、double...(对于处理小数问题,在题目中没有特殊要求的情况下。用float就可以了)

      (1)结构型

        结构型可以理解为用户自己有的数据类型(int,char,float)为原料制作的数据类型。其实我们常用的数组也是用户自己制作的数据类型。数组有多个相同的数据类型的变量组合起来

    int a[maxSize];  //maxSize是已经定义的常量

        该语句就定义了一个数组,名字为a,就是将maxSize个整型变量连续地摆在一起,其中个整型变量之间的位置关系通过数组下标来反应。

        结构体就是系统提供给程序员制作新的数据类型的一种机制,既可以用系统已经有的不同基本数据类型或用户定义的结构型,组合成用户需要的复杂数据类型。

        例如制作一个有不同类型的变量组成的数组可以进行如下构造,使用结构体:

    typedef struct
    {
        int a;
        char b;
        float c;
    }TypeA;

        上面的语句制造了一个新的数据类型,即TypeA型。访问一个int  a[3]的方法为---->  a[0],a[1],a[2];

                               访问TypeA  b的方法为,b.a,b.b,b.c;

       (2)  指针型

        指针型和结构型一样,是比较难理解的部分。对于其他类型的变量,变量里所有装的是数据元素的内容,而指针型变量里装的是变量地址,通过他可以找出这个变量在内存中的位置,就像一个指示方向的指针,指出了某个方向的位置。因此叫做指针型。

        指针型的定义法对每种数据类型都有特定的写法,有专门指向int型变量的指针,也有专门指向char型变量的指针。

    int *a;    //对比一下定义int型变量的语句:int  a;
    char *b;   //对比 一下定义char型变量的语句: char b;
    float  *c;    //对比一下定义float型变量的语句: float c;
    TypeA *d;    //对比一下定义TypeA型变量的语句:TypeA  d;

        由上可以看出定义指针型变量只是多出了一个“*”而已。

        如果a是一个指针型变量,且它已经指向了b,则a中存放的变量b所在的地址。*a就是取变量b的内容(x=*a;,等价于x=b;)&b就是取变量b的地址,语句a=&b;就是将变量b的地址存于a中,即大家常说的指针a指向b。

        指针型在考研中用得最多的就是和结构型结合起来构造结点(如链表的结点,二叉树的结点等)

       (3)结点的构造

        要构造一种结点,必须先定义结点的结构类型。下面介绍链表结点和二叉树结点结构型的定义方法。

        1)链表结点的定义:

          链表的结点有两个域:一个是数据域,一个是指针域;指针域是用来存放下一个结点的位置。

    链表的定义如下

    typedef struct Node
    {
               int data;        //这里默认的是int型的,如需其他类型可以修改
               struct Node *next;    //指向Node型变量的指针
    }Node 

        上面这个结构型的名字为Node,因为组成此结构体的成员中有一个指向自己类型相同的变量的指针,内部要用自己来定义这个之后怎么,所以写成struct Node *next;

        2)二叉树结点的定义:

          在链表结点结构型的基础上,在加上一个指向自己同一类型变量的指针域,即二叉树结点结构型:

    typedef struct BTNode
    {
            int data ;   //这里默认是int型,如需其他类型可修改
            struct BTNode *lchild;  //指向左孩子
            struct BTNode *rchild; //指向右孩子
    }BTNode

        在考研数据结构中,只需要熟练掌握(链表,二叉树)的定义方法,其他结点都是有这两种衍生出来的。

        知道了链表结和二叉树结点定义方法。结构型定义好之后,就要用它来制作新节点了。

        以二叉树为例,有以下两种写法:

    1. BTNode BT;
    
    2. BTNode *BT;
       BT = (BTNode*)malloc(sizeof(BTNode));  //此句要熟练掌握

    1中只用了一句制作了一个结点,而2中需要两句,比1要繁琐,但是考研中用的多的是2。2的执行过程还是:先定义一个结点的指针 BT,然后用函数malloc()来申请一个结点的内存空间,最后让指针BT指向这篇内存空间,2中的第二局就是用系统已有的函数malloc()申请新的内存空间的方法。

      (4)关于typedef和#define

        1)typedef。

          typedef可以理解为给现有的数据类型起一个新的名字。例如 typedef  int  A;则A的作用于int相同  即A  a=1;成立

        2)#define

          #define宏定义,即常量的定义,但是define在考研数据结构中没有帮助,我们只需认识他就行。例如:#define maxSize 50 这句,定义了常量maxSize(此时x=50;等价于x=maxSize; )在写程序解答题时,如果要定义一个数组,如int  A[maxSzie];,加上一句注释/*maxSize为已经定义好的常量,值为50*/即可。

    2.函数

      只要是设计算法题,就要用到函数,所以有必要介绍一下注意事项。

      (1)被传入函数的参数是否会改变

    int a;
    void f(int x)
    {
        ++x;
    }

    上面定义的函数需要一个整型变量作为参数,并且在自己的函数体中将参数做自增1的运算。执行完以下程序后a的值会改变吗?

    a=0;   //1
    f(a);  //2

    有些同学以为答案是1。这个答案是错误的,可以这样理解,对于函数的f(),在调用它的时候,括号里的变量a和1中变量a并不是同一个变量。在执行2的时候,变量a只是把自己的值赋给了一个在赋f()的定义过程中已经定义好的整形变量,假设为x,即2执行过程拆开看来是这样两句:x=a;和++x;,因此a的值在执行完1、2两句之后不变

  • 相关阅读:
    看鸟哥的Linux私房菜的一些命令自我总结(三)
    NYOJ8——一种排序
    分布计算系统学习随笔 第四章 命名与保护
    NYOJ7——街区最短路径问题
    分布计算系统学习随笔 第一章绪论
    看妮妮视频留下的一些链接~~
    NYOJ6——喷水装置(一)
    看鸟哥的Linux私房菜的一些命令自我总结(二)
    NYOJ5——Binary String Matching
    高性能Javascript笔记
  • 原文地址:https://www.cnblogs.com/luminous-Xin/p/12259632.html
Copyright © 2011-2022 走看看