当前位置:编程学习 > C/C++ >>

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语言问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,