【悬赏300分】跪求数据结构的编程解答!
——————考试成绩排名(一)问题要求建立考试成绩表及其名次,可以采用顺序储存结果,排序的方法不限。采用成绩降序排列和名次升序排列。即从第一条记录开始,名次为1,依次处理...
——————考试成绩排名
(一)问题
要求建立考试成绩表及其名次,可以采用顺序储存结果,排序的方法不限。采用成绩降序排列和名次升序排列。即从第一条记录开始,名次为1,依次处理后面的每个记录。若成绩相等,则名词与前面的同学相同,否则,其名词为前面同学的名次+1。
(二)数据结构定义
typedef struct node
{int score; /*分数域*/
char name[M+1]; /*姓名域*/
int place; /*名次域*/
}student;
/*参考源程序*/
/*排名次的算法的c语言描述形式为:*/
/*考试成绩排名源程序*/
#include<stdlib.h>
#indlude<stdio.h>
#define N 30
#define M 10 /*同学姓名的最大长度*/
tupedef struct node
{int score; /*分数域*/
char name [M+1] /*姓名域*/
int place; /*名词域*/
}student; /*结构命名*/
/*对有n个元素的数组R按域score进行排降序,然后根据分数进行排名,即给名词域place赋值,然后按名次1,2,3.....排序打印输出*/
void ranklist(student R[],int n)
{int i,pp=1;
px(R,n); /*对数组R按Score域排降序列,可任意选用排序方法*/
R[1],place=1; /*第一名*/
...
}
px(student R[],int n) /*直接插入排序算法(降序):*/
{/*对n个元素R[1],....,R[n],用直接插入法排降序*/
int i,j;
....
}
writefile() /*将记录写入文件中*/
{char x[10],a; intsc; FILE *fp;
fp=fopen("j:\exppm3.txt","ab");
while(1)
{printf("请输入学生姓名和成绩");
scanf("%s %d",x,&sc);
prinf("是否继续舒服?");
a=getchar(); a=getchar();
if(toupper(a)!='Y') break;
}
fclose(fp);
fp=fopen("j:\exppm3.txt","r");
while(!feof(fp))
{printf("\n输出学生姓名和成绩");
fscanf(fp,"%s %d\n",x,&sc); printf("\n%s %d",x,sc);
}
fclose(fp); getch();
}
/*读取文件中的成绩信息,放到数组R中,n记录元素个数*/
create(int *n,student R[])
{FILE *fp; char ky[M+1],a; int i,sc;
fp=fopen("j:\exppm3.txt","r");
*n=0; i=0;
if(!fp)
{printf{"\n数据文件无法打开!");
printf("是否要输入学生数据?");
a=getchar();
if(toupper(a)=='Y');
writefile();
else return;
}
else
{rewind(fp);
while(!feof(fp))
{i=i+1;
fscanf(fp,"%s %d\n",ky,&sc);
strncpy((R[i].name),ky,10);
R[i].score=sc; R[i].name[11]='\0';
}
*n=1;
}
fclose(fp);
}
void main()
{int i,n=0; student R[N];
creat(&n,R); /*读取成绩信息,放到数组R中*/
printf("\n排名前的数据(名词:姓名 成绩):\n");
for(i=1;i<=n;i++)
printf("\t\t %s %6d\n",R[i].name,R[i].score);
ranklist(R,n); /*对数组R按域排降序,给出排名并按名次输出*/
getch();
}
————————————————————————————————
悬赏300分求完整的可上机程序!!!!谢谢~~``
希望能够尽快在今天内给出本人一个答复!!!跪谢高手! 展开
(一)问题
要求建立考试成绩表及其名次,可以采用顺序储存结果,排序的方法不限。采用成绩降序排列和名次升序排列。即从第一条记录开始,名次为1,依次处理后面的每个记录。若成绩相等,则名词与前面的同学相同,否则,其名词为前面同学的名次+1。
(二)数据结构定义
typedef struct node
{int score; /*分数域*/
char name[M+1]; /*姓名域*/
int place; /*名次域*/
}student;
/*参考源程序*/
/*排名次的算法的c语言描述形式为:*/
/*考试成绩排名源程序*/
#include<stdlib.h>
#indlude<stdio.h>
#define N 30
#define M 10 /*同学姓名的最大长度*/
tupedef struct node
{int score; /*分数域*/
char name [M+1] /*姓名域*/
int place; /*名词域*/
}student; /*结构命名*/
/*对有n个元素的数组R按域score进行排降序,然后根据分数进行排名,即给名词域place赋值,然后按名次1,2,3.....排序打印输出*/
void ranklist(student R[],int n)
{int i,pp=1;
px(R,n); /*对数组R按Score域排降序列,可任意选用排序方法*/
R[1],place=1; /*第一名*/
...
}
px(student R[],int n) /*直接插入排序算法(降序):*/
{/*对n个元素R[1],....,R[n],用直接插入法排降序*/
int i,j;
....
}
writefile() /*将记录写入文件中*/
{char x[10],a; intsc; FILE *fp;
fp=fopen("j:\exppm3.txt","ab");
while(1)
{printf("请输入学生姓名和成绩");
scanf("%s %d",x,&sc);
prinf("是否继续舒服?");
a=getchar(); a=getchar();
if(toupper(a)!='Y') break;
}
fclose(fp);
fp=fopen("j:\exppm3.txt","r");
while(!feof(fp))
{printf("\n输出学生姓名和成绩");
fscanf(fp,"%s %d\n",x,&sc); printf("\n%s %d",x,sc);
}
fclose(fp); getch();
}
/*读取文件中的成绩信息,放到数组R中,n记录元素个数*/
create(int *n,student R[])
{FILE *fp; char ky[M+1],a; int i,sc;
fp=fopen("j:\exppm3.txt","r");
*n=0; i=0;
if(!fp)
{printf{"\n数据文件无法打开!");
printf("是否要输入学生数据?");
a=getchar();
if(toupper(a)=='Y');
writefile();
else return;
}
else
{rewind(fp);
while(!feof(fp))
{i=i+1;
fscanf(fp,"%s %d\n",ky,&sc);
strncpy((R[i].name),ky,10);
R[i].score=sc; R[i].name[11]='\0';
}
*n=1;
}
fclose(fp);
}
void main()
{int i,n=0; student R[N];
creat(&n,R); /*读取成绩信息,放到数组R中*/
printf("\n排名前的数据(名词:姓名 成绩):\n");
for(i=1;i<=n;i++)
printf("\t\t %s %6d\n",R[i].name,R[i].score);
ranklist(R,n); /*对数组R按域排降序,给出排名并按名次输出*/
getch();
}
————————————————————————————————
悬赏300分求完整的可上机程序!!!!谢谢~~``
希望能够尽快在今天内给出本人一个答复!!!跪谢高手! 展开
提示该问答中所提及的号码未经验证,请注意甄别。
展开全部
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
//---------------------------------------------------------------------------
#define N 30
#define M 10 /*同学姓名的最大长度*/
//---------------------------------------------------------------------------
typedef struct node
{
int score; /*分数域*/
char name[M+1]; /*姓名域*/
int place; /*名次域*/
}student; /*结构命名*/
//---------------------------------------------------------------------------
void px(student R[], int n)
{/*对n个元素R[1],....,R[n],排降序*/
int i, j;
for (i=0; i<n; i++) {
for (j=i+1; j<n; j++) {
if (R[i].score < R[j].score) {
student temp;
memcpy((void *)&temp, (void *)&R[i], sizeof(student));
memcpy((void *)&R[i], (void *)&R[j], sizeof(student));
memcpy((void *)&R[j], (void *)&temp, sizeof(student));
}
}
}
}
//---------------------------------------------------------------------------
void ranklist(student R[], int n)
{/*对有n个元素的数组R按域score进行排降序,然后根据分数进行排名,即给名词域place赋值,然后按名次1,2,3.....排序打印输出*/
int i, pp=0;
px(R, n); /*对数组R按Score域排降序列,可任意选用排序方法*/
for (i=0; i<n; i++) {
if (!i || R[i].score!=R[i-1].score) /*分数不相同则名次递加*/
pp++;
R[i].place = pp;
}
}
//---------------------------------------------------------------------------
void writefile(void)
{/*将记录写入文件中*/
char x[10], a;
int sc;
FILE *fp;
fp = fopen("e:\\exppm3.txt", "ab+");
while(1) {
printf("请输入学生姓名和成绩\n");
scanf("%s %d", x, &sc);
fprintf(fp, "%s %d\n", x, sc);
printf("是否继续输入?");
getchar();
a=getchar();
if (toupper(a)!='Y')
break;
}
rewind(fp);
printf("\n输出学生姓名和成绩\n");
while(!feof(fp)) {
fscanf(fp, "%s %d\n", x, &sc);
printf("%s %d\n", x, sc);
}
fclose(fp);
getch();
}
//---------------------------------------------------------------------------
void create(int *n, student R[])
{/*读取文件中的成绩信息,放到数组R中,n记录元素个数*/
FILE *fp;
char ky[M+1], a;
int i, sc;
fp = fopen("e:\\exppm3.txt", "r");
*n=0;
i=0;
if (!fp) {
printf("\n数据文件无法打开!\n");
printf("\n是否要输入学生数据?");
a=getchar();
if (toupper(a) == 'Y') {
writefile();
fp = fopen("e:\\exppm3.txt", "r");
}
else {
fclose(fp);
return;
}
}
while (!feof(fp)) {
fscanf(fp, "%s %d\n", ky, &sc);
strncpy(R[i].name, ky, 11);
R[i].score = sc;
i++;
}
*n = i;
fclose(fp);
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int i, n=0;
student R[N];
create(&n, R); /*读取成绩信息,放到数组R中*/
printf("\n排名前的数据(姓名 成绩):\n");
for(i=0; i<n; i++) {
printf("\t%-10s %6d\n", R[i].name, R[i].score);
}
ranklist(R, n); /*对数组R按域排降序,给出排名并按名次输出*/
printf("\n排名后的数据(名次:姓名 成绩):\n");
for(i=0; i<n; i++) {
printf("\t%-3d %-10s %6d\n", R[i].place, R[i].name, R[i].score);
}
getch();
return 0;
}
//---------------------------------------------------------------------------
还有什么问题可直接与我QQ联系:371266463
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
//---------------------------------------------------------------------------
#define N 30
#define M 10 /*同学姓名的最大长度*/
//---------------------------------------------------------------------------
typedef struct node
{
int score; /*分数域*/
char name[M+1]; /*姓名域*/
int place; /*名次域*/
}student; /*结构命名*/
//---------------------------------------------------------------------------
void px(student R[], int n)
{/*对n个元素R[1],....,R[n],排降序*/
int i, j;
for (i=0; i<n; i++) {
for (j=i+1; j<n; j++) {
if (R[i].score < R[j].score) {
student temp;
memcpy((void *)&temp, (void *)&R[i], sizeof(student));
memcpy((void *)&R[i], (void *)&R[j], sizeof(student));
memcpy((void *)&R[j], (void *)&temp, sizeof(student));
}
}
}
}
//---------------------------------------------------------------------------
void ranklist(student R[], int n)
{/*对有n个元素的数组R按域score进行排降序,然后根据分数进行排名,即给名词域place赋值,然后按名次1,2,3.....排序打印输出*/
int i, pp=0;
px(R, n); /*对数组R按Score域排降序列,可任意选用排序方法*/
for (i=0; i<n; i++) {
if (!i || R[i].score!=R[i-1].score) /*分数不相同则名次递加*/
pp++;
R[i].place = pp;
}
}
//---------------------------------------------------------------------------
void writefile(void)
{/*将记录写入文件中*/
char x[10], a;
int sc;
FILE *fp;
fp = fopen("e:\\exppm3.txt", "ab+");
while(1) {
printf("请输入学生姓名和成绩\n");
scanf("%s %d", x, &sc);
fprintf(fp, "%s %d\n", x, sc);
printf("是否继续输入?");
getchar();
a=getchar();
if (toupper(a)!='Y')
break;
}
rewind(fp);
printf("\n输出学生姓名和成绩\n");
while(!feof(fp)) {
fscanf(fp, "%s %d\n", x, &sc);
printf("%s %d\n", x, sc);
}
fclose(fp);
getch();
}
//---------------------------------------------------------------------------
void create(int *n, student R[])
{/*读取文件中的成绩信息,放到数组R中,n记录元素个数*/
FILE *fp;
char ky[M+1], a;
int i, sc;
fp = fopen("e:\\exppm3.txt", "r");
*n=0;
i=0;
if (!fp) {
printf("\n数据文件无法打开!\n");
printf("\n是否要输入学生数据?");
a=getchar();
if (toupper(a) == 'Y') {
writefile();
fp = fopen("e:\\exppm3.txt", "r");
}
else {
fclose(fp);
return;
}
}
while (!feof(fp)) {
fscanf(fp, "%s %d\n", ky, &sc);
strncpy(R[i].name, ky, 11);
R[i].score = sc;
i++;
}
*n = i;
fclose(fp);
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
int i, n=0;
student R[N];
create(&n, R); /*读取成绩信息,放到数组R中*/
printf("\n排名前的数据(姓名 成绩):\n");
for(i=0; i<n; i++) {
printf("\t%-10s %6d\n", R[i].name, R[i].score);
}
ranklist(R, n); /*对数组R按域排降序,给出排名并按名次输出*/
printf("\n排名后的数据(名次:姓名 成绩):\n");
for(i=0; i<n; i++) {
printf("\t%-3d %-10s %6d\n", R[i].place, R[i].name, R[i].score);
}
getch();
return 0;
}
//---------------------------------------------------------------------------
还有什么问题可直接与我QQ联系:371266463
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询