struct student { int num; char name[20]; char sex[20]; float score; }; int main() { struct student s[5]={ {1,"张三","男",45.89}, {2,"李四","女",45.85}, {3,"王五","女",45.36}, {4,"小六","女",96.14}}; int i,b=0; printf("学号\t姓名\t性别\t分数\n"); for(i=0;i<=4;i++) { printf("\n%d\t%s\t%s\t%f\n",s[i].num,s[i].name,s[i].sex,s[i].score); } for(i=0;i<=4;i++) { float *p=s[i].score; int sum=sum+p[i]; } float len=sum/4.0; for(i=0;i<=4;i++) { if(*(p+i)<'60') { b++; } } printf("平均分为:%f\n不及格人数%d\n",len,b); }错误点和需要改进的地方
时间: 2024-04-15 13:29:26 浏览: 61
struct student
在你的代码中,有几个错误和需要改进的地方:
1. 需要包含 `<stdio.h>` 头文件来使用 `printf()` 函数。
2. 在计算平均分和不及格人数时,你需要在循环外部声明变量 `sum` 和 `p`。
3. 在计算平均分时,你应该将 `sum` 初始化为0,并且在循环内部累加每个学生的成绩。
4. 在判断不及格人数时,你应该使用 `*(p+i) < 60` 而不是 `*(p+i) < '60'`。
5. 在输出不及格人数时,你应该使用 `%d` 格式说明符而不是 `%f`。
以下是修正后的代码:
```c
#include <stdio.h>
struct student
{
int num;
char name[20];
char sex[20];
float score;
};
int main()
{
struct student s[5] = {
{1, "张三", "男", 45.89},
{2, "李四", "女", 45.85},
{3, "王五", "女", 45.36},
{4, "小六", "女", 96.14}
};
int i, b = 0;
float sum = 0;
float *p = NULL; // 指向成绩的指针
printf("学号\t姓名\t性别\t分数\n");
for (i = 0; i <= 3; i++)
{
printf("%d\t%s\t%s\t%f\n", s[i].num, s[i].name, s[i].sex, s[i].score);
sum += s[i].score;
}
p = &s[0].score; // 指向第一个学生的成绩
float len = sum / 4.0;
for (i = 0; i <= 3; i++)
{
if (*(p + i) < 60)
{
b++;
}
}
printf("平均分为:%f\n不及格人数:%d\n", len, b);
return 0;
}
```
注意,我假设你只有4个学生,所以循环的条件是 `i <= 3` 而不是 `i <= 4`。同时,你需要将指针 `p` 指向第一个学生的成绩,以便在循环中访问每个学生的成绩。
阅读全文