| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 939 人关注过本帖
标题:[!!!!]关于统计于排序的一些小小挫折,有人可以告诉我思路吗???~
只看楼主 加入收藏
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:12 
[!!!!]关于统计于排序的一些小小挫折,有人可以告诉我思路吗???~
xid-2079983_1.pdf (260.63 KB)

这是我的作业要求,就是有一份学生的成绩数据存入在file里,格式是:学生号,考试1成绩,考试2成绩,考试3成绩,考试4成绩,  我们的要求是把这些数据存入,然后统计出各个考试在0-9,10-19。。。。。90-100区间里的次数是多少,然后最后选其中一个考试从大到小排序。下面是数据和目前为止我写的程序。我的QQ 746942947,请各位告诉我哪里可以改正!!谢谢!!
#include<stdio.h>
#include<math.h>
typedef struct{
    int result[5];
    }student;

student st_r[40];
 
int main (void)
{
    FILE *my_in;
    int a =0,count[50][50],
        b =0,number,j,num_stu,num[100];
    float sum = 0,average, data;
    char i,ch;
     printf("\n\nProgram to display the four exam's results of students");

my_in = fopen ("U:\\datafile.txt","r");
     if (my_in == NULL)
    {
        printf("\nError opening input file, program exiting\n");
          printf("\nType a number & press the enter key to finish");
              
        scanf("%d",&a);
         return(1);
    }


  printf("\nProgram reading data from file\n");

while (fscanf(my_in,"%d,",&number)!=EOF)
       {
      st_r[b].result[a] = number;
      a++;
      
    if (a==5)
    {
        a= 0;
        b++;
         }
         }   
         
   printf("\nPLJ b contains %d \n",b);  
   num_stu = b;
      
     for(b = 0; b < num_stu; b++)
 {
     for(a= 0; a < 5; a++)
  {
     printf("%d,", st_r[b].result[a]);
  }
    printf("\n");
    }
    while(!feof(my_in))
    {
     ch=fgetc(my_in);
    for ( i='0';i<='9';++i)
     {   
     if (ch/10==i)    num[i]++;
      }
      }
      for ( i='0';i<='9';++i)  
     {
     printf("%d,",num[i-'0']);
           }
       printf("\n");
         

//printf("\n0-9   %d\n10-19   %d\n20-29  %d \n30-39  %d\n40-49\ %dn50-59 %d\n60-69%d \n70-79%d \n80-89 %d\n90-100%d",count[0][a-1],count[1][a-1],count[2][a-1],count[3][a-1],count[4][a-1],count[5][a-1],count[6][a-1],count[7][a-1],count[8][a-1],count[9][a-1][7],count[a-1][8],count[a-1][9]);
  printf("\n\n");
  

  

  fclose(my_in);
 
  printf("\nProgram complete.");
  printf("\nType a number & press the enter key to finish");

  scanf("%d",&a);


return(0);
}


这个是数据
105683,23,65,0,100
105475,96,72,35,61
105286,23,45,15,86
104762,23,17,5,56
搜索更多相关主题的帖子: 考试 include result file 
2013-04-15 05:50
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
根据我所学的知识,我觉得BUBBLE能解决排序的问题
2013-04-15 05:51
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
我不许要各位帮我写全部,因为我只是卡住到统计那里了,我的想法是把数据除于10,然后根据十位数是0,1,2,3,4,5,6,7,8,9来判断并代表0-9,10-19。。。。90-100的区间
2013-04-15 05:53
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
那里有个//printf是我尝试的一个东西,当不行,所以我把他评论掉了
2013-04-15 05:54
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
我还有一种统计方法是这样的
printf("\n");
 for(b = 0; b < num_stu; b++)
 { for(a= 1; a < 5; a++)
if((st_r[b].result[a]>=0)&&(st_r[b].result[a]<10))

count[0][a-1]++;
else if(st_r[b].result[a]>=10&&st_r[b].result[a]<20)

count[1][a-1]++;
else if(st_r[b].result[a]>=20&&st_r[b].result[a]<30)

count[2][a-1]++;
else if(st_r[b].result[a]>=30&&st_r[b].result[a]<40)
count[3][a-1]++;
else if(st_r[b].result[a]>=40&&st_r[b].result[a]<50)
count[4][a-1]++;
else if(st_r[b].result[a]>=50&&st_r[b].result[a]<60)
count[5][a-1]++;
else if(st_r[b].result[a]>=60&&st_r[b].result[a]<70)
count[6][a-1]++;
else if(st_r[b].result[a]>=70&&st_r[b].result[a]<80)
count[7][a-1]++;
else if(st_r[b].result[a]>=80&&st_r[b].result[a]<90)
count[8][a-1]++;
else if(st_r[b].result[a]>=90&&st_r[b].result[a]<=100)
count[9][a-1]++;


}

printf("\n     Exam 1      Exam 2      Exam 3      Exam 4");

{ for(a= 1; a < 5; a++)

printf("%d  %d,          %d,       %d,      %d,     %d , %d , %d, %d , %d , %d ",count[0][a-1],count[1][a-1],count[2][a-1],count[3][a-1],count[4][a-1],count[5][a-1],count[6][a-1],count[7][a-1],count[8][a-1],count[9][a-1]);

}
我觉得太复杂,而且输出不对,很着急,但找不到问题
2013-04-15 05:56
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
我没用FUNCTION的原因是因为我想把它写在一个函数内,到时再分开,不过我觉得排序那里得用结构指针不得不用其他的小函数了
2013-04-15 06:25
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:7 
(1)读文件数据不必那么复杂,只要只要文件的数据格式就简单了,你的文件好像是一个成绩记录有6项数据组成,没想数据似乎是整数,数据之间使用逗号分隔,使用fscanf(my_in,"%d,%d,%d,%d,%d,%d",&a,&b,&c,&d,&e,&f)就可以一次读取6个数据
(2)统计更简单,假设a[10]存储10个分数段的人数,s是一个成绩,把s归到对应的分数段只要执行a[s/10]++就行了
2013-04-15 07:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
搞定了没有?

授人以渔,不授人以鱼。
2013-04-15 11:12
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
回复 8楼 TonyDeng
还没啊,我都快疯了,我觉得if else那个还靠谱点,除于10看十位数的好像还有很大缺陷,求教导
2013-04-15 17:56
高佬在裸奔
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-4-15
收藏
得分:0 
回复 7楼 helloUJS
这样太简单了,后面就难做,一定要存在数组里面才好做而且好看
2013-04-15 17:58
快速回复:[!!!!]关于统计于排序的一些小小挫折,有人可以告诉我思路吗??? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017166 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved