用c语言完成程序:输入整数N,再输入N个学生的学号、姓名和成绩。最后输出所有人的总成绩、平均成绩和不及格人数。(使用结构体)
时间: 2024-04-30 22:23:46 浏览: 39
```c
#include<stdio.h>
struct student
{
int id;
char name[20];
float score;
};
int main()
{
int N;
float total_score = 0;
int fail_num = 0;
printf("请输入学生人数 N:\n");
scanf("%d", &N);
struct student stu[N];
printf("请输入每个学生的学号、姓名和成绩:\n");
for(int i = 0; i < N; i++)
{
printf("请输入第 %d 个学生的学号、姓名和成绩:\n", i+1);
scanf("%d %s %f", &stu[i].id, stu[i].name, &stu[i].score);
total_score += stu[i].score;
if(stu[i].score < 60)
{
fail_num++;
}
}
printf("所有人的总成绩为:%.2f\n", total_score);
printf("所有人的平均成绩为:%.2f\n", total_score/N);
printf("不及格人数为:%d\n", fail_num);
return 0;
}
```
相关问题
用c语言建立一个学生的结构记录,包含学号、姓名和成绩,并让用户输入整数n(n<=10),再输入n个学生的基本信息,计算并输出他们的平均成绩。
好的,我可以帮您解答这个问题。以下是用 C 语言编写的代码:
```c
#include <stdio.h>
struct Student {
int id;
char name[20];
float score;
};
int main() {
int n, i;
float sum = 0, avg;
struct Student students[10];
printf("请输入学生数(不超过10个):");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名和成绩:", i + 1);
scanf("%d %s %f", &students[i].id, students[i].name, &students[i].score);
sum += students[i].score;
}
avg = sum / n;
printf("平均成绩为:%.2f\n", avg);
return 0;
}
```
代码说明:
1. 首先我们定义一个 `Student` 结构体,包含三个成员:学号、姓名和成绩。
2. 在 `main()` 函数中,我们定义了一个整型变量 `n`,用于表示学生数,一个浮点型变量 `sum`,用于表示总成绩,一个浮点型变量 `avg`,用于表示平均成绩,以及一个 `Student` 类型的数组 `students`,用于存储学生的信息。
3. 用户输入学生数 `n`。
4. 通过 `for` 循环,依次输入每个学生的学号、姓名和成绩,并将每个学生的成绩加到 `sum` 变量中。
5. 计算平均成绩并输出。
希望我的回答能够帮助到您!
用c语言写一个程序,输入第一行一个整数n,接下来n行数据,每行包括学号,姓名和三门成绩,例 1 mike 90 90 90,输出n行,一行一个学生信息,每个信息间用单个空格分开,每行包括学号,姓名,三门成绩和总成绩,按总成绩降序排序
以下是使用结构体和指针实现该程序的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 1000
#define MAX_NAME_LEN 20
// 定义学生结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN + 1]; // 姓名
int score[3]; // 三门成绩
int total; // 总成绩
} Student;
int compare(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
return s2->total - s1->total;
}
int main() {
int n;
scanf("%d", &n);
// 动态分配学生数组
Student *students = (Student *)malloc(n * sizeof(Student));
// 读入学生信息
for (int i = 0; i < n; i++) {
scanf("%d %s %d %d %d", &students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2];
}
// 根据总成绩降序排序
qsort(students, n, sizeof(Student), compare);
// 输出学生信息
for (int i = 0; i < n; i++) {
printf("%d %s %d %d %d %d\n", students[i].id, students[i].name,
students[i].score[0], students[i].score[1], students[i].score[2], students[i].total);
}
// 释放动态分配的内存
free(students);
return 0;
}
```
输入示例:
```
3
1 mike 90 90 90
2 john 80 85 90
3 mary 95 85 90
```
输出示例:
```
3 mary 95 85 90 270
1 mike 90 90 90 270
2 john 80 85 90 255
```