想有谁帮忙看一下C语言程序设计的问题

想有谁帮忙看一下C语言程序设计的问题,程序我写好了,就是有些问题想找人帮忙看看。有意向和一定把握的请私信,拜托了... 想有谁帮忙看一下C语言程序设计的问题,程序我写好了,就是有些问题想找人帮忙看看。有意向和一定把握的请私信,拜托了 展开
 我来答
瑞候端瓜0Y
2017-05-07 · TA获得超过2039个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:91.5万
展开全部
//问题1: 增加读取文件函数readData()
//问题2: 有些函数只是统计数据,没有修改数据,不用调用保存函数save()
//问题3: 理解清楚变量N和x的关系

#include<stdio.h>
#include<string.h>
int N;   //实际数量
#define x 100
struct student
{
int num; //学生学号
char name[10]; //学生姓名
int English; //英语
int c; //C语言
int math;                           //高数
int politics;                       //政治
int sports;                         //体育
int average; //平均成绩
int sum; //总分
}stu[x];                                //定义一个结构体数组
void inputdata(); //录入成绩
void inquirydata(); //查询学生成绩
void sort(); //学生成绩排序
//void main(); //函数main不用再定义了
void save(); //保存
void section();                        //分数段统计
int readData();                        //读取文件的数据
void save()
{
FILE*fp;
int i,n=1;
if((fp=fopen("xueshengchengji.txt","wb"))==NULL) //打开文件
{
printf("文件打不开\n");
return; //如果文件打不开,就直接退出函数,不用执行后面的语句
}
//原代码for(i=0;i<x;i++) //变量x是最大数量,而变量N是实际数量
for(i=0;i<N;i++)
    {
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
{
printf("输入错误\n");
n=0;
}
    }
if(n==1)
        printf("保存成功");

    fclose(fp);
}

int readData() //读取文件的数据
{
FILE *fp;
int ret;
if((fp=fopen("xueshengchengji.txt","rb+"))==NULL)
    {
       printf("\n打不开\n");
       return 0;
    }
    N=0; //实际数量
    while(1)
    {
        if(feof(fp)) break; //已经到文件的结尾,退出while循环
        ret=fread(&stu[N],sizeof(struct student),1,fp);
        if(ret!=1) break;
        N++;
    }
    fclose(fp);
return 1;
}

void inputdata() //录入成绩
{
int i,s;
printf("输入学生个数");
scanf("%d",&s);
N=0; //变量N是实际数量
for(i=0;i<s;i++)
{
N+=1;
printf("学生姓名");
    scanf("%s",stu[i].name); //原代码scanf("%s",&stu[i].name);
printf("学号");
scanf("%d",&stu[i].num);
printf("英语成绩");
scanf("%d",&stu[i].English);
printf("c成绩");
scanf("%d",&stu[i].c);
printf("数学成绩");
scanf("%d",&stu[i].math);
printf("政治成绩");
scanf("%d",&stu[i].politics);
printf("体育成绩");
scanf("%d",&stu[i].sports);
//计算总分
stu[i].sum=stu[i].math+stu[i].English+stu[i].c+stu[i].politics+stu[i].sports;
stu[i].average=stu[i].sum/5; //计算平均分
save();
printf("成绩输入成功\n");
}
}

void sort() //学生成绩排序
{
int i,j,temp,o;
char m[10];
    //打开文件,并读取文件里面的数据
    if(readData()==0) return;

printf("平均分排名如下\n");
printf("\t分数\t姓名\t学号\t\n");
for(i=0;i<N-1;i++)
    {
        for(j=i+1;j<N;j++)
            if(stu[i].average<stu[j].average)
            {
                temp=stu[j].average;o=stu[j].num;strcpy(m,stu[i].name);
                stu[j].average=stu[i].average;stu[j].num=stu[i].num;
                strcpy(stu[i].name,stu[j].name);
                stu[i].average=temp;stu[i].num=o;strcpy(stu[j].name,m);
            }
    }
    for(i=0;i<N;i++)
        printf("\t%d\t%s\t%d\t\n",stu[i].average,stu[i].name,stu[i].num);
}

