⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kechengshejijihedeyuusuan.cpp

📁 课程设计求集合的交并补差等
💻 CPP
字号:
#include <stdio.h>
#include <windows.h>
 
void gotoxy(int a,int b)
{ 
    HANDLE  hOutput; 
    COORD loc; 
    loc.X = a; 
    loc.Y=b; 
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleCursorPosition(hOutput, loc); 
}
void clrscr(void) 
{
    CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;                            
    HANDLE    hConsoleOut;
    COORD    Home = {0,0};
    DWORD    dummy;
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy); 
    csbiInfo.dwCursorPosition.X = 0;                                    
    csbiInfo.dwCursorPosition.Y = 0;                                    
    SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);   
}
void clreol(void)  
{
    CONSOLE_SCREEN_BUFFER_INFO    csbiInfo;                            
    HANDLE    hConsoleOut;
    COORD    Home,pos;
    DWORD    dummy;
    hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    Home = csbiInfo.dwCursorPosition;
    pos.X = 80 - csbiInfo.dwCursorPosition.X;
    FillConsoleOutputCharacter(hConsoleOut,' ',pos.X,Home,&dummy);
}
//定义节点
struct Node
{
	char data;
	Node *next;
};
//定义集合链表
struct SET
{
	Node *header,*tailer;
	char set[27];
};
//创建三个集合
SET Set1,Set2,Set3;
//命令
char cmd;
//初始化集合
void InitSet()
{
	Set1.header=(Node *)malloc(sizeof(Node));
	Set1.tailer=Set1.header;
	Set1.tailer->next=NULL;

    Set2.header=(Node *)malloc(sizeof(Node));
	Set2.tailer=Set2.header;
	Set2.tailer->next=NULL;

	Set3.header=(Node *)malloc(sizeof(Node));
	Set3.tailer=Set3.header;
	Set3.tailer->next=NULL;

}
//程序初始化
void Init()
{
	InitSet();

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_RED | 
    FOREGROUND_GREEN | FOREGROUND_BLUE);

	printf("******************************************************************************\n");
	printf("* MakeSet1-1 MakeSet2-2 Union-u Intersection-i Difference-d Restart-r Quit-q *\n");
	printf("******************************************************************************\n");
	gotoxy(0,18);
	printf("xxxx");
	gotoxy(0,18);
	printf("******************************************************************************\n");
	printf("* Enter a operation code:1,2,u,i,d,r OR q                                   *\n");
    //
    
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_GREEN); 
    printf("==============================================================================\n");
