當前位置:首頁 » 編程語言 » c語言輸出n階單位矩陣
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言輸出n階單位矩陣

發布時間: 2023-02-02 20:28:45

❶ 用c語言怎樣輸出一個N階蛇形矩陣

先說思想:N=4時候和N=5的時候前面4條斜線上三角是相同的!所以這個可以用遞歸做。還有個規律很重要就是當2個數的橫縱坐標和都是N+1的時候這2個值的和都是N*N+1!問題就很容易解決了!
寫個大概:
int **array=NULL;
void main()
{
int n;
scanf("%d",&n);
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
array[i]=(int *)malloc(n*sizeof(int));
}
Testingval(n,n);
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
printf("%d ",array[i][j]);
printf("\n");
}
free(array);
}
int Testingval(int a,int n)//a 表示n行中的第幾個。。n表示是N界矩陣!
{ if(n==1)
{ array[0][0]==1;
array[n][n]=n*n;
}
else
Testingval(a-1,n);
if(a%2)
{ int i=1;
array[0][a-1]=array[0][a-2]+1;
array[n-1][n-a]=n*n+1-array[0][a];
while(i<a)
{

array[i][a-1-i]=array[i-1][a-i+1]+1;
array[n-1-i][n-a+i]=n*n+1-array[i][a-i];
i++;
}
}
else
{int i=1;
array[a-1][0]=array[a-2][0]+1;
array[n-a][n-1]=n*n+1-array[a-1][0];
while(i<a)
{

array[a-1-i][i]=array[a-i+1][i-1]+1;
array[n-a+i][n-1-i]=n*n+1-array[a-1-i][i];
i++;
}
}

}
}

❷ 用C語言輸出一個N階蛇形矩陣,看看這個程序哪裡錯了

又仔細看了一遍你的代碼DEBUG了一下發現你是先輸出左上半的元素然後計算右半部的直接順序輸出數組乍一看是沒問題的但是你忽略的是輸出的前提是必須先計算好值你遍歷輸出到第2行第一個右半部分的元素的時候這個元素還沒有開始計算呢而在你的程序里並沒有察覺到這點而是直接輸出了所以那裡就是0了其他0元素也是這樣在被計算之前就輸出了

避免你說的問題你可以把輸出挪出剛開始用來賦值的兩個FOR循環即可

直接修改你的代碼

#include<stdio.h>

#defineSIZE80

inta[SIZE][SIZE];

voidmain()

{intp,q;intn;

printf("輸入蛇形數組的維數:");

scanf("%d",&n);

for(p=0;p<n;p++)

{

for(q=0;q<n;q++)

{

if((p+q)<n)

{

a[p][q]=(p+q)*(p+q+1)/2+1;

if((p+q)%2)

a[p][q]+=q;

else

a[p][q]+=p;

a[n-1-p][n-1-q]=n*n+1-a[p][q];

}

}

}

for(p=0;p<n;p++)

{

for(q=0;q<n;q++)printf("%4d",a[p][q]);

printf(" ");

}

getchar();getchar();

}

經過編譯完全OK

❸ c語言給出一個N階數字矩陣,求其邊上數字的和。

這個樣子你試一下:

#include "stdio.h"

int number[1000][1000];

int main()

{ int n;

scanf("%d",&n);

for(int i=0; i<n; ++i)

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

{ scanf("%d",&number[i][j]);

}

}

int sum=0;

for(int k=0; k<n; ++k)

{ if(n==1)

{ sum=sum+number[0][0];

}

else

{ sum=sum+number[0][k]+number[n-1][k];

}

}

for(int f=1; f<n-1; ++f)

{ sum=sum+number[f][0]+number[f][n-1];

}

printf("%d ",sum);

return 0;

}

❹ 用c語言設計一n階方陣!急!!

