초기 네이버 기록/과거 공부 기록

씹어먹는 C언어 함수 공부 저장

뜨거운 개발자 2023. 1. 7. 01:17
/* 입력 받은 배열의 10 개의 원소들 중 최대값을 출력 */
#include <stdio.h>
/* max_number : 인자로 전달받은 크기 10 인 배열로 부터 최대값을 구하는 함수 */
int max_number(int *parr);
int main() {
  int arr[10];
  int i;

  /* 사용자로 부터 원소를 입력 받는다. */
  for (i = 0; i < 10; i++) {
    scanf("%d", &arr[i]);
  }

  printf("입력한 배열 중 가장 큰 수 : %d \n", max_number(arr));
  return 0;
}
int max_number(int *parr) {
  int i;
  int max = parr[0];

  for (i = 1; i < 10; i++) {
    if (parr[i] > max) {
      max = parr[i];
    }
  }

  return max;
}/*이게 정답이었다 왜 그럴까 
나는 당연하게도 parr은 포인터니까 포인터를 배열하면 값이 당연하게 안 나온다고 생각했다. 
그래서 포인터에서 값을 꺼내서 써야된다고 생각했는데 그게 아닌가보다. 
어째서 그냥해도 되고 *을 사용해도 되는걸까?*/

포인터가 너무 힘든 전투였다 다시 함수로 간다.

//문제 2
어느날 귀족이 돈벌이가 시원치 않아져서 이전에는 일정하게 10000 달러씩 챙겼지만 
이제 일정치 않은 수입을 얻게 되었습니다. 여러분은 slave 함수를 인자를 2 개를 가져서, 하나는 현재 귀족의 재산, 다른 하나는 오늘 귀족의 수입을 인자로 전달받는 새로운 함수를 만들어 보세요 (난이도 : 下)

#include <stdio.h>
int slave(int my_money ,int income) {
	my_money += 10000;//귀족의 재산
	return my_money;
}

int main() {
	int my_money = 100000;
	int new_money;
	printf("new income:");
	scanf_s("new income:%d", &new_money);
	printf("나의 재산:\%d \n ", slave(my_money, new_money));
	
	return 0;
}
/*문제 3
N 값을 입력 받아서 1 부터 N 까지의 소수의 개수를 출력하는 함수를 제작해보세요. (난이도 : 下)*/
#include <stdio.h>
int sosu_num(int N) {//소수의 숫자를 구하는 함수
	int sum=1;//n은 2포함
	for (int i=3;i<=N;i++) {//i는 3부터 시작해서 N까지 간다.
		for (int k = 2; k <i; k++) {//k는 2부터 시작해서 i-1까지 간다.
			if (i % k == 0) {
				break;
			}
			else if(k==i-1){
				printf(" % d", i);
				sum++;
			}
		}
	
		
	}
	return sum;
}

int main() {
	int number;
	printf("the number:");
	scanf_s("%d", &number);
	printf("the sum: %d", sosu_num(number));
	return 0;
}
//이거 오랜만에 문제를 풀려니까 기억이 안나서 살짝 헤맸다.
/*
특정한 수 N 을 입력받아서 N 을 소인수분해한 결과가 출력되게 해보세요(난이도 : 中)

예) factorize(10); 출력결과: 2 × 5

factorize(180); 출력결과: 2 × 2 × 3 × 3 × 5
*/
#include <stdio.h>
int factorize(int N) {
	for (int i = 2; i <= N; i++) {
		if (N % i == 0) {
			if (i == N) {
				printf("%d", i);
				break;
		}
			printf("%d×", i);
			N = N / i;
				i--; 
		}
		
	}
	return 0;
}
int main() {
	int num;
	printf("숫자 몇을 소인수 분해 하고 싶은가?");
	scanf_s("%d", &num);
	printf("%d의 소인수 분해 결과는:", num);
	factorize(num);
	return 0;

}
//오예 이건 빨리 풀었다.
/* 두 변수의 값을 교환하는 함수 */
#include <stdio.h>

int swap(int* A, int* B) {
	printf("스왑함수 작동을 시작합니다\n");
	int tmp;
	tmp = *A;
	*A = *B;
	*B = tmp;
	return 0;
}
int main() {
	int a, b;
	printf("a:");
	scanf_s("%d", &a);
	printf("b:");
	scanf_s("%d", &b);
	printf("원래 a 와 b의 값은 %d,%d\n", a, b);
	swap(&a, &b);
	printf("스왑함수 후 a와 b의 값은 %d,%d", a, b);

}
/* 입력 받은 배열의 10 개의 원소들 중 최대값을 출력 */
#include <stdio.h>
/* max_number : 인자로 전달받은 크기 10 인 배열로 부터 최대값을 구하는 함수 */
int max_num(int* parr);
int main() {
	int arr[10];
	for (int i = 0; i < 10; i++) {
		printf("%d:",i+1);
		scanf_s("%d",&arr[i]);
	}
	printf("use max_num\n");
	printf("%d", max_num(arr));
}
max_num(int* parr) {
	int max=*parr;
	for (int i = 0; i < 10; i++) {
		if (max<*(parr+i) ) {
			max = *(parr + i);

		}
	}
	return max;
}//이게 내가 푼 답이었는데 예제에서는
*문제 1
위 10 개의 원소들 중 최대값 구하는 함수를 이용하여, 10 개의 원소를 입력 받고 그 원소를 큰 순으로 출력하는 함수를 만들어보세요. (난이도 : 中)*/
/* 입력 받은 배열의 10 개의 원소들 중 최대값을 출력 */
#include <stdio.h>
int max_number(int* parr);
int main() {
    int arr[10];
    int i;

    /* 사용자로 부터 원소를 입력 받는다. */
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &arr[i]);
    }

    printf("순서대로 하기 \n");
    max_number(arr);
    for (int k = 0; k < 10; k++) {
        printf("%d\n", arr[k]);
    }
   
}

