本文主要是介绍实现一个成绩管理程序(不用结构体和使用结构体两种),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
每天都告诉自己要努力向前冲!!!
- 冲冲冲!!!
题目要求:
输入多个学生的学号(由字母与数字组成)、姓名(由字符或者汉字组成)、语文、英语、数学三门课程的成绩
计算每个学生的平均成绩和总分
按总分由高到低的顺序输出学生的学号、姓名、语文成绩、英语成绩、数学成绩、总分、平均分
学号、姓名占用的内存要求动态分配,实现过程中可以用指针、数组等,不得用结构体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;}
}
这篇关于实现一个成绩管理程序(不用结构体和使用结构体两种)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!