⑴ c语言学生管理系统
C 语言学生成绩管理系统
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[20];/*学生学号*/
char studentName[20];/*学生姓名*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink; /*链表表头指针*/
/*函数声明*/
void ReadInfoFormFile();
void Menu();
void CreateHeadLink();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentName();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void ChangeMarkByName();
void ChangeMarkByNumber();
void SaveLinkToFile();
void paixu();
void DesplayMarkSegment();
int choose;/*用于接受用户的选择*/
/*主函数*/
main()
{
system("color 2a");
printf("\n\t\t欢迎进入***学院***班学生成绩管理系统\n\n\n");
printf("\t\t\t\tO(∩_∩)O\n\n\n\n");
printf("\t\t\t^_^\t\t\t^_^\n\n");
printf("\n\t\t 注意:请按照要求输入相应信息,谢谢!\n\n\n\n\n");
printf("\t\t\t\t\t\t\t\t制作人:***\n\n\n");
printf("\t\t\t 按任意键进入…………");
getch();
system("cls");
CreateHeadLink();
ReadInfoFormFile();
Menu();
}
/*从文件中读学生信息到链表中*/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*显示菜单,根据用户的输入完成相应的功能*/
void Menu(void)
{
STUDENT *p;
printf("\t\t (^o^)欢迎使用学生成绩管理系统(^o^)\n\n");
printf("\t ※--------------------请选择相应功能---------------------※\n\n");
printf("\t 1: 显示所有学生的信息 |");
printf(" \t 2: 按姓名查询 |\n\n");
printf("\t 3: 按学号查询 |");
printf(" \t\t 4: 增加学生 |\n\n");
printf("\t 5: 删除学生 |");
printf(" \t\t 6: 按姓名修改学生成绩 |\n\n");
printf("\t 7: 按学号修改学生成绩 |");
printf(" \t 8: 保存所有学生信息 |\n\n");
printf("\t 9: 按成绩输出学生信息 |");
printf("\t 10: 显示不及格及优秀学生 |\n\n");
printf("\t 11: 返回主菜单 |");
printf("\t\t 12: 退出 |\n\n");
printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");
printf("\t 请输入对应数字:");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:system("cls");
OutputInformation();/*显示所有学生的信息*/
break;
case 2: system("cls");
DesplayInfoBystudentName();
break;
case 3: system("cls");
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4: system("cls");
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5: system("cls");
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6: system("cls");
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7: system("cls");
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8: system("cls");
SaveLinkToFile();/*保存数据*/
break;
case 9: system("cls");
paixu();break;
case 10: system("cls");
DesplayMarkSegment();break;
case 11: system("cls");
break;
case 12: system("cls");
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default: system("cls"); break;
}
Menu();/*递归调用*/
}
/*建立链表表头*/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/*申请一个新结点,并将其初始化*/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber='\0';
for(i=0;i<20;i++)
p->studentName='\0';
for(i=0;i<20;i++)
p->className='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/*取得用户输入的学生信息*/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:");
scanf("%s",t->studentName);
printf("请输入该生所在班级:");
scanf("%s",t->className);
printf("请输入第1门成绩:");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:");
scanf("%f",&(t->mark3));
}
/*在链表的结尾处增加一个结点*/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*根据用户输入的学生姓名显示该学生的信息*/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("请输入学生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentName);}
}
/*根据用户输入的学号显示该学生的信息*/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
p=headLink->next;
printf("请输入学生学号:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{ system("cls");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentNumber);
}}
/*输出一个结点的信息*/
void DesplayOneNode(STUDENT *t)
{
printf("\t%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/*根据用户输入的学号删除该学生*/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{ system("cls");
printf("\t 不存在该学号的学生\n");
return;
}
system("cls");
printf("\t 成功删除\n");
}
/*显示所有学生的信息*/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/*根据输入的姓名修改成绩*/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 对不起,不存在姓名为 %s 的学生\n",studentName);
} }
/*根据输入的姓名修改成绩*/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生学号:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag){system("cls");
printf("\t 对不起,不存在学号为 %s 的学生\n",studentNumber);
}}
/*保存链表数据到文件中*/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("\t 现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/*显示优秀和不及格学生成绩*/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("\t60分以下(不及格)的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就认为该生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t不及格的学生一共有%d人\n",count);
p=headLink->next;
printf("\t成绩优秀的学生成绩如下:\n");
printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t成绩优秀的学生一共有%d人\n",count);
}
/*按总成绩排序*/
void paixu(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("\t 现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
⑵ C语言编程 有100个学生,试编程出按总分排名的名次表,打印出形式为:名次,学号,总分.
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
const int Size = 100; // 学生人数
struct Student
{
int score;
int num;
inline friend bool operator < ( const Student &s1, const Student &s2 )
{
return s1.score > s2.score;
}
};
Student Stu[ Size ];
void init( )
{
int i;
for ( i = 0; i < Size; i++ )
{
cout << "请输入第" << i + 1 << "个学生的学号和成绩:";
cin >> Stu[ i ].num >> Stu[ i ].score;
}
}
void print( )
{
int i;
cout << setw( 6 ) << "名次" << setw( 6 ) << "学号" << setw( 6 ) << "总分" << endl;
for ( i = 0; i < Size; i++ )
cout << setw( 6 ) << i + 1
<< setw( 6 ) << Stu[ i ].num
<< setw( 6 ) << Stu[ i ].score << endl;
}
int main( )
{
init( );
sort( Stu, Stu + Size );
print( );
return 0;
}
⑶ c语言 学生成绩排名
#include<stdio.h>
voidsetList(int*a,intlen);
voidprintfList(int*a,intlen);
voidpxList(int*a,intlen);
voidinsertList(int*a,intlen);
voidfanList(int*a,intlen);
intmain()
{
inta[11];//1.定义一个数组a[11],用以存放学生的成绩。
setList(a,10);//2.从键盘输入10个学生成绩。
pxList(a,10);//3.采用选择法,将学生成绩按照从高到低进行排序。
printfList(a,10);
insertList(a,10);//4.再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组。
printfList(a,11);
fanList(a,11);//5.将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列
printfList(a,11);
return0;
}
voidsetList(int*a,intlen)//输入
{
inti;
printf("请输入%d个学生成绩
",len);
for(i=0;i<len;i++)
scanf("%d",&a[i]);
}
voidprintfList(int*a,intlen)//打印数组
{
inti;
printf("
---打印数组---
");
for(i=0;i<len;i++)
printf("%d",a[i]);
}
voidpxList(int*a,intlen)//选择排序
{
inti,j;
printf("
---从大到小排序---
");
for(i=0;i<len-1;i++)
for(j=i+1;j<len;j++)
if(a[i]<a[j])
{
a[j]^=a[i];
a[i]^=a[j];
a[j]^=a[i];
}
}
voidinsertList(int*a,intlen)//插入数组
{
printf("
---插入数组---
");
printf("输入要插入的数:");
scanf("%d",&a[len]);
pxList(a,11);
}
voidfanList(int*a,intlen)//数组反向存储
{
int*p0,*p1;
p0=a;
p1=&a[len-1];
while(p0<p1)
{
*p0^=*p1;
*p1^=*p0;
*p0^=*p1;
p0++;
p1--;
}
}
⑷ 学生成绩名次表c语言代码
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int num;
int score;
int order;
}stu;
void classorder(stu s[], int total, int m, int n);
void gradeorder(stu s[], int total);
int main()
{
stu s[10000], p[10000];
int i, j, k, count;
int n, m;
printf("输入班级数 m 和每班人数 n\n");
scanf("%d%d",&m,&n);
k = 0, count = 1;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
s[k].num = count++;
s[k].score = rand()%100+1;
k++;
}
}
for (i = 0; i < k; i++)
p[i] = s[i];
classorder(s,k,m,n);
gradeorder(p,k);
return 0;
}
void gradeorder(stu s[], int total)
{
int i, j;
stu temp;
for (i = 0; i < total-1; i++)
{
for (j = i+1; j < total; j++)
{
if (s[i].score < s[j].score )
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
s[0].order = 1;
for (i = 1; i < total; i++)
{
if (s[i].score == s[i-1].score)
s[i].order = s[i-1].order ;
else
s[i].order = s[i-1].order +1;
}
printf ("年级总排名:\n学号\t成绩\t名次\n");
for (i = 0; i < total; i++)
printf("%4d\t%4d\t%4d\n",s[i].num ,s[i].score ,s[i].order );
}
void classorder(stu s[], int total, int m, int n)
{
int i, k, h;
stu temp;
for (i = 0; i < m; i++)
{
k = i*n;
for (;k < (i+1)*n-1; k++)
{
for (h = k+1; h < (i+1)*n; h++)
{
if (s[k].score < s[h].score )
{
temp = s[k];
s[k] = s[h];
s[h] = temp;
}
}
}
k = i*n;
s[k].order = 1;
for (k = i*n+1; k < (i+1)*n; k++)
{
if (s[k].score == s[k-1].score )
s[k].order = s[k-1].order ;
else
s[k].order = s[k-1].order + 1;
}
printf ("%d 班排名:\n学号\t成绩\t名次\n",i+1);
for (k = i*n; k < (i+1)*n; k++)
printf("%4d\t%4d\t%4d\n",s[k].num ,s[k].score ,s[k].order );
printf ("\n");
}
}
⑸ c语言中排名问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#definestatusint
#defineNAME30/*各类名称字数上限*/
#defineSTU100/*学生人数上限*/
#defineSUB10/*课程数上限*/
typedefstructrecord{
floatscore;/*成绩分数*/
}record;
typedefstructstudent{
intid;/*索引性质的id*/
intno;/*学号*/
charname[NAME];/*姓名*/
recordscores[SUB];/*各门课成绩分数*/
floattotalScore;/*总分*/
floataverageScore;/*平均分*/
intranking;/*名次*/
}student;
intsubNum=3;/*课程数*/
charsubject[SUB][NAME]={"数学","英语","计算机"};/*课程名称*/
/**********************以下为函数声明**********************/
intstuInfoEmpty(studentstu[],intstuNum);/*学生信息判空*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum);/*录入单个学生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum);/*录入全部学生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum);/*计算处理单个学生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum);/*计算处理全部学生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking);/*输出单个学生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking);/*输出全部学生信息*/
statusdescSort(studentstu[],intstuNum,intsubNum);/*按总分降序排列并录入名次*/
intgetCommand(void);/*输入命令编号*/
statusprintMeunText(void);/*打印菜单文本*/
statusrunMeun(studentstu[],intstuNum,intsubNum);/*调出菜单*/
/**********************以上为函数声明**********************/
intmain(void){
studentstu[STU]={-1};/*学生结构体数组*/
intstuNum;
inti;
runMeun(stu,stuNum,subNum);
return0;
}
/*学生信息判空*/
/*为空返回1;不空返回0*/
intstuInfoEmpty(studentstu[],intstuNum){
inti;
if(stuNum==0)
return1;
for(i=0;i<stuNum;i++)
if(stu[i].id==-1)
return1;
return0;
}
/*录入单个学生信息*/
statusinputStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
scanf("%d",&stu[stuIndex].no);/*学号*/
if(stu[stuIndex].no==-1){/*学号录入-1以结束*/
stu[stuIndex].id=-1;
return-1;/*本次未录入*/
}
scanf("%s",&stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++){
scanf("%f",&stu[stuIndex].scores[i].score);
}/*各门课成绩分数*/
for(i=0;i<subNum;i++)
if(stu[stuIndex].scores[i].score>100||stu[stuIndex].scores[i].score<0)
return0;/*本次录入错误*/
return1;/*本次录入成功*/
}
/*录入全部学生信息*/
statusinputAllStuInfo(studentstu[],int*stuNum,intsubNum){
inti,inputStatus,count;
puts("======================================================");
puts("录入学生信息");
puts("======================================================");
putchar(' ');
if(*stuNum!=0){
printf("已有%d名学生信息! ",*stuNum);
putchar(' ');
puts("继续录入以新增(学号录入-1以结束)↓↓");
putchar(' ');
}
else{
puts("请录入学生信息(学号录入-1以结束)↓↓");
putchar(' ');
}
/*录入信息之表头*/
puts("------------------------------------------------------");
printf(" 学号 姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
putchar(' ');
puts("------------------------------------------------------");
/*录入信息*/
count=0;
i=*stuNum;
while(1){
printf("第%d名学生 ",i+1);
stu[i].id=i+1;
inputStatus=inputStuInfo(stu,i,subNum);
if(inputStatus==1){
i++;
count++;
}
elseif(inputStatus==0){
putchar(' ');
puts("成绩输入错误!请重新输入↓");
continue;
}
elseif(inputStatus==-1)
break;
}
*stuNum+=count;
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
if(count!=0)
printf("本次%d名学生信息录入完毕!即将返回主菜单。 ",count);
else
printf("您本次未输入学生信息!即将返回主菜单。 ");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*计算处理单个学生信息*/
statuscalcStuInfo(studentstu[],intstuIndex,intsubNum){
inti;
stu[stuIndex].totalScore=stu[stuIndex].averageScore=0;
/*计算总分*/
for(i=0;i<subNum;i++){
stu[stuIndex].totalScore+=stu[stuIndex].scores[i].score;
}
stu[stuIndex].averageScore=stu[stuIndex].totalScore/subNum;/*计算平均分*/
return1;
}
/*计算处理全部学生信息*/
statuscalcAllStuInfo(studentstu[],intstuNum,intsubNum){
inti;
/*计算总分、平均分等*/
for(i=0;i<stuNum;i++)
calcStuInfo(stu,i,subNum);
return1;
}
/*输出单个学生信息*/
statusprintStuInfo(studentstu[],intstuIndex,intsubNum,intinclRanking){
inti;
if(inclRanking)
printf("%d ",stu[stuIndex].ranking);/*名次*/
printf("%d ",stu[stuIndex].no);/*学号*/
printf("%s ",stu[stuIndex].name);/*姓名*/
for(i=0;i<subNum;i++)/*各门课成绩分数*/
printf("%.2f ",stu[stuIndex].scores[i].score);
printf("%.2f ",stu[stuIndex].totalScore);/*总分*/
printf("%.2f ",stu[stuIndex].averageScore);/*平均分*/
putchar(' ');
return1;
}
/*输出全部学生信息*/
statusprintAllStuInfo(studentstu[],intstuNum,intsubNum,intinclRanking){
inti;
if(stuInfoEmpty(stu,stuNum)){
puts("尚未录入学生信息!即将返回主菜单。");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return0;
}
puts("======================================================");
puts("全部学生信息");
puts("======================================================");
putchar(' ');
if(inclRanking)
printf("%d名学生信息如下,按总分由高到低排列名次↓↓ ",stuNum);
else
printf("%d名学生信息如下↓↓ ",stuNum);
putchar(' ');
/*输出信息之表头*/
puts("------------------------------------------------------");
if(inclRanking)
printf("名次 ");
printf("学号 ");
printf("姓名 ");
for(i=0;i<subNum;i++)
printf("%s ",subject[i]);
printf("总分 ");
printf("平均分 ");
putchar(' ');
puts("------------------------------------------------------");
/*输出信息*/
for(i=0;i<stuNum;i++)
printStuInfo(stu,i,subNum,inclRanking);
puts("------------------------------------------------------");
putchar(' ');
putchar(' ');
puts("学生信息输出完毕!即将返回主菜单。");
putchar(' ');
puts("按任意键继续...");
putchar(' ');
fflush(stdin);
getch();
return1;
}
/*按总分降序排序、录入名次并输出*/
statusdescSort(studentstu[],intstuNum,intsubNum){
inti,j;
studenttemp;
if(stuInfoEmpty(stu,stuNum))
return0;
/*按总分降序*/
for(i=0;i<stuNum-1;i++)
for(j=0;j<stuNum-1-i;j++)
if(stu[j].totalScore<stu[j+1].totalScore){
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
/*录入名次*/
for(i=0;i<stuNum;i++)
stu[i].ranking=i+1;
return1;
}
/*输入命令编号*/
intgetCommand(void){
intkey;/*命令编号*/
printf("请输入命令编号以开启操作:");
scanf("%d",&key);
returnkey;
}
/*打印菜单文本*/
statusprintMeunText(void){
puts("======================================================");
puts("学生信息管理");
puts("------------------------------------------------------");
printf("%4c 功能详情 ",'#');
puts("------------------------------------------------------");
printf("%4d 输入学生信息 ",1);
printf("%4d 按成绩由高到低排序 ",2);
printf("%4d 退出 ",7);
puts("======================================================");
putchar(' ');
return1;
}
statusrunMeun(studentstu[],intstuNum,intsubNum){
intkey;
do{
system("cls");/*清屏*/
printMeunText();/*打印菜单文本*/
key=getCommand();/*输入命令编号*/
putchar(' ');
switch(key){
case1:system("cls");inputAllStuInfo(stu,&stuNum,subNum);calcAllStuInfo(stu,stuNum,subNum);break;
case2:system("cls");descSort(stu,stuNum,subNum);printAllStuInfo(stu,stuNum,subNum,1);break;
case7:puts("程序结束! ");break;
default:puts("输入错误,请重新输入! 按任意键继续...");getch();break;
}
}while(key!=7);
getch();
return1;
}
运行结果
主菜单
⑹ c语言输入学生成绩 根据学生的总得分以降序对学生进行排名来计算他们的排名
char name[100000]这个长度有点离谱改小点,char name[100];
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct
{
char name[100];
int chinese, math, english, computer;
int total;
} STUDENT;
void printStuArray(STUDENT array[], int num);
void sortStuArray(STUDENT array[], int num);
int main()
{
STUDENT people[10];
int num_students;
cout << "Enter how many students>";
cin >> num_students;
for (int i = 0; i < num_students; i++)
{
cout << " Student " << i+1 << "'s name>";
cin >> people[i].name;
cout << " Chinese>";
cin >> people[i].chinese;
cout << " Math>";
cin >> people[i].math;
cout << " Englis>";
cin >> people[i].english;
cout << " Computer>";
cin >> people[i].computer;
people[i].total= people[i].chinese + people[i].math + people[i].english + people[i].computer;
}
sortStuArray(people, num_students);
printStuArray(people, num_students);
system("pause");
return 0;
}
void printStuArray(STUDENT array[], int num)
{
cout << "=======================================================" << endl;
cout << "Rank Chinese Math Eng Com Total Name" << endl;
for (int i = 0; i < num; i++)
{
printf("%3d %3d %3d %3d %3d %3d %s ", i + 1, array[i].chinese, array[i].math, array[i].english, array[i].computer, array[i].total, array[i].name);
}
cout << "=======================================================" << endl;
}
void sortStuArray(STUDENT array[], int num)
{
for (int i = 0; i < num; i++)
{
for(int j=i+1;j<num;j++)
{
if (array[i].total<array[j].total)
{
STUDENT temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
⑺ C语言成绩排名次。
#include<stdio.h>
#include<stdlib.h>
typedefintunit;//可改为double型
intcmp(constvoid*a,constvoid*b)
{
unitA=*(unit*)a;
unitB=*(unit*)b;
if(A<B)return1;
if(A>B)return-1;
return0;
}
inti,j,k,m,n;
unit*data;
intmain()
{
scanf("%d",&n);//输入人数
data=(unit*)malloc(n*sizeof(unit));
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))scanf("%d",&data[i]);
elseif(sizeof(unit)==sizeof(double))scanf("%lf",&data[i]);
}
qsort(data,n,sizeof(data[0]),cmp);
for(i=0;i<n;i++)
{
if(sizeof(unit)==sizeof(int))printf("%d",data[i]);
elseif(sizeof(unit)==sizeof(double))printf("%lf",data[i]);
}
}
从高到低排分数