C语言:编写程序,求一个n×n矩阵对角线元素之和。

输入:有多组数据。
每组数据的第1行为一个整数n(3<n<10),然后连续n行为n×n矩阵。
输出:每个矩阵的主对角和副对角线上元素的和。
#include<stdio.h>
#define N 10
int main()
{ int i,j,n,s;
int a[N][N];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
printf("%d ",a[i][j]);
}
printf("\n");
}
}
while(n%2==0)
{ for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) s+=a[i][j];
for(i=0,j=n;i<n,j<n;i++)
s+=a[i][j];
j--;
printf("%d\n",s);
}
while(n%2!=0)
{ for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) s+=a[i][j];
for(i=0,j=n;i<n,j<n;i++,j--)
s+=a[i][j];
s=s-a[n/2+1][n/2+1];
printf("%d\n",s);
}

return 0;
}请帮我看一下哪里错了!!!急!!第二个while语句之前应该是没有问题的。

代码:

#include&lt;iostream&gt;

using namespace std;

int main()

{

int sum=0;

int n=0;

int**array;//指向整型的指针的指针.

cout&lt;&lt;"请输入矩阵的维数:"&lt;&lt;endl;

cin&gt;&gt;n;

array=new int*[n];//存放指针的数组.

for(int k=0;k&lt;n;k++)

{

array[k]=new int[n];//指向一个整型数组.

}

cout&lt;&lt;"请输入n*n个值:"&lt;&lt;endl;

for(int i=0;i&lt;n;i++)

{

for(int j=0;j&lt;n;j++)

{

cin&gt;&gt;array&lt;i&gt;[j];

cout&lt;&lt;array&lt;i&gt;[j]&lt;&lt;"";

}

cout&lt;&lt;endl;

}

for(int i=0;i&lt;n;i++)

sum+=array&lt;i&gt;&lt;i&gt;;

cout&lt;&lt;"两条对角线元素之和为:"&lt;&lt;sum&lt;&lt;endl;

system("pause");

return 0;

}

扩展资料:

函数名:system

功能:发出一个DOS命令

用法:int system(char*command);

程序例:

#include&lt;stdlib.h&gt;

#include&lt;stdio.h&gt;

int main(void)

{

printf("About to spawn and run a DOS command\n");

system("dir");

return 0;

}

如:system("pause")可以实现冻结屏幕,便于观察程序的执行结果;system("CLS")可以实现清屏操作。而调用color函数可以改变控制台的前景色和背景,具体参数在下面说明。

例如,用system("color 0A");其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:

0=黑色1=蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7=白色8=灰色9=淡蓝色A=淡绿色B=淡浅绿色C=淡红色D=淡紫色E=淡黄色F=亮白色

(注意:Microsoft Visual C++6.0支持system)

颜色属性由两个十六进制数字指定--第一个对应于背景,第二个对应于前景。每个数字

可以为以下任何值:

0=黑色8=灰色

1=蓝色9=淡蓝色

2=绿色A=淡绿色

3=浅绿色B=淡浅绿色

4=红色C=淡红色

5=紫色D=淡紫色

6=黄色E=淡黄色

7=白色F=亮白色

参考资料:

百度百科——system(函数)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-07

求一个n×n矩阵对角线元素之和的源代码如下

public class lianxi28 { 

public static void main(String[] args) {

System.out.println("请输入九个整数:");

Scanner in = new Scanner(System.in);

int[][] a = new int[3][3];

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

a[i][j]=in.nextInt();

}

}

System.out.println("你输入的n×n矩阵是:");

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

System.out.print(a[i][j]+" ");

}

System.out.println();

}

System.out.println();

int sum=0;

for(int i=0;i<3;i++){

for(int j=0;j<3;j++){

if(i==j){

sum=sum+a[i][j];

}

System.out.println(sum);

}

扩展资料

1、用arrange生成一个数组,元素为0,1,...,8,然后利用reshape生成一个n×n的矩阵。

2、利用for循环将该矩阵的主对角线上的元素相加,然后输出结果。

本回答被网友采纳
第2个回答  2017-12-17
#include "stdio.h"
#define N 10
int main(int argv,char *argc[]){
int i,j,n,s;
int a[N][N];
printf("Input n(int 3<n<10, letter end)...\n");
while(s=0,scanf("%d",&n)==1){
if(n<4 || n>9){
printf("Input error, exit...\n");
return 0;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
printf("%d\t",a[i][j]);
if(i==j || i==n-j-1)//输入时这里顺便就求和了
s+=a[i][j];
}
printf("\n");
}
printf("The result: %d\n",s);
printf("\nInput n(int 3<n<10, letter end)...\n");
}
return 0; 
}

运行样例:

第3个回答  2017-12-17

直接给程序吧:

#include <stdio.h>
#define N 10
int main(){
int i,j,n=1,k=0,s=0,a[100],b[10][10];
while(n)
{
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
if(i==j||i+j==n-1)
s+=b[i][j];
}
a[k]=s;k++;s=0;
}
for(i=0;i<k-1;i++)
printf("%d\n",a[i]);
return 0;
}

以上为本题的程序代码。C语言中,并不是某一句或几句只要不报错,就一定正确,也不是只要通过编译就正确,语句符合C语言要求是基本要求,关键是算法无误。往往初学者感觉写得差不多了,其实基本全错。

你的程序,分类讨论很怪异,而且没有针对每个输入,最后统一输出,而且,s是计算对角线元素值,计算完一组后要输出,s归零,然后计算下一组。所以,不要纠结哪一句错了,也不要说到哪里都是正确的,你完全无法保证你程序的正确。结构本身有问题,算法有问题。

本回答被网友采纳
第4个回答  2017-12-17

我先问你 while(n%2==0)是要干什么

你while()里面写这个就实现功能了啊

    while(scanf("%d",&n) != EOF)
    {
        s = 0;        //    s 初始化为 0 
        for(i = 0; i < n; i++)
        { 
            for(j = 0; j < n; j++)
            {
                scanf("%d", &a[i][j]);
                if(i == j)
                    s += a[i][j]; 
                //printf("%d ",a[i][j]);
            }
            //printf("\n");
        }
        printf("sum = %d\n", s);
    }

追问

当n为偶数的时候

本回答被提问者采纳
相似回答