C语言 排序学生成绩
4.1.3 一维数组
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
练习:一个班50位同学参加了一次C语言 程序设计考试,现要输入全班同学的成 绩,并按逆序输出。
任务2 任务 排序学生成绩
任务1中已经输入了50个同学的成 任务1中已经输入了50个同学的成 50 绩到数组中,现在需要确定如何对学 绩到数组中, 生成绩从低到高进行排序。 生成绩从低到高进行排序。
初始化后: 1 4 2 5 3 6
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
(2)按数组排列的顺序初始化
Example
int a[2][3]={1,2,3,4,5,6};
初始化后: 1 4 2 5 3 6
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
0 1 2
1 2 3
2 3 4
3 4 5
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
二维数组的输入输出
Example
int b[3][4], i, j ; for ( i =0 ; i<3 ; i++) for ( j =0 ; j<4 ; j++) scanf(“%d”, &b[i][j]) ; for ( i =0 ; i<3 ; i++) for ( j =0 ; j<4 ; j++) printf(“%5d”, b[i][j] ) ;
数组名[常量表达式];
数组元素 的数据类型
遵循C语言 标识符规则
例如: a[5]; 例如:int a[5]
数组长度 几个数组元素
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
4.1.1 一维数组 说明: 常量表达式表示元素的个数,即数组 长度。 常量表达式中可以包括常量和符合常 量,不能包含变量。
int i=5; int a[i]; /*数组长度为变量*/
4.1.1 一维数组
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
以下对一维整型数组a的正确定义的是: A、int a(10) B、int n=10, a[n] C、int n; int a[n]; D、#define SIZE 10 scanf(“%d”,%n); int a[SIZE];
任务3 任务 处理多位学生多门课程的成绩
一个班上50位学生参与考试, 一个班上50位学生参与考试,考 50位学生参与考试 门课程, 了3门课程,现要求按总成绩的高低 输出成绩单。 输出成绩单。 如果仅仅使用一维数组进行上述 处理,是很困难的,此时需要使用二 处理,是很困难的,此时需要使用二 维数组。 维数组。
任务2 任务 排序学生成绩
7 1 5 6 9 3 7 1 5 6 9 3 1 5 6 7 3 9 1 7 5 6 9 3 1 5 6 3 7 9 1 5 7 6 9 3 1 5 3 6 7 9 1 5 6 7 9 3 1 3 5 6 7 9 1 5 6 7 9 3 1 3 5 5 6 9 1 5 6 7 3 9
(3)对全部数组元素初始化
Example
int a[ ][3]={1,2,3,4,5,6};
初始化后: 1 4 2 5 3 6
省略行号
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
二维数组的赋值 用二层循环语句处理数组, 通常外循环控制行, 内循环控制列。
Example
for(i=0;i<3;i++) ( ; ) for(j=0;j<4;j++) ( ; ) a[i][j]=i+j; ;
引导问题
1、课程的成绩如何存储 、 2、学生信息如何存储 、 3、如何对成绩进行排序? 、如何对成绩进行排序?
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
计算50个学生成绩的平均分 main() { int i, x, s=0; for( i=0; i<50; i++) {scanf(“%d”,&x); s+=x; } printf(“%f\n”, s/50.0); } 只用了三个变量就 解决了问题,但数 如果需要把成绩按 据没有保存。
设 计
语 言 程 序
任务1 输入/输出多个学生一门 任务 输入 输出多数组的初始化
(2)在定义数组时,对部分数组元素赋初值
Example
C C C C
int a[5]={1,2,3}; 系统为其余元素赋0 系统为其余元素赋
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
任务3 任务 处理多位学生多门课程的成绩
4.3.1 二维数组
二维数组的定义
数据类型
数组名[常量表达式1][常量表达式2];
行
Example
列
float x[2][3];
int x[0][1] x[0][2] ; x[0][0]a[3,4], b(3,4); x[1][0] x[1][1] x[1][2] int c[ ][ ], d(3)(4);
4.1.2 一维数组的引用
数组的赋值只能逐个对数组元素赋值,不能直接对数组名赋值。 因数组在内存占一片连续的存储空间,可用循环语句处理数组。
Example
Example
for(i=0;i<5;i++) ( ; ; ) a[i]=(i+1)*100; + ;
for(i=0;i<100;i++) ( ; ; ) a[i]=i+1; + ;
练习
下列程序有哪些错误?请解释错误原因。 下列程序有哪些错误?请解释错误原因。 (2) ) main( ) { int i, j, a[4][ ]=1,2,3,4,5,6,7,8; ; for( i=0;i<4;i++ ) ; ; for( j=0;j<2;j++ ) ; ; printf(“%d”,a[i][j]); ; } int a[ ][2]={1,2,3,4,5,6,7,8};
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
4.1.2 一维数组的引用
C语言规定只能逐个引用数组元素而不能一次引 用整个数组。
数组名[下标表达式];
Example
int n=5,a[20]; a[1] a[n] a[3*n]
若一个数组长度为n 若一个数组长度为n,其 下标值范围是0 (n下标值范围是0~(n-1)
4.1.2 一维数组
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
1、上例中,语句 average=sum/5.0; 修改为 average=sum/5; 结果如何? 2、练习:从键盘输入5个学生的成绩,求出并 输出分数最高的学生序号及最高成绩。 。
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
任务3 任务 处理多位学生多门课程的成绩
4.3.2 二维数组的引用 引用:
Example
数组名[行下标][列下标]
int a[3][4]; a[0][0]=3; a[0][1]=a[0][0]+10;
a[3][4]=3; /* 下标越界 */ a[1,2]=1; /* a[1][2]=1; */
任务3 任务 处理多位学生多门课程的成绩
表示引用数组a中的第2个元素 表示引用数组a中的第6个元素 表示引用数组a中的第16个元素
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
4.1.2 一维数组的引用
输入5个学生的数学成绩,计算平均分,将平均分 输出到屏幕上。 数组元素的地址也 void main() 是通过“&”运算符 得到的。 { int i,mathScore[5],sum=0;float average; for(i=0;i<5;i++) { scanf("%d",&mathScore[i]); } for(i=0;i<5;i++) { sum=sum+mathScore[i]; } average=sum/5.0; printf("%f ",average); }
设 计
项目四 语 言 程 序 C C C C
项目要点: 项目要点:
数组的定义和使用 数组的存储结构 数组的输入输出 字符串处理函数
学习目标: 学习目标:
使用数组处理同一类型的大批数据 使用字符数组处理字符串 使用二维数组处理字符串
工作任务导入
工作任务
一个班上50位学生参与考试, 一个班上 位学生参与考试,考了 位学生参与考试 3门课程,现要求按总成绩的高低输出 门课程, 门课程 成绩单
从高到低的顺序全部打 印出来,怎么办?
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
数 组
相同类型数据的 集合。 让一组同一类型 的数据共用一个变 量名,而不需要为 每一个数据都定义 一个名字。
4.1.1 一维数组 一维数组的定义
数据类型
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
{ printf(“the sorted nembers:\n”); t=x[j]; for( i=0; i<6; i++) x[j]=x[j+1]; printf(“%5d\n”, x[i]); x[j+1]=t; } }
任务2 任务 排序学生成绩
C语言学生成绩管理系统(输入输出删除插入查找排序)
if (count==0 || count==1)
{
return;
}
list *p, *temp;
while(i > 0)
{p=head;
for(j=0; j<i-1; j++)
{
if(p->next->num > p->next->next->num)
/*
p=(list *)malloc(sizeof(list));
p->next=Null;
*/
r=head;
printf("请输入学生人数.\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(list *)malloc(sizeof(list));
scanf("%d",&k);
while (p && p->num!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d%5.1f\t%5.1f\n",p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);
c语言课程设计成绩排序
c语言课程设计成绩排序一、教学目标本节课的教学目标是让学生掌握C语言中成绩排序的功能实现。
具体包括:1.知识目标:使学生了解排序算法的原理,掌握常用的排序方法,如冒泡排序、选择排序和插入排序等。
2.技能目标:培养学生运用C语言实现成绩排序功能,提高编程能力。
3.情感态度价值观目标:培养学生独立思考、合作交流的学习态度,激发他们对计算机科学的兴趣。
二、教学内容本节课的教学内容主要包括:1.排序算法的原理及分类。
2.C语言中成绩排序的实现方法,包括冒泡排序、选择排序和插入排序等。
3.结合实际案例,让学生动手实践,掌握排序算法的应用。
三、教学方法为了达到本节课的教学目标,将采用以下教学方法:1.讲授法:讲解排序算法的原理和分类,让学生了解各种排序方法的基本思想。
2.案例分析法:分析实际案例,让学生掌握排序算法的应用。
3.实验法:让学生动手实践,编写C语言程序实现成绩排序功能,提高编程能力。
4.讨论法:在课堂上学生进行小组讨论,培养学生的合作交流能力。
四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C语言程序设计》等相关教材,为学生提供理论知识的学习。
2.参考书:提供额外的学习资料,帮助学生深入了解排序算法。
3.多媒体资料:制作PPT等教学课件,直观展示排序算法的原理和实现过程。
4.实验设备:为学生提供编程实践的环境,如计算机、编程软件等。
五、教学评估本节课的教学评估将采用多元化评价方式,全面反映学生的学习成果。
具体包括:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以体现学生的学习态度。
2.作业:布置与课程内容相关的编程作业,评估学生对知识的掌握程度。
3.考试:安排一次课程结束后的考试,测试学生对排序算法的理解和应用能力。
评估方式要求客观、公正,确保评价结果能够真实反映学生的学习情况。
六、教学安排本节课的教学安排如下:1.进度:按照教材的章节顺序,依次讲解排序算法的原理、分类和实现方法。
学生成绩管理系统C语言源程序
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查询的姓名,请重新输入,输入0表\
示结束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n请输入第%d名学生的学号,学号为0表示结束输入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
char xueqi[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
C语言课程设计—学生成绩管理系统
#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
C语言排序学生成绩资料
任务1 输入/输出多个学生一门 课程的成绩
4.1.1 一维数组
以下对一维整型数组a的正确定义的是: A、int a(10) B、int n=10, a[n] C、int n; int a[n]; D、#define SIZE 10
scanf(“%d”,%n); int a[SIZE];
任务1 输入/输出多个学生一门 课程的成绩
数据类型 数组名[常量表达式];
数组元素
的数据类型
遵循C语言
标识符规则
例如:int a[5];
数组长度 几个数组元素
任务1 输入/输出多个学生一门 课程的成绩
4.1.1 一维数组
说明: 常量表达式表示元素的个数,即数组
长度。 常量表达式中可以包括常量和符合常
量,不能包含变量。
int i=5;
int a[i]; /*数组长度为变量*/
{ printf("%d ",i+1);break; }
}}
任务1 输入/输出多个学生一门 课程的成绩
4.1.3 一维数组
练习:一个班50位同学参加了一次C语言 程序设计考试,现要输入全班同学的成 绩,并按逆序输出。
任务2 排序学生成绩
任务1中已经输入了50个同学的成 绩到数组中,现在需要确定如何对学 生成绩从低到高进行排序。
{ scanf("%d",&mathScore[i]); }
for(i=0;i<5;i++)
{ sum=sum+mathScore[i]; }
average=sum/5.0;
printf("%f ",average);
}
C语言课程设计报告---根据条件进行学生成绩排序
课程设计报告课程设计题目:根据条件进行学生成绩排序学号:姓名:专业:班级:指导教师:2012年6月24日目录(一)实验题目 (3)(二)实验目的 (3)(三)实验要求 (3)(四)实验思路 (3)(五)实验过程 (5)(六)实验调试与结果 (8)(七)实验小结 (8)一.实验题目根据条件进行学生成绩排序(1)定义数组用以存放学生的成绩;(2)在函数中进行5个学生成绩从高到低排序 sort1(int a[5]);(3)改进第一步的函数为sort2(int a[],int n),进行n个学生成绩从高到低排序;(4)改进第二步的函数为sort3(int a[],int n, char style), 将n个学生成绩排序,排名方式根据style参数进行,如style为‘a’按升序排,style 为’d’按降序排;(5)将以上每一步骤的结果均输出,验证程序是否实现题目要求。
二.实验目的本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关内容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。
三.实验要求1.要求我们独立完成课程设计的主要内容;2. 按照实验课表安排进行,不得无故旷课;3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据个人兴趣选做其它题目;4.严格按照报告格式撰写课程设计报告;5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。
四.实验思路1.整体思路2.程序流程图五.实验过程源程序清单#include<stdio.h>//sort1是进行5个学生成绩从高到低排序void sort1(int a[5]){int i,j,k,t;for(i=0;i<4;i++){ k=i;for(j=i+1;j<5;j++)if(a[j]>a[k]) k=j;t=a[k];a[k]=a[i];a[i]=t;}}//sort2是进行n个学生成绩从高到低排序void sort2(int b[],int n){int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(b[j]>b[k])k=j;t=b[i];b[i]=b[k];b[k]=t;}}//sort3是进行n个学生成绩排序,同时指定其style的类型void sort3(int c[],int n,char style){int i,j,k,t;if (style=='a') //学生成绩从低到高排序{for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(c[k]>c[j])k=j;t=c[i];c[i]=c[k];c[k]=t;}}else if(style=='d') //学生成绩从高到低排序{for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(c[j]>c[k])k=j;t=c[i];c[i]=c[k];c[k]=t;}}}//主函数void main(){int a[5],b[100],c[100],h,l,i,j,g;printf("排序方法:选择排序法\n******请输入5个学生的成绩******\n"); for(i=0;i<5;i++)scanf("%d",&a[i]); //输入5个学生的成绩sort1(a); //调用sort1函数printf("1.排序以后的成绩顺序:\n");for(i=0;i<5;i++)printf("%3d",a[i]);printf("\n\n");printf("************************************************************ *******************\n");printf("\n");printf("******g为学生人数******\n请输入g的值:\n");scanf("%d",&g);printf("\n");printf("请输入g个学生的成绩:\n");for(j=0;j<g;j++)scanf("%d",&b[j]); //输入g个学生的成绩sort2(b,g); //调用sort2函数printf("2.排序以后的成绩顺序:\n");for(j=0;j<g;j++)printf("%3d",b[j]);printf("\n\n");printf("************************************************************ *******************\n");printf("\n");printf("******h为学生人数******\n请输入h的值:\n");scanf("%d",&h);printf("请输入h个学生的成绩:\n");for(l=0;l<h;l++)scanf("%d",&c[l]); //输入h个学生的成绩sort3(c,h,'a'); //调用sort3函数 printf("3.升序排序以后的成绩顺序:\n");for(l=0;l<h;l++)printf("%3d",c[l]);printf("\n");printf("******h为学生人数******\n请输入h个学生的成绩:\n");for(l=0;l<h;l++)scanf("%d",&c[l]);sort3(c,h,'d'); //调用sort3函数 printf("3.降序排序以后的成绩顺序:\n");for(l=0;l<h;l++)printf("%3d",c[l]);printf("\n");}六、执行结果七、实验小结通过本次课程设计,增加我对C的认识,也更加了解C,但是还有很多不足,在处理字符串操作的实验中,字符串查找、字符串排序,还是不会,只能借鉴,自己还需加强,多操作、同时也让我了解C用处,自己要多看看书上机操作,同时也提高了自己的编程能力。
[考试]C语言代码-学生信息排序
[考试]C语言代码-学生信息排序C语言代码-学生信息排序问题描述学生信息由学号,姓名,性别,语文成绩,数学成绩,英语成绩,平均分和总分构成。
学号、姓名长度不超过20,学生人数不超过100。
写一个处理学生信息的程序,要求有以下功能1)插入学生信息,命令格式如下:INSERT id name sex s1 s2 s3表示插入一个学生信息。
插入后显示插入的学生信息,格式如下:学号姓名性别语文成绩数学成绩英语成绩平均成绩总成绩中间有一个空格分开,所有成绩保留2位小数。
2)显示所有学生信息,命令格式如下:LIST按照学号从小到大的顺序显示所有学生信息。
每个学生信息一行,格式如下学号姓名性别语文成绩数学成绩英语成绩平均成绩总成绩中间有一个空格分开,所有成绩保留2位小数。
3)退出程序,命令格式如下:QUIT输出"Good bye!"后结束程序。
写一个程序完成上述功能。
输入的最后一条命令总是QUIT设计一个结构体表示学生信息。
分别设计两个函数,来处理学生信息的插入与输出。
设计一个函数对所有学生信息按学号进行排序。
再设计一个函数输出所有学生信息。
在主函数中调用插入学生信息与显示所有学生信息的函数。
输入输入有多行,每行一条命令,命令格式有:INSERT id name sex s1 s2 s3插入一条学生信息后并显示插入的学生信息。
LIST按照学号从小到大的顺序显示所有学生信息。
每个学生信息一行,QUIT退出程序输出输出有多行,每个输入命令都有对应的输出,格式分别如下:INSERT id name sex s1 s2 s3插入后显示插入的学生信息,格式如下:学号姓名性别语文成绩数学成绩英语成绩平均成绩总成绩中间有一个空格分开,所有成绩保留2位小数。
LIST按照学号从小到大的顺序显示所有学生信息,每个学生信息一行。
每行格式如下:学号姓名性别语文成绩数学成绩英语成绩平均成绩总成绩中间有一个空格分开,所有成绩保留2位小数。
c语言成绩排名编写
以下是一个简单的C语言程序,用于对学生成绩进行排名:```c#include <stdio.h>int main() {int n, i, j;float scores[100], sum, avg, temp;printf("请输入学生人数:");scanf("%d", &n);for (i = 0; i < n; i++) {printf("请输入第%d个学生的成绩:", i+1);scanf("%f", &scores[i]);}// 计算总分和平均分sum = 0;for (i = 0; i < n; i++) {sum += scores[i];}avg = sum / n;// 按照成绩排名for (i = 0; i < n-1; i++) {for (j = i+1; j < n; j++) {if (scores[i] < scores[j]) {temp = scores[i];scores[i] = scores[j];scores[j] = temp;}}}// 输出排名结果和平均分printf("成绩排名如下:\n");for (i = 0; i < n; i++) {printf("%d. %f\n", i+1, scores[i]); }printf("平均分为:%f\n", avg);return 0;}```该程序首先要求用户输入学生人数,然后依次输入每个学生的成绩。
接下来,程序计算总分和平均分,并按照成绩从高到低进行排序。
最后,程序输出排名结果和平均分。
学生成绩管理系统c语言代码(供参考)
C程序学生管理系统以下是用c语言编写的学生成绩管理系统的简单代码,可以用vc运行(供参考)#include"stdio.h"#include"stdlib.h"#include"string.h"typedef struct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedef struct unit//定义接点{student date;struct unit *next;}unit;unit* build()//建立链表并返回指针{unit *p;if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>初始化失败!");return 0;}else{p->next=NULL;p->date.number=0;//头结点存放学生人数printf("初始化成功!\n");return p;}}void add(unit *head)//增加学生{unit *p,*q;int m,n=0;q=head->next;p=(unit*)malloc(sizeof(unit));printf("=>请输入新生姓名!\n");gets(p->);fflush(stdin);printf("=>请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q==NULL) n=1;while(q){if(q->date.number==m){printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head->next;break;}else{q=q->next;if(q==NULL) n=1;}}}p->date.number=m;printf("=>请输入性别!\n");gets(p->date.sex);fflush(stdin);printf("=>请输入数学成绩\n");scanf("%d",&m);fflush(stdin);p->date.math=m;printf("=>请输入英语成绩\n");scanf("%d",&m);fflush(stdin);p->date.eglish=m;printf("=>请输入c语言成绩\n");scanf("%d",&m);fflush(stdin);p->date.clanguge=m;p->date.average=(p->date.math+p->date.eglish+p->date.clanguge);q=head->next;head->next=p;p->next=q;head->date.number++;}void deletion(unit *head)//删除一名学生{unit *p=head->next,*q=head;char N[10];printf("=>请输入你想删除的学生姓名!\n");gets(N);fflush(stdin);if(p==NULL)printf("=>系统无学生可删除!\n");while(p){if(strcmp(p->,N)==0){q->next=p->next;head->date.number--;printf("=>删除%s成功!\n",p->);free(p);break;}else{p=p->next;q=q->next;if(p==NULL)printf("=>你要删除的学生不存在,删除失败!\n");}}}int display(unit *head)//显示学生信息{unit *p=head->next;int m,n=0;char N[10];if(p==NULL){printf("=>系统无学生!\n");return 0;}while(n==0){printf("********************************************************* *********************\n");printf("=>请选择你的操作!\n");printf("=>\t\t\t1.显示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n");scanf("%d",&m);fflush(stdin);switch(m){case 1:printf("\n=>该系统拥有%d名学生!\n\n",head->date.number);p=head->next;printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n\n");while(p){printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);p=p->next;}break;case 2:printf("=>请输入查找姓名!\n");gets(N);fflush(stdin);p=head->next;while(p){if(strcmp(p->,N)==0){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!");}}break;case 3: printf("=>请输入查找学号!\n");scanf("%d",&m);fflush(stdin);p=head->next;while(p){if(p->date.number==m){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!\n");}}break;case 4:n=1;break;}}return 1;}int range(unit *head)//排序{unit *p=head,*q=head->next;int n,i,m=head->date.number;printf("********************************************************* **********************\n");printf("\t\t\t1.按学号\t2.按成绩\n\n");printf("=>请选择操作!\n》");scanf("%d",&n);fflush(stdin);if(q==NULL){ printf("=>无学生可排序!\n");return 0;}switch(n){case 2:for(i=0;i<m;i++)//按总分排序{p=head;q=head->next;while(q->next){if((q->date.average)<(q->next->date.average)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;case 1:for(i=0;i<=m;i++)//按学号排序{p=head;q=head->next;while(q->next){if((q->date.number)>(q->next->date.number)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;}printf("=>排序成功!\n");return 1;}void menu(){printf("\n********************************* 主菜单***************************************\n");printf("\t\t\t1.新建系统\t2.添加学生\n\t\t\t3.删除学生\t4.查看信息\n\t\t\t5.排列顺序\t6.读取信息\n\t\t\t7.保存信息\t8.退出系统\n");printf("=>请选择你的操作!\n");}int save(unit *head)//保存{FILE *fp;unit *p;p=head;if((fp=fopen("d:\\学生","wb+"))==NULL){printf("=>保存失败!");return 0;}while(p){fwrite(&(p->date),sizeof(student),1,fp);p=p->next;}printf("=>保存成功!");fclose(fp);return 1;}unit* read()//读入系统学生信息{int i;unit *p,*q,*head;FILE *fp;if((head=(unit*)malloc(sizeof(unit)))==NULL) { printf("=>开辟空间失败!");exit(1);}else{head->next=NULL;head->date.number=0;//头结点存放学生人数}q=head;if((fp=fopen("d:\\学生","rb"))==NULL){printf("=>系统无学生!\n");return 0;}fread(&(q->date),sizeof(student),1,fp);for(i=0;i<head->date.number;i++){if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>读值失败!");exit(1);}fread(&(p->date),sizeof(student),1,fp);p->next=q->next;q->next=p;}fclose(fp);return head;}void main(){int m=0,n, i;unit *head;printf("************************************************************* *******************\n\n");printf("\t\t\t* 欢迎使用学生成绩管理系统 * \n");printf("\n\t\t\t\t\t\t\t\t编译员:吹吹风\n\n");printf("=>正在读取系统信息......\n");if((head=read())==0){printf("=>是否新建?\n");printf("\t\t\t是(1)\t\t否(2)\n");scanf("%d",&i);fflush(stdin);if(i==1)head=build();else if(i==2)exit(1);}elseprintf("=>信息导入成功!");while(m==0){menu();scanf("%d",&n);fflush(stdin);switch(n){case 1: head=build();break;case 2:add(head);break;case 3:deletion(head);break;case 4:display(head);break;case 5: range(head);break;case 6:head=read();if(head!=0) printf("=>读取存盘成功!\n");break;case 7:save(head);break;case 8:m=1;break;}}}。
c语言学生成绩排序
50 学生成绩排序成绩: 10 / 折扣: 0.8大家参加了期末考试,成绩出来后老师要对n个学生进行成绩汇总和排序。
要求程序按成绩降序进行排序。
在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。
例如:有5名学生的成绩:zha ng1,90zha ng2,91zha ng3,99zha ng4,91zha ng5,98则排序结果应该为:z hang3,99z hang5,98z hang2,91z hang4,91z hang1,90请注意例题中“zh ang2”和“zha ng4”的排列顺序。
输入:第一行为将要输入的学生数量n从第二行起后面连续n 行数据,每行为一名学生的姓名(长度不超过20个字符,不包括空格),考试成绩(int)输出:排序后的结果。
每行为一名学生的姓名和成绩。
测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示1.5?2.zhan g1,90?3.z hang2,91?4.zha ng3,99?5.zhang4,91? 6.zh ang5,98?以文本方式显示1.zhan g3,99?2.z hang5,98?3.zha ng2,91?4.zhang4,91? 5.zh ang1,90?1秒64M0 测试用例 2以文本方式显示1.5?2.zhan g31,90? 3.zhang51,90?4.z hang2,90?5.zha ng42,90? 6.zhan g1,90?以文本方式显示1.z hang31,90?2.zh ang51,90?3.zha ng2,90?4.zhang42,90?5.z hang1,90?1秒64M0测试用例3以文本方式显示1.1?2.wan g,100?以文本方式显示1.w ang,100?1秒64M0 开启时间2012年05月21日星期一 12:00 折扣时间2012年05月 30日星期三23:55关闭时间2012年06月3日星期日23:55允许迟交:是#i nclud e<std io.h>#inc lude<strin g.h>#incl ude<m ath.h>typ edefstruc t stu dent{int scor e;ch ar na me[20];}s tuden t;vo id sw ap(st udent * s1,stud ent * s2){cha r nam etemp[20];strc py(na metem p,s1->name);st rcpy(s1->n ame,s2->na me);strcp y(s2->name,name temp);int temp;tem p=s1->scor e;s1->sco re=s2->sco re;s2->sc ore=t emp;}voi d sor t(stu dentstu[],intn){int i,j;f or(i=0;i<n;i++)for(j=0;j<n-1;j++){if(stu[j].sco re<st u[j+1].sco re){swap(&stu[j],&stu[j+1]);}el se if(stu[j].sc ore==stu[j+1].s core) {if(strc mp(st u[j].name,stu[j+1].n ame)>0) {swap(&stu[j],&s tu[j+1]);}}}}vo id in put(s tuden t * s){c har s tring[30];gets(stri ng);int n,i,j;n=st rlen(strin g);f or(i=0;i<n;i++){if(stri ng[i]==','){s->name[i]='\0';br eak;}s->n ame[i]=str ing[i];}s->sc ore=0;int temp;j=n-(i+1)-1;for(i++;i<n;i++,j--){te mp=(i nt)st ring[i]-48;s->score= s->score+ tem p *(i nt)po w(10.0,j); }}voidmain(){i nt n,i;st udent stu[20];scanf("%d\n",&n);fo r(i=0;i<n;i++){inp ut(&s tu[i]);}sort(stu,n);fo r(i=0;i<n;i++){pri ntf("%s,%d\n",s tu[i].name,stu[i].sc ore); }}。
