echo76
20
2021-03-15 01:35:30 작성 2021-03-15 03:17:54 수정됨
1
142

추가한 함수의 매개변수에 관해서 질문드립니다.



메인함수 외에 추가한 함수가 의도한대로 되지않아 질문드립니다.

#include<stdio.h>

struct terms {
	int x;
	int y;
};

int compare(int a, int b) {
	if (a > b) {
		return 1;
	}
	else if (a == b) {
		return 2;
	}
	else if (a < b) {
		return 3;
	}
}

int insert(int a, int b, int c, int d) {
	c = a;
	d = b;
	
	return 0;
}

int main()
{
	struct terms p1[12] = { {p1[0].x = 3, p1[0].y = 5}, {p1[1].x = 2, p1[1].y = 3}, {p1[2].x = 2,p1[2].y = 0}, {p1[3].x = 4, p1[3].y = 4}, {p1[4].x = 5, p1[4].y = 3}, {p1[5].x = 2,p1[5].y = 1} };

	int as = 0;
	int ae = 2;
	int bs = 3;
	int be = 5;
	int cs = 6;
	int ce = cs - 1;
	int sum = p1[as].x + p1[bs].x;
	
	while (as <= ae && bs <= be) {
		switch (compare(p1[as].y, p1[bs].y))
		{
		case 1 :
			insert(p1[as].x, p1[as].y, p1[cs].x, p1[cs].y);
			as = as + 1;
			cs = cs + 1;
			break;
		case 2 :
			insert(sum, p1[as].y, p1[cs].x, p1[cs].y);
			as = as + 1;
			bs = bs + 1;
			cs = cs + 1;
			break;
		case 3 :
			insert(p1[bs].x, p1[bs].y, p1[cs].x, p1[cs].y);
			bs = bs + 1;
			cs = cs + 1;
			break;
		}
	}
	for (int i = as; i <= ae; i++) {
		insert(p1[as].x, p1[as].y, p1[cs].x, p1[cs].y);
		as = as + 1;
		cs = cs + 1;
	}
	for (int i = bs; i <= be; i++) {
		insert(p1[bs].x, p1[bs].y, p1[cs].x, p1[cs].y);
		bs = bs + 1;
		cs = cs + 1; 
	}
	for (int i = 0; i < 12; i++) {
		printf("%d ", p1[i].x);
	}
	printf("\n");
	for (int i = 0; i < 12; i++) {
		printf("%d ", p1[i].y);
	}
}


이렇게 했을때 결과는 아래처럼 나왔습니다.


3 2 2 4 5 2 0 0 0 0 0 0
5 3 0 4 3 1 0 0 0 0 0 0



#include<stdio.h>

struct terms {
	int x;
	int y;
};

struct terms p1[12] = { {p1[0].x = 3, p1[0].y = 5},{p1[1].x = 2, p1[1].y = 3}, {p1[2].x = 2,p1[2].y = 0},{p1[3].x = 4, p1[3].y = 4}, {p1[4].x = 5, p1[4].y = 3}, {p1[5].x = 2,p1[5].y = 1} };

int compare(int a, int b) {
	if (a > b) {
		return 1;
	}
	else if (a == b) {
		return 2;
	}
	else if (a < b) {
		return 3;
	}
}

int insert(int a, int b, int c) {
	p1[c].x = a;
	p1[c].y = b;
	
	return 0;

}

int main()
{
	int as = 0;
	int ae = 2;
	int bs = 3;
	int be = 5;
	int cs = 6;
	int ce = cs - 1;
	int sum = p1[as].x + p1[bs].x;
	
	while (as <= ae && bs <= be) {
		switch (compare(p1[as].y, p1[bs].y))
		{
		case 1 :
			insert(p1[as].x, p1[as].y, cs);
			as = as + 1;
			cs = cs + 1;
			break;
		case 2 :
			insert(sum, p1[as].y, cs);
			as = as + 1;
			bs = bs + 1;
			cs = cs + 1;
			break;
		case 3 :
			insert(p1[bs].x, p1[bs].y, cs);
			bs = bs + 1;
			cs = cs + 1;
			break;
		}
	}
	for (int i = as; i <= ae; i++) {
		insert(p1[as].x, p1[as].y, cs);
		as = as + 1;
		cs = cs + 1;
	}
	for (int i = bs; i <= be; i++) {
		insert(p1[bs].x, p1[bs].y, cs);
		bs = bs + 1;
		cs = cs + 1; 
	}
	for (int i = 0; i < 12; i++) {
		printf("%d ", p1[i].x);
	}
	printf("\n");
	for (int i = 0; i < 12; i++) {
		printf("%d ", p1[i].y);
	}
}


그래서 위처럼 구조체 terms p1[12]int insert 부분을 수정했는데 의도한대로 나왔습니다. 


3 2 2 4 5 2 3 4 7 2 2 0
5 3 0 4 3 1 5 4 3 1 0 0


int insert 부분이 의도한대로 되지않은것이 매개함수를 많이 사용해서 안된것인지 아니면 어떻게 잘못사용해서 안된것인지 궁금해 질문을 올리게 되었습니다.

설명이 부족했습니다...) 2차원구조체terms의 x를 계수, y를 지수로 하여 방정식의 합을 표현하려고 했습니다.   그래서 p1[0] ~ p1[2]까지 a방정식, p1[3] ~ p1[5]까지 b방정식으로 하고 a와 b의 합을 지수(y)에 따라 p1[6]부터 순서대로 넣으려고했는데 int insert 부분이 생각한대로 되지않아 질문드립니다.


0
  • 답변 1

  • 장독깨기
    4k
    2021-03-15 03:02:06
    int insert(int a, int b, int c, int d) {
    	c = a;
    	d = b;
    	
    	return 0;
    }

    int insert(int a, int b, int* c, int*d) {

      *c = a;

      *d = b;

    }

    c는 call by value 입니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.