木叶乌鸦 发表于 2006-6-28 00:34

见到一个程序但系有吾明~边位可以讲解下~

#include
#include
#include
#include

#define K 5
#define ERROR 0
#define OK 1

char km; //科目
int KM=0 ; //科目数
int n=0 ; //人数

/*单链表结构*/
typedef struct LNode
{
    long ID ;//ID号
    char name; //姓名
    char ***; //性别
    intage ;//年龄
    double cj; //成绩
    struct LNode*next ;
}
*LinkList ;

LinkList Insert(LinkList head);
LinkList sort(LinkList head,int x);
void m(int x);

/*创建一个带头结点的空链表*/
LinkList create(void)
{
    LinkList L ;
    L=(LinkList)malloc(sizeof(struct LNode));
    if(L!=NULL)L->next=NULL ;
    return L ;
}

/*设置科目:返回科目数*/
int setKM()
{
    int i=0,x=0 ;
    if(KM>0)
    {
      printf("当前设置:");
      for(i=0;i      printf("%s ",km[ i]);
      printf("\n");
    }
    printf("设置科目数<最大值:%d>:",K);
    scanf("%d",&x);
    if(x==0)return KM ;
    while(x<1||x>K)
    {
      system("cls");
      m(1);
      printf("输入不合法!\n");
      printf("设置科目数<最大值:%d>:",K);
      scanf("%d",&x);
      if(x==0)return KM ;
    }
    for(i=0;i    {
      printf("输入第%d门科目名称:",i+1);
      scanf("%s",km[ i]);
    }
    return x ;
}


/*读入数据*/
int loadkm()
{
    int i ;
    FILE*fp ;
    if((fp=fopen("km.txt","rb+"))==NULL)
    fp=fopen("km.txt","wb+");
    for(i=0;!feof(fp);i++)
    {
      fscanf(fp,"%s\n",km[ i]);
      if(strlen(km[ i])!=0)KM++;
    }
    fclose(fp);
    return OK ;
}


LinkList load(LinkList head)
{
    int i=0,j ;
    LinkList s,t,p ;
    FILE*fp ;
    loadkm();
    if((fp=fopen("data.txt","a+"))==NULL)return head ;
    if(fgetc(fp)==EOF)
    {
      system("cls");
      m(1);
      while(KM==0)
      {
            system("cls");
            m(1);
            printf("没有科目,请设置科目!\n");
            KM=setKM();
            printf("\n");
      }
      printf("添加数据:\n");
      Insert(head);
      return head ;
    }
    //fseek(fp,0L,0);
    rewind(fp);
    p=(LinkList)malloc(sizeof(struct LNode));
    fscanf(fp,"%ld %s %s %d ",&p->ID,p->name,p->***,&p->age);
    for(i=0;i    for(i=KM;icj[ i]=0.0 ;
    p->next=NULL ;
    head->next=p ;
   
    while(!feof(fp))
    {
      p=p->next ;
      p=(LinkList)malloc(sizeof(struct LNode));
      fscanf(fp,"%ld %s %s %d ",&p->ID,p->name,p->***,&p->age);
      for(i=0;i      for(i=KM;icj[ i]=0.0 ;
      p->next=NULL ;
      i=j=0 ;
      s=head->next ;
      while(s->ID<=p->ID&&p->next)
      {
            s=s->next ;
            i++;
      }
      s=head->next ;
      while(s->next&&j      {
            s=s->next ;
            j++;
      }
      t=s->next ;
      s->next=p ;
      p->next=t ;
    }
    s=head ;
    i=0 ;
    while(s->next)
    {
      s=s->next ;
      i++;
      n=i ;
    }
    fclose(fp);
    return head ;
}

/*保存文件*/
int save(LinkList head)
{
    int i ;
    LinkList p=head->next ;
    FILE*fp,*fpp ;
    if((fp=fopen("data.txt","w+"))==NULL)return ERROR ;
    if((fpp=fopen("km.txt","wb+"))==NULL)return ERROR ;
   
    for(i=0;i    fprintf(fpp,"%s\n",km[ i]);
    while(p)
    {
      fprintf(fp,"%ld %s %s %d ",p->ID,p->name,p->***,p->age);
      for(i=0;i      p=p->next ;
    }
    fclose(fp);
    fclose(fpp);
    return OK ;
}

/*平均成绩*/
double pj(LinkList p)
{
    int i ;
    double pj=0 ;
    for(i=0;i    pj+=p->cj[ i];
    pj/=KM ;
    return pj ;
}

/*排头*/
bt()
{
    int i ;
    printf("ID号\t姓名\t性别\t年龄\t");
    for(i=0;i<KM;I++)PRINTF("%S\T",KM);
    printf("平均\n\n");
}

/*输出当前指针信息*/
void put(LinkList p)
{
    int i ;
    printf("%ld\t",p->ID);
    printf("%s\t",p->name);
    printf("[%s]\t",p->***);
    printf("%d\t",p->age);
    for(i=0;i<KM;I++)PRINTF("%G\T",P->cj[ i]);
    printf("%3.2f\n",pj(p));
}

/*输出信息*/
void all(LinkList head,int x)
{
    LinkList p=head->next ;
    int i,j=0 ;
    int k,a1,a2 ;
    long d ;
    double c1,c2,z={0},zpj=0.0 ;
    char n,s;
    if(x==0)
    {
      system("cls");
      bt();
      while(p)
      {
            put(p);
            for(i=0;icj[ i];
            j++;
            if(j%20==0)
            {
                printf("\n按任意键继续");
                getch();
                system("cls");
                bt();
            }
            p=p->next ;
      }
    }
   
    if(x==1)
    {
      printf("ID号:");
      scanf("%ld",&d);
      system("cls");
      bt();
      while(p)
      {
            if(d==p->ID)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                  printf("\n按任意键继续");
                  getch();
                  system("cls");
                  bt();
                }
            }
            p=p->next;
      }
    }
   
    if(x==2)
    {
      printf("姓名:");
      scanf("%s",n);
      system("cls");
      bt();
      while(p!=NULL)
      {
            if(strcmp(n,p->name)==0)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                  printf("\n按任意键继续");
                  getch();
                  system("cls");
                  bt();
                }
            }
            p=p->next;
      }
    }
   
    if(x==3)
    {
      printf("年龄范围:");
      scanf("%d",&a1);
      scanf("%d",&a2);
      system("cls");
      bt();
      while(p)
      {
            if(p->age>=a1)
            {
                if(p->age<=a2)
                {
                  put(p);
                  for(i=0;icj[ i];
                  j++;
                  if(j%20==0)
                  {
                        printf("\n按任意键继续");
                        getch();
                        system("cls");
                        bt();
                  }
                }
            }
            p=p->next ;
      }
    }
   
    if(x==4)
    {
      printf("1.男 2.女\n");
      printf("性别:");
      scanf("%d",&x);
      if(x==1)strcpy(s,"男");
      else if(x==2)strcpy(s,"女");
      else strcpy(s,"男");
      
      system("cls");
      bt();
      while(p)
      {
            if(strcmp(s,p->***)==0)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                  printf("\n按任意键继续");
                  getch();
                  system("cls");
                  bt();
                }
            }
            p=p->next ;
      }
    }
   
    if(x==5)
    {
      printf("当前设置:");
      for(i=0;i      {
            printf("%d.",i+1);
            printf("%s ",km[ i]);
      }
      printf("\n选择科目:");
      scanf("%d",&k);
      while(k>KM||k<=0)
      {
            system("cls");
            m(2);
            printf("超出范围!\n");
            printf("当前设置:");
            for(i=0;i            {
                printf("%d.",i+1);
                printf("%s ",km[ i]);
            }
            printf("\n选择科目:");
            scanf("%d",&k);
      }
      
      printf("成绩范围:");
      scanf("%lf",&c1);
      scanf("%lf",&c2);
      if(c2>100.0)c2=100.0 ;
      system("cls");
      bt();
      while(p)
      {
            if(p->cj>=c1)
            {
                if(p->cj<=c2)
                {
                  put(p);
                  for(i=0;icj[ i];
                  j++;
                  if(j%20==0)
                  {
                        printf("\n按任意键继续");
                        getch();
                        system("cls");
                        bt();
                  }
                }
            }
            p=p->next ;
      }
    }
    printf("\n共有 %d 人\t",j);
    if(j>0)printf("各科平均成绩:\t");
    for(i=0;i    {
      z[ i]/=j ;
      if(z[ i]>=0&&z[ i]<=100)printf("%.2f\t",z[ i]);
      zpj+=z[ i];
    }
    zpj/=KM ;
    if(zpj>=0&&zpj<=100)printf("%3.2f\n",zpj);
    getch();
}

/*逆序表*/
void L_convert(LinkList head)
{
    LinkList s=head ;
    LinkList p1=(LinkList)malloc(sizeof(struct LNode));
    LinkList p2=(LinkList)malloc(sizeof(struct LNode));
    LinkList p3=(LinkList)malloc(sizeof(struct LNode));
    p1=s->next ;
    p2=p1->next ;
    p3=p2->next ;
    p1->next=NULL ;
    while(p3->next)
    {
      p2->next=p1 ;
      p1=p2 ;
      p2=p3 ;
      p3=p3->next ;
    }
    p2->next=p1 ;
    p3->next=p2 ;
    s->next=p3 ;
    head=s ;
}

木叶乌鸦 发表于 2006-6-28 00:35

觉得好似缺左D野~

可乐pp 发表于 2006-6-28 00:39

感觉不是偶学的东西

木叶乌鸦 发表于 2006-6-28 00:44

C既文件 指针同链表咋~

powerwind 发表于 2006-6-28 00:48

太长了,楼主又不加点注释!
太晚了,又没宵夜。
页: [1]
查看完整版本: 见到一个程序但系有吾明~边位可以讲解下~