问题:
输入一组互不相等的百分之成绩,个数<=100,以-1j结束,按从高到低的顺序输出前10名成绩以及其位置号。位置号根据最初输入个数输入,例如:66 88 77 -1,输出2号88分 3号77分 1号66分等。
思路:
代码如下:
#define max 100
#include
int main()
{struct student //因为要求位置随成绩变动而捆绑,所以结构体可以更好满足{int cj;int weizhi;};struct student s[max]; //定义学生数组,每一位为一个学生信息,注意其中最后一位需要输入-1,不能超过定义的结构体内容。int i;int sum=0;//记录实际输入的数量printf("你想输出前几名?\n");int ming;scanf("%d", &ming);//进行数据输入,直至-1为止while (1){for (i = 0; i < max; i++){scanf("%d", &s[i].cj);sum++;s[i].weizhi = i + 1;if (s[i].cj == -1) //如果输到中间 想结束,输入-1,跳出输入循环;break;}if (s[i].cj == -1)//如果等于发现成绩等于-1,跳出while循环,且sum--,因为-1不算有效成绩;{sum--;break;}}printf("sum=%d\n", sum);int p;struct student temp;int k, q;for (k = 0; k < sum-1; k++){for (q = 0; q < sum - 1 - k; q++){if (s[q].cj < s[q + 1].cj){temp = s[q];s[q] = s[q + 1];s[q + 1] = temp;}}}for (p = 0; p < ming; p++){printf("从高到低排名为下行所示\n")printf("%d号%d分 ", s[p].weizhi, s[p].cj);}return 0;
}