void section() //分数段统计
{
    //打开文件,并读取文件里面的数据
    if(readData()==0) return;

int sum1,sum2,sum3,sum4,sum5,i,average1,average2,average3,average4,average5;
sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
for(i=0;i<N;i++)
sum1+=stu[i].English;
average1=sum1/N;
printf("英语平均成绩:%d\n",average1);
for(i=0;i<N;i++)
sum2+=stu[i].math;
average2=sum2/N;
printf("数学平均成绩:%d\n",average2);
for(i=0;i<N;i++)
sum3+=stu[i].c;
average3=sum3/N;
printf("C语言平均成绩:%d\n",average3);
for(i=0;i<N;i++)
sum4+=stu[i].politics;
average4=sum4/N;
printf("政治平均成绩:%d\n",average4);
for(i=0;i<N;i++)
sum5+=stu[i].sports;
average5=sum5/N;
printf("体育平均成绩:%d\n",average5);

    sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
for(i=0;i<N;i++);
{
switch(stu[i].English/10)
        {
        case 10:
        case 9:sum1++;break;
        case 8:sum2++;break;
        case 7:sum3++;break;
        case 6:sum4++;break;
        default:sum5++;
        }
}
printf("英语成绩90分以上人数:%d\n",sum1);
printf("英语成绩80-89分人数:%d\n",sum2);
printf("英语成绩70-79分人数:%d\n",sum3);
printf("英语成绩60-69分人数:%d\n",sum4);
printf("英语成绩60分以下人数:%d\n",sum5);
sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;
for(i=0;i<N;i++);
{
switch(stu[i].math/10)
        {
        case 10:
        case 9:sum1++;break;
        case 8:sum2++;break;
        case 7:sum3++;break;
        case 6:sum4++;break;
        default:sum5++;
        }
}
printf("数学成绩90分以上人数:%d\n",sum1);
printf("数学成绩80-89分人数:%d\n",sum2);
printf("数学成绩70-79分人数:%d\n",sum3);
printf("数学成绩60-69分人数:%d\n",sum4);
printf("数学成绩60分以下人数:%d\n",sum5);
}

void fail() //不及格学生筛选
{
int i;

    //打开文件,并读取文件里面的数据
    if(readData()==0) return;

for(i=0;i<N;i++)
{
if(stu[i].English<60)
{
printf("学号:%d\n 英语 不及格成绩:%d\n",stu[i].num,stu[i].English);
}
if(stu[i].math<60)
{
printf("数学 不及格成绩:%d\n",stu[i].math);
}
if(stu[i].c<60)
{
printf("C语言 不及格成绩:%d\n",stu[i].c);
}
if(stu[i].politics<60)
{
printf("政治 不及格成绩:%d\n",stu[i].politics);
}
if(stu[i].sports<60)
{
printf("体育 不及格成绩:%d\n",stu[i].sports);
}
}
}

void excellence() //优等生统计
{
int i;
    //打开文件,并读取文件里面的数据
    if(readData()==0) return;

for(i=0;i<N;i++)
{
if(stu[i].average>=80)
printf("优等生:%s\n",stu[i].name);
else
if(stu[i].average>=60)
{
if(stu[i].English>90||stu[i].math>90||stu[i].c>90||
                   stu[i].politics>90||stu[i].sports>90)
printf("优等生:%s\n",stu[i].name);
else; //这个else的作用是什么?
}
else
  if(stu[i].English==100||stu[i].math==100||stu[i].c==100||
                 stu[i].politics==100||stu[i].sports==100)
  {
printf("优等生:%s\n",stu[i].name);
  }
}
}

int main()  //原代码void main()
{
int sele;
sele=1;
while(sele)
{
printf("\n\n");
printf("****************************************\n");
printf("*                                      *\n");
printf("1.学生条目录入 2.成绩排名统计    \n");
printf("*                                      *\n");
printf("3.分数段统计       4.不及格学生筛选   \n");
printf("*                                      *\n");
printf("5.优等生统计                      \n");
printf("*                                      *\n");
printf("6.退出                                 *\n");
printf("*                                      *\n");
printf("*************************************\n");
printf("\n\n请选择功能序号");
scanf("%d",&sele);
switch(sele)
{
case 1:inputdata();break;
case 2:sort();break; //sort修改了数据,是否需要调用save()保存数据
case 3:section();break;
case 4:fail();break;
case 5:excellence();break;
case 6:sele=0;
}
printf("\n\n按任意键继续\n");
getchar();
}
    return 0;
}
追问
真的非常感谢你!!还有一点想问一下,就是进行了数据统计操作的需要保存是不是按原来那样调用save函数就可以了?
--
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有... 点击进入详情页
本回答由--提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式