| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 620 人关注过本帖
标题:帮改一下。。。谢谢!!!!
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:8 回复次数:5 
帮改一下。。。谢谢!!!!
问题描述

学生信息由学号,姓名,性别,语文成绩,数学成绩,英语成绩,平均分和总分构成。
学号、姓名长度不超过20,学生人数不超过100。
写一个处理学生信息的程序,要求有以下功能
1)插入学生信息,当待插入的学号是从来就没有插入过的,则插入成功;否则插入不成功。
命令格式如下:
INSERT id name sex s1 s2 s3
表示插入一个学生信息。
插入成功显示插入的学生信息,格式如下:
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
如果已经有学号为id的学生信息,则插入不成功,则显示“Failed”
2)显示所有学生信息,命令格式如下:
LIST
按照学号从小到大的顺序显示所有学生信息。每个学生信息一行,格式如下
学号 姓名 性别 语文成绩 数学成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
3)
FIND id
查找学号为id的学生,查找成功就显示学生信息,格式如下
学号 姓名 性别 语文成绩 数学成绩 平均成绩 总成绩
查找不成功,则显示“Failed”
4)退出程序,命令格式如下:
QUIT
输出"Good bye!"后结束程序。

现在给定一个学生学号、姓名和三门课成绩,请输出该生的信息。
输入的最后一条命令总是QUIT
设计一个结构体表示学生信息。
分别设计两个函数,来处理学生信息的插入与输出。
设计一个函数对所有学生信息按学号进行排序。
再设计一个函数输出所有学生信息。在主函数中调用插入学生信息与显示所有学生信息的函数。

输入

输入有多行,每行一条命令,命令格式有:
INSERT id name sex s1 s2 s3
插入一条学生信息
LIST
按照学号从小到大的顺序显示所有学生信息,每个学生信息一行。
FIND id
查找学号为id的学生
QUIT
退出程序

输出

输出有多行,每个输入命令都有对应的输出,格式分别如下:
INSERT id name sex s1 s2 s3
插入后显示插入的学生信息,格式如下:
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
如果已经有学号为id的学生信息,则插入不成功,则显示“Failed”
LIST
按照学号从小到大的顺序显示所有学生信息,每个学生信息一行。每行格式如下:
学号 姓名 性别 语文成绩 数学成绩  英语成绩 平均成绩 总成绩
中间有一个空格分开,所有成绩保留2位小数。
FIND id
查找学号为id的学生,查找成功显示学生信息,格式如下
学号 姓名 性别 语文成绩 数学成绩 英语成绩 平均成绩 总成绩
如果不存在学号为id的学生,则查找不成功,显示“Failed”
QUIT
输出"Good bye!"后结束程序。

输入样例

INSERT 09001 zhanghong F 78 82 87.5
INSERT 09003 lisi M 68 62 67.5
INSERT 09001 zhanghong F 78 82 87.5
FIND 09001
INSERT 09002 wangwu M 78 72 77.5
LIST
QUIT

输出样例

09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09003 lisi M 68.00 62.00 67.50 65.83 197.50
Failed
09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09002 wangwu M 78.00 72.00 77.50 75.83 227.50
09001 zhanghong F 78.00 82.00 87.50 82.50 247.50
09002 wangwu M 78.00 72.00 77.50 75.83 227.50
09003 lisi M 68.00 62.00 67.50 65.83 197.50
Good bye!



#include<stdio.h>
#include<string.h>
struct student
{
    char xuehao[20];
    char name [20];
    char sex;
    double score[3];
    double ave;
    double sum;
};

struct temp
{
    char xuehao[20];
    char name [20];
    char sex;
    double score[3];
    double ave;
    double sum;
}top;

int Insert(struct student stu[],int m)
{
    int i,j,k=0;
    scanf("%s %s %c",top.xuehao,top.name, &top.sex);
    top.sum=0;
    for(i=0; i<3; i++)
    {
        scanf("%lf", &top.score[i]);
        top.sum += top.score[i];
    }
    top.ave=top.sum/3;
    for(i=0;i<m-1;i++)
    {
        if(strcmp(stu[i].xuehao,top.xuehao)==0 )
        {
            printf("Failed\n");
            k=1;
        }
    }
    if(k==0)
    {
        strcpy(stu[m].xuehao,top.xuehao);
        strcpy(stu[m].name,top.name);
        stu[m].sex=top.sex;
        for(j=0; j<3; j++)
        {
            stu[m].score[j]=top.score[j];
        }
        stu[m].ave=top.ave;
        stu[m].sum=top.sum;
    }
    return k;
}

