#include<stdio.h> typedef struct student{ int xh; char name[32]; int score; char level; }STU[100]; int main(){ int count=0; int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %s %d",&STU[i].xh,&STU[i].name,&STU[i].score); } for(int j=0;j<n;j++){ if(STU[j].score>=85){ STU[j].level='A'; }else if(STU[j].score>=70&&STU[j].score<85){ STU[i].level='B'; }else if(STU[j].score>=60&&STU[j].score<70){ STU[j].level='C'; }else{ count++; } } for(int k=0;k<n;k++){ printf("%d %s %c\n",STU[k].xh,STU[k].name,STU[k].level); printf("%d",count); } return 0; }
时间: 2024-04-05 08:34:24 浏览: 108
这是一段 C 语言代码,它定义了一个名为 "student" 的结构体类型,其中包含学生的学号、姓名、成绩和等级。在主函数中,它先输入学生人数 n,然后依次输入每个学生的学号、姓名和成绩。接着,它根据学生的成绩计算出每个学生的等级,并将等级赋值给相应的结构体成员变量。最后,它依次输出每个学生的学号、姓名和等级,并输出不及格学生的人数。但是,这段代码有一些错误,例如在计算等级时使用了错误的变量名,导致程序无法编译通过。
相关问题
#include<stdio.h> #include <stdlib.h> #include <string.h> typedef struct{ char name[3]; }stu; void pre(){ int i=0,k=0; char name; stu st={"a"}; stu st1={"b"}; stu st2={"c"}; scanf("%s",name); if(strcmp(st.name,name)==0) k=k+1; printf("%d",k); } int main(){ pre(); }
这段代码有一些问题,首先在 pre 函数中定义了三个结构体变量 st、st1、st2,但是并没有使用它们,而是定义了一个字符变量 name 并从用户输入中读入一个字符串,这个字符串并不会被用来初始化结构体变量。接着,程序使用 strcmp 函数比较 name 和 st.name 是否相等,如果相等则将计数器 k 加 1,并输出 k 的值。但是由于 name 没有被正确初始化,程序很可能会崩溃或者输出错误的结果。另外,由于 name 只有一个字符的空间,如果用户输入的字符串超过了一个字符,也会导致程序崩溃。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> struct stu { int id; char name[10]; float grade[11]; float sum; float average; float gpa; struct stu* next; }stu* head;stu *tail;按照这个结构体来续写C语言代码。要求将学生信息保存在硬盘文件中,通过制定文件路径和文件名称来导入学生信息;按照学号对所有学生信息进行升序、降序排列,并输出到屏幕显示或输出到文件
好的,我会为你续写代码。以下是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
struct stu {
int id;
char name[10];
float grade[11];
float sum;
float average;
float gpa;
struct stu* next;
};
typedef struct stu stu;
stu* head = NULL;
stu* tail = NULL;
// 读取学生信息
void read_info(char* file_name) {
FILE* fp;
fp = fopen(file_name, "r");
if(fp == NULL) {
printf("Failed to open file %s\n", file_name);
return;
}
while(!feof(fp)) {
stu* s = (stu*)malloc(sizeof(stu));
fscanf(fp, "%d%s%f%f%f", &s->id, s->name, &s->grade[0], &s->grade[1], &s->grade[2]);
s->sum = s->grade[0] + s->grade[1] + s->grade[2];
s->average = s->sum / 3.0;
s->gpa = s->average / 20.0 - 1.5;
if(head == NULL) {
head = s;
tail = s;
tail->next = NULL;
} else {
tail->next = s;
tail = s;
tail->next = NULL;
}
}
fclose(fp);
}
// 写入学生信息
void write_info(char* file_name) {
FILE* fp;
fp = fopen(file_name, "w");
if(fp == NULL) {
printf("Failed to open file %s\n", file_name);
return;
}
stu* p = head;
while(p != NULL) {
fprintf(fp, "%d %s %.2f %.2f %.2f\n", p->id, p->name, p->grade[0], p->grade[1], p->grade[2]);
p = p->next;
}
fclose(fp);
}
// 按照学号升序排序
void sort_by_id_ascending() {
int len = 0;
stu* p = head;
while(p != NULL) {
len++;
p = p->next;
}
p = head;
for(int i = 0; i < len - 1; i++) {
for(int j = 0; j < len - i - 1; j++) {
if(p->id > p->next->id) {
stu* tmp = p->next;
p->next = tmp->next;
tmp->next = p;
if(p == head) {
head = tmp;
} else {
stu* q = head;
while(q->next != p) {
q = q->next;
}
q->next = tmp;
}
p = tmp;
}
p = p->next;
}
p = head;
}
}
// 按照学号降序排序
void sort_by_id_descending() {
int len = 0;
stu* p = head;
while(p != NULL) {
len++;
p = p->next;
}
p = head;
for(int i = 0; i < len - 1; i++) {
for(int j = 0; j < len - i - 1; j++) {
if(p->id < p->next->id) {
stu* tmp = p->next;
p->next = tmp->next;
tmp->next = p;
if(p == head) {
head = tmp;
} else {
stu* q = head;
while(q->next != p) {
q = q->next;
}
q->next = tmp;
}
p = tmp;
}
p = p->next;
}
p = head;
}
}
// 输出学生信息
void print_info() {
stu* p = head;
while(p != NULL) {
printf("%d %s %.2f %.2f %.2f %.2f\n", p->id, p->name, p->grade[0], p->grade[1], p->grade[2], p->gpa);
p = p->next;
}
}
int main() {
char file_name[100];
printf("Please enter the file path and name: ");
scanf("%s", file_name);
read_info(file_name);
printf("Before sorting:\n");
print_info();
sort_by_id_ascending();
printf("After sorting by id in ascending order:\n");
print_info();
sort_by_id_descending();
printf("After sorting by id in descending order:\n");
print_info();
printf("Please enter the file path and name you want to save the sorted information: ");
scanf("%s", file_name);
write_info(file_name);
return 0;
}
```
这个程序可以通过文件读取来导入学生信息,根据学号升序或降序排列学生信息,并输出到屏幕或文件。请注意,在运行程序时,需要输入导入文件的路径和名称,以及希望将排序信息保存到的文件路径和名称。
阅读全文