• 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分)

  • 相关阅读:
    python自动化测试应用-番外篇--接口测试2
    python自动化测试应用-番外篇--接口测试1
    篇3 安卓app自动化测试-搞定界面元素
    selenium操作拖拽实现无效果的替代方案
    python自动化测试应用-第7篇(WEB测试)--Selenium进阶篇
    python自动化测试应用-第6篇(WEB测试)--Selenium元素篇
    篇4 安卓app自动化测试-Appium API进阶
    进程和应用程序生命周期
    任务和返回栈
    activity状态变化
  • 原文地址:https://www.cnblogs.com/leo-skr/p/15340427.html
Copyright © 2020-2023  润新知