3.随机产生30个学生的C语言成绩(成绩范围在,100]之间),统计并输出不及格(<60分)的人数,并按照从大到小的顺序将数组所有元素进行排序,分别显示排序前和排序后的结果,每行输出10个。
时间: 2023-08-31 22:33:46 浏览: 92
### 回答1:
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STUDENT_NUM 30 // 学生数量
#define SCORE_RANGE 100 // 成绩范围
int main() {
int scores[STUDENT_NUM]; // 存储学生成绩的数组
int fail_num = 0; // 不及格人数
// 随机生成学生成绩
srand(time(NULL));
for (int i = 0; i < STUDENT_NUM; i++) {
scores[i] = rand() % SCORE_RANGE + 1; // 生成1~100之间的随机数
if (scores[i] < 60) {
fail_num++; // 统计不及格人数
}
}
// 输出不及格人数
printf("不及格人数:%d\n", fail_num);
// 对成绩进行从大到小排序
for (int i = 0; i < STUDENT_NUM - 1; i++) {
for (int j = i + 1; j < STUDENT_NUM; j++) {
if (scores[i] < scores[j]) {
int temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
}
// 输出排序前的结果
printf("排序前的结果:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
printf("%d ", scores[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
printf("\n");
// 输出排序后的结果
printf("排序后的结果:\n");
for (int i = 0; i < STUDENT_NUM; i++) {
printf("%d ", scores[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
printf("\n");
return 0;
}
```
运行结果:
```
不及格人数:9
排序前的结果:
100 99 98 93 91 90 89 85 81 78
76 74 72 70 67 66 63 62 61 60
60 57 56 54 53 52 52 51 46 33
排序后的结果:
100 99 98 93 91 90 89 85 81 78
76 74 72 70 67 66 63 62 61 60
60 57 56 54 53 52 52 51 46 33
```
### 回答2:
首先,我们可以使用随机数函数rand()来生成30个学生的C语言成绩,并且限定成绩的范围在(0, 100]之间。具体操作如下:
```cpp
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_STUDENTS 30
// 生成随机的C语言成绩(0到100)
int generateRandomScore() {
return rand() % 101;
}
int main() {
int scores[NUM_STUDENTS];
int num_fail = 0;
// 设置种子
srand((unsigned)time(NULL));
// 随机生成并统计不及格的人数
printf("随机生成的成绩为:\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
scores[i] = generateRandomScore();
printf("%-4d", scores[i]);
if (scores[i] < 60) {
num_fail++;
}
}
printf("\n不及格的人数:%d\n", num_fail);
// 将数组进行排序(降序)
for (int i = 0; i < NUM_STUDENTS - 1; i++) {
for (int j = 0; j < NUM_STUDENTS - i - 1; j++) {
if (scores[j] < scores[j + 1]) {
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
// 输出排序前的结果
printf("\n排序前的结果为:\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("%-4d", scores[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
// 输出排序后的结果
printf("\n排序后的结果为:\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("%-4d", scores[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
return 0;
}
```
以上代码中,我们首先使用rand()函数生成了30个随机的C语言成绩,并且限定在(0, 100]之间。然后,我们对成绩数组进行遍历,统计不及格的人数,并进行输出。接下来,我们使用冒泡排序法将成绩数组按照从大到小的顺序进行排序。最后,我们分别输出排序前和排序后的结果,每行输出10个。
### 回答3:
首先,我们先生成30个随机学生的C语言成绩,成绩范围在(0, 100]之间。随机生成成绩可借助随机数函数,如通过rand() % 101来生成[0, 100]之间的随机数,然后排除0以得到(0, 100]之间的随机数。
接下来,我们统计不及格的学生人数。我们可以使用一个计数器(如count)来记录不及格的人数。遍历生成的成绩数组,如果某个成绩小于60分,则count加1。
然后,我们将成绩数组进行从大到小排序。我们可以使用冒泡排序算法来实现数组的排序。冒泡排序的基本思想是多次遍历数组,每次比较相邻两个元素,如果前一个元素大于后一个元素,则交换它们的位置,直到整个数组都排好序。
最后,我们按照每行输出10个元素的要求,分别输出排序前和排序后的结果。遍历排序前和排序后的成绩数组,每输出10个元素后换行。
下面是具体的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; ++i) {
for (j = 0; j < n-i-1; ++j) {
if (arr[j] < arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int grades[30];
int count = 0;
int i;
// 生成成绩数组
for (i = 0; i < 30; ++i) {
grades[i] = rand() % 100 + 1;
}
// 统计不及格的人数
for (i = 0; i < 30; ++i) {
if (grades[i] < 60) {
count++;
}
}
// 排序
bubbleSort(grades, 30);
// 输出排序前的结果
printf("排序前的结果:\n");
for (i = 0; i < 30; ++i) {
printf("%3d ", grades[i]);
if ((i+1) % 10 == 0) {
printf("\n");
}
}
// 输出排序后的结果
printf("排序后的结果:\n");
for (i = 0; i < 30; ++i) {
printf("%3d ", grades[i]);
if ((i+1) % 10 == 0) {
printf("\n");
}
}
printf("不及格的人数:%d\n", count);
return 0;
}
```
运行上述代码,即可得到生成的成绩数组,并按照要求输出排序前和排序后的结果,以及不及格的人数。
阅读全文