c语言中的Nxn矩阵

#includeiostream.h

void main()

{

int n,N,I,j,* * a;

cout " N =

cinN

A=new int* input odd n output nXn方阵c语言 在VC++6.0下运行过,没有问题。

#包含“stdio.h”

主()

{

int n,I,j,x,y;

for(;;)

{

Printf("输入奇数n:\ n ");

scanf("%d ",n);

if(n%2!=1) printf("您输入的是奇数,请重新输入:\ n ");

else break

}

x = y = n/2;

for(I = 0;在;我)

{

for(j = 0;jn;j)

{

if(j = = ABS(x)| | j = = nN];

for(n=0;nN;)

a[n]=new int[N];

int mk1=0,mk2=0;

for(n=1,i=0,j=0;n=N*N;){

a[i][j]=n;

if(i==0jN-1mk1==0){

j ;

mk1 ;

mk2=0;

n ;

continue;

}

if(j==0iN-1mk2==0){

i ;

mk2 ;

mk1=0;

n ;

continue;

}

if(i==N-1mk1==1){

j ;

mk2 ;

mk1=0;

n ;

continue;

}

if(j==N-1mk2==1){

i ;

mk1 ;

mk2=0;

n ;

continue;

}

if(mk1==1){

i ;

j--;

n ;

continue;

}

if(mk2==1){

i--;

j ;

n ;

continue;

}

}

for(int m=0;mN;m ){

for(int n=0;nN;n ){

couta[m][n]" ";

if(n==N-1)

coutendl;

}

}

for(n=0;nN;n )

delete[] a[n];

delete[] a;

}

大概就是这么个样吧,你试试

C语言:从键盘输入n(n=3,5,7,9),屏幕输出nxn矩阵,且每行每列及两对角线之和均相等,并输出和。咋写?

考虑到空间效率,代码用动态二维数组解决——

代码文本:

#include "stdio.h"

#include stdlib.h

int main(int argc,char *argv[]){

char *q,**p,n,i,j,k,t;

int sum;

printf("Enter n(int n=3,5,7,9)...\nn=");

if(scanf("%d",n)==1 (n==3 || n==5 || n==7 || n==9)){

q=(char *)malloc(sizeof(char)*n*n);

if(q (p=(char **)malloc(sizeof(char *)*n))){

for(p[0]=q,i=1;in;p[i ]=p[i-1] n);//组织成n*n二维数组

for(t=n*n,i=0;it;q[i ]=0);//二维数组清0

for(t ,i=0,j=n--1,k=1;kt;p[i--][j ]=k ){//填矩阵

if(i==-1 jn)//if...else if...是填充算法

i =2,j--;

else if(i==-1)

i=n;

else if(jn)

j=0;

else if(p[i][j])

i =2,j--;

}

for(sum=i=0;i=n;i ){

for(j=0;j=n;printf("=",p[i][j ]));

putchar('\n');

sum =p[i][0];

}

free(q);

free(p);

printf("The SUM is %d\n",sum);

}

else{

printf("Application memory failure, exit...\n");

if(q)

free(q);

if(p)

free(p);

}

}

else

printf("Input error, exit...\n");

return 0;

}

(有好几种结果,这是其中之一)

-[ABS(nN];

for(n=0;nN;)

a[n]=new int[N];

int mk1=0,mk2=0;

for(n=1,i=0,j=0;n=N*N;){

a[i][j]=n;

if(i==0jN-1mk1==0){

j ;

mk1 ;

mk2=0;

n ;

continue;

}

if(j==0iN-1mk2==0){

i ;

mk2 ;

mk1=0;

n ;

continue;

}

if(i==N-1mk1==1){

j ;

mk2 ;

mk1=0;

n ;

continue;

}

if(j==N-1mk2==1){

i ;

mk1 ;

mk2=0;

n ;

continue;

}

if(mk1==1){

i ;

j--;

n ;

continue;

}

if(mk2==1){

i--;

j ;

n ;

continue;

}

}

for(int m=0;mN;m ){

for(int n=0;nN;n ){

couta[m][n]" ";

if(n==N-1)

coutendl;

}

}

for(n=0;nN;n )

delete[] a[n];

delete[] a;

}

大概就是这么个样吧,你试试

C语言:从键盘输入n(n=3,5,7,9),屏幕输出nxn矩阵,且每行每列及两对角线之和均相等,并输出和。咋写?

考虑到空间效率,代码用动态二维数组解决——

代码文本:

#include "stdio.h"

#include stdlib.h

int main(int argc,char *argv[]){

char *q,**p,n,i,j,k,t;

int sum;

printf("Enter n(int n=3,5,7,9)...\nn=");

if(scanf("%d",n)==1 (n==3 || n==5 || n==7 || n==9)){

q=(char *)malloc(sizeof(char)*n*n);

if(q (p=(char **)malloc(sizeof(char *)*n))){

for(p[0]=q,i=1;in;p[i ]=p[i-1] n);//组织成n*n二维数组

for(t=n*n,i=0;it;q[i ]=0);//二维数组清0

for(t ,i=0,j=n--1,k=1;kt;p[i--][j ]=k ){//填矩阵

if(i==-1 jn)//if...else if...是填充算法

i =2,j--;

else if(i==-1)

i=n;

else if(jn)

j=0;

else if(p[i][j])

i =2,j--;

}

for(sum=i=0;i=n;i ){

for(j=0;j=n;printf("=",p[i][j ]));

putchar('\n');

sum =p[i][0];

}

free(q);

free(p);

printf("The SUM is %d\n",sum);

}

else{

printf("Application memory failure, exit...\n");

if(q)

free(q);

if(p)

free(p);

}

}

else

printf("Input error, exit...\n");

return 0;

}

(有好几种结果,这是其中之一)

-[y))printf(" 1 ");

else printf(" 0 ");

}

x-;

y;

printf(" \ n ");

}

}

相关文章

发表新评论