用c语言完成一个求学生平均成绩的小程序
时间: 2024-03-23 08:43:03 浏览: 158
好的,以下是使用 C 语言编写的程序,实现了求学生平均成绩的功能:
```c
#include <stdio.h>
int main() {
int n;
float sum = 0, score;
printf("请输入学生的人数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d个学生的成绩:", i);
scanf("%f", &score);
sum += score;
}
printf("平均成绩为:%.2f\n", sum / n);
return 0;
}
```
程序通过 `scanf` 函数读入学生人数 `n`,然后使用 `for` 循环遍历每一个学生,依次读入该学生的成绩,并将成绩累加到变量 `sum` 中。最后,通过输出 `sum / n` 来计算并输出学生的平均成绩。注意,使用 `%.2f` 可以控制输出结果的小数位数为两位。
相关问题
用c语言编写一个计算平均成绩和统计低于平均成绩的学生人数小程序,依次接受学生人数与相应成绩,输出平均成绩和低于平均成绩的人数
好的,这是一个有关编程的问题,我可以回答。以下是您要求的C语言程序:
```c
#include <stdio.h>
int main()
{
int num, i;
double score, avg, sum = 0.0;
int below_avg = 0;
printf("请输入学生人数:");
scanf("%d", &num);
for(i=0; i<num; i++)
{
printf("请输入第%d个学生的成绩:", i+1);
scanf("%lf", &score);
sum += score;
}
avg = sum/num;
for(i=0; i<num; i++)
{
if (score[i] < avg) {
below_avg++;
}
}
printf("平均成绩为:%.2lf\n", avg);
printf("低于平均成绩的学生人数为:%d\n", below_avg);
return 0;
}
```
希望对您有帮助。
用c语言链表知识写一个学生成绩统计程序,要求能录入学生的姓名学号成绩,并依据学生平均成绩由大到小排序输出
以下是一个基于C语言链表的学生成绩统计程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
struct student {
char name[20];
char id[10];
float score;
struct student* next;
};
// 定义链表头结点
struct student* head = NULL;
// 插入学生信息
void insert_student() {
struct student* new_node = (struct student*)malloc(sizeof(struct student));
printf("请输入学生姓名:");
scanf("%s", new_node->name);
printf("请输入学生学号:");
scanf("%s", new_node->id);
printf("请输入学生成绩:");
scanf("%f", &new_node->score);
new_node->next = head;
head = new_node;
}
// 输出学生信息
void print_students() {
struct student* current = head;
while (current != NULL) {
printf("学生姓名:%s,学号:%s,成绩:%.2f\n", current->name, current->id, current->score);
current = current->next;
}
}
// 计算平均成绩
float calc_avg_score() {
float sum = 0;
int count = 0;
struct student* current = head;
while (current != NULL) {
sum += current->score;
count++;
current = current->next;
}
return sum / count;
}
// 比较函数,用于排序
int compare_scores(const void* a, const void* b) {
struct student* s1 = *(struct student**)a;
struct student* s2 = *(struct student**)b;
if (s1->score < s2->score) {
return 1;
} else if (s1->score > s2->score) {
return -1;
} else {
return 0;
}
}
// 排序并输出
void sort_and_print_students() {
// 将链表转换为数组
int num_students = 0;
struct student* current = head;
while (current != NULL) {
num_students++;
current = current->next;
}
struct student** students_array = (struct student**)malloc(num_students * sizeof(struct student*));
current = head;
int i = 0;
while (current != NULL) {
students_array[i] = current;
current = current->next;
i++;
}
// 对数组进行排序
qsort(students_array, num_students, sizeof(struct student*), compare_scores);
// 输出排序后的学生信息
printf("按平均成绩由大到小排序后的学生信息:\n");
for (i = 0; i < num_students; i++) {
printf("学生姓名:%s,学号:%s,成绩:%.2f\n", students_array[i]->name, students_array[i]->id, students_array[i]->score);
}
// 释放数组内存
free(students_array);
}
int main() {
int choice;
do {
printf("\n");
printf("1. 插入学生信息\n");
printf("2. 输出学生信息\n");
printf("3. 计算平均成绩\n");
printf("4. 按平均成绩由大到小排序并输出\n");
printf("5. 退出程序\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
insert_student();
break;
case 2:
print_students();
break;
case 3:
printf("平均成绩为:%.2f\n", calc_avg_score());
break;
case 4:
sort_and_print_students();
break;
case 5:
printf("感谢使用本程序!\n");
break;
default:
printf("无效选择,请重新输入!\n");
break;
}
} while (choice != 5);
// 释放链表内存
struct student* current = head;
while (current != NULL) {
struct student* temp = current;
current = current->next;
free(temp);
}
return 0;
}
```
该程序使用链表存储学生信息,并提供了插入、输出、计算平均成绩、排序并输出等功能。其中,排序使用了C标准库中的快速排序函数qsort(),需要传入比较函数compare_scores()进行比较。在比较函数内部,按照学生成绩从大到小排序。最后,为了避免内存泄漏,需要在程序结束时释放链表内存。
阅读全文