实现一个成绩管理程序(不用结构体和使用结构体两种)

2024-01-19 15:48

本文主要是介绍实现一个成绩管理程序(不用结构体和使用结构体两种),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

每天都告诉自己要努力向前冲!!!

  • 冲冲冲!!!

题目要求:
输入多个学生的学号(由字母与数字组成)、姓名(由字符或者汉字组成)、语文、英语、数学三门课程的成绩
计算每个学生的平均成绩和总分
按总分由高到低的顺序输出学生的学号、姓名、语文成绩、英语成绩、数学成绩、总分、平均分
学号、姓名占用的内存要求动态分配,实现过程中可以用指针、数组等,不得用结构体structure

#include<stdio.h>
#include<malloc.h> 
#include<string.h>
#include<stddef.h>
#define N 100
int main()
{double a[N][6]; double temp[6]={0};char t[50]={0};char tempStr[20] ;char *name[5] ;char tempStr2[19] ;char *xuehao[14];int i,j,n;printf("请输入学生人数:");scanf("%d",&n);for(i=0;i<n;i++){printf("第%d个学生姓名、学号、语文成绩、数学成绩、英语成绩:\n",i+1); scanf("%s%s%lf%lf%lf",&tempStr,&tempStr2,&a[i][0],&a[i][1],&a[i][2]);name[i] =(char *) calloc(10,sizeof(char));	 	xuehao[i] =(char *) calloc(20,sizeof(char));		strcpy(name[i], tempStr);			 								strcpy(xuehao[i], tempStr2);a[i][3]=a[i][0]+a[i][1]+a[i][2];a[i][4]=a[i][3]/3;}for(i=0;i<n-1;i++){for(j=0;j<n-i-1;j++){if(a[j][3]<=a[j+1][3]){memcpy(temp,a[j],sizeof(temp));memcpy(a[j],a[j+1],sizeof(temp));memcpy(a[j+1],temp,sizeof(temp));strcpy(t,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],t);strcpy(t,xuehao[j]);strcpy(xuehao[j],xuehao[j+1]);strcpy(xuehao[j+1],t);}}}printf("\n姓名\t学号\t\t语文\t数学\t英语\t总分\t平均分\t排名\n");for(i=0;i<n;i++){printf("%s\t%s\t",name[i],xuehao[i]);free(name[i]);name[i] = NULL;free(xuehao[i]);xuehao[i] = NULL;for(j=0;j<3;j++){printf("%.f\t",a[i][j]);if(j==2){printf("%.f\t%.2f\t%d",a[i][3],a[i][4],i+1);}}printf("\n");}}

总结:
尽量避免使用memcpy吧,我感觉每次字符串的字符数量不同,具体实现起来总会有一点点小错误!!!

#include<stdio.h>
#include<stdlib.h>struct student
{char name[10]; double yuwen;double math;double english;double sum;double average;};
int n;
double y_average,m_average,e_average;void s_average(struct student s[]);
void sum(struct student s[]);
void meike_average(struct student s[]);
void paixu(struct student s[]);
void paixu(struct student s[]);
int main()
{struct student s[100];int i,j;printf("请输入学生人数:");scanf("%d",&n);for(i=0;i<n;i++){printf("请输入%d个学生的信息---姓名---语文成绩---数学成绩---英语成绩\n",i+1);scanf("%s%lf%lf%lf",&s[i].name,&s[i].yuwen,&s[i].math,&s[i].english);} sum(s);s_average(s);meike_average(s);for(i=0;i<n;i++){printf("学生%s的总分为%.f\t各科平均分为%.2f\n",s[i].name,s[i].sum,s[i].average);}printf("\n");printf("各科平均分\n");printf("  \t平均分\n语 文\t  %.2f\n数 学\t  %.2f\n英 语\t  %.2f\n",y_average,m_average,e_average);paixu(s);printf("姓名\t语文\t英语\t数学\t总分\t平均分\t名次\n");for(i=0;i<n;i++){printf("%s\t%.f\t%.f\t%.f\t%.f\t%.f\t%d\n",s[i].name,s[i].yuwen,s[i].english,s[i].math,s[i].sum,s[i].average,i+1);}
}void sum(struct student s[])
{int i;for(i=0;i<n;i++){s[i].sum=s[i].math+s[i].english+s[i].yuwen;}
}void s_average(struct student s[])
{int i;for(i=0;i<n;i++){s[i].average=(s[i].math+s[i].english+s[i].yuwen)/3;}}void meike_average(struct student s[]) 
{int i;double sum1=0,sum2=0,sum3=0;for(i=0;i<n;i++){sum1+=s[i].yuwen;sum2+=s[i].math;sum3+=s[i].english;} y_average=sum1/n;m_average=sum2/n;e_average=sum3/n;
}void paixu(struct student s[])
{int i,j,t,flag;struct student temp;for (i = 0; i < n-1; i++)       //轮次,共NUM-1次{flag = 0;for (j = 0; j < n - i-1; j++)  //实现一次冒泡操作if (s[j].sum < s[j+1].sum)                  //交换a[j]和a[j+1]{   temp = s[j];   s[j] = s[j+1];  s[j+1] = temp;  flag = 1;  }if (flag == 0)  break;}
}

这篇关于实现一个成绩管理程序(不用结构体和使用结构体两种)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/622906

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr