zoukankan      html  css  js  c++  java
  • 20191330雷清逸 Linux C语言编程基础(必做)

    0 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分)

    1. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)

    选择(2.12)内容进行编程练习。

    编程内容为二叉树的层序遍历。
    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    typedef struct BinTreeNode{ //定义二叉树
        char Data;
        struct BinTreeNode *Left;
        struct BinTreeNode *Right;
    }*PBinTreeNode,*BinTree;
    
    BinTree createBinTree() //创建二叉树 先序遍历
    {
        char ch;
        BinTree t;
        ch = getchar();
        if(ch == ' ')
        {
            t = NULL;
        }
        else
        {
            t = (BinTree)malloc(sizeof(struct BinTreeNode));
            t -> Data = ch;
            t -> Left = createBinTree();
            t -> Right = createBinTree();
        }
        return t;
    }
    
    typedef int Position; //队列的顺序存储
    typedef struct QNode * PtrToQNode;
    struct QNode{
        BinTree *Data;
        Position Front,Rear;
        int MaxSize;
    };
    typedef PtrToQNode Queue;
    
    Queue CreatQueue(int MaxSize) //创建队列
    {
        Queue Q = (Queue)malloc(sizeof(struct QNode));
        Q -> Data = (BinTree*)malloc(MaxSize*sizeof(BinTree));
        Q -> Front = Q ->Rear = 0;
        Q -> MaxSize = MaxSize;
        return Q;
    }
    
    bool IsFull(Queue Q) //判断队列是否为满
    {
        return((Q -> Rear+1)%Q -> MaxSize == Q -> Front);
    }
    
    
    bool AddQ(Queue Q,BinTree X) //队列中加入元素
    {
        if(IsFull(Q))
        {
            printf("队列满");
            return false;
        }
        else
        {
            Q -> Rear = (Q -> Rear+1)%Q -> MaxSize;
            Q -> Data[Q -> Rear] = X;
            return true;
        }
    }
    
    bool IsEmpty(Queue Q)
    {
        return (Q ->Front == Q-> Rear);
    }
    
    BinTree DeleteQ(Queue Q)
    {
        if(IsEmpty(Q))
        {
            printf("队列空");
            return 0;
        }
        else
        {
            Q -> Front = (Q -> Front +1)%Q -> MaxSize;
            return Q -> Data[Q->Front];
        }
    }
    
    void LevelorderTraversal(BinTree BT) //层序遍历
    {
        int MaxSize = 100;
        Queue Q;
        BinTree T;
        if(!BT)return;
        Q = CreatQueue(MaxSize);
        AddQ(Q,BT);
        while (!IsEmpty(Q))
        {
            T = DeleteQ(Q);
            printf("%c",T -> Data);
            if (T -> Left)
            {
                AddQ(Q,T->Left);
            }
            if (T -> Right)
            {
                AddQ(Q,T->Right);
            }
        }
    }
    
    int main()
    {
        BinTree BT;
        BT = createBinTree();
        LevelorderTraversal(BT);
        return 0;
    }
    

    测试项目截图:

    运行截图:

    2.建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include,bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)

    项目目录、结构如图:

    tree命令查看项目结构:

    3.进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)

    4.进行静态库,动态库制作和调用练习,提交相关截图(5分)

    静态库:

    动态库:

    5. 进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)

    (gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h
    
    (gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r
    
    (gdb)start:单步执行,运行程序,停在第一执行语句
    
    (gdb)list:查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数),简写l
    
    (gdb)set:设置变量的值
    
    (gdb)next:单步调试(逐过程,函数直接执行),简写n
    
    (gdb)step:单步调试(逐语句:跳入自定义函数内部执行),简写s
    
    (gdb)backtrace:查看函数的调用的栈帧和层级关系,简写bt
    
    (gdb)frame:切换函数的栈帧,简写f
    
    (gdb)info:查看函数内部局部变量的数值,简写i
    
    (gdb)finish:结束当前函数,返回到函数调用点
    
    (gdb)continue:继续运行,简写c
    
    (gdb)print:打印值及地址,简写p
    
    (gdb)quit:退出gdb,简写q
    
    (gdb)break+num:在第num行设置断点,简写b
    
    (gdb)info breakpoints:查看当前设置的所有断点
    
    (gdb)delete breakpoints num:删除第num个断点,简写d
    
    (gdb)display:追踪查看具体变量值
    
    (gdb)undisplay:取消追踪观察变量
    
    (gdb)watch:被设置观察点的变量发生修改时,打印显示
    
    (gdb)i watch:显示观察点
    
    (gdb)enable breakpoints:启用断点
    
    (gdb)disable breakpoints:禁用断点
    
    (gdb)x:查看内存x/20xw 显示20个单元,16进制,4字节每单元
    
    (gdb)run argv[1] argv[2]:调试时命令行传参
    

    6.编写makefile(5分)

  • 相关阅读:
    UVa 1354 天平难题 (枚举二叉树)
    广西邀请赛总结
    UVa 12118 检查员的难题 (dfs判连通, 构造欧拉通路)
    UVA
    Uva 127 "Accordian" Patience (模拟)
    UVA 10539 Almost Prime Numbers( 素数因子)
    HDU 1272 小希的迷宫(并查集)
    HDU 1213 How Many Tables (并查集)
    POJ 2236 Wireless Network(并查集)
    HDU 1233 还是畅通工程 ( Kruskal或Prim)
  • 原文地址:https://www.cnblogs.com/leo-skr/p/15340427.html
Copyright © 2011-2022 走看看