帮我修改void maxscore部分的代码,使其可以运行,按我原有的代码,其他部分正常运行,但无法显示最高分的同学信息,在运行的时候按“4”是没有反应的,我的所有代码如下:
#define N 1000
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
char num[10];
char name[10];//姓名
char sex[4];//性别
float score;//成绩
};
int main()
{
void menu();
void inputstudent();
void printstudent();
void numfind();
void maxscore();
void addstu();
void deletestu();
void scoresort();
char ch;
while (1)
{
menu();
char c=_getch();
switch (c)
{
case '1': //输入学生成绩
inputstudent();
break;
case '2': //显示所有学生数据
printstudent();
break;
case '3': //按学号查找学生数据
numfind();
break;
case '4': //查找最高分
maxscore;
break;
case '5': //添加学生数据
addstu();
break;
case '6': //按学号删除学生数据
deletestu();
break;
case '7': //成绩排序
scoresort();
break;
case '0': //退出程序
system("cls");
printf("Bye Bye!\n");
exit(0);
break;
default:
printf("请重新输入\n");
break;
}
}
return 0;
}
void menu()
{
system("cls");
printf("\n");
printf("********************************\n");
printf("* *\n");
printf("* 学生成绩管理系统 *\n");
printf("* *\n");
printf("********************************\n");
printf("* 1.输入学生成绩 *\n");
printf("* 2.显示所有学生数据 *\n");
printf("* 3.按学号查找学生数据 *\n");
printf("* 4.查找最高分 *\n");
printf("* 5.添加学生数据 *\n");
printf("* 6.按学号删除学生数据 *\n");
printf("* 7.成绩排序 *\n");
printf("* 0.退出程序 *\n");
printf("********************************\n");
printf("* 请输入选项编号(0-7) *\n");
printf("********************************\n");
}
void inputstudent()
{
FILE *fp;
struct student stud;
char str[80],ch = 'y';
if ((fp=fopen("stud.rec","wb"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
while (ch=='y' || ch=='Y')
{
printf("输入学号:");gets(stud.num);
printf("输入姓名:");gets(stud.name);
printf("输入性别:");gets(stud.sex);
printf("输入成绩:");scanf("%f",&stud.score);getchar();
fwrite(&stud, sizeof(stud),1,fp);
do
{
printf("继续输入(y/n)?");
gets(str); ch=str[0];
}
while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));
}
fclose(fp);
printf("按任意键回到主菜单。。。。。。");getchar();
}
void printstudent()
{
struct student stud;
FILE *fp;
if((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
printf("\n\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
while (fread(&stud,sizeof(stud),1,fp)==1)
printf("%-10s%-10s%-10s%-10.1f\n",stud.num,stud.name,stud.sex,stud.score);
printf("\n");
fclose(fp);
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}
void numfind()
{
struct student stud;
FILE *fp;
char x[2];
int flag=0;
printf("输入需要查找的学号:");gets(x);
if((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开该文件stud.rec.\n");
exit(0);
}
while (fread(&stud,sizeof(stud),1,fp)==1)
if(strcmp(stud.num,x)==0)
{
flag=1;
printf("\n\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
printf("%-10s%-10s%-10s%-10.1f\n",stud.num,stud.name,stud.sex,stud.score);
break;
}
printf("\n");
if(flag==0) printf("查无此学号!");
fclose(fp);
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}
void maxscore()
{
struct student stud,studt;
FILE *fp;
if((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
studt.score=0;
while(fread(&stud,sizeof(stud),1,fp)==1)
{
if(stud.score>studt.score)
{
studt=stud;
}
printf("\n\n成绩最高分部分的学生数据:%d\n");
printf("\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
printf("%-10s%-10s%-10s%-10.1f\n",studt.num,studt.name,studt.sex,studt.score);
}
fclose(fp);
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}
void addstu()
{
FILE *fp;
struct student stud;
char str[80],ch = 'y';
if ((fp=fopen("stud.rec","ab"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
while (ch=='y' || ch=='Y')
{
printf("输入学号:");gets(stud.num);
printf("输入姓名:");gets(stud.name);
printf("输入性别:");gets(stud.sex);
printf("输入成绩:");scanf("%f",&stud.score);getchar();
fwrite(&stud, sizeof(stud),1,fp);
do
{
printf("继续输入(y/n)?");
gets(str); ch=str[0];
}
while(!(ch=='y'||ch=='n'||ch=='Y'||ch=='N'));
}
fclose(fp);
printf("按任意键回到主菜单。。。。。。");getchar();
}
void deletestu()
{
struct student stud[N],z;
int k=0,y=0;
char x[10];
FILE *fp;
printf("\n\n\n请输入要删除的学号:");
gets(x);
if((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
printf("\n\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
while (fread(&stud[k],sizeof(stud[k]),1,fp)==1)
{
if(strcmp(stud[k].num,x)==0) {y=1;printf("%-10s%-10s%-10s%-10.1f\n",stud[k].num,stud[k].name,stud[k].sex,stud[k].score);}
else k=k+1;
}
fclose(fp);
if(y==0) printf("\n\n查无此学号!!");
else
{
if ((fp=fopen("stud.rec","wb"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
for(y=0;y<k;y++)
fwrite(&stud[y],sizeof(stud[y]),1,fp);
fclose(fp);
}
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}
void scoresort()
{
struct student stud[N],z;
int k=0,x,y;
FILE *fp;
if ((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
printf("\n\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
while(fread(&stud[k],sizeof(stud[k]),1,fp)==1)
{
printf("%-10s%-10s%-10s%-10.1f\n",stud[k].num,stud[k].name,stud[k].sex,stud[k].score);
k=k+1;
}
fclose(fp);
for(x=0;x<k-1;x++)
for(y=x+1;y<k;y++)
if(stud[x].score<stud[y].score)
{
z=stud[x];stud[x]=stud[y];stud[y]=z;
}
printf("\n\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
for(x=0;x<k;x++)
printf("%-10s%-10s%-10s%-10.1f\n",stud[x].num,stud[x].name,stud[x].sex,stud[x].score);
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}
基于new bing部分指引作答:
要修改maxscore函数的代码以使其正常运行并显示最高分的学生信息,可以按照以下方式修改代码:
void maxscore()
{
struct student stud, studt;
FILE *fp;
if ((fp = fopen("stud.rec", "rb")) == NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
studt.score = 0;
while (fread(&stud, sizeof(stud), 1, fp) == 1)
{
if (stud.score > studt.score)
{
studt = stud;
}
}
fclose(fp);
printf("\n\n成绩最高分的学生数据:\n");
printf("%-10s%-10s%-10s%-10s\n", "学号", "姓名", "性别", "成绩");
printf("%-10s%-10s%-10s%-10.1f\n", studt.num, studt.name, studt.sex, studt.score);
printf("\n\n按任意键返回主菜单。。。。。。");
getchar();
}
这样修改后,maxscore函数将正确显示最高分的学生信息,并在按任意键后返回主菜单。
我试了下好像没什么问题,你可以重开一个文件,再复制进去
class Solution {
public int maxScore(int[] cardPoints, int k) {
int n=cardPoints.length;
//记录所有卡牌的和
int sum=0;
//记录当前窗口中的值
int Wnum=0;
//保留窗口中的最小值
int min=0;
//求第一个窗口的值
for (int i = 0; i < n - k; i++) {
sum+=cardPoints[i];
}
Wnum=sum;
min=sum;
for(int i=n-k;i<n;i++)
{
sum+=cardPoints[i];
Wnum-=cardPoints[i-n+k];
Wnum+=cardPoints[i];
if(Wnum < min)
min=Wnum;
}
return sum-min;
}
}
在maxscore函数中,需要将maxscore改为maxscore(),以调用该函数并执行其中的代码。此外,在输出成绩最高分部分的学生数据时,需要将printf语句放在while循环外面,以确保只输出一次。修改后的maxscore函数代码如下:
void maxscore()
{
struct student stud,studt;
FILE *fp;
if((fp=fopen("stud.rec","rb"))==NULL)
{
printf("无法打开文件stud.rec.\n");
exit(0);
}
studt.score=0;
while(fread(&stud,sizeof(stud),1,fp)==1)
{
if(stud.score>studt.score)
{
studt=stud;
}
}
printf("\n\n成绩最高分部分的学生数据:\n");
printf("\n%-10s%-10s%-10s%-10s%\n","学号","姓名","性别","成绩");
printf("%-10s%-10s%-10s%-10.1f\n",studt.num,studt.name,studt.sex,studt.score);
fclose(fp);
printf("\n\n\n按任意键返回主菜单。。。。。。");getchar();
}