当前位置: 代码迷 >> C语言 >> [求助]简单学员系统的一点问题
  详细解决方案

[求助]简单学员系统的一点问题

热度:179   发布时间:2007-10-17 02:00:52.0
[求助]简单学员系统的一点问题

#include <stdio.h>
#include <stdlib.h>

#define NUM 20

struct _stu_
{
char name[12];
float chinese;
float math;
};

typedef struct _stu_ STU;

int accept(STU *str[]);
void sort(STU *str[], int n);
void print(STU *str[], int n);

void main()
{
int n;
STU *str[NUM];

n = accept(str);
sort(str, n);
print(str, n);

}

int accept(STU *str[])
{
int n, i;

printf("请输入学生个数:");
scanf("%d", &n);
printf("\n");

for(i = 0; i < n; i++)
{
str[i] = (STU *)malloc(81 * sizeof(STU));
printf("请输入第%d号学员的名字:", i + 1001);
scanf("%s", &str[i]->name);
printf("请输入第%d号学员的语文成绩:", i + 1001);
scanf("%f", &str[i]->chinese);
printf("请输入第%d号学员的数学成绩:", i + 1001);
scanf("%f", &str[i]->math);
printf("\n");

}
return n;

}

float *avg(STU *str[], int n)
{
int i;
float f[NUM];
float *p;

p = f;

for(i = 0; i < n; i++)
{
f[i] = (str[i]->math + str[i]->chinese) / 2;
}
return f;
}

void sort(STU *str[], int n)
{
int i, j;
STU *tmp;
float *p;

p = avg(str, n);

for(j = 0; j < n - 1; j++)
{
for(i = 0; i < n - j - i; i++)
{
if(*(p + i) < *(p + i + 1))
{
tmp = str[i];
str[i] = str[i + 1];
str[i + 1] = tmp;
}
}
}
}

void print(STU *str[], int n)
{
int i;

printf("\n名次\t学号\t语文成绩\t数学成绩\t平均分\n");
for(i = 0; i < n; i++)
{
printf("%02d\t", i + 1);
printf("%d\t", i + 1001);//输出学号
printf("%.1f\t\t", str[i]->chinese);
printf("%.1f\t\t", str[i]->math);
printf("%.1f\n", (str[i]->math + str[i]->chinese)/2);


}

}





现在的运行结果是这样的

有一点问题,我用什么方法能把学号固定?也就是排序之后的学号和输入时是一致的。


[此贴子已经被作者于2007-10-18 0:27:53编辑过]

搜索更多相关的解决方案: str  STU  学员  int  系统  

----------------解决方案--------------------------------------------------------

结构体不能整体复制,你可以再写一个函数,专门是复制整个结构体


----------------解决方案--------------------------------------------------------

结构体里有问题..
可以在定义结构体数组时,多定义一个..然后,把它做中间元..来回的转..


----------------解决方案--------------------------------------------------------

不好意思我的题看错了呵呵
结构体里应该是学号 不是名字


----------------解决方案--------------------------------------------------------

直接在结构体中,定义一个学号


----------------解决方案--------------------------------------------------------

二楼的意思没明白

不过已经解决了


----------------解决方案--------------------------------------------------------

用strcopy 函数


----------------解决方案--------------------------------------------------------

帮忙看看float *avg(STU *str[], int n)函数和void sort(STU *str[], int n)的关系是不是有问题? 排序会出错


----------------解决方案--------------------------------------------------------
str[i] = (STU *)malloc(81 * sizeof(STU));
这行是不是太浪费了?

应该怎么分配?
str[i] = (STU *)malloc(sizeof(STU));?
----------------解决方案--------------------------------------------------------
  相关解决方案