float|结构体指针移位问题~~
【float|结构体指针移位问题~~】/*这是帮别人做的一道作业的,其实也没有什么记录的意义。 只不过是在做的过程中,我遇到了上一次组队去比赛时遇到的结构体排序问题,结构体指针是不能用p++来进行移位的。。。所以要记下来。 */ /* 某唱歌比赛决赛有5名选手入围, 共有六位评委分别给每位选手打分 ;对每个选手,去掉一个最高分和一个最低分后, 取剩余的四个得分的平均值作为该选手的最后得分; 编程实现按选手最后得分的降序排列, 依此输出选手的名次、参赛编号、姓名以及最后得分。 (自行设计一个合适的结构体类型,包含必要的成员) */ #include #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);
}
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 人生两件宝(好身体,好心情!)
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)
- 绘本讲师训练营【18期】14/21《我的情绪小怪兽》故事会新体验
- 一个健康的APP和健全的人格大体类似
- 自媒体形势分析
- 2019-03-27健康减肥126天
- 20190320《个体崛起》
- 美之初体验—我所感受到的那一点儿
- 人工智能|干货!人体姿态估计与运动预测