能不能把这两段程序合成一段
超吧大水库吧
全部回复
仅看楼主
level 9
七光之翼 楼主
score0是一个结构体变量类型,内含int no和float score[3]两个成份(其他成份省略)
void sortbynumber (struct score0 sc) {
省略n行
if (sc[j].no<sc[j+1].no) {
省略n行
}
void sortbyscore(struct score0 sc,int i) {
此处n行和上个函数完全相同
if (sc[j].score[i]<sc[j+1].score[i]) {
此处n行和上个函数完全相同
}
2012年11月28日 01点11分 1
level 9
七光之翼 楼主
2012年11月28日 01点11分 2
2012年11月28日 02点11分
level 12
是要把两个函数合并么?……应该可以的吧……
2012年11月28日 04点11分 3
对 这俩函数除了比较的结构体成员不一样其余都一样 问题是我不知道用什么东西能代替那个结构组成员
2012年11月28日 07点11分
回复 七光之翼 :[思考]好吧我们struct都没怎么好好讲过……倒是指针讲过了……
2012年11月28日 08点11分
level 10
将“比较”单做成一个函数,具体待会儿发,手机打字慢
2012年11月28日 08点11分 4
level 10
typedef bool(*compare_func)(struct score0&, struct score0&);
这个放到score0的声明后面
2012年11月28日 08点11分 5
错了,是 typedef bool(*compare_func)(struct score0&, struct score0&, int col);
2012年11月28日 08点11分
level 13
我把想合并成一个的函数整个都发上来 大家看看能不能合并成一个
红字是三个函数【
不同】的地方 其余地方
完全相同
(声明部分,有所省略)
typedef struct score0 {
int no;
float score[3];
} sc;
#define CLASS 100 //班级人数
#define SWITCH(x,j) {sc tmp1;tmp1=x[j];x[j]=x[j+1];x[j+1]=tmp1;} //交换成绩单中对应的项
(三个函数)
//对分数进行排序--按学号排序
void sortbynumber (sc sc0[],bool uptodown) { //uptodown为真则降序 为假则升序
int j;
bool t=true;
while (t) { //判断是否有数据交换
t=false;
for (j=0;j<CLASS-1;j++)
if (uptodown==true) { //降序排列
if (
sc0[j].no<sc0[j+1].no) {
SWITCH(sc0,j);
t=true;
}
}else{ //升序排列
if (
sc0[j].no>sc0[j+1].no) {
SWITCH(sc0,j);
t=true;
}
}
}
}
//对分数进行排序--按分科分数排序
void sortbyscore (sc sc0[],bool uptodown
,int i) { //uptodown为真则降序 为假则升序 i是科目
int j;
bool t=true;
while (t) {
t=false;
for (j=0;j<CLASS-1;j++)
if (uptodown==true) {
if ((
sc0[j]).score[i]<(sc0[j+1]).score[i]) {
SWITCH(sc0,j);
t=true;
}
}else{
if (
(sc0[j]).score[i]>(sc0[j+1]).score[i]) {
SWITCH(sc0,j);
t=true;
}
}
}
}
//对分数进行排序--按总分排序
void sortbyts (sc sc0[],bool uptodown) {
int j;
bool t=true;
while (t) {
t=false;
for (j=0;j<CLASS-1;j++)
if (uptodown==true) {
if (
(sc0[j].score[0]+sc0[j].score[1]+sc0[j].score[2])<(sc0[j+1].score[0]+sc0[j+1].score[1]+sc0[j+1].score[2])) {
SWITCH(sc0,j);
t=true;
}
}else{
if (
(sc0[j].score[0]+sc0[j].score[1]+sc0[j].score[2])>(sc0[j+1].score[0]+sc0[j+1].score[1]+sc0[j+1].score[2])) {
SWITCH(sc0,j);
t=true;
}
}
}
}
2012年11月28日 08点11分 6
level 10
2012年11月28日 08点11分 8
谢谢……等我找时间研究一下……思路大体明白了 但代码不能直接拿过来用……因为我那个排序要能选择升序降序。。。我还加了个按总分排(sc.score里没有总分 要把三个分数手动加起来……
2012年11月28日 09点11分
1