20191226刘煊赫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

20191226 2021-2022-diocs-Linux C语言编程基础(必做)

一、任务详情

  1. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分)
  2. 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)
  3. 建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include, bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)
  4. 进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)
  5. 进行静态库,动态库制作和调用练习,提交相关截图(5分)
  6. 进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)
  7. 编写makefile(5分)

二、实践过程

 

  1. 习题2.12
    实现代码

#include <stdio.h>
#include <malloc.h>

typedef struct BiTree { // 定义二叉树的结构体
int data;//定义二叉树的数据类型
struct BiTree *lchild, *rchild;//递归定义二叉树的左子树 右子树
} BiTNode, *BiTree;


int CreatTree(BiTree *T) {//先序序列建立二叉树
int element;
// printf("请输入根节点\n");
scanf("%d", &element);
if (element == 0) *T = NULL;
else {
*T = (BiTNode *) malloc(sizeof(BiTNode));
if (!(*T)) {
printf("内存申请失败!\n");
return 0;
}
(*T)->data = element;//生成根节点
// printf("请输入左孩子\n");
CreatTree(&(*T)->lchild);//构造左孩子
// printf("请输入右孩子\n");
CreatTree(&(*T)->rchild);//构造右孩子

}
return 1;
}

void Pretravel(BiTree T) { //先序遍历
if (T == NULL) return;
else {
printf("%d ", T->data);
Pretravel(T->lchild);
Pretravel(T->rchild);
}

}

void Intravel(BiTree T) { //中序先序遍历
if (T == NULL) return;
else {
Intravel(T->lchild);
printf("%d ", T->data);
Intravel(T->rchild);
}
}

void Posttravel(BiTree T) { //后序遍历
if (T == NULL) return;
else {
Posttravel(T->lchild);
Posttravel(T->rchild);
printf("%d ", T->data);
}
}

void Copy(BiTree T, BiTree *NewT) {//二叉树的复制
if (T == NULL) {
NewT = NULL;
return;
} else {
(*NewT) = (BiTNode *) malloc(sizeof(BiTNode));
(*NewT)->data = T->data;
Copy(T->lchild, &(*NewT)->lchild);
Copy(T->rchild, &(*NewT)->rchild);
}
}

int Depth(BiTree T) {//树的深度
if (T == NULL)
return 0;
else {
int m = Depth(T->lchild);
int n = Depth(T->rchild);
if (m > n) return (m + 1);
else return (n + 1);
}
}

int NodeCount(BiTree T) {//统计二叉树中结点的个数
if (T == NULL) return 0;
else return NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}

int LeafCount(BiTree T) {//统计二叉树中叶子结点的个数
if (!T) return 0;
if (!T->lchild && !T->rchild) {//如果二叉树左子树和右子树皆为空,说明该二叉树根节点为叶子节点,加1.
return 1;
} else {
return LeafCount(T->lchild) + LeafCount(T->rchild);
}
}

int Node_1_Count(BiTree T) {//统计二叉树的度为1的结点个数
if (!T) return 0;
if ((!T->lchild) && (T->rchild) || (T->lchild) && (!T->rchild))
return 1 + Node_1_Count(T->lchild) + Node_1_Count(T->rchild);
else
return Node_1_Count(T->lchild) + Node_1_Count(T->rchild);
}


int main() {
BiTree T;

CreatTree(&T);
printf("先序遍历的结果为\n");
Pretravel(T);
printf("\n");
printf("中序遍历的结果为\n");
Intravel(T);
printf("\n");
printf("后序遍历的结果为\n");
Posttravel(T);
printf("\n");

printf("树的深度为%d \n",Depth(T));
printf("二叉树中结点的个数 %d \n",NodeCount(T));
printf("二叉树的度为1的结点个数 %d \n",Node_1_Count(T));
return 0;
}


在Ubuntu下运行结果:

 

 

 

 2.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 test.s

 

 test.o

 

 test.i

 

 test 1

 

 test2

 

 

 

 hello.h

 

 

 hello.c

 

 

main.c

 

 

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

main.c

 

 

 

静态库调用:

 

 

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

 

 


函数断点:

 

 


条件断点:

 

 


查看断点:

 

 

6. 编写makefile
makefile:

 

 makefile结果:

 

 

 

 



posted on 2021-09-26 22:45  20191226刘煊赫  阅读(30)  评论(0编辑  收藏  举报