Linux C语言编程基础-20191304商苏赫
Linux C语言编程基础
任务详情
- 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分)
- 选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)
- 建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include,bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)
- 进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)
- 进行静态库,动态库制作和调用练习,提交相关截图(5分)
- 进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)
- 编写makefile(5分)
实践内容
项目实现两个集合的与、或。one:输入第一个集合的内容。two:输入第二个集合的内容。1/2选择进行交集还是或集
文件项目创建
实践代码
具体代码
#include <stdio.h>
#include <malloc.h>
struct node
{
struct node* next;
int value;
};
typedef struct node *link;
void add(link tail,int v)//为链表添加一个value为v的节点,已包含去重功能
{
link tmp=tail;
while (tmp->next)
{
tmp=tmp->next;
if (v==tmp->value)//这里是去重部分,假如有重复,无需添加
return;
}
link now=(link)malloc(sizeof(struct node));
now->next=tail->next;
now->value=v;
tail->next=now;
}
void deleteAll(link tail)//释放全部的空间
{
while (tail->next)
{
link tmp=tail;
tail=tail->next;
free(tmp);
}
}
int main()
{
int t=0;
int x=0;
int y=0;
link s1=(link*)malloc(sizeof(struct node));
s1->next=NULL;
link s2=(link*)malloc(sizeof(struct node));
s2->next=NULL;//创建两个链表
printf("请输入集合一\n");
while (x<5)
{
scanf("%d",&t);
add(s1,t);
x++;
}
printf("请输入集合二\n");
while (y<5)
{
scanf("%d",&t);
add(s1,t);
y++;
}
int opt;
printf("请输入操作:\n1:并集\n2:交集\n");
scanf("%d",&opt);
if (opt==1)
{
link s3=(link)malloc(sizeof(struct node));
link sv=s3;
s3->next=NULL;
link l1=s1;
link l2=s2;
while (l1->next)//只需将s1,s2中的元素全部添加到s3输出即可
{
l1=l1->next;
add(s3,l1->value);
}
while (l2->next)
{
l2=l2->next;
add(s3,l2->value);
}
while (s3->next)
{
s3=s3->next;
printf("%d ",s3->value);
}
deleteAll(s3);
}
if (opt==2)
{
link l1=s1;
while (l1->next)
{
l1=l1->next;
int check=0;
link l2=s2;
while (l2->next)//s2假如存在和s1相同的元素,那么输出
{
l2=l2->next;
if (l2->value==l1->value)
check=1;
}
if (check)
printf("%d ",l1->value);
}
}
deleteAll(s1);//释放内存
deleteAll(s2);
return 0;
}
gcc相关练习
静态库,动态库制作
gdb相关练习
makefile
因为项目没有规划很完整的结构,各部分也没有分的很详细,只是用了.o文件和.c文件,所以makefile文件也很简单。不过以为空格书写错误make后还是报错了一次,改过后就正常运行了。
遇到问题
代码写完可以运行且没有错误,但是一直有几个warning,一直没搞明白,后续还会继续调试找出问题所在。