代码如下:
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,m;
int a[50][5] = { 0 };
double sudScore[50] = { 0 }, avgScore[5] = { 0 };
while (~scanf_s("%d %d", &n, &m) && n > 0&&n<=50 && m > 0&&m<=5)
{
memset(a, 0, sizeof(a));
memset(sudScore, 0, sizeof(sudScore));
memset(avgScore, 0, sizeof(avgScore));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf_s("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
sudScore[i] += a[i][j];
}
sudScore[i] /= m;
}
for (int j = 0; j < m; j++)
{
for (int i = 0; i < n; i++)
{
avgScore[j] += a[i][j];
}
avgScore[j] /= n;
}
for (int i = 0; i < n; i++)
{
if (i == n - 1)
{
printf("%.2lf\n", sudScore[i]);
}
else
{
printf("%.2lf ", sudScore[i]);
}
}
for (int i = 0; i < m; i++)
{
if (i == m - 1)
{
printf("%.2lf\n", avgScore[i]);
}
else
{
printf("%.2lf ", avgScore[i]);
}
}
int flag = 0;
for (int i = 0; i < n; i++)
{
int flag1 = 0;
for (int j = 0; j < m; j++) {
if (a[i][j]>avgScore[j])
{
flag1++;
}
if (flag1==m)
{
flag++;
}
}
}
printf("%d\n\n", flag);
}
return 0;
}
输入示例于输出示例都相同,结果还是wrong anwser
请教各位大佬帮我康康,孩子对照其他大佬的代码就没发现问题,但是提交别人代码又能AC
在代码中,存在一些错误和潜在的问题:
在使用scanf_s
函数读取输入时,应该使用%d
格式说明符而不是%d %d
。改为scanf_s("%d", &n)
和scanf_s("%d", &m)
。
在判断输入的n和m是否在合法范围内时,应该使用逻辑或||
而不是逻辑与&&
。改为n > 0 || n <= 50
和m > 0 || m <= 5
。
在计算每个学生的平均成绩时,应该使用除法运算符/
而不是赋值运算符=
。改为sudScore[i] /= m;
。
在计算每门课程的平均成绩时,应该使用除法运算符/
而不是赋值运算符=
。改为avgScore[j] /= n;
。
在统计高于每门课程平均成绩的学生人数时,应该将判断条件放在内层循环之外。改为在内层循环结束后判断if (flag1 == m)
。
在输出学生平均成绩和课程平均成绩时,应该使用%f
格式说明符而不是%lf
。改为printf("%.2f\n", sudScore[i]);
和printf("%.2f\n", avgScore[j]);
。
在每次输入学生成绩前,应该先清空输入缓冲区。可以使用fflush(stdin)
或while (getchar() != '\n')
来清空输入缓冲区。
在每次输入学生成绩前,应该先判断输入是否成功。可以使用if (scanf_s("%d", &a[i][j]) != 1)
来判断输入是否成功。
以上是我发现的一些错误和潜在问题,你可以根据需要进行修正。