yang_xingui 2021-06-17 16:51 采纳率: 90.9%
浏览 27
已结题

程序有问题 求大神修改 请大神尽量改的基础一些 题目在图片里 谢谢

#include<stdio.h>

#include <stdlib.h>

#include <string.h>

#define  N  3                                                 //宏定义N个学生

#define  M  3

struct student

{

    int num;

    char name[20];

    float score[3]; 

    float ave;

}stu[N];

 

struct emp

{ int num;

 char name[20];

 float score[3];

 float ave;

}em_case[20];

 

void finput();

void fsearch();

void fchange();

void foutput();

void faver();

void high();

void divide();

 

int main()

{

  int a=0;

  while(a>=0&&a<7)

{

 printf("**********************************************************\n");

 printf("*              欢迎使用高校学生成绩管理系统V1.0          *\n");

 printf("*                        请选择功能                      *\n");

 printf("**********************************************************\n");

 printf("*                   1.录入学生成绩计算学生总平均分       *\n");

 printf("*                   2.查找学生成绩                       *\n");

 printf("*                   3.修改学生成绩                       *\n");

 printf("*                   4.计算学生每门课平均分最高分最低分   *\n");

 printf("*                   5.根据学生总平均分从高到低排序     *\n");

 printf("*                   6.划分学生成绩等级                   *\n");

 printf("*                   0.退出系统                           *\n");

 printf("**********************************************************\n");

 printf("请输入所选功能前的序号:");

 scanf_s("%d", &a);                                           //输入所选功能前的序号

 printf("\n");

 switch (a)

 {

 case 1:

  finput();

     break;

 case 2:

  fsearch();

     break;

 case 3:

  fchange();

     break;

 case 4:

  faver();

     break;

 case 5:

  high();

  break;

 case 6:

  divide();

     break;

 case 0:

 break;

 default:break;

 }

}

 return 0;

}

 

void foutput()

{

 FILE *fp;

 int i;

 if((fp=fopen("student","w"))==NULL)

 {printf("can not open file.");

 return;

 }

 for(i=0;i<N;i++)

  if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

   {

    printf("error\n");

    return;

  }

 fclose(fp);

}

 

void finput()

{

   int i;

 float sum[N];

 FILE *fp;

 printf("请输入学生学号、姓名及高数、C语言、数据结构的成绩\n");

 for (i = 0; i < N; i++)

 {

  scanf_s("%s %d %d %d %d",stu[i].name,20,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

 sum[i]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];

 stu[i].ave=sum[i]/3;

 }

 foutput();

 fp=fopen("student","rb");

 printf("\n name NO. 高数 C语言 数据结构  平均分\n");

  for (i = 0; i < N; i++)

 {

  fread(&stu[i],sizeof(struct student),1,fp);

  printf("%s %d %d %d %d %8.2f",stu[i].name,20,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);

 }

fclose(fp);

}

 

void fsearch()

{

  FILE *fp,*fp1;

  int i=0,num=0;

  printf("请输入学生学号:\n");

  scanf_s("%d", &stu[i].num);

 for (i = 0; i < N; i++)

 {

  if (stu[i].num == num)

  { printf("\n name NO. 高数 C语言 数据结构  平均分\n");

   printf("%s %d %d %d %d %8.2f",stu[i].name,20,stu[i].num,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].ave);

  }

  }

  if((fp=fopen("student","r"))==NULL)

  {printf("can not open file.");

      exit(0);

     }

  for(i=0;i<N;i++)

  if(fwrite(&em_case[i],sizeof(struct emp),1,fp)!=1)

   printf("error\n");

 fclose(fp);

 }

 

void fchange()

{

 FILE *fp;

    int i,num;

    printf("请输入要修改的学生学号: ");

    scanf("%d",&num);

    printf("\n");

    for(i=0; i<=N; i++)

  if(stu[i].num==num)

  {

    printf("请输入学生的姓名:\n");

    scanf_s("%d", stu[i].name);

    printf("请输入学生的学号:\n");

    scanf_s("%d", &stu[i].num);

    printf("请输入学生的高数成绩\n");

    scanf_s("%d", &stu[i].score[0]);

    printf("请输入学生的C语言成绩\n");

    scanf_s("%d", &stu[i].score[1]);

    printf("请输入学生的数据结构成绩\n");

    scanf_s("%d", &stu[i].score[2]);

  }

 if((fp=fopen("student","w"))==NULL)

 {

  printf("The file can not open\n");

  return;

 }

 for(i=0;i<N;i++)

  if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

  {

   printf("file write error\n");

         return;

     }

  fclose(fp);

}

 

void faver()

