1. 程式人生 > >C語言中如何將陣列作為函式引數傳遞

C語言中如何將陣列作為函式引數傳遞

今天覆習到c語言的陣列,看到這麼一個問題:

現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。

程式要處理的冪最大為100。

輸入格式:

總共要輸入兩個多項式,每個多項式的輸入格式如下:

每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的係數,所有的係數都是整數。第一行一定是最高冪,最後一行一定是0次冪。

注意第一行和最後一行之間不一定按照冪次降低順序排列;如果某個冪次的係數為0,就不出現在輸入資料中了;0次冪的係數為0時還是會出現在輸入資料中。

輸出格式:

從最高冪開始依次降到0冪,如:

2x6+3x5+12x3-6x+20

注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的係數為0則不需要有那項。

輸入樣例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

輸出樣例:

4x6+6x5+12x3+12x2+12x+40

開始時想到這麼一個演算法:用二維陣列存放當前使用者輸入的資料,然後遍歷這個二維陣列將多項式係數按冪從高到低分別插入於兩個一維陣列中,其中一維陣列的序數即代表冪次,使用者沒有輸入的項係數為0,兩個一維陣列求和,結果輸出;

但是實際寫的時候發現main會多次進行for,一是太麻煩,二是程式碼質量不高,於是想到寫出一個函式進行二維陣列的搜尋和插入,但是陣列如何作為函式引數進行引數傳遞??

查書發現只需將陣列名作為實參,函式宣告一個數組作為形參即可進行引數傳遞,進行引數傳遞時,陣列名相當於指標,函式不再為形參開闢記憶體空間而與實引數組共用記憶體單元。

程式碼如下:

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void insert(int a[100][2],int a1[100]);

int main(int argc, char *argv[]) {
	int a1[100][2];
	int a2[100];
	int a3[100];
	int i,j;
	for (i=0;i<100;i++)
	{
	    a2[i]=0;
		a3[i]=0;
	}
	insert(a1,a2);
	insert(a1,a3);
	for(i=99;i>0;i--)
	{
		if(a2[i]!=0&&a3[i]!=0)
		{
			a3[i]+=a2[i];
			printf("%dx%d+",a3[i],i);
		}
	}
	if((a3[0]+=a2[0])==0)
	{
		printf("0\n");
	} 
	else
	{
		printf("%d",a3[0]);
	}
	return 0;
}

void insert(int a[100][2],int a1[100])
{
	int i,j;
	int m=1;
	int n=1;
	for(i=0;i<100;i++) 
	{
		for(j=0;j<2;j++) 
		{
			a[i][j]=0;
		}
	}
	for(i=0;m!=0;i++)
	{
		scanf("%d %d",&m,&n);
		a[i][0]=m;
		a[i][1]=n;
	}
	for(i=0;i<100;i++)
	{
		if(a[i][1]!=0)
		{
			a1[a[i][0]]=a[i][1];
		}
	}
}