c语言,输入2门课3个人的成绩,求每门课的平均成绩,最高分和最低分
#define N 2
#define M 3
#include<stdio.h>
void main()
{
int i,j,max[M],s,v[M],min[M],a[N][M];
for(i=0;i<N;i++)
for(j=0;j<M;j++){
scanf("%lf",&a[i][j]);}
for(j=0;j<M;j++)
{
for(i=0;i<N;i++)
s=s+a[i][j];
v[j]=s/N;
s=0;
}
for(j=0;j<M;j++)
printf("%d\n",v[j]);
for(i=0;i<N;i++){
max[i]=min[i]=a[i][j];
for(j=0;j<M;j++){
if(max[i]<a[i][j])
max[i]=a[i][j];
if(min[i]>a[i][j])
min[i]=a[i][j];
}
}
printf("最大数=%d\n",a[i][j]);
printf("最小数=%d\n",a[i][j]);
}
答案:1、你的s没有初值;
2、语句在循环内还是循环外,位置有问题
3、另外,看你的程序求的是每行(每个学生的三科成绩)中的最高分,而不是每门课的最高分,行数只有2行,但是你的max和min数组却是3个元素,逻辑上就出问题了(不会出现编译错误,因为两个数组的元素个数比程序要求的2个更多所以你运行结果会只有2个);你本来是想算每门课的最高最低分吧?要改一下程序;
4、你可能在程序中输入的字符有问题(要注意输入法)。
以下程序只做了轻微修改,不会报错,有运行结果,但非预期。
5.你的a[N][M]数组声明是是int型,可是输入值时用的是“lf”长浮点型,有问题
#define N 2
#define M 3
#include<stdio.h>
void main()
{
int i,j,max[M],s=0,v[M],min[M],a[N][M]; //s初值;
for(i=0;i<N;i++)
for(j=0;j<M;j++){
scanf("%lf",&a[i][j]);}
for(j=0;j<M;j++)
{
for(i=0;i<N;i++)
s=s+a[i][j];
v[j]=s/N;
s=0;
}
for(j=0;j<M;j++)
printf("%d\n",v[j]);
for(i=0;i<N;i++){
max[i]=min[i]=a[i][j]; //此时的j是多大,已经是3了吧?应改为
//max[i]=min[i]=a[i][0];吧?
for(j=0;j<M;j++){
if(max[i]<a[i][j])
max[i]=a[i][j];
if(min[i]>a[i][j])
min[i]=a[i][j];
}
printf("最大数=%d\n",max[i]);
printf("最小数=%d\n",min[i]);
}
}
正确的程序代码我认为应该是:
#define N 2
#define M 3
#include<stdio.h>
void main()
{
int i,j,s=0;
int max[M],v[M],min[M],a[N][M];
for(i=0;i<N;i++)
for(j=0;j<M;j++){
scanf("%d",&a[i][j]);}
for(j=0;j<M;j++)
{
for(i=0;i<N;i++)
s=s+a[i][j];
v[j]=s/N;
s=0;
}
for(j=0;j<M;j++)
printf("%d\n",v[j]);
for(j=0;j<M;j++){
max[j]=min[j]=a[0][j];
for(i=0;i<N;i++){
if(max[j]<a[i][j])
max[j]=a[i][j];
if(min[j]>a[i][j])
min[j]=a[i][j];
}
printf("max=%d\n",max[j]);
printf("min=%d\n",min[j]);
}
}
你把这些代码复制到编辑器中运行一下,没问题了。^_^
其他:for(j=0;j<M;j++)
{
for(i=0;i<N;i++)
s=s+a[i][j];
v[j]=s/N;
s=0;
}
for(j=0;j<M;j++)
printf("%d\n",v[j]);
输出的是每个人的平均成绩,而不是每门课的,把所有的M替换成N,N替换成M就对了。
上一个:如何使用c在文件内查找一个字符串?
下一个:c语言问题