| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:各位高手帮忙给编个完成的程序
只看楼主 加入收藏
hunnter
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-4-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
各位高手帮忙给编个完成的程序
题目如下:
某学校召开运动会,共有30个班,500个选手参赛。已知文本文件f1.txt中存放有500个选手的数据(学号、姓名、班级、成绩和名次),存放格式是每行存放一个选手的数据,每个数据之间用空格隔开,假定第一名得7分,第二名5分,第三名4分,第四名3分,第五名2分,第六名1分,其他名次不得分,请编写程序计算出每个班级的总得分,并按班级总得分从高到低的顺序存放到文本文件f2.txt中。
请各位高手帮忙,本人急用
搜索更多相关主题的帖子: 文本文件 运动会 编写程序 
2010-04-16 21:27
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
问下 f1.txt  数据 要自己输入吗  
还是只需要读这一个操作就可以啦?
2010-04-16 23:38
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
f2.txt  中 存放的是 以班级为单位(30)   还是 以 一个学生(500)
2010-04-16 23:42
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define  LEN   sizeof( struct student )
#define  STU_SUM   4 //定义学生的总人数
#define  CLASS_SUM  2 //定义班级的总数

typedef struct student
{
    int number;//学号
    char name[10];//姓名
    int clas;//班级
    int mark;//成绩
    int ranking;//排名
    struct student *next;
}*Stu;

typedef struct  Class
{
    int clas;
    int mark;
    struct Class *next;
}*Cla;

void Init( Cla &c );//初始化班级
void Creat_File();//创建文件
void Read_File( Stu &s );//读取文件
void Creat_List( Stu &s );//建立链表
void Total( Cla &c, Stu s );//计算班级总分
void Arrang( Cla &c );//班级成绩排序高到低
void Save( Cla c );//保存信息


int main()
{
    Cla C;
    Stu S;

    Creat_List(S);
    Init( C );
    Creat_File();
    Read_File(S);
    Total( C, S );
    Arrang( C );
    Save( C );
    return 0;
}

//初始化班级
void Init( Cla &c )
{
    c = (Cla) malloc (sizeof(struct Class));
    if( !c )
        exit(0);
    c->next = NULL;
    Cla temp;
    int i;
    for( i=1; i<=CLASS_SUM; i++ )
    {
        temp = (Cla) malloc (sizeof(struct Class));
        temp->clas = i;
        temp->mark = 0;
        temp->next = c->next;
        c->next = temp;
    }
}

//创建文件
void Creat_File()
{
    FILE *fp;
    Stu temp;
    temp = (Stu) malloc (LEN);
    int i;

    if( !(fp=fopen("d:\\f1.txt","w")) )
        exit(0);
    for( i=0; i<STU_SUM; i++ )
    {
        printf("输入第 %d 个学生的信息\n", i+1);
        printf("输入学号:"); scanf("%d", &temp->number);
        printf("输入姓名:"); scanf("%s", temp->name);
        printf("输入班级:"); scanf("%d", &temp->clas);
        printf("输入成绩:"); scanf("%d", &temp->mark);
        printf("输入排名:"); scanf("%d", &temp->ranking);
        fprintf(fp, "%d %s %d %d %d %d\n", temp->number,temp->name,temp->clas,temp->mark,temp->ranking);
    }
    fclose(fp);
}

//读取文件
void Read_File( Stu &s )
{
    if( !s )
        return;
    FILE *fp;
    Stu  temp;
    char c;

    if(!(fp = fopen("d:\\f1.txt","r")))
        return;
    while( !feof(fp) )
    {
        temp = (Stu) malloc (LEN);
        fscanf(fp, "%d %s %d %d %d %d%c", &temp->number,temp->name,&temp->clas,&temp->mark,&temp->ranking,&c);
        temp->next = s->next;
        s->next = temp;
    }
    fclose(fp);
}

//建立链表
void Creat_List( Stu &s )
{
    s = (Stu) malloc (LEN);
    if( !s )
        exit(0);
    s->next = NULL;
}

//计算班级总分
void Total( Cla &c, Stu s )
{
    if( !c || !s )
        return;
    Stu p = s->next;
    Cla f = c->next;

    while( p )
    {
        f = c->next;
        while( f )
        {
            if( f->clas==p->clas )
                f->mark += p->mark;
            f = f->next;
        }
        p = p->next;
    }
}

//班级成绩排序
void Arrang( Cla &c )
{
    Cla d, p = c->next, fd = c, temp = c->next;

    if( !p || !p->next )
        return;

    while( temp )
    {
        d = p = temp;
        fd = c->next;
        while( p )
        {
            if(  p->mark < d->mark )
            {
                d = p;
                while( fd->next != d )
                    fd = fd->next;
            }
            p = p->next;
        }
        if( d == temp )
            temp = temp->next;
        fd->next = d->next;
        d->next = c->next;
        c->next = d;
    }
}

//保存信息
void Save( Cla c )
{
    Cla temp = c->next;
    if( !temp )
        return;
    FILE *fp;
    if( !(fp = fopen("d:\\f2.txt","w")))
        exit(0);
    while( temp )
    {
        fprintf(fp, "%d %d\n", temp->clas,temp->mark);
        temp = temp->next;
    }
    fclose(fp);
}
2010-04-17 03:00
快速回复:各位高手帮忙给编个完成的程序
数据加载中...
 
   



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

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