| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:修改程序,求改错!!!
只看楼主 加入收藏
shane524
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-7-2
结帖率:0
收藏
 问题点数:0 回复次数:2 
修改程序,求改错!!!
编程实现录入成绩并统计个人平均分后存入文件studengdata.txt,程序每次运行均从文件中提取数据存入内存结构体数组中(指定文件不存在则新建)。
某班30个学生,4门课分别为微积分、通信原理、英语和C语言,按学号从小到大的顺序依次输入学生的姓名、性别(用’m’表示男,’f’表示女)和4门课的成绩(一次最大录入人数为30-studengdata.txt内记录数,录入已经存在的学生信息时提示“覆盖”或“放弃”,以学号为-1结束录入),计算每个学生的平均分,并以清晰的打印格式按平均分从高分到低分的顺序打印平均分高于全班总平均成绩且单科没有挂科的男生成绩单(打印信息含学号、姓名、性别、总排名、平均分、4门课单科分)(平均分相同则按姓名升序打印)。

我编的程序,还差些内容,求大神帮忙修改一下。。
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<math.h>
#define N 30         //学生数

struct student         //定义学生结构体
{
    char number[N];    //学号
    char name[N];      //姓名
    char sex;          //性别,‘m’(男)或‘f’(女)
    float score[4];    //各科成绩
    float aver;        //平均成绩
}stu[N];

//自定义函数原型声明
void input(struct student *p,int n);
void save();
void read();
float average(struct student *p,int n);
void output(struct student *p,int n);
void sort(struct student *p,int n);
void search(struct student *p,int n,float t);

void main()
{
    struct student stu[N];
    float t_aver;      //总平均成绩


    input(stu,N);      //输入学生信息及成绩,计算每人平均成绩
    sort(stu,N);       //按平均成绩排序
    t_aver=average(stu,N);//计算总平均成绩
    output(stu,N,t_aver);//输出平均分高于全班总平均成绩且单科没有挂科的男生信息
    return;
}

//输入学生信息及成绩,计算每人平均成绩
void input(struct student *p,int n)
{
    int i,j;
    float per_aver;
    float temp;
    for(i=0;i<n;i++,p++)//循环一次,录入一个学生信息
    {
        printf("\t%d\n",i+1);//录入次数
        printf("please input student's name:\n");
        fflush(stdin);       //清空缓冲区
        gets(p->name);       //录入学生姓名
        printf("please input student's number:\n");
        gets(p->number);     //录入学生学号
        printf("please input student's sex:\n");
        fflush(stdin);       //清空缓冲区
        scanf("%c",&p->sex); //录入学生性别
        printf("please input student's math score:\n");
        scanf("%lf",&p->score[0]);
        printf("please input student's communication score:\n");
        scanf("%lf",&p->score[1]);
        printf("please input student's english score:\n");
        scanf("%lf",&p->score[2]);
        printf("please input student's c_word score:\n");
        scanf("%lf",&p->score[3]);
        p->aver=(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4;
    }
}

//按平均分排序成绩
void sort(struct student *p,int n)
{
    struct student temp;  //中间变量,用于交换
    int i,j;
    for(i=1;i<n-1;i++)
    {
        for(j=1;j<=n-1-i;j++)
        {
            if((*(p+i)).aver<(*(p+i+1)).aver)
            {
                temp=*(p+i);
                *(p+i)=*(p+i+1);
                *(p+i+1)=temp;
            }
            else if((*(p+i)).aver==(*(p+i-1)).aver)
            {
                if(strcmp((*(p+j)).name,(*(p+j+1)).name)>0)
                {   
                    temp=*(p+j);
                    *(p+j)=*(p+j+1);
                    *(p+j+1)=temp;
                }
            }
        }
    }
    return *p;
}
float average(struct student *p,int n)
{
    float sum=0;
    int i;
    for(i=0;i<n;i++)
    {
        sum+=p[i].aver;   //累加平均成绩
    }
    return (sum/n);       //计算并返回总平均成绩
}
void output(struct student *p,int n,float t_aver)
{
    int i,j;
    printf("boy whose average is bigger than total average and every subject doesn't fail\n");//输出提示信息
    printf("name   number   sex   math   communication   english    c_word   average\n");
    for(i=0;i<n;i++)      //查找符合条件的学生并输出其信息
    {
        if(p[i].sex=='m')
        {
            if(p[i].aver>t_aver)
            {
                if((p[i].score[0]>60&&p[i].score[1]>60&&p[i].score[1]>60&&p[i].score[2]>60&&p[i].score[3]>60)==1)
                    printf("%-8s%-8s%-8c%8.2f%8.2f%8.2f%8.2f%8.2f\n",p[i].name,p[i].number,p[i].sex,p[i].score[0],p[i].score[1],p[i].score[2],p[i].score[3],p[i].aver);
            }
        }
    }
}

void save() //保存到文件
{
 FILE *fp;
 int i;
 if((fp=fopen("studengdata.txt","wt"))==NULL)
 {
  printf("cannot open file\n");
  return;
 }
 for(i=0;i<N;i++)
  if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
    printf("file write error\n");
  fclose(fp);
}

void read()//实现从文件studengdata.txt读出数据
{
 FILE *fp;
 int i;
 if((fp=fopen("studengdata.txt","rt"))==NULL)
 {
  printf("cannot open file\n");
  return;
 }
 for(i=0;i<N;i++)
  if(fread(&stu[i],sizeof(struct student),1,fp)!=1)
    printf("file write error\n");
  fclose(fp);
}
搜索更多相关主题的帖子: 微积分 结构体 英语 C语言 
2013-07-08 11:52
lhb5457890
Rank: 2
等 级:论坛游民
帖 子:11
专家分:15
注 册:2013-7-8
收藏
得分:0 
你说那错了,我具体给你看看
2013-07-08 16:16
shane524
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-7-2
收藏
得分:0 
回复 2楼 lhb5457890
(一次最大录入人数为30-studengdata.txt内记录数,录入已经存在的学生信息时提示“覆盖”或“放弃”,以学号为-1结束录入)这个部分不会写。。
还有输出结果没反应。。。希望都能帮忙改改,谢啦!
2013-07-08 16:38
快速回复:修改程序,求改错!!!
数据加载中...
 
   



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

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