C语言写代码:输入n(n<20)个学生的C语言课程成绩(浮点型),找出中位数后输出。 中位数:先将n个数有序排列,如n为奇数,正中间的一个数是这组数的中位数;如n为偶数,正中间两个数的平均数是这组数的中位数。
时间: 2024-04-30 16:24:04 浏览: 91
您好!这是一个计算中位数的程序:
```
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(double*)a > *(double*)b) - (*(double*)a < *(double*)b);
}
int main() {
int n;
double arr[20];
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%lf", &arr[i]);
qsort(arr, n, sizeof(double), compare);
double median;
if (n % 2 == 0) median = (arr[n/2-1] + arr[n/2]) / 2.0;
else median = arr[n/2];
printf("%.2lf\n", median);
return 0;
}
```
请问还有什么需要帮助的吗?
相关问题
用C语言写代码:输入n(n<20)个学生的C语言课程成绩(浮点型),找出中位数后输出。
可以的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(float *) a > *(float *) b ? 1 : -1;
}
int main() {
int n;
float scores[20];
printf("请输入学生数n(n<20): ");
scanf("%d", &n);
if (n > 20 || n <= 0) {
printf("输入错误!\n");
return 0;
}
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%f", &scores[i]);
}
qsort(scores, n, sizeof(float), cmp);
int mid = n / 2;
float median = n % 2 == 0 ? (scores[mid - 1] + scores[mid]) / 2 : scores[mid];
printf("中位数为:%g\n", median);
return 0;
}
```
运行代码可以得到如下输出:
```
请输入学生数n(n<20): 5
请输入第1个学生的成绩:95.5
请输入第2个学生的成绩:87.5
请输入第3个学生的成绩:92
请输入第4个学生的成绩:83.5
请输入第5个学生的成绩:79
中位数为:87.5
```
C语言写代码(用数组完成):输入n(n<20)个学生的C语言课程成绩(浮点型),找出中位数后输出。 中位数:先将n个数有序排列,如n为奇数,正中间的一个数是这组数的中位数;如n为偶数,正中间两个数的平均数是这组数的中位数。
我可以帮您写一个C语言代码,如下所示:
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(float *)a - *(float *)b; // 比较函数,从小到大排序
}
int main() {
int n;
printf("请输入学生人数n:\n");
scanf("%d", &n);
if (n >= 20) {
printf("输入错误,n必须小于20!\n");
return 1;
}
float score[n];
printf("请输入%d个学生的成绩:\n", n);
for (int i = 0; i < n; i++) {
scanf("%f", &score[i]);
}
qsort(score, n, sizeof(float), cmp); //排序
float median;
if (n % 2 == 1) {
median = score[n / 2];
} else {
median = (score[n / 2 - 1] + score[n / 2]) / 2;
}
printf("中位数是:%.2f\n", median);
return 0;
}
希望对您有所帮助。
阅读全文