//    SetColor();
	printf("* The programe could determine the Union,Intersection and Difference of a Set \n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_BLUE); 
    printf("==============================================================================\n");
	printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_RED | 
    FOREGROUND_GREEN | FOREGROUND_BLUE);
	printf("CopyRight By GongWeijun");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY|FOREGROUND_BLUE); 
	printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11");

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_RED | 
    FOREGROUND_GREEN | FOREGROUND_BLUE); 

    gotoxy(6,8);
	printf("Set1:[]");
	gotoxy(6,12);
    printf("Set2:[]");
}
//数组长度
int Length(char c[])
{
	int i=0;
	char *p;
	p=c;
	while(*p!='\0')
	{
		i++;
		p++;
	}
	return i;
}
//在链表尾添加结点
void Append(Node *p,SET &Set3)
{
	Node *s=(Node *)malloc(sizeof(Node));
	s->data=p->data;
	s->next=NULL;
	Set3.tailer->next=s;
	Set3.tailer=s;
}
//并集
void Union(SET &Set1,SET &Set2)
{
	Node *p1=Set1.header->next;
	Node *p2=Set2.header->next;
	while(p1&&p2)
	{
		if(p1->data<=p2->data)
		{
			Append(p1,Set3);
			if(p1->data==p2->data)
				p2=p2->next;
			p1=p1->next;
		}
		else
		{
			Append(p2,Set3);
			p2=p2->next;
		}
	}
	while(p1)
	{
		Append(p1,Set3);
		p1=p1->next;
	}
	while(p2)
	{
		Append(p2,Set3);
		p2=p2->next;
	}

}
//交集
void Intersection(SET &Set1,SET &Set2)
{
	Node *p1=Set1.header->next;
	Node *p2=Set2.header->next;
	while(p1&&p2)
	{
		if(p1->data<p2->data)
			p1=p1->next;
		else if(p1->data>p2->data)
			p2=p2->next;
		else
		{
			Append(p1,Set3);
			p1=p1->next;
			p2=p2->next;
		}
	}

}
//差集
void Difference(SET &Set1,SET &Set2)
{
	Node *p1=Set1.header->next;
	Node *p2=Set2.header->next;
	while(p1&&p2)
	{
		if(p1->data<p2->data)
		{
			Append(p1,Set3);
            p1=p1->next;
		}
			
		else if(p1->data>p2->data)
			p2=p2->next;
		else
		{
			p1=p1->next;
			p2=p2->next;
		}
	}
    while(p1)
	{
		Append(p1,Set3);
		p1=p1->next;
	}

}
//打印集合
void PrintSet(SET &Set)
{
	printf("[");
	Node *p=Set.header->next;
    while(p!=NULL)
	{
		printf("%c",p->data);
		p=p->next;
	}
	printf("]");

}
//销毁集合
void DestroySet(SET &Set)
{
	Node *p=Set.header->next;
	Node *q;
	while(p!=NULL)
	{
		q=p->next;
		free(p);
		p=q;
	}
	//free(p);
    Set.tailer=Set.header;
	Set.tailer->next=NULL;
}
//创建集合
void CreatSet(SET &Set)
{
	int i=0;
	for(i=0;i<=Length(Set.set);i++)
	{
		if(Set.set[i]>='a'&&Set.set[i]<='z')
		{
			Node *p=(Node *)malloc(sizeof(Node));
			p->data=Set.set[i];
			p->next=NULL;
			Set.tailer->next=p;
			Set.tailer=p;
		}
	}//创建集合链表,清除非法字符

	Node *q=Set.header->next;
	while(q!=NULL)
	{
		Node *w=q->next;
		Node *t=q;
		while(w!=NULL)
		{
			if(q->data==w->data)
			{
				t->next=w->next;
				free(w);
				w=t->next;
			}
			else
			{
				t=w;
				w=w->next;
			}
		}
		Set.tailer=t;
		q=q->next;
	}//清除相同的字符

	int flag=1;
	while(flag!=0&&Set.header!=Set.tailer)
	{
		Node *p=Set.header->next;
		Node *bp=Set.header;
		flag=0;
		while(p!=Set.tailer)
		{
			if(p->data>p->next->data)
			{
				bp->next=p->next;
				bp=bp->next;
				p->next=p->next->next;
				bp->next=p;
				flag++;
			}
			else
			{
				bp=p;
				p=p->next;
			}
			if(bp==Set.tailer)
				Set.tailer=p;
		}
	}//字符排序
}
//执行命令
void Interpret(char cmd)
{
	switch(cmd)
	{
	case '1'://创建集合1
		gotoxy(0,19);
		clreol();
        printf("*Please input the elements of the first set:");
		fflush(stdin);
		gets(Set1.set);
		CreatSet(Set1);
		gotoxy(11,8);
		PrintSet(Set1);
		break;
	case '2'://创建集合2
		gotoxy(0,19);
		clreol();
		printf("*Please input the elements of the second set:");
		fflush(stdin);
		gets(Set2.set);
		CreatSet(Set2);
		gotoxy(11,12);
		PrintSet(Set2);
		break;
	case 'u':
	case 'U'://并集
		gotoxy(0,19);
        printf("* Enter a operation code:1,2,u,i,d,r OR q                                   *\n");
		Union(Set1,Set2);
		gotoxy(6,15);
		clreol();
		printf("Union:");
		PrintSet(Set3);
		DestroySet(Set3);
		break;
	case 'i':
	case 'I'://交集
		gotoxy(0,19);
        printf("* Enter a operation code:1,2,u,i,d,r OR q                                   *\n");
		Intersection(Set1,Set2);
		gotoxy(6,15);
		clreol();
		printf("Intersection:");
		PrintSet(Set3);
		DestroySet(Set3);
		break;
	case 'd':
	case 'D'://差集
		gotoxy(0,19);
        printf("* Enter a operation code:1,2,u,i,d,r OR q                                   *\n");
		Difference(Set1,Set2);
		gotoxy(6,15);
		clreol();
		printf("Difference:");
		PrintSet(Set3);
		DestroySet(Set3);
		break;
	case 'r':
	case 'R'://重新开始
		clrscr();
		DestroySet(Set1);
		DestroySet(Set2);
		DestroySet(Set3);
		Init();
		break;

	}

}
//读入命令
char ReadCommand(char cmd)
{
	
	gotoxy(6,4);
	printf("Operation:");
	do
	{
		fflush(stdin);
		scanf("%c",&cmd);
	}while(!(cmd=='1'||'2'||'u'||'U'||'i'||'I'||'d'||'D'||'q'||'Q'||'r'||'R'));
	return cmd;
}
//显示开始界面
void BeginShow()
{
	gotoxy(25,6);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_RED); 
	printf("Welcome To Use My Promgrame!");

	gotoxy(0,23);
	printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
	printf("CopyRight By GongWeijun"); 
	printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11");
	Sleep(2000);
	clrscr();
}
//显示结束界面
void EndShow()
{
	clrscr();
	gotoxy(30,6);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
    FOREGROUND_INTENSITY | FOREGROUND_RED);
	printf("Thanks For Use!\n");
	gotoxy(0,23);
	printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
	printf("CopyRight By GongWeijun"); 
	printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11\n");
	Sleep(2000);

}
void main()
{

    BeginShow();
	Init();
    char command; 
    do
	{
		command=ReadCommand(cmd);
		Interpret(command);
	}while(command!='q'&&cmd!='Q');

	EndShow();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -