输出形式:
中文提示按照m个猴子,数n个数的方法,输出为大王的猴子是几号,建立一个函数来实现此功能;首先用一个数组来存放猴子的编号,从1到m,然后用hzxdw()按题目要求,用两个双重循环来实现猴子大王的选举.
建立二叉树
typedefstructnode是定义二叉树的存储结构
creat(bitree*bt)是用来建立二叉树的输入的
levelorder(bitnode*bt,intm)是用来建立层序遍历序列的
preorder(bitreebt)是用来实现非递归先序遍历的
main是主函数
纸牌游戏
直接用函数main()按照题目要求的规则,只使用数组和用几个循环来实现.
概要设计:
运动会分数统计:
先分配存储的空间;输入运动项目个数、参加的学校的个数、男子比赛项目的个数、女子比赛项目的个数;循环每个项目的输入;自行选择取前三名还是前五名,循环输入姓名、成绩、学校;通过调用子函数进行计算;输出结果。
一元多项式计算:
通过typedefstructpolynode来定义单链表存储多项式的结点结构。
利用尾插法建立一元多项式的链表,先建立多项式的头结点,当表不为空的时候,申请新的结点,并分配存储空间,在当前的尾表做插入,最后将表的最后一个结点的next置NULL,以表示结束。
两个多项式的相加:
当两个多项式均未扫描结束时若指数不等则到下一个结点,若指数相等且不为零时,相应的系数相加,若系数都为零时,则删除接点p与q,并将指针指向下一个结点,否则将q结点加入到和多项式中。
若多项式A中还有剩余,则将剩余的结点加入到和多项式中否则,将B中的结点加入到和多项式中。
两个多项式的相减与相加类似;
总流程图:
文章编辑:
用串来存放一篇文章,文章录入以#作为结束,然后统计文章各种数据,直到#号为止,查找用户要统计的和删除的字符都是一样的思想,删除某一子串,并将后面的字符前移。
Joseph环:
建立单循环链表,依次根据提示输入m,n,及code值。
猴子选大王:
猴子的存放采用链式存储结构,利用循环链表来实现建立的,其表示方法是递归定义的:
typedefstructMnode
{intdata;
structMnode*next;
}Mnode;
根据题目要求,要让这M只猴子顺序围坐一圈,那就得用循环链表king(LinklistL,intn)
在主函数中,根据提示先输入猴子的总的数量m,再输入数的数n,最后调用子函数进行选择,输出猴子王的编号。
建立二叉树:
在typedefstructnode中定义二叉树bitree的左右结点分别为lchild、rchild。
在输入函数中,把输入‘.’代表空;若输入不为空,则分配存储空间,并使其产生左右结点。
在层序遍历函数中,先定义一个数组,然后遍历他的左孩子结点,若不为空就放到数组中,再遍历右孩子结点,若不为空也放到数组中。
二叉树的层序遍历是由上至下一层一层地遍历的。
主函数中,先提示输入一个树调用二叉树输入函数,然后调用层序遍历函数,再调用递归先序遍历函数。
纸牌游戏:
通过循环和连续乘-1进行翻牌,把值为1的定义为朝上的牌。
先定义52个牌;把每个牌都赋值为1;通过循环(52张牌的循环和基数的循环),并判断基数,每翻一次牌都乘-1,最后为1的数就是朝上的牌。
时间复杂度为o[1];
程序实现思想:
首先必须确定实现这个课程设计的主算法是使用链式存储结构还是栈又或是数组和广义表。
根据题目要求需要实现的功能有:
1、数据录入:
输入各种数据;
此处即创建链表的过程,调用一个成员函数负值。
在此处还有一个方法实现,即先输入数据,然后再调用构造实现。
2、数据统计:
存储方式的选择,是使用链式存储结构还是栈又或是数组和广义表;遵守先定义后调用的原则;数组定义时注意下标的起始值和上限;链表定义时注意结点中的项;准确运用结点。
3、数据输出:
按要求的格式打印
调用do循环和for循环,通过遍历链表实现输出,用printf语句输出。
4、查找,修改,删除:
这三个功能的核心是寻找成员,先遍历链表,然后寻找对应的ID号来找到结点,然后再对结点实行删除,修改操作。
详细设计(源程序):
1.运动会分数统计:
#include
#include
#include
#include
#include
#defineMAX50
#defineNULL0
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;
}Items;
typedefstruct{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;
}SCHNode;
typedefstruct{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
voidfunct1(ALLitems*g1,ALLNode*g2)/*输入各个项目成绩*/
{Schools*p1;
Items*p2;
inti,j,k,m,w,h,x;
printf("\n***entertheinformationofeveryitem***\n\n");
printf("enterthetotalnumberofmale-itemsm:
");
scanf("%d",&m);
if(m<0||m>20)
{printf("entererror,m<=20,pleaseenteragain:
");
scanf("%d",&m);
}
printf("enterthetotalnumberoffemale-itemsw:
");
scanf("%d",&w);
if(w<0||w>20)
{printf("entererror,w<=20,pleaseenteragain:
");
scanf("%d",&w);
}
printf("enterthetotalnumberofschoolsn:
");
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{printf("entrerror,n<=20,pleaseenteragain:
");
scanf("%d",&g2->n);
}
g1->z=m+w;
printf("itemnumberforboys1-%d,girls%d-%d",m,m+1,g1->z);
printf("\n\n***record***\n(0standsforending)");
for(k=1;k<=g1->z;k++)/*对两个邻接表置初态*/
{g1->a[k].item=k;
g1->a[k].firstschool=NULL;
}
for(k=1;k<=g2->n;k++)
{g2->b[k].school=k;
g2->b[k].firstitem=NULL;
g2->b[k].score=g2->b[k].boys=g2->b[k].girls=NULL;
}
g2->b[0].score=g2->b[0].boys=g2->b[0].girls=NULL;
while(i!
=0)
{printf("\nitem:
");
scanf("%d",&i);
if(i!
=0)
{printf("1.thethreeor2.thefive\n");
printf("pleasechoose1or2:
");
scanf("%d",&j);
if(j!
=1&&j!
=2)
{printf("entererror,pleaseenteragain:
");
scanf("%d",&j);
}
if(j==1)/*该项目只有前三名时执行此语句*/
{h=3;
do{printf("arrange%d:
school(schoolisnumber)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==3)p2->record=p1->record=2;
if(h==2)p2->record=p1->record=3;
if(h==1)p2->record=p1->record=5;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
if(j==2)/*该项目有前五名时执行此语句*/
{h=5;
do{printf("arrange%d:
school(schoolisnumber)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==5)p2->record=p1->record=1;
if(h==4)p2->record=p1->record=2;
if(h==3)p2->record=p1->record=3;
if(h==2)p2->record=p1->record=5;
if(h==1)p2->record=p1->record=7;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}}}
}
voidsave()/*存储数据文件*/
{FILE*fp1,*fp2;
if((fp1=fopen("sports1","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
}
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
printf("filewriteerror.\n");
fclose(fp2);
}
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{intk;
printf("\n\n***outputthescore***\n");
printf("school\tscore\n");
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",k,g2->b[k].score);
printf("\n");
printf("pressanybuttertothemainmenu......");
getch();
}
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
{intk;
Items*p2;
printf("\n\n***arrangingoutputbyschool***\n");
printf("school\t\t\tthegradeofitem\n");
for(k=1;k<=g2->n;k++)
{printf("%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{printf("item%d:
getthegradeof%d",p2->item,p2->record);
p2=p2->next;
}
printf("\n");
}
printf("\n");
printf("pressanybuttertothemainmenu......");
getch();
}
voidfunct4(ALLNode*g2)/*按学校总分排序输出*/
{inti,j,k;
printf("\n\n***arrangingoutputbythescore***\n");
printf("school\tscore\n");
for(i=2;i<=g2->n;i++)
{g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].scoreb[j].score&&j>0)
{g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
printf("pressanybuttertothemainmenu......");
getch();
}
voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/
{inti,j,k;
printf("\n***arrangingoutputbyboys***\n");
printf("school\tboys\n");
for(i=2;i<=g2->n;i++)
{g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].boysb[j].boys&&j>0)
{g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+