石河子大学
《集合的并,交和差运算》程序设计基础课程设计报告
二OO八年六月二十一日
目录
一.编程目的: (2)
二.设计要求 (2)
三.各函数功能说明: (2)
四.函数框架图: (6)
五.总结: (7)
参考书目……………………………………………………………….8.
一.编程目的:
编写数学程序,能够演示执行集合的集合的并,交和差运算的程序,可以任意对两个集合进行集合之间的运算。
通过该程序的编写,我学会了如何更加熟练的掌握类和动态链表,我觉得程序设计很有难度,同时我学会了不会的一定要自己去找资料和问自己的同学或者询问自己的师兄师姐,那样有助于自己的自主学习。
经过自己的查找和询问,让自己对书上的知识理解的更加透彻一点了,该程序让我们把书上的知识灵活运用,让我们把书上的知识变活了,不至于掌握死的知识。
二.设计要求:
用类、数组建立数据库(最少包含3条记录以及具有下列功能)
1.集合的限定:集合元素必须为小写字母(元素为小写字母‘a~z’)2.能够进行集合之间的并集,交集以及差集运算。
3.可以进行最简单的提示(例如输入数据有误时候会进行提示)
三.各函数功能说明:
函数源代码以及函数的功能:
#include<stdio.h>
#include<stdlib.h>
typedef struct pointer
{
//定义一个结构体变量pointer
char dat;
struct pointer *link;
} pointer;
void readdata(pointer *head){
//读集合
pointer *p;
char tmp;
printf("input data ('0' for end):");
//输出结果以‘0’结尾
scanf("%c",&tmp);
while(tmp!='0')
{
if((tmp<'a')||(tmp>'z'))
{
printf("输入错误!必须为小写字母!\n");
return;
}
p=(pointer *)malloc(sizeof(struct pointer));
p->dat=tmp;
p->link=head->link;
head->link=p;
scanf("%c",&tmp);
}
}
void disp(pointer *head){
//显示集合数据
pointer *p;
p=head->link;
while(p!=NULL)
{
printf("%c ",p->dat);
p=p->link;
}
printf("\n");
}
void bing(pointer *head1,pointer *head2, pointer *head3){ //计算集合1与集合2的并
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->dat!=p2->dat))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p2->dat;
p3->link=head3->link;
head3->link=p3;
}
p2=p2->link;
}
}
void jiao(pointer *head1,pointer *head2, pointer *head3) {
//计算集合1与集合2的交
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if((p2!=NULL)&&(p2->dat=p1->dat))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
void cha(pointer *head1,pointer *head2, pointer *head3){ //计算集合1与集合2的差
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if(p2==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}
main(){
pointer *head1,*head2,*head3;
head1=(pointer *)malloc(sizeof(struct pointer));
head1->link=NULL;
head2=(pointer *)malloc(sizeof(struct pointer));
head2->link=NULL;
head3=(pointer *)malloc(sizeof(struct pointer));
head3->link=NULL;
printf("输入集合1和2:\n");
readdata(head1);
readdata(head2);
printf("集合1为:\n");
disp(head1);
printf("集合2为:\n");
disp(head2);
printf("集合1与集合2的并为:\n"); bing(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的交为:\n");
jiao(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的差为:\n");
cha(head1,head2,head3);
disp(head3);
}
运行结果:
四.函数框架图:
五.总结:
在做程序设计前就已经感觉到我设计的《集合的并,交和差运算》比较复杂,不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。
还有可能遇到一些以前没有用到的知识,像怎样在输入有误的情况下进行异常处理,这些都要通过函数的功能来实现,这些对我来说都是新的知识,而且觉得很有难度。
在做程序设计前还必须把书本上的基本知识搞懂,程序设计会用到书中的类做,对类的理解也不是很到位,一些概念的知识还没有很好的理解,所以还需要借助书中的知识来加深对类的理解。
在编写该程序期间,我遇到了非常多的问题,感谢我们班的同学一遍一遍的讲解和演练,让我明白了许多自己以前不懂的问题,我明白了自己知道的是很少的一部分,我们应该自己多抓住时间进行自主学习,不然自己课堂
上学的东西是在是不够自己使用。
在编程的过程中我遇到了非常多的困难,但是通过同学的和师兄帮助渐渐对于程序有更深一步的理解,而且他们也帮我编一个对异常处理的函数,这样在异常处理的过程中就能很好的处理因为在输入有误的情况的错误。
工程完成日期:2008-6-21
高祥
07电信参考书目:
[1]谭浩强,《C++程序设计》,北京,清华大学出版社,2006年.
[2]高涛,陆丽娜《C语言程序设计——实验指导》,西安,西安交通大学出版社,2006.。