int count(STUDENT *p,int snum) { int sum=0; int i; for(i=0;i<N;i++) if((p+i)->score>=snum) { sum++; printf("%10s %d\n",(p+i).no,(p+i).score ); } return sum; }
时间: 2024-02-10 08:18:15 浏览: 54
这段代码是一个计算成绩大于等于snum的学生人数的函数,其中参数p是一个指向STUDENT类型的指针,snum是一个整数,表示成绩的下限。函数会遍历p指向的数组,对于每个成绩大于等于snum的学生,打印该学生的学号和成绩,并将总人数加1。最后返回总人数。但是,代码中有一处错误,应该将`(p+i)->no`改为`(p+i)->name`,因为STUDENT类型中应该是有一个name成员来表示学生的姓名。
相关问题
#include<stdio.h>#include<string.h>struct student{int snum;char name[8];int score[3];float sum;}void sumScore(struct student temp){ struct student *p; p=&temp; (*p).snum=0; for(int i=0;i<3;i++) { (*p).snum+=(*p).score[i]; }}main(){ struct student a[5]; printf("请输入五个学生的学号,姓名和三门课成绩\n"); for(int i=0;i<5;i++) { scanf("%d%s",&a[i].snum ,a[i].name); printf("%d %s ",a[i].snum ,a[i].name); for(int j=0;i<3;i++) { scanf("%d",&a[i].score[j] ); printf("%d ",a[i].score[j]); } printf("\n"); } for(i=0;i<5;i++) { sumScore(a[i]); }}
这段代码存在一些问题,可能会导致编译错误或者运行错误。
1. 在结构体定义中,需要在最后一个成员变量后面加上分号。
2. 在 sumScore 函数中,传入的参数是一个结构体,应该使用指针来进行操作。因此,应该将函数定义改为 void sumScore(struct student *temp)。
3. 在 sumScore 函数中,应该使用指针箭头运算符 -> 来访问结构体成员变量。
4. 在 for 循环中,内部的循环变量应该是 j 而不是 i。
5. 在主函数中,i 没有进行声明。
下面是修改后的代码:
```
#include <stdio.h>
#include <string.h>
struct student {
int snum;
char name[8];
int score[3];
float sum;
};
void sumScore(struct student *temp) {
temp->snum = 0;
for (int i = 0; i < 3; i++) {
temp->snum += temp->score[i];
}
}
int main() {
struct student a[5];
printf("请输入五个学生的学号,姓名和三门课成绩\n");
for (int i = 0; i < 5; i++) {
scanf("%d%s", &a[i].snum, a[i].name);
printf("%d %s ", a[i].snum, a[i].name);
for (int j = 0; j < 3; j++) {
scanf("%d", &a[i].score[j]);
printf("%d ", a[i].score[j]);
}
printf("\n");
}
for (int i = 0; i < 5; i++) {
sumScore(&a[i]);
}
return 0;
}
```
修改代码的错误 void xs(int n) { struct score stu[100]; int i; printf("成绩信息如下:\n"); FILE* fp; fp = fopen("C:\\2023-05\\student.txt", "r"); if (fp == NULL) { printf("打开文件失败,请重试!\n"); _getch(); fclose(fp); exit(0); } printf("学号\t姓名\tC语言\t高数\t大物\t总分\t名次\t平均分\n"); int c = 0; while (!feof(fp)) { fscanf(fp, "%s %s %d %d %d %d %d %f\n", &stu[c].snum, &stu[c].sname, &stu[c].chinese, &stu[c].math, &stu[c].english, &stu[c].sumstudent, &stu[c].rank, &stu[c].avg); c++; } if (n != 0) {//人数不为0 for (i = 0; i < c; i++) { printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%.1f\n", stu[i].snum, stu[i].sname, stu[i].chinese, stu[i].math, stu[i].english, stu[i].sumstudent, stu[i].rank, stu[i].avg); } } fclose(fp); printf("显示完毕 ,请按任意键返回\n"); _getch(); return; } void jisuan(int n) { struct score stu[100]; int i; printf("成绩信息如下:\n"); FILE* fp; fp = fopen("C:\\2023-05\\student.txt", "r"); if (fp == NULL) { printf("打开文件失败,请重试!\n"); _getch(); fclose(fp); exit(0); } int c = 0; while (!feof(fp)) { fscanf(fp, "%s %s %d %d %d %d %d %f\n", &stu[c].snum, &stu[c].sname, &stu[c].chinese, &stu[c].math, &stu[c].english, &stu[c].sumstudent, &stu[c].rank, &stu[c].avg); c++; } if (n != 0) {//人数不为0 float sum = 0; for (i = 0; i < c; i++) { sum = sum + stu[i].chinese; } printf("C语言平均分:%.1f\n", sum / c + 1); sum = 0; for (i = 0; i < c; i++) { sum = sum + stu[i].math; } printf("高数平均分:%.1f\n", sum / c + 1); sum = 0; for (i = 0; i < c; i++) { sum = sum + stu[i].english; } printf("大物平均分:%.1f\n", sum / c + 1); } fclose(fp); printf("显示完毕 ,请按任意键返回\n"); _getch(); return; }
在这段代码中,有一些错误需要修改:
1. 在fscanf函数中,字符串类型的参数需要使用数组,而不是单个字符的指针,所以需要将&stu[c].snum和&stu[c].sname改为stu[c].snum和stu[c].sname。
2. 在计算平均分时,需要将除数改为c,而不是c+1。因为c已经表示了学生的总数,不需要再加1。
修改后的代码如下:
```
void xs(int n) {
struct score stu[100];
int i;
printf("成绩信息如下:\n");
FILE* fp;
fp = fopen("C:\\2023-05\\student.txt", "r");
if (fp == NULL)
{
printf("打开文件失败,请重试!\n");
_getch();
fclose(fp);
exit(0);
}
printf("学号\t姓名\tC语言\t高数\t大物\t总分\t名次\t平均分\n");
int c = 0;
while (!feof(fp))
{
fscanf(fp, "%s %s %d %d %d %d %d %f\n", stu[c].snum, stu[c].sname, &stu[c].chinese, &stu[c].math, &stu[c].english, &stu[c].sumstudent, &stu[c].rank, &stu[c].avg);
c++;
}
if (n != 0) {//人数不为0
for (i = 0; i < c; i++)
{
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%.1f\n", stu[i].snum, stu[i].sname, stu[i].chinese, stu[i].math, stu[i].english, stu[i].sumstudent, stu[i].rank, stu[i].avg);
}
}
fclose(fp);
printf("显示完毕 ,请按任意键返回\n");
_getch();
return;
}
void jisuan(int n) {
struct score stu[100];
int i;
printf("成绩信息如下:\n");
FILE* fp;
fp = fopen("C:\\2023-05\\student.txt", "r");
if (fp == NULL)
{
printf("打开文件失败,请重试!\n");
_getch();
fclose(fp);
exit(0);
}
int c = 0;
while (!feof(fp))
{
fscanf(fp, "%s %s %d %d %d %d %d %f\n", stu[c].snum, stu[c].sname, &stu[c].chinese, &stu[c].math, &stu[c].english, &stu[c].sumstudent, &stu[c].rank, &stu[c].avg);
c++;
}
if (n != 0)
{//人数不为0
float sum = 0;
for (i = 0; i < c; i++)
{
sum = sum + stu[i].chinese;
}
printf("C语言平均分:%.1f\n", sum / c);
sum = 0;
for (i = 0; i < c; i++)
{
sum = sum + stu[i].math;
}
printf("高数平均分:%.1f\n", sum / c);
sum = 0;
for (i = 0; i < c; i++)
{
sum = sum + stu[i].english;
}
printf("大物平均分:%.1f\n", sum / c);
}
fclose(fp);
printf("显示完毕 ,请按任意键返回\n");
_getch();
return;
}
```
阅读全文