#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int score[100] = { 0 }; int count[100] = {0}; int i, STUDENTS; STUDENTS = 40; srand(unsigned(time(NULL))); for (i = 0; i < STUDENTS; i++) { score[i] = rand() % 10 + 1;/*评分为1~10*/ /*printf("%d\t", score[i]);*/ count[score[i]] ++; } printf("Grade\tCount\tHistogram\n"); int h, k; for (k = 1; k <= 10;k++)/*k相当于等级*/ { printf("%d\t%d\t", k, count[k]); for (h = 1; h <=count[k]; h++) { printf("%c",'*'); } printf("\n"); } return 0; }
时间: 2024-04-04 12:33:19 浏览: 59
这是一个C语言程序,主要实现的功能是随机生成40个学生的成绩,然后根据成绩生成一个直方图。程序的具体实现过程如下:
1. 定义了三个数组:score数组用于存储学生的成绩,count数组用于存储每个成绩等级的人数,i表示循环变量。其中,count数组的下标表示成绩等级,数组元素表示该等级的人数。
2. 通过srand函数生成随机数种子,以保证每次运行程序生成的随机数不同。
3. 使用for循环生成40个学生的成绩,并将每个成绩存储在score数组中。同时使用count数组统计每个成绩等级的人数。
4. 通过for循环遍历count数组,根据每个等级的人数生成直方图,用字符'*'表示。
5. 最后输出成绩等级、人数和直方图。
需要注意的是,程序中使用了rand函数生成随机数,并使用srand函数生成随机数种子。同时,程序中使用了ASCII码中的字符'*',用于生成直方图。
相关问题
#include <stdio.h>#include <stdlib.h>#define MAX_N 10#define MAX_CARD 5typedef struct { int num; // 编号 int cards[MAX_CARD]; // 抽卡牌情况 int total_score; // 总点数} Student;
好的,这段代码定义了一个结构体 `Student`,其中包含了每个同学的编号、抽卡牌情况和总点数。这段代码本身没有需要优化的地方,但是可以根据实际情况考虑增加一些优化,比如:
1. 定义常量:可以使用 `const` 关键字定义一些常量,比如数字卡牌的点数范围、最大同学数、最大卡牌数等。这样可以提高代码的可读性和可维护性。
2. 使用枚举:可以使用 `enum` 关键字定义一些枚举类型,比如卡牌类型(数字卡牌、D 卡牌),这样可以使代码更加清晰。
3. 使用函数:可以将计算总点数的函数 `calc_score` 定义为一个独立的函数,这样可以提高代码的模块化和可重用性。
4. 减少重复计算:在计算 D 卡牌的时候,可以记录上一次抽到的数字卡牌的点数,避免重复计算。
综上所述,我们可以对代码进行如下优化:
```c
#include <stdio.h>
enum {
NUM_CARD_MIN = 1,
NUM_CARD_MAX = 9,
MAX_N = 10,
MAX_CARD = 5,
};
enum {
CARD_TYPE_NUM = 0,
CARD_TYPE_D = 1,
};
typedef struct {
int num;
int cards[MAX_CARD];
int total_score;
} Student;
int calc_score(const int *cards) {
int last_card_score = 0;
int total_score = 0;
for (int i = 0; i < MAX_CARD; i++) {
if (cards[i] == -1) {
break;
}
if (cards[i] == CARD_TYPE_D) {
total_score += last_card_score * 2;
} else if (cards[i] >= NUM_CARD_MIN && cards[i] <= NUM_CARD_MAX) {
total_score += cards[i];
last_card_score = cards[i];
}
}
return total_score;
}
int main() {
Student students[MAX_N];
int min_score = 10000, min_score_num = -1;
for (int i = 0; i < MAX_N; i++) {
int num;
scanf("%d", &num);
students[i].num = num;
for (int j = 0; j < MAX_CARD; j++) {
char card[3];
scanf("%s", card);
if (card[0] == 'D') {
students[i].cards[j] = CARD_TYPE_D;
} else {
students[i].cards[j] = atoi(card);
}
}
students[i].total_score = calc_score(students[i].cards);
if (students[i].total_score < min_score) {
min_score = students[i].total_score;
min_score_num = students[i].num;
}
}
printf("%d\n", min_score_num);
return 0;
}
```
这样,我们对代码进行了一些常量定义、枚举类型定义、函数封装和重复计算的优化,使得代码更加简洁、可读、可维护和高效。
//利用顺序表完成一个班级学生课程成绩的简单管理#include<stdio.h>#include<stdlib.h>#include<conio.h>#define MAXSIZE 100 //
这是一个简单的 C 语言程序片段,用于管理一个班级学生的课程成绩。它使用顺序表(如数组)作为数据结构,`MAXSIZE` 定义了列表的最大容量为 100 个元素。
```c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXSIZE 100
// 定义顺序表结构体
typedef struct {
char name[20]; // 学生姓名
int scores[MAXSIZE]; // 课程分数数组
int count; // 当前记录数
} StudentList;
// 函数声明
void inputStudent(StudentList *list); // 输入学生信息
void displayStudent(StudentList *list); // 显示学生信息
void averageScore(StudentList *list); // 计算平均分
int main() {
StudentList studentList;
inputStudent(&studentList);
displayStudent(&studentList);
averageScore(&studentList);
return 0;
}
// 输入学生信息函数
void inputStudent(StudentList *list) {
list->count = 0;
while (list->count < MAXSIZE) {
printf("请输入学生 %d 的姓名:", list->count + 1);
fgets(list->name, sizeof(list- 1] = '\0'; // 去除换行符
printf("请输入 %d 门课程的成绩: ", MAXSIZE);
for (int i = 0; i < MAXSIZE; ++i) {
scanf("%d", &list->scores[i]);
}
++list->count;
}
}
// 显示学生信息函数
void displayStudent(StudentList *list) {
printf("\n学生信息:\n");
for (int i = 0; i < list->count; ++i) {
printf("姓名: %s\n", list->name);
printf("成绩: ");
for (int j = 0; j < MAXSIZE; ++j) {
if (list->scores[j] != 0) {
printf("%d ", list->scores[j]);
}
}
printf("\n");
}
}
// 计算平均分函数
void averageScore(StudentList *list) {
float sum = 0;
for (int i = 0; i < list->count && i < MAXSIZE; ++i) {
if (list->scores[i] != 0) {
sum += list->scores[i];
}
}
if (list->count > 0) {
printf("平均分: %.2f\n", sum / list->count);
} else {
printf("没有输入成绩。\n");
}
}
```
在这个程序中,我们创建了一个名为 `StudentList` 的结构体,其中包含了学生姓名、分数数组以及记录计数。然后定义了一些辅助函数,分别用于输入学生信息、显示学生信息以及计算平均分。主函数中先初始化学生列表,接着调用这些函数来管理学生的课程成绩。
阅读全文