想有谁帮忙看一下C语言程序设计的问题
想有谁帮忙看一下C语言程序设计的问题,程序我写好了,就是有些问题想找人帮忙看看。有意向和一定把握的请私信,拜托了...
想有谁帮忙看一下C语言程序设计的问题,程序我写好了,就是有些问题想找人帮忙看看。有意向和一定把握的请私信,拜托了
展开
1个回答
展开全部
//问题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 广告
2022-12-05 广告
图形化编程简单理解为用积木块形式编程,scratch和python也是其中的一种,属于入门级编程,以其简单生动的画面获得无数学生的喜爱,深圳市创客火科技有限公司是一家做教育无人机的公司,旗下有编程无人机,积木无人机及室内外编队,每款飞机含有...
点击进入详情页
本回答由--提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询