{

 int i,j,max=stu[0].score[i],min=stu[0].score[i];

 float sum[M];

 float ave1[3];

 float t[3],s[3];

 for(i=0;i<N;i++)

 {

   sum[i]=stu[0].score[i]+stu[1].score[i]+stu[2].score[i];

   ave1[i]=sum[i]/3;

 }

 printf("各科的平均分分别为:%8.2f \n",ave1[i]);

 printf("\n");

 for(i=0;i<N;i++)

 {

  max=stu[0].score[i];

  for (j=0;j<3;j++)

  {

   if (max < stu[j].score[i])

   {

    max = stu[j].score[i];

    t[i]=max;

   }

  }printf("各科最高分分别为:%d \n",t[i]);

  }

 printf("\n");

 for(i=0;i<N;i++)

 {

  min=stu[0].score[i];

  for (j=0;j<3;j++)

  {

   if (min > stu[j].score[i])

   {

    min = stu[j].score[i];

    s[i]=min;

   }

  }printf("各科最低分分别为:%d \n",s[i]);

 }

}

 

void high()

{

 int i,j,t;

 for (j = 0; j < 3; j++)

 {

  for (i = 0; i < 2- j; i++)

   if (stu[i].ave < stu[i + 1].ave)

   {

    t = stu[i].ave; stu[i].ave = stu[i + 1].ave; stu[i + 1].ave = t;

   }

 }

 printf("根据平均分从高到低排序后:%d  %.2f\n", stu[i].num, stu[i].ave);

 printf("\n");

}

 

void divide()

{

 int i,num;

 printf("请输入要划分等级的学生学号: ");

    scanf("%d",&num);

    printf("\n");

  for(i=0; i<=N; i++)

  if(stu[i].num==num)

   scanf_s("%8.2f\n",stu[i].ave);

 for(i=0;i<N;i++)

 {

  if(stu[i].ave>=90)

   printf("优\n");

  else if(stu[i].ave>=80&&stu[i].ave<90)

   printf("良\n");

  else if(stu[i].ave>=60&&stu[i].ave<80)

   printf("中\n");

  else

   printf("差\n");

 }

}

 

  • 写回答

3条回答 默认 最新

  • CSDN专家-Fay 2021-06-17 16:53
    关注

    这个更简单一点:

    #include "stdio.h"
    int score[10];
    float sum=0;
    int max=0;
    int bjg=0,lh=0,yx=0;
    void ll(){
    	int i;
    	printf("请 先输入10个学生分数,空格隔开回车结束:\n");
    	for(i=0;i<10;i++){
    		scanf("%d",&score[i]);
    		sum+=score[i];
    		if(score[i]>max){
    			max=score[i];
    		}
    		if(score[i]<60){
    			bjg++;
    		}
    		if(score[i]>=60&&score[i]<80){
    			lh++;
    		}
    		if(score[i]>=80&&score[i]<=100){
    			yx++;
    		}
    	}
    	printf("分数录入成功!\n");
    	
    }
    void px(){
    	
    	int i, j, temp;
    	printf("正在对成绩排序...\n");
        //冒泡排序算法:进行 n-1 轮比较
        for(i=0; i<10-1; i++){
            //每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
            for(j=0; j<10-1-i; j++){
                if(score[j] > score[j+1]){
                    temp = score[j];
                    score[j] = score[j+1];
                    score[j+1] = temp;
                }
            }
        }
        printf("排序后的结果如下:\n");
        for(i=0;i<10;i++){
    		printf("%3d",score[i]);
        }
        
    }
    void pj(){
    	printf("学生平均分为%.2f\n",sum/10);
    }
    void zg(){
    	printf("学生最高分为%d\n",max);
    }
    void dj(){
    	printf("不及格人数:%d,占比:%d %%\n",bjg,bjg*10);
    	printf("良好人数:%d,占比:%d %%\n",lh,lh*10);
    	printf("优秀人数:%d,占比:%d %%\n",yx,yx*10);
    }
    void main(){
    	int n;
    	
    	do{
    	printf("------------------\n");
    	printf("0、分数录入\n");
    	printf("1、排序\n");
    	printf("2、平均分\n");	
    	printf("3、最高分\n");	
    	printf("4、等级比例\n");	
    	printf("5、退出\n");
    	printf("------------------\n");
    	printf("请选择功能(0-5):");
    	scanf("%d",&n);
    	if(n==0){
    		ll();
    	}else if(n==1){
    		px();
    	}else if(n==2){
    		pj();
    	}else if(n==3){
    		zg();
    	}else if(n==4){
    		dj();
    	}
    	printf("\n---按任意键退出!");
    	getch();
    	system("CLS");//清屏
    	}while(n!=5);
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月16日

悬赏问题

  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数