iT邦幫忙

0

請問大神要怎麼把二維陣列丟入副程式裡執行,以這裡為例。

  • 分享至 

  • xImage

#include <stdio.h>
#include <stdlib.h>
int N;
void function(int array[][],int k){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
array[k][l]=k;
k++;
}
}
}

int main(){

scanf("%d",&N);
int square[N][N]={0};

function(&square,1);

int k,l;
for(k=0;k<N;k++){
	for(l=0;l<N;l++){
		printf("%2d ",square[k][l]);
	}
	printf("\n");
}

}

想把迭代轉遞迴但二維陣列傳入副程式格式不知道怎麼用卡住了。這篇只是在試用法。
#include <stdio.h>
#include <stdlib.h>

int main(){
int N;
printf("輸入魔方邊長:");
scanf("%d",&N);

int square[N][N]={0};
int i=-1,j=(N-1)/2;
int num;

for(num=1;num<=N*N;num++){
if((num % N) == 1){
i++;
}
else {
i--;
j++;
}
if(j>N-1){
j=0;
}
if(i<0){
i=N-1;
}
square[i][j]=num;
}

int k,l;

for(k=0;k<N;k++){
for(l=0;l<N;l++){
printf("%2d ",square[k][l]);
}
printf("\n");
}
}
這是迭代的樣子。
#include <stdio.h>
#include <stdlib.h>
int N;

void function(int array[][],int k,int n,int m){
if(k>N*N){
return;
}
else{
int i=n,j=m;
if((k%N)==1){
i++;
}
else{
i--;
j++;
}

if(j>N-1){
j=0;
}
if(i<0){
i=N-1;
}
array[i][j]=k;

function(array,k+1,i,j);
}
}

int main(){

while(1){
printf("輸入5~9的奇數:");
scanf("%d",&N);
if(N>9 || N<5 || N%2==0){
printf("\n不符合規定的輸入。\n\n");
}
else{
break;
}
}
int square[N][N]={0};

function(square,1,-1,(N-1)/2);

int k,l;
for(k=0;k<N;k++){
for(l=0;l<N;l++){
printf("%2d ",square[k][l]);
}
printf("\n");
}


}
這是遞迴的樣子。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-19 09:02:06

在 C 語言中,二維陣列是透過一維陣列模擬而成,因此在傳遞至副程式中時,需要特別處理。可以使用指標的方式將二維陣列的地址傳遞至副程式中。以下是修改後的範例程式:

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

void function(int (*array)[], int N, int k){
int i,j;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
array[k][j]=k;
k++;
}
}
}

int main(){
int N;
scanf("%d",&N);
int square[N][N]={0};
function(square, N, 1);
int k,l;
for(k=0;k<N;k++){
for(l=0;l<N;l++){
printf("%2d ",square[k][l]);
}
printf("\n");
}
return 0;
}

請注意到,我們在副程式 function 中,透過 (int (*array)[]) 這樣的宣告方式,告訴編譯器,這是一個指標,指向一個二維陣列。

在 main 函式中,我們需要將 N 和 square 陣列的地址傳遞至 function 函式中。因此,我們將 square 陣列直接傳入函式,並且在 function 函式中,用 N 來代表陣列的大小。

我要發表回答

立即登入回答