#include <stdio.h>
#include<malloc.h>
void matrix(int x,int y) //這里都是向一個方向發展的。
{
int **a;
a = (int **)malloc(x*sizeof(int)); //分配空間。
int num = x+y-1;
int k;
for(k=0;k<x;k++)
{
a[k] = (int *)malloc(y*sizeof(int));
}
int i;
int j;
int start=1; //從1開始的。元素的起始值。
for(k=0;k<num;k++)
{
for(i=0;i<y;i++) //這是列坐標,因為列是在行變後才變的。
{
for(j=0;j<x;j++) //這是行坐標。
{
if(i+j == k)
{
a[j][i] = start;
//printf("%d\n",a[j][i]);
start++;
}
}
}
//printf("k=%d\n",k);
}
for(i=0;i<x;i++) //輸出矩陣。
{
for(j=0;j<y;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
for(k=0;k<x;k++) //釋放空間。
{
free(a[k]);
}
free(a);
}
int main()
{
int n;
printf("please input (1-9):\n");
scanf("%d",&n);
matrix(n,n);
printf("\n");
matrix(3,5);
getchar();
getchar();
return 0;
}

❺ 用c語言編寫一個n階矩陣

#include<stdio.h>
#include<stdlib.h>

int main()
{
int n,**p,i,j;
scanf("%d",&n);
p=new int*[n];
for(i=0;i<n;i++)
{
p[i]=new int[n];
for(j=0;j<n;j++) scanf("%d",&p[i][j]);
}

for(i=0;i<n;i++)
{
printf("%d",p[i][0]);
j=1;
while(j<n)
{
printf(" %d",p[i][j]);
j++;
}
printf("\n");
}
return 0;
}

❻ c語言中的n階方陣怎嘛做

C語言中int型的數值非常的小,最大的范圍也只在[-2^31 , 2^31 -1],所以使用int類型最大隻能表示13的階乘而已,使用范圍更大的double才是王道。

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i,n,flg;
double num=1;
printf("please enter the times:");
//循環次數
scanf("%d",&flg);
printf("\n\n");
while(flg){
num=1;
printf("please enter the num:");
scanf("%d",&n);
for(i=1;i<=n;i++){
num *= i;
}
printf("factorial = %f\n\n",num);
flg--;
}
}

❼ C語言.鍵盤輸入n階的方陣,請輸出該矩陣各列元素的和,以及兩條對角線上各個元素之和。

#include <stdio.h>
int main()//矩陣對角線
{
int a[3][3]={1,2,55,4,5,6,20,8,17},i,j,tp=0;// 1 2 55
for(i=0;i<=2;i++) // 4 5 6
{ // 20 8 17 23 80

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

}
printf("%d\n",tp);
tp=0;
for(i=0;i<=2;i++)
{
j=2-i;
tp+=a[i][j];

}
printf("%d",tp);
/*再加個sum[i]的循環計算各列的和,應該簡單的,自己思考一下。
那個N階呢,只要那33改一個,下面的循環里的條件改一下就可以了*/

return 0;
}

❽ 急求!如何用C語言輸出如下矩陣(N*N)

題目要求有一個問題,它要求N最小為2,卻要求N為奇數,N為奇數應該最小為3或1才對.

按照題目要求編寫的C語言矩陣程序如下

#include<stdio.h>

int main(){

int i,j,k,N,count=1;

scanf("%d",&N);

if(N<=2 || 15<N || N%2==0){

printf("請輸入小於等於15且大於2的奇數");

}else{

int a[N][N];

for(i=N/2;i>=0;i--){

k=N-i-1;

for(j=N-i-2;j>=i;j--){

a[j][k]=count++;

}

for(j=N-i-2;j>=i+1;j--){

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

}

for(j=i;j<N-i;j++){

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

}

for(j=i+1;j<N-i;j++){

a[k][j]=count++;

}

}

for(i=0;i<N;i++){

for(j=0;j<N;j++){

printf("%-5d",a[i][j]);

}

printf(" ");

}

}

return 0;

}