求教!!!江湖救急啊!!!拜托各位大佬了!!!

爱学习的小白猿 2017-11-19 10:48:47
输入一个4x4的数组,求各行各列的和以及两条对角线的和,以5x5矩阵输出,要求把两条对角线的和放到第5行第5列
下面是我写的程序,有错误的,请各位帮忙看看该怎么改!拜托了!!!【抱拳了老铁】
#include<stdio.h>
int main()
{
float a[5][5];
int i,j,n;
float sum1=0,sum2=0,sum3=0,sum4=0,sum=0;
for(i=0,n=1;i<4&&n<17;i++)
{
for(j=0;j<4;j++)
{
scanf("%f ",a[i][j]);
n++;
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
sum3+=a[i][j];
a[i][4]=sum3;
}
printf("%f",a[i][4]);
printf("\n");
}
for(j=0;j<4;j++)
{
for(i=0;i<4;i++)
{
sum4+=a[0][j];
a[4][j]=sum4;
}
}
printf("%f",a[4][j]);
for(i=0;j>=0&&i+j==3;i++)
{
sum1+=a[i][i];
sum2+=a[i][j];
sum=sum1+sum2;
a[4][4]=sum;
}
printf("%f",a[4][4]);
printf("\n");
return 0;
}
...全文
287 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wodexiaojidan 2017-12-15
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(void)
{
	float a[5][5] = {0.0f};

	int i, j;
	for(i = 0; i < 4; ++i){
		printf("Please enter 4 number now : \n");
		scanf("%f%f%f%f", &a[i][0], &a[i][1], &a[i][2], &a[i][3]);
	}
	printf("Please stop!\n");

	for(i = 0; i < 4; ++i){
		a[4][i] = a[0][i] + a[1][i] + a[2][i] + a[3][i];
		a[i][4] = a[i][0] + a[i][1] + a[i][2] + a[i][3];
	}
	a[i][i] = a[0][0] + a[0][3] + a[1][1] + a[1][2] + 
			  a[2][2] + a[2][1] + a[3][0] + a[3][3];

	for(i = 0; i < 5; ++i){
		for(j = 0; j < 5; ++j){
			printf("%.2f ", a[i][j]);
		}
		printf("\n");
	}

	return 0;
}
Please enter 4 number now : 1 2 3 4 Please enter 4 number now : 2 3 4 5 Please enter 4 number now : 3 4 5 6 Please enter 4 number now : 4 5 6 7 Please stop! 1.00 2.00 3.00 4.00 10.00 2.00 3.00 4.00 5.00 14.00 3.00 4.00 5.00 6.00 18.00 4.00 5.00 6.00 7.00 22.00 10.00 14.00 18.00 22.00 32.00
Friday丶 2017-12-15
  • 打赏
  • 举报
回复
上面那个代码里,注释多了一个空格,应该是在12行,写错了。 按照你的思路更改好的代码是:

#include<stdio.h>
int main()
{
float a[5][5];
int i,j,n;
float sum1=0,sum2=0,sum3=0,sum4=0,sum=0;

for(i=0,n=1;i<4&&n<17;i++)        //    输入
{
for(j=0;j<4;j++)
{
scanf("%f",&a[i][j]);
n++;
}
}       
                  

for(i=0;i<4;i++)                  //   sum3、sum4分别作为行和和列和,改动的地方是:在二重循环里加入了sum3=0和sum4=0,为了给每一行或者每一列求和之后将其置0;
{
for(j=0,sum3=0;j<4;j++)
{
sum3+=a[i][j];
a[i][4]=sum3;
}
printf("%f",a[i][4]);             
printf("\n");
}                           

for(j=0;j<4;j++)                 
{
for(i=0,sum4=0;i<4;i++)
{
sum4+=a[i][j];
a[4][j]=sum4;
}
printf("%f",a[4][j]);
printf("\n");
}



for(i=0,j=0;i<4;i++,j++)         //输出对角线     改动了循环条件和sum2的值。得到正确结果。
{
sum1+=a[i][j];
sum2+=a[i][3-j];
sum=sum1+sum2;
a[4][4]=sum;
}
printf("%f",a[4][4]);
printf("\n");
return 0;
}


做了一下代码整合。
#include<stdio.h>

int main()
{
float a[5][5],sum1=0,sum2=0,sum3=0,sum4=0,sum=0;;
int i,j;


for(i=0,n=1;i<4;i++)        //    输入
{
for(j=0;j<4;j++)
{
scanf("%f",&a[i][j]);
}
}       

for(i=0;i<4;i++)                  //   sum3、sum4分别作为行和和列和。
{
for(j=0,sum3=0,sum4=0;j<4;j++)
{
sum3+=a[i][j];
a[i][4]=sum3;
sum4+=a[j][i];
a[4][i]=sum4;
}
};

for(i=0,j=0;i<4;i++,j++)         //  计算对角线     
{
sum1+=a[i][j];
sum2+=a[i][3-j];
sum=sum1+sum2;
a[4][4]=sum;
}

for(i=0;i<5;i++)                  //输出
{
	for(j=0;j<5;j++)
	{
	printf("%f ",a[i][j]);
	};
	printf("\n");
}

return 0;
}


Friday丶 2017-12-15
  • 打赏
  • 举报
回复
发错了,我还没编辑完,我一个一个给你解释。还没写完就按了CRTL + ENTER。抱歉。 输入16个数字不够,是因为你scanf那一行,多了个空格,导致最后一个数字需要重新输入。 得不到正确的结果原因之一是,sum2和sum3 多次叠加了。

#include<stdio.h>
int main()
{
float a[5][5];
int i,j,n;
float sum1=0,sum2=0,sum3=0,sum4=0,sum=0;

for(i=0,n=1;i<4&&n<17;i++)        //    输入
{
for(j=0;j<4;j++)
{
scanf("%f ",&a[i][j]);
n++;
}
}       
                  

for(i=0;i<4;i++)                  //   sum3想作为每行的和。
{
for(j=0;j<4;j++)
{
sum3+=a[i][j];
a[i][4]=sum3;
}
printf("%f",a[i][4]);             //这里多了个空格。
printf("\n");
}                           

for(j=0;j<4;j++)                   //  sum4想作为每列的和。  这里有个错误,第5行是a[i][j]。
{
for(i=0;i<4;i++)
{
sum4+=a[i][j];
a[4][j]=sum4;
}
}
printf("%f",a[4][j]);


for(i=0;j>=0&&i+j==3;i++)         //输出对角线   这里循环条件不对,直接不进入循环。
{
sum1+=a[i][i];
sum2+=a[i][j];
sum=sum1+sum2;
a[4][4]=sum;
}
printf("%f",a[4][4]);
printf("\n");
return 0;
}


Friday丶 2017-12-15
  • 打赏
  • 举报
回复
你这代码太乱了。怎么也输出不了5*5的矩阵啊。
  • 打赏
  • 举报
回复
那个地址符加上后运行,不执行
赵4老师 2017-11-21
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
paschen 版主 2017-11-20
  • 打赏
  • 举报
回复
scanf("%f ", a[i][j]) 改成 scanf("%f ", &a[i][j])

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