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("请输入集合一
");
	while (x<5)
	{
	    scanf("%d",&t);
		add(s1,t);
		x++;
	}
	printf("请输入集合二
");
	while (y<5)
	{
	    scanf("%d",&t);
		add(s1,t);
		y++;
	}
	int opt;
	printf("请输入操作:
1:并集
2:交集
");
	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,一直没搞明白,后续还会继续调试找出问题所在。

原文地址:https://www.cnblogs.com/shoudeyunkaijianyueming/p/15340416.html