#include"stdio.h" #define N 5 void main() { int a[5],i; float x=0,y,avg,sum=0; for(i=0;i<N;i++) { scanf("%d",a+i); sum=sum+*(a+i); if(60<=*(a+i))x++; } avg=sum/N; y=x/N; printf("考试通过率为%.1f\n考试的平均成绩为%.1f\n",y,avg); }
时间: 2023-12-03 08:02:43 浏览: 86
您修改后的代码已经可以正确计算出数组中大于等于60的元素个数x、平均数avg和所有元素的和sum,并且输出考试通过率和平均分。但是,有一个问题需要注意:在C语言中,`void main()`不是标准的写法,建议改为`int main()`。除此之外,您还可以加上一些对输入数据的判断,比如输入的成绩是否合法等。
相关问题
#include "stdio.h" #define N 5/* 假设只有5个同学*/ void main() {int i,j; struct student {char id[6]; char name[10]; int m1,m2,m3; float sum,avg; }stu1[N],t; printf(" 学生成绩单制作\n\n请输入5位学生学号、姓名及三科成绩的信息:\n"); for(i=0;i<N;i++) scanf("%s%s%d%d%d",stu1[i].id,stu1[i].name,&stu1[i].m1,&stu1[i].m2,&stu1[i].m3); for(i=0;i<N;i++) {stu1[i].sum=stu1[i].m1+stu1[i].m2+stu1[i].m3; stu1[i].avg=stu1[i].sum/3.0;} for(i=0;i<N-1;i++) for(j=0;j<N-i;j++) if(stu1[j].sum<stu1[j+1].sum) {t=stu1[j];stu1[j]=stu1[j+1];stu1[j+1]=t; } printf("排序后的成绩单为:\n"); printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n"); for(i=0;i<N;i++) printf("%s\t%s\t%d\t%d\t%d\t%.1f\t%.1f\n",stu1[i].id,stu1[i].name,stu1[i].m1, stu1[i].m2,stu1[i].m3,stu1[i].sum,stu1[i].avg);}加入注释
下面是添加注释后的代码:
#include "stdio.h"
#define N 5/* 假设只有5个同学*/
void main() {
int i,j;
struct student { // 定义学生结构体
char id[6]; // 学号
char name[10]; // 姓名
int m1,m2,m3; // 三科成绩
float sum,avg; // 总分和平均分
}stu1[N],t;
printf(" 学生成绩单制作\n\n请输入5位学生学号、姓名及三科成绩的信息:\n");
// 循环输入每个学生的信息
for(i=0;i<N;i++) {
scanf("%s%s%d%d%d",stu1[i].id,stu1[i].name,&stu1[i].m1,&stu1[i].m2,&stu1[i].m3);
}
// 计算每个学生的总分和平均分
for(i=0;i<N;i++) {
stu1[i].sum=stu1[i].m1+stu1[i].m2+stu1[i].m3;
stu1[i].avg=stu1[i].sum/3.0;
}
// 使用冒泡排序对学生的总分进行降序排序
for(i=0;i<N-1;i++) {
for(j=0;j<N-i;j++) {
if(stu1[j].sum<stu1[j+1].sum) {
t=stu1[j];
stu1[j]=stu1[j+1];
stu1[j+1]=t;
}
}
}
// 输出排序后的成绩单,包含每个学生的学号、姓名、三科成绩、总分和平均分
printf("排序后的成绩单为:\n");
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
for(i=0;i<N;i++) {
printf("%s\t%s\t%d\t%d\t%d\t%.1f\t%.1f\n",stu1[i].id,stu1[i].name,stu1[i].m1,stu1[i].m2,stu1[i].m3,stu1[i].sum,stu1[i].avg);
}
}
我需要一个代码//把学生信息存放在txt文件中,读取数据,数据放在单链表中。 //要求可以通过ID查询某学生的各科成绩和总分及平均分 //可以通过ID查询某科成绩排名 //可以通过ID查询总分排名。 //成绩一样的排名一样。 #include <stdio.h> struct STU{ long ID; unsigned C; unsigned math; unsigned python; }; int main(void) { struct STU stu[10]; //sort by c+math+python return 0; }
以下是一个示例代码,实现了将学生信息存储在txt文件中,读取数据并将其放入单链表中。同时,还可以通过ID查询某学生的各科成绩和总分及平均分,通过ID查询某科成绩排名,以及通过ID查询总分排名。注意,成绩相同的学生排名也相同。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 10
#define MAX_SUBJECTS 5
// 学生信息结构体
typedef struct student {
char name[MAX_NAME_LEN]; // 姓名
char id[MAX_ID_LEN]; // 学号
int scores[MAX_SUBJECTS]; // 各科成绩
int total_score; // 总分
float avg_score; // 平均分
struct student *next; // 指向下一个学生的指针
} Student;
// 读取txt文件中的学生信息,返回一个指向链表头的指针
Student* read_students_from_file(char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
return NULL;
}
Student *head = NULL;
Student *tail = NULL;
char line[100];
while (fgets(line, sizeof(line), fp) != NULL) {
Student *s = (Student*)malloc(sizeof(Student));
sscanf(line, "%s %s %d %d %d %d %d", s->name, s->id, &s->scores[0], &s->scores[1], &s->scores[2], &s->scores[3], &s->scores[4]);
s->total_score = 0;
for (int i = 0; i < MAX_SUBJECTS; i++) {
s->total_score += s->scores[i];
}
s->avg_score = (float)s->total_score / MAX_SUBJECTS;
s->next = NULL;
if (head == NULL) {
head = s;
tail = s;
} else {
tail->next = s;
tail = s;
}
}
fclose(fp);
return head;
}
// 根据学号查找学生,返回一个指向该学生的指针
Student* find_student_by_id(Student *head, char *id) {
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 根据学号和科目编号查找该科目的成绩排名,返回排名
int find_rank_by_subject(Student *head, char *id, int subject) {
Student *p = head;
int rank = 1;
while (p != NULL) {
if (strcmp(p->id, id) != 0 && p->scores[subject] > find_student_by_id(head, id)->scores[subject]) {
rank++;
}
p = p->next;
}
return rank;
}
// 根据学号查找总分排名,返回排名
int find_rank_by_total_score(Student *head, char *id) {
Student *p = head;
int rank = 1;
while (p != NULL) {
if (strcmp(p->id, id) != 0 && p->total_score > find_student_by_id(head, id)->total_score) {
rank++;
}
p = p->next;
}
return rank;
}
int main() {
Student *head = read_students_from_file("students.txt");
// 测试查找学生信息
Student *s = find_student_by_id(head, "1001");
if (s != NULL) {
printf("Name: %s\n", s->name);
printf("ID: %s\n", s->id);
printf("Scores: ");
for (int i = 0; i < MAX_SUBJECTS; i++) {
printf("%d ", s->scores[i]);
}
printf("\n");
printf("Total score: %d\n", s->total_score);
printf("Average score: %.2f\n", s->avg_score);
}
// 测试查找科目排名
int rank = find_rank_by_subject(head, "1001", 2);
printf("Rank of subject 2 for student 1001: %d\n", rank);
// 测试查找总分排名
rank = find_rank_by_total_score(head, "1001");
printf("Rank of total score for student 1001: %d\n", rank);
return 0;
}
阅读全文