检查以下C语言代码的错误#include<stdio.h> #include<string.h> #define M 3 #define N 3 int main() { char num[M][20],name[M][20]; float score[M][N],pname[M][5]; int i,j; float s; printf("请输入%d个学生的学号:\n",M); for(i=0;i<M;i++) //输入M个学生的学号 { gets(num[i]); } printf("请输入%d个学生的姓名:\n",M); for(i=0;i<M;i++) //输入M个学生的姓名 { gets(name[i]); } printf("请输入%d个学生%d门课的成绩:\n",M,N); for (i=0;i<M;i++) { for (j=0;j<N;j++) { scanf("%f",&score[i][j]); } } for (i=0;i<M;i++) { for(j=0,s=0;j<N;j++) { s=s+score[i][j]; } pname[i][5]=s; } printf("所有学生的信息:\n"); printf(" 学号 姓名 语文 数学 英语 平均成绩\n"); for (i=0;i<M;i++) { printf("%15s",num[i]); printf("%15s",name[i]); for (j=0;j<N;j++) { printf("%6.1f",score[i][j]); } printf("\n"); } return 0; }
时间: 2024-03-24 09:40:23 浏览: 19
这段代码存在以下错误:
1. 在定义 `pname` 数组时,其类型应为 `float`,而不是 `char`。
2. 在计算平均分时,应该除以门数 N,而不是除以下标 5。
3. 在使用 `gets` 函数获取字符串时,存在安全隐患,应该使用 `fgets` 函数,同时需要注意去除字符串末尾的换行符。
4. 输出表格时,格式不对齐,需要调整输出格式。
下面是修改后的代码:
```
#include<stdio.h>
#include<string.h>
#define M 3
#define N 3
int main() {
char num[M][20], name[M][20];
float score[M][N], average[M];
int i, j;
float sum;
printf("请输入%d个学生的学号:\n", M);
for(i = 0; i < M; i++) { //输入M个学生的学号
fgets(num[i], 20, stdin);
num[i][strlen(num[i]) - 1] = '\0'; //去除换行符
}
printf("请输入%d个学生的姓名:\n", M);
for(i = 0; i < M; i++) { //输入M个学生的姓名
fgets(name[i], 20, stdin);
name[i][strlen(name[i]) - 1] = '\0'; //去除换行符
}
printf("请输入%d个学生%d门课的成绩:\n", M, N);
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
scanf("%f", &score[i][j]);
}
}
for (i = 0; i < M; i++) {
for(j = 0, sum = 0; j < N; j++) {
sum += score[i][j];
}
average[i] = sum / N;
}
printf("所有学生的信息:\n");
printf("%-15s%-15s%-10s%-10s%-10s%-10s\n", "学号", "姓名", "语文", "数学", "英语", "平均成绩");
for (i = 0; i < M; i++) {
printf("%-15s%-15s", num[i], name[i]);
for (j = 0; j < N; j++) {
printf("%-10.1f", score[i][j]);
}
printf("%-10.1f", average[i]);
printf("\n");
}
return 0;
}
```