Laity199 2021-06-17 15:41 采纳率: 80%
浏览 29
已采纳

C++结构体应用.。

把30名学生的学号,姓名,4门课的成绩以及平均分放在一个结构体数组中。学生的学号、姓名、4门课的成绩由键盘输入,计算出平均分放在结构体对应的域中

提示类型说明如下

struct  student

       char num【5】,name【10】;

       int s【4】;

       double ave;

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-06-17 15:52
    关注

    代码如下,如有帮助,请采纳一下,谢谢。(可能结构体中的名字不一致,修改一下即可)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //定义课程数量
    #define NMBKC 4
    struct Student
    {
    	char id[5];    //学号
    	char name[20]; //姓名
    	float score[NMBKC];//成绩
    	float total;   //总分
    	float avg;     //平均分
    };
    //录入信息
    void InputInfo(struct Student arr[],int n)
    {
    	int i,j;
    	for (i = 0;i < n; i++)
    	{
    		arr[i].total = 0.0;
    		printf("请输入第%d名学生的信息(学号、姓名、课程成绩):",i+1);
    		scanf("%s %s",arr[i].id,arr[i].name);
    		for (j = 0;j < NMBKC;j++)
    		{
    			scanf("%f",&arr[i].score[j]);
    			arr[i].total += arr[i].score[j];
    		}
    		arr[i].avg = arr[i].total / NMBKC;
    	}
    }
    //修改数据
    void ChangeInfo(struct Student arr[],int n)
    {
    	int i,j;
    	char id[8] = {0};
    	char c;
    	printf("请输入学生的学号:");
    	scanf("%s",id);
    
    	for (i = 0; i < n;i++)
    	{
    		if (strcmp(arr[i].id, id) == 0)
    		{
    			printf("是否修改姓名(Y/N)?");
    			scanf(" %c",&c);
    			getchar();//吸收回车符
    			if ('Y' == c || 'y' == c)
    			{
    				printf("请输入修改后的名字:");
    				scanf("%s",arr[i].name);
    			}
    			printf("是否修改成绩(Y/N)?");
    			scanf(" %c",&c);
    			getchar();//吸收回车符
    			if('Y' == c || 'y' == c)
    			{
    				printf("请输入%d门成绩:",NMBKC);
    				//此处默认修改全部成绩,也可以进一步细化修改某个课程的成绩
    				arr[i].total = 0.0;
    				for (j = 0;j < NMBKC;j++)
    				{
    					scanf("%f",&arr[i].score[j]);
    					arr[i].total += arr[i].score[j];
    				}
    				arr[i].avg = arr[i].total / NMBKC;
    			}
    
    			break;
    		}
    	}
    }
    
    //排序
    void SortByTotal(struct Student arr[],int n)
    {
    	int i,j;
    	struct Student tmp;
    	for (i = 0; i < n-1;i++)
    	{
    		for (j = 0;j < n-1-j;j++)
    		{
    			if(arr[j].total < arr[j+1].total)
    			{
    				tmp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = tmp;
    			}
    		}
    	}
    	//显示
    	for (i = 0;i< n;i++)
    	{
    		printf("%s\t%s\t%.1f\t%.1f\t",arr[i].id,arr[i].name,arr[i].total,arr[i].avg);
    		for (j=0;j<NMBKC;j++)
    		{
    			printf("%f\t",arr[i].score[j]);
    		}
    		printf("\n");
    	}
    }
    
    //查询
    void Find(struct Student arr[],int n)
    {
    	int i,j;
    
    	char name[20]={0};
    	printf("请输入学号或者姓名:");
    	scanf("%s",name);
    	
    	for (i = 0;i < n;i++)
    	{
    		if( (strcmp(arr[i].name,name) == 0) || (strcmp(arr[i].id ,name)==0) )
    		{
    			printf("%s\t%s\t%.1f\t%.1f\t",arr[i].id,arr[i].name,arr[i].total,arr[i].avg);
    			for (j=0;j<NMBKC;j++)
    			{
    				printf("%f\t",arr[i].score[j]);
    			}
    			printf("\n");
    			break;;
    		}
    	}
    }
    //统计每个学生的平均成绩和每门课程的平均成绩
    //每个学生的平均成绩在录入成绩时已经计算,此处只统计每门课程的平均成绩
    //统计结果放在avg数组中
    void Tongji(struct Student arr[],int n,float avg[])
    {
    	int i,j;
    	for (i = 0; i< NMBKC;i++)
    	{
    		avg[i] = 0.0;
    		for (j = 0;j < n;j++)
    		{
    			avg[i] += arr[j].score[i];
    		}
    		avg[i] = avg[i]/n;
    	}
    	//显示课程平均分
    	printf("课程平均分:");
    	for (i = 0;i < NMBKC;i++)
    	{
    		printf("课程%d的平均分:%.1f\n",i+1,avg[i]);
    	}
    }
    
    int main()
    {
    	struct Student stu[10];
    	int n;
    	int opt;
    	int bgo = 1;
    	float avg[NMBKC]; //课程平均分
    	while(bgo)
    	{
    		printf("-------学生管理系统-------\n");
    		printf("  1.录入学生信息          \n");
    		printf("  2.修改学生信息          \n");
    		printf("  3.按总分排序            \n");
    		printf("  4.学生平均分和课程平均分\n");
    		printf("  9.退出系统              \n");
    		printf("--------------------------\n");
    		scanf("%d",&opt);
    		switch(opt)
    		{
    		case 1:
    			printf("请输入学生人数:");
    			scanf("%d",&n);
    			InputInfo(stu,n);
    			getchar();
    			getchar();
    			system("cls");
    			break;
    		case 2:
    			ChangeInfo(stu,n);
    			getchar();
    			getchar();
    			system("cls");
    			break;
    		case 3:
    			SortByTotal(stu,n);
    			getchar();
    			getchar();
    			system("cls");
    			break;
    		case 4:
    			Tongji(stu,n,avg);
    			getchar();
    			getchar();
    			system("cls");
    			break;
    		case 9:
    			bgo = 0;
    			break;
    		}
    	}
    	return 0;
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?