C言語で配列を関数パラメータとして渡す方法

2041 ワード

今日c言語の配列を復習して、このような問題を見ました.
今、あなたのプログラムは2つの多項式を読み込んで、この2つの多項式の和を出力します.つまり、対応するべき乗の係数を加算して出力します.
プログラムが処理するべき乗は最大100です.
入力形式:
合計2つの多項式を入力します.各多項式の入力形式は次のとおりです.
各行に2つの数値を入力します.1番目はべき乗、2番目はそのべき乗を表す係数で、すべての係数は整数です.最初の行は必ず最高べき乗で、最後の行は必ず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
最初は、現在のユーザーが入力したデータを2次元配列で格納し、この2次元配列を巡って多項式係数を2つの1次元配列にべき乗の高さから低さまで挿入するアルゴリズムを考えました.1次元配列の序数はべき乗を表し、ユーザーが入力していない項目係数は0で、2つの1次元配列は和を求め、結果は出力されます.
しかし、実際に書くとmainは何度もforを行うことに気づきました.1つは面倒で、2つはコードの品質が高くないので、1つの関数を書いて2次元配列の検索と挿入をしたいと思っていましたが、配列はどのように関数パラメータとしてパラメータを伝達しますか?
本を調べると,配列名を実パラメータとするだけで,関数は配列を形パラメータとして宣言するだけでパラメータ伝達が可能であり,パラメータ伝達を行う場合,配列名はポインタに相当し,関数は形パラメータにメモリ空間を開くのではなく実パラメータ配列とメモリユニットを共用することが分かった.
コードは次のとおりです.
#include 
#include 

/* 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
"); } 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]; } } }