void Find (struct student stu[],char a[],int n)
{
    int j,l=0,i,k;
    for (j=0;j<n;j++)
    {
        if (strcmp(stu[j].xuehao,a)==0)
        {
            l=1;
            k=j;
        }
    }
    if (l==1)
    {
        printf("%s %s %c ",stu[k].xuehao,stu[k].name,stu[k].sex);
        for(i=0; i<3; i++)
        {
            printf(" %.2f",stu[k].score[i]);
        }
        printf(" %.2f %.2f\n",stu[k].ave,stu[k].sum);
    }
    if (l==0)
        printf ("Failed\n");

}

void List(struct student stu[], int n)
{
    int i,j;
    printf("%s %s %c ",stu[0].xuehao,stu[0].name,stu[0].sex);
    for(j=0;j<3;j++)
    {
        printf("%.2f ", stu[0].score[0]);
    }
    printf("%.2f %.2f\n",stu[0].ave,stu[0].sum);
    for(i=1;i<n && i>=1;i++)
    {
        if(strcmp(stu[i].xuehao,stu[i-1].xuehao)!=0)
        {
            printf("%s %s %c ",stu[i].xuehao,stu[i].name,stu[i].sex);
            for(j=0;j<3;j++)
            {
                printf("%.2f ", stu[i].score[j]);
            }
            printf("%.2f %.2f\n",stu[i].ave,stu[i].sum);
        }
    }
}

void output(struct student stu[],int m)
{
    int j;
    printf("%s %s %c ", stu[m].xuehao, stu[m].name, stu[m].sex);
    for(j=0; j<3; j++)
    {
        printf("%.2f ", stu[m].score[j]);
    }
    printf("%.2f %.2f\n", stu[m].ave, stu[m].sum);

}

void selSort(struct student *a, int n)
{
    int i, j, k;
    struct student t;
    for(i=0; i<n-1; i++)
    {
        k=i;
        for(j=i+1; j<n; j++)
            if (strcmp(a[k].xuehao,a[j].xuehao)>0)
                k=j;
        if(k != i)
        {
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
    }
}

int main()
{
    struct student stu[100];
    char op[101];
    char a[20];
    int b;
    int d=0;
    while(scanf("%s", op))
    {
        switch(op[0])
        {
            case 'I':
                b=Insert(stu,d);
                if(b==0)
                {
                    d++;
                    output(stu,d-1);
                }
                break;
            case 'L':
                selSort(stu,d);
                List(stu,d);
                break;
            case 'Q':
                printf("Good bye!\n");
                return 0;
            case 'F':
                scanf("%s",a);
                Find(stu,a,d);
                break;
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 英语成绩 学生人数 总成绩 数学 姓名 
2009-12-19 19:32
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
你的问题也不写一下,,这样找别人的错误很麻烦的。

离恨恰如春草,更行更远还生。
2009-12-19 22:14
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
问题就是运行后测试数据答案是正确的,但是我提交后是答案错误。。。。。
是不是有什么情况没有考虑到啊?

学无止境!
2009-12-20 14:44
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:8 
for(i=0;i<=m-1;i++)         这里改成i<=m-1;如果是小于m,当第一次输入同一个学号连续两次写入,他不会出现错误,
    {                          INSERT 09002 ZHANGHONG M 45 65 85.5     INSERT 09002 ZHONGHONG F 98 65 35.5
                               试验一下,连续写上面两条,按理应该出错,但却能正确写入
        if(strcmp(stu[i].xuehao,top.xuehao)==0 )
        {
            printf("Failed\n");
            k=1;
        }
    }

离恨恰如春草,更行更远还生。
2009-12-20 16:11
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
回复 3楼 liucs116
改了之后还是答案错误。。。。。。
是不是那个Find函数有什么问题,还是其他的小问题。。。。。。
谢谢了 。。。。。。。。。。。。。

学无止境!
2009-12-21 18:47
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
收藏
得分:0 
。。。。。。谢了,我已经改好了。。。。麻烦了。。。。

学无止境!
2009-12-21 18:56
快速回复:帮改一下。。。谢谢!!!!
数据加载中...
 
   



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

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