/* 입력 받은 배열의 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
'초기 네이버 기록 > 과거 공부 기록' 카테고리의 다른 글
배운것 기록 + 유클리드 호제법 문제 (씹어먹는 C언어) (2) | 2023.01.07 |
---|---|
헷갈릴때 보기! 예제 포인터의 포인터 인자로 받는 함수 (0) | 2023.01.07 |
오래 걸린 문제(성적 순 배열 및 막대 그래프 출력 문제)(씹어먹는C언어) (0) | 2023.01.07 |
(흔적)코딩 공부 기록 switch문과 배열 (씹어먹는 C언어 정답) (0) | 2023.01.07 |
씹어먹는 C언어코딩 공부 (0) | 2023.01.06 |