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<iostream>
using namespace std;
int main()
{
int sum=0;
int n=0;
int**array;//指向整型的指针的指针.
cout<<"请输入矩阵的维数:"<<endl;
cin>>n;
array=new int*[n];//存放指针的数组.
for(int k=0;k<n;k++)
{
array[k]=new int[n];//指向一个整型数组.
}
cout<<"请输入n*n个值:"<<endl;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>array<i>[j];
cout<<array<i>[j]<<"";
}
cout<<endl;
}
for(int i=0;i<n;i++)
sum+=array<i><i>;
cout<<"两条对角线元素之和为:"<<sum<<endl;
system("pause");
return 0;
}
扩展资料:
函数名:system
功能:发出一个DOS命令
用法:int system(char*command);
程序例:
#include<stdlib.h>
#include<stdio.h>
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=亮白色
参考资料:
求一个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循环将该矩阵的主对角线上的元素相加,然后输出结果。
#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;
}
运行样例:
直接给程序吧:
#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归零,然后计算下一组。所以,不要纠结哪一句错了,也不要说到哪里都是正确的,你完全无法保证你程序的正确。结构本身有问题,算法有问题。
我先问你 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为偶数的时候