| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 322 人关注过本帖
标题:调试除了错误改不掉 涉及算法 求大神指点。
取消只看楼主 加入收藏
a836055741
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-9-2
收藏
 问题点数:0 回复次数:0 
调试除了错误改不掉 涉及算法 求大神指点。
代码如下      一个评分系统    就是 三个歌手  7个评委评分,去掉最低分,去掉最高分,然后求平均分为最后成绩,然后把最后成绩再排下
叩谢!!!1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"conio.h"
#define N 4
#define P 8
struct singer
{
    char num[20];
        char name[10];
    float grades[P];
    double ave[10];
};
void menu();
int reads(struct singer sin[N]);
void save(struct singer sin[N],int n);
void add();
void del();/*shan chu*/
void sort();/*排序*/
void query();/*查询*/
void change();
void show();
void main()
{
    int n;
    while(1)
    {
        menu();
        printf("\n 请输入您要选择的操作序号,按回车键确认:");
        scanf("%d",&n);
        switch(n)
        {
        case 1: add();break;
        case 2: del();break;
        case 3: query();break;
        case 4: show();break;
        case 5: sort();break;
        case 6: change();break;
        case 7: save();break;
        case 8: exit(0);
default: printf("输入错误,请输入列表中存在的序号!\n");
        }
    }
}
void menu()
{
    printf("       ************************* 评分管理系统************************ ");
    printf("\n                               1  添加选手数据");
    printf("\n                               2  删除选手数据");
    printf("\n                               3  查询选手数据");
    printf("\n                               4  显示选手数据");
    printf("\n                               5  总成绩排序");
    printf("\n                               6  更改选手数据");
    printf("\n                               7  保存选手数据");
    printf("\n                               8  退出");
}
int reads(struct singer sin[N])
{
    FILE *fp;
    int i=0;
    if((fp=fopen("H:\\file22.txt","r"))==NULL)
    {
        printf("文件打开失败!\n");
        return 0;
    }
    else
    {
        for(i=0;!feof(fp);i++)
            fscanf(fp,"%s \n",sin[i].name,&sin[i].name);
    }
    fclose(fp);
    return i;
}
void save(struct singer sin[N],int n) // 学生信息改变后更新文件
{
    FILE *fp;
    int i=0;
    if((fp=fopen("H:\\file.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        return ;
    }
    else
    {
        for(i=0;i<n;i++)
           fprintf(fp,"%s %s %f %f %f %f %f %f %f\n",sin[i].num,sin[i].name,sin[i].grades[P]);
    }
    fclose(fp);
}
void add()
{
    FILE *fp;
    int n,i;
    struct singer sin;
    if((fp=fopen("H:\\file.txt","a"))==NULL)  //如果文件已经存在,可以追加信息
    {
        if((fp=fopen("H:\\file.txt","w"))==NULL) // 文件不存在时,创建新文件,输入信息
        {
            printf("文件打开失败!\n");
            return;
        }
    }
printf("请输入要添加的选手数量,按回车键确认:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        printf("\n请输入第%d个学生的序号、姓名,用空格分开,并按回车键确认:\n",i);
        scanf("%s%s",sin.num,sin.name);
        printf("\n请输入第%d个学生的七个评委成绩,用空格分开,并按回车键确认:\n",i);
        
        scanf("%f %f %f %f %f %f %f\n",sin.grades[P]);
        fprintf(fp,"%s %s %f %f %f %f %f %f %f\n",sin.num,sin.name,sin.grades[P]);
    }
    fclose(fp);
}
void show()

        
{
    struct singer sin[N];
    int i,n;
    n=reads(sin);
    printf("                    *********************所有的选手信息如下**********************\n\n");
    printf("  序号       姓名     评委1       评委2     评委3         评委4         评委5        评委6        评委7 \n");
    printf("                    *************************************************************\n");
    for(i=0;i<n;i++)
        printf("\n%3d%12s%11.2f%11.2f%11.2f%11.2%f11.2%f11.2%f11.2%f\n",i+1,sin[i].num,sin[i].name,sin[i].grades[P]);
    getch();
}
void del()  /*信息删除函数*/
{
    struct singer sin[N];
    char number[20];
    int n,i,j;
    n=reads(sin);
    printf("\n请输入要删除信息的选手序号,按回车键确认:");
    scanf("%s",number);
    for(i=0;i<n;i++)
        if(strcmp(number,sin[i].num)==0) break;
    if(i>=n)
    {
        printf("没有找到该选手信息!\n");
        return;
    }
    else
    {
        for(j=i+1;j<n;j++)
            sin[j-1]=sin[j];
    }
    save(sin,n-1);
    printf("删除成功!\n");
}
void change()  //学生信息更改
{
    struct singer sin[N];
    int n,i;
    char number[20];
    printf("\n请输入要更改信息的学生学号,按回车键确认:");
    scanf("%s",number);
    n=reads(sin);
    for(i=0;i<n;i++)
        if(strcmp(number,sin[i].num)==0)
           break;
    if(i>=n)
{
        printf("无此学生信息!");
        return;
    }
    printf("\n请输入更改后选手的序号,姓名,七个评委成绩,按回车键确认:\n");
    scanf("%s\t%s\t%f\t%f\t%f\t%f\t%f\t%f\t%f",sin[i].num,sin[i].name,sin[i].grades[P],&sin[i].num,&sin[i].name,&sin[i].grades[P]);
    save(sin,n);
}
void sort()


{  int min,max;
    struct singer sin[N],sin.ave;
    float sum=0;
    int i;
    printf("input 7 grades:\n");
    for(i=0;i<7;i++);
    scanf("%f %f %f %f %f %f %f",&sin.grades[P]);
    printf("\n");
    min=sin.grades[0];
    max=sin.grades[0];
    for(i=0;i<10;i++)
    {
        sum=sum+sin.grades[P];
        if(sin.grades[i]>max)
            max=sin.grades[i];
        if(sin.grades[i]<min)
            min=sin.grades[i];
    }
sin.ave    =(sum-max-min)/5;

struct singer sin[N],temp;
    int i,j,n;
    n=reads(sin);
    for(i=0;i<n-1;i++)
       for(j=0;j<n-1-i;j++)
       {
          if(sin[j].ave<sin[j+1].ave)
          {
              temp=sin[j];
                  sin[j].ave=sin[j+1].ave;
              sin[j+1].ave=temp;
          }
       }
       save(sin,n);
       j=1;
    printf("*********************总成绩排序结果如下**********************************\n\n");
       printf("  名次      序号       姓名     评委1       评委2     评委3      评委4      评委5      评委6      评委7       总成绩\n");
       printf("*************************************************************************\n");
       for(i=0;i<n;i++) // 输出结果并排名
       {
           if(sin[j].ave==sin[j+1].ave)
                printf("\n%3d%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j,sin[i].num,sin[i].name,sin.grades[P],sin[i].ave);
           else
                printf("\n%3d%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j++,sin[i].num,sin[i].name,sin,grades[P],sin[i].ave);
   
       }
       getch();
void query()  // 按学号对学生信息查询
{
    struct singer sin[N];
    char number[20];
    int i,n;
    n=reads(sin);
    printf("\n请输入待查询的选手序号,按回车键确认:\n");
    scanf("%s",number);
    for(i=0;i<n;i++)
       if(strcmp(number,sin[i].num)==0) break;
    if(i>=n)
    {
        printf("没有找到该选手信息!\n");
        return;
    }
    else
        printf(\n%12s%11s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",j++,sin[i].num,sin[i].name,a,b,c,d,e,f,g,sin[i].ave);
}
搜索更多相关主题的帖子: include double singer 
2015-09-02 23:48
快速回复:调试除了错误改不掉 涉及算法 求大神指点。
数据加载中...
 
   



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

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