c语言课程设计2

来源:互联网 发布:java 静态变量 泛型 编辑:程序博客网 时间:2024/04/30 16:38
/*====================================================================*                   项目:第14组  校运动会项目管理*                   程序:c语言课程设计.c*                   最后修改时间:2016.11.15*                   作者:那又怎样======================================================================*/# include<stdio.h># include<malloc.h>//动态分配内存要包含此文件# include<string.h>int iNum=0;typedef struct _node{    char name[40];//学院名称    char project[40];//比赛项目    int  ranking;//名次    struct _node *next;}node;//=============================函数声明===============================node *Create();//创建链表int iProOfAcademy(node *Head,char strName[40]);void FindNode(node *head);void DeleteNode(node **Head,char _project[40]);void TraverList(node *Head);int main(){    //============================定义变量===============================    int iSelect;    //===============1==================    int M,N;    int m1;    int quotient,remain;//quotient商[数学]    int i=0,j,k;    int iQuoArr[20];    int iRemArr[20];    //================2==================    int iMoun,iMax;    int num=0,iWin=0;//共玩了num局,人赢了iWin局    int iMan;//人搬山的座数    int iCom;//计算机搬的座数    int iRem;//剩余山的座数    int iCompete;    //================3==================    node *Head=NULL;    char name1[40];    printf("请按相应的数字选择要进行的项目:\n");    printf("1:计算分数的精确值\n2:搬山游戏\n3:校运动会项目管理\n");    scanf("%d",&iSelect);    switch(iSelect)    {    case 1://计算分数的精确值        printf("请输入被除数M和除数N(0<M<N<100):\n");        scanf("%d%d",&M,&N);        printf("%d除以%d=%.20lf\n",M,N,(M+0.0)/(N+0.0));        m1=M;            while(1)            {                quotient=(int)(M+0.0)/(N+0.0);//商                remain=M%N;//余数                iQuoArr[i]=quotient;                iRemArr[i]=remain;                if(remain==0)                {                    printf("%d/%d是有限不循环小数\n",m1,N);                    return 0;                }                else                 {                    for(j=1;j<i;j++)                        if(iRemArr[j]==remain)                        {                            printf("%d除以%d是无限循环小数,第一循环节是:",m1,N);                            for(k=j;k<i;k++)                                printf("%d",iQuoArr[k]);                            printf("\n循环节的起止位置序号分别为:%d,%d\n",j,i-1);                                return 0;                        }                }                i++;                M=10*remain;            }        return 0;    case 2://搬山游戏        printf("欢迎来到搬山游戏,游戏规则是:\n你输入山的总数iMoun和每次允许搬山的最大数iMax,然后你先开始\n");            printf("输入你要搬山的座数,我也会搬若干座山,搬最后一座山的输,懂了没?那就开始吧\n");        for(num=1;;num++)        {            printf("请输入iMoun和iMax:");            scanf("%d%d",&iMoun,&iMax);            if(iMoun<=0||iMax<= 0)                printf("请输入正确的数据!!\n");            iRem=iMoun;            while(1)            {                printf("请输入你要搬山的座数:");                scanf("%d",&iMan);                while(iMan<=0||iMan>=iRem)                {                    printf("请重新输入:\n");                    scanf("%d",&iMan);                }                iRem=iRem-iMan;                printf("还剩余%d座山\n",iRem);                if(iRem==1)                {                    printf("你赢了,恭喜!\n");                    break;                }                else if((iRem-1)<=iMax)                    {                        iCom=iRem-1;                        iRem=iRem-iCom;                        printf("我搬%d座山,剩余1座山",iCom);                        printf("很遗憾,你输了");                        break;                    }                else                     {                        iCom=((iRem-1)%(iMax+1));                        if(iCom==0)                        iCom=1;                        iRem=iRem-iCom;                        printf("我搬%d座山,剩余%d座山\n",iCom,iRem);                    }            }                printf("是否继续比赛?\n 1(yes),0(no)\n");                scanf("%d",&iCompete);                if(iCompete==1)                {                    iWin=0;                    continue;                }                else                 {                    printf("共进行了%d局,你%d%d负\n",num,iWin,num-iWin);                    return 0;                }        }        return 0;    case 3://校运动会项目管理        printf("请输入要建立节点的个数:");        scanf("%d",&iNum);        printf("现在你可以依次输入%d组数据\n",iNum);        printf("学院名称\t比赛项目\t名次\n");        Head=Create();        //统计某学院的所有比赛项目数        printf("\n请输入要统计的学院的名称:");        scanf("%s",name1);        printf("%s的所有比赛项目数为%d\n",name1,iProOfAcademy(Head,name1));        printf("名次为第一名的节点为:\n学院名称\t比赛项目\t名次\n");        FindNode(Head);        printf("请输入要删除的比赛项目:");        scanf("%s",name1);        DeleteNode(&Head,name1);        printf("删除后:\n");        printf("学院名称\t比赛项目\t名次\n");        TraverList(Head);        return 0;    }    system("pause");    return 0;}//=========================函数定义=========================//创建链表node *Create(){    node *p1,*p2;    node *_Head=NULL;    char _name[40];    char _project[40];    int _ranking;    int i=1;//节点个数    p1=p2=(node *)malloc(sizeof(node));    scanf("%s%s%d",_name,_project,&_ranking);    strcpy(p1->name,_name);    strcpy(p1->project,_project);    p1->ranking=_ranking;    p1->next=NULL;    _Head=p1;//头指针就出来了    for(;i<iNum;i++)    {        p2=p1;//保存上一次的尾节点        p1=(node *)malloc(sizeof(node));        scanf("%s%s%d",_name,_project,&_ranking);        strcpy(p1->name,_name);        strcpy(p1->project,_project);        p1->ranking=_ranking;        p1->next=NULL;        p2->next=p1;    }    return _Head;}//统计某学院的所有比赛项目数int iProOfAcademy(node *Head,char strName[40]){    node *p;    int i=0;    p=Head;    for(;p!=NULL;p=p->next)    {        if(strcmp(strName,p->name)==0)            ++i;    }    return i;}//查找所有名次为第一名的节点void FindNode(node *head){       node *p=head;    for(;p!=NULL;p=p->next)    {        if(p->ranking==1)            printf("%s\t\t%s\t\t1\n",p->name,p->project);    }}//删除指定项目的所有节点void DeleteNode(node **Head,char _project[40]){    node *p=*Head;    node *p1,*p2;    int m=0;    p1=p2=NULL;    //如果第一个节点是要删除的节点的话    if(strcmp((*Head)->project,_project)==0)    {        p=(*Head);        (*Head)=(*Head)->next;        free(p);        p=NULL;    }    for(m=0;m<iNum;m++)    {        for(p=(*Head);p->next!=NULL;p=p->next)        {        p1=p->next;                                                                                                                         p2=p;        if(strcmp(p1->project,_project)==0)        {            p2->next=p1->next;            free(p1);            p1=NULL;            break;        }        }    }}//遍历链表void TraverList(node *Head){     node *p=Head;    for(;p!=NULL;p=p->next)    {        printf("%s\t\t%s\t\t%d\n",p->name,p->project,p->ranking);    }}

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击