结构体指针移位问题~~时间:2022-01-29 10:45:09/*这是帮别人做的一道作业的,其实也没有什么记录的意义。 只不过是在做的过程中,我遇到了上一次组队去比赛时遇到的结构体排序问题,结构体指针是不能用p++来进行移位的。。。所以要记下来。 */ /* 某唱歌比赛决赛有5名选手入围, 共有六位评委分别给每位选手打分 ;对每个选手,去掉一个最高分和一个最低分后, 取剩余的四个得分的平均值作为该选手的最后得分; 编程实现按选手最后得分的降序排列, 依此输出选手的名次、参赛编号、姓名以及最后得分。 (自行设计一个合适的结构体类型,包含必要的成员) */ #include<stdio.h> #define LEN 20 typedef struct Player { char name[LEN] ; //名字 int num ; //编号 int position ; //名次 float score[6] ; //分数 float average ; //最终分数 } Player ; void SetInformation(Player *p , int i) ; //设置数据 void SetPosition(Player *p , int i ) ; // 排序 void PrintPlayer(Player *p ,int i) ; //打印 int main(void) { Player p[5] ; int i = 0 ; for( ; i < 5 ; i++) { SetInformation(&p[i] , i) ; printf("/n/n/n") ; } SetPosition(p,i) ; puts("The Player List:") ; for(i = 0 ; i < 5 ; i++) { PrintPlayer(&p[i],i) ; //结构体排序,不能用指印+1来向后移位 printf("/n/n") ; } return 0 ; } /*设置*/ void SetInformation(Player *p , int i ) { int j = 0 ; float total = 0.0; float max = 0.0, min = 0.0 ; printf("Please enter the %d Player information./n", i+1 ) ; //第一次提示输入 printf("Please enter the name : ") ; gets(p->name) ; printf("Please enter the num : ") ; scanf("%d",&(p->num)) ; printf("Please enter the score : ") ; scanf("%f",&(p->score)[j]) ; max = min = (p->score)[j] ; total += (p->score)[j] ; j++ ; while( j < 6 ) { printf("Please enter the next score : ") ; scanf("%f",&(p->score)[j]) ; if(max < (p->score)[j]) { max = (p->score)[j] ; } else if(min > (p->score)[j]) { min = (p->score)[j] ; } total += (p->score)[j] ; j++ ; } p->average = (total - max - min) / 4 ; //要减少最大和最小值 while(getchar() != '/n') //清除多余的输入 continue ; } /*利用冒泡排序,不过没有设置成员的position值,设置position值留在打印那一步*/ void SetPosition(Player *p, int i ) { int j = 0 ; int k = 0 ; Player temp ; int finish = 1 ; for(j = 0 ; j < i ; j++) { finish = 1 ; //如果本来就是降序的,就无需比较,用这一个来判断 for(k = 0 ; k < i - j -1; k++) { if(p[k+1].average > p[k].average) { temp = p[k+1] ; //结构体整合赋值,方便,快捷 p[k+1] = p[k]; p[k] = temp ; finish = 0 ; } } if(1 == finish) break ; } } /*打印,顺便设置postion值.*/ void PrintPlayer(Player *p ,int i) { p->position = i + 1 ; //这里 printf("Name: ") ; puts(p->name) ; printf("Num: ") ; printf("%d/n",p->num) ; printf("Score: ") ; printf("%f/n",p->average) ; printf("Position: ") ; printf("%d/n",p->position); }