文件读取,排序,统计,结构体(C语言案例)

#include <stdio.h>
#include <stdlib.h>
void readfile();
void sortnum();
void tongji();
/*定义结构体*/
struct people
{
    int a;//序号
    int b;//账号
    int c;//福的种类
    int n;//福的总数
}st[21];
struct people sp[15];//用于存储统计之后的结果
int k=0;//记录统计之后的人数
void main()
{
    printf("从文件中读取的结果是:");
    readfile(st);
    printf("最终的统计结果是:\n");
    tongji(st,sp);
    printf("从小到大的排序结果为:\n");
    sortnum(sp);
}
//读入文件
void readfile(struct people s[])
{
    FILE *fp;
    int i;
    if((fp=fopen("wufu.txt","r"))==NULL)
        printf("文件无法打开!\n");
    for(i=0;i<21;i++)
    {  fscanf(fp,"%d,%d,%d",&s[i].a,&s[i].b,&s[i].c);
    }
    fclose(fp);
    for(i=0;i<21;i++)
    {       printf("%d\t%d\t%d\n",s[i].a,s[i].b,s[i].c);
    }
}
//统计每个人各得几个福
void tongji(struct people s[],struct people s1[])
{
    int i,j,d,y,m=0;
    for(i=0;i<21;i++)
    {
          s[i].n=0;
          for(j=0;j<21;j++)
          {
              if(s[i].b==s[j].b)
                   s[i].n++;
          }
        if(k==0)
        {
             s1[k]=s[i];
             k++;
        }
        else
        {
            y=0;
           for(d=0;d<k;d++)//判断是否已经存在该账号
           {
               if(s1[d].b==s[i].b)
                   y=1;
           }
             if(y!=1)//表明无重复的账号
             {
                 s1[k]=s[i];
                 k++;
             }
        }
    }
    for(i=0;i<k;i++)        
      printf("%d\t%d\n",s1[i].b,s1[i].n);
    printf("集满五福的用户有:\n");
    for(i=0;i<k+1;i++)
    {
        if(s1[i].n==5)
            printf("%d\n",s1[i].b);
    }
}
//冒泡排序
void sortnum(struct people s1[])
{
   int i,j;
   struct people temp;
   for(i=0;i<k-1;i++)
   {
       for(j=0;j<k-1-i;j++)
       {
           if(s1[j].n>s1[j+1].n)
           {
               temp=s1[j];
               s1[j]=s1[j+1];
               s1[j+1]=temp;
           }
       }
   }
   for(i=0;i<k;i++)
      printf("%d\t%d\n",s1[i].b,s1[i].n);
}

这个作业,比较复杂的点就是统计账号收集多少张福字,需要用到循环嵌套,用于统计每个账号出现了几次,然后把统计好的账号存到另一个数组里,在存入的过程中,还需要判断用于存放新信息的数组是否之前已经存过该账号的信息,如果没有就存入,有就不存。其他的都比较简单。

注意:1.需要读入的文件是否放入到项目文件里。

          2.文件中数据的格式是什么,这决定你用fscanf读入文件时的格式。

          3.每个功能以模块的形式实现。

运行结果:


猜你喜欢

转载自blog.csdn.net/qq_41679818/article/details/80990884
今日推荐