int max_number(int* parr) {
    int i;
    int max=parr[0];
    int tmp;

    for (i = 0; i < 10; i++) {
        for (int k = 0; k < 10; k++) {
            if (parr[k]>=max &&parr[i] <= parr[k]) {
                tmp = parr[k];
                parr[k] = parr[i];
                parr[i] = tmp;
                max = parr[i];
                
            }
        }

         
        return parr;
           
    }
}/*이 문제는 아무리 풀어도 안 풀려서 죽고싶었다. 너무 어려워서 노트북 화면을 때리고 싶다는 충동이 생겨서 짜증이 났다. 현재 못 푼 문제이다.
분명히 이전에 풀었던 문제여서 쉽게 풀릴줄 알았는데 이정도도 구현하지 못하는 나한테 너무 자괴감이 느껴졌다... 이래서 라피신을 합격을 할 수가 있을까? 이정도 실력을 가지고?*/
#include<stdio.h>
int main() {//함수 검사용
    int parr[10];
    int tmp;//임시 변수
    int i = 0;
    int count = 0;// 배열 앞자리 얼마나 찻는지 세는 숫자.
    for (int a = 0; a < 10; a++) {
        printf("parr에 들어갈 %d번째 숫자를 입력하세요:", a + 1);
        scanf_s("%d", &parr[i]);
    }
    for (;;) {


        for (int k = 0; k < 10; k++) {
            if (parr[i] > parr[i + k]) {
                if (i + k == 9) {
                    count++;

                    i = count - 1;
                }
                else {continue;}
            }
            else { continue; }
        }
        i++;
        if (count == 9) {
            break;
        }
    }

    for (int b = 0; b < 10; b++) {
        printf("정렬하기:%d", parr[b]);
    }
}//이러면서 큰수 정렬 프로그램을 짜댔는데 자꾸 오류가 떠서 이전에 했던걸 다시 참고했다..
while (student_num) {//낮은 수를 오른쪽으로 이동 
		for (int i2 = 0; i2 < student_num; i2++) {

			if (score[i2] <= score[i2 + 1]) {//배열의 오른쪽이 같거나 더 크다면 둘의 위치를 바꾼다.
				tmp = score[i2];
				score[i2] = score[i2 + 1];
				score[i2 + 1] = tmp;
			}

		}
		student_num--;//for 문을 한번 실행할때마다 가장 오른쪽에 가장 작은수가 들어가므로 전체 학생수를 하나 줄인다.
//이게 최고다...
/*문제 1
위 10 개의 원소들 중 최대값 구하는 함수를 이용하여, 10 개의 원소를 입력 받고 그 원소를 큰 순으로 출력하는 함수를 만들어보세요. (난이도 : 中)*/
/* 입력 받은 배열의 10 개의 원소들 중 최대값을 출력 */
#include <stdio.h>
int max_number(int* parr);
int main() {
    int arr[10];
    int i;
    
    /* 사용자로 부터 원소를 입력 받는다. */
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &arr[i]);
    }

    printf("순서대로 하기 \n");
    max_number(arr);
    for (int k = 0; k < 10; k++) {
        printf("%d\n", arr[k]);
    }
   
}

int max_number(int* parr) {
    int parr_num = 10;// parr배열의 총 갯수
    int tmp;//임시 변수 정의 
    while (parr_num) {//낮은 수를 오른쪽으로 이동 
        for (int i2 = 0; i2 < parr_num; i2++) {

            if (parr[i2] <= parr[i2 + 1]) {//배열의 오른쪽이 같거나 더 크다면 둘의 위치를 바꾼다.
                tmp = parr[i2];
                parr[i2] = parr[i2 + 1];
                parr[i2 + 1] = tmp;
            }

        }
        parr_num--;//for 문을 한번 실행할때마다 가장 오른쪽에 가장 작은수가 들어가므로 전체 수를 하나 줄인다.

    }
    return parr;
}/*결국 풀어낸 문제.. 조급한 마음때문에 오히려 더 시간을 잡아 먹었다.
앞으로는 그러지 말자. 천천히 여유를 가지고 풀어내자.. 화가나면 절대로
코드를 작성하지 못한다는걸, 감정 컨트롤이 기본중에 기본이라고, 감정이 
앞서는 순간 가라앉히는데 엄청난 시간이 소비되니까.. */
/*2 차원 배열의 각 원소에 1 을 더하는 함수의 인자는 어떤 모양일까요? (난이도 : 中下)*/
#include<stdio.h>

int plus(int(*parr)[3]);
int main() {
	int arr[2][3] = { {1,2,3},{4,5,6} };
	printf("원래 배열의 값:{%d,%d,%d},{%d,%d,%d}", arr[0][0], arr[0][1], arr[0][2], arr[1][0], arr[1][1], arr[1][2]);
	plus(arr);
	printf("plus 후 배열의 값:{%d,%d,%d},{%d,%d,%d}", arr[0][0], arr[0][1], arr[0][2], arr[1][0], arr[1][1], arr[1][2]);
	return 0;
}

int plus(int(*parr)[3]) {
	for (int i = 0; i <2; i++) {
		for (int k = 0; k < 3; k++) {
			
			printf("parr[%d][%d] : %d \n", i, k, ++parr[i][k]);
		}
	}
	return 0;
}

이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.

728x90