|
|
ch14
1번
함수의 인자와 매개변수의 차이를 설명하라. ⇒
인자는 함수 호출 시 외부의 데이터를 함수 내부로 전달하는 실제 값이지만, 매개변수는 전달된 값을 함수 내부에서 사용하기 위해 자신의 메모리 공간에 저장하는 변수로 함수 내에서만 사용 가능하며 함수 종료시 메모리에서 사라진다.
함수가 호출될 때 컴퓨터에 의해 자동으로 실행되는 2가지를 설명하라. ⇒ 매개변수를 메모리에 할당하고, 매개변수를 인자로 초기화한다.
값에 의한 함수 호출 방식의 문제점을 설명하라. ⇒ 다른 함수에서 선언된 지역변수의 값을 변경할 수 없다.
주소에 의한 함수 호출 방식이 필요한 경우를 설명하라 ⇒ 다른 함수에서 선언된 지역 변수의 값을 변경해야할 때 필요하다.
2번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void add2(int* value);
int main(void)
{
int number;
printf("정수를 입력하세요: ");
scanf("%d", &number);
add2(&number);
printf("2만큼 증가한 값:%d\n", number);
return 0;
}
void add2(int* value)
{
*value += 2;
}
2번 실행결과
3번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int add2(int value);
int main(void)
{
int number;
printf("정수를 입력하세요: ");
scanf("%d", &number);
number = add2(number);
printf("2만큼 증가한 값:%d\n", number);
return 0;
}
int add2(int value)
{
value += 2;
return value;
}
3번 실행결과
4번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int* px, int* py, int* pz);
int main(void)
{
int x, y, z;
printf("정수 x를 입력하시오: ");
scanf("%d", &x);
printf("정수 y를 입력하시오: ");
scanf("%d", &y);
printf("정수 z를 입력하시오: ");
scanf("%d", &z);
printf("swap함수 호출 전 x=%d, y=%d, z=%d\n", x, y, z);
swap(&x, &y, &z);
printf("swap함수 호출 후 x=%d, y=%d, z=%d", x, y, z);
return 0;
}
4번 실행결과
5번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int SquareByValue(int num);
void SquarByReference(int* ptr);
int main(void)
{
int num=5;
printf("Value: %d \n", SquareByValue(num));
SquarByReference(&num);
printf("Regerence: %d \n", num);
return 0;
}
int SquareByValue(int num)
{
return num*100;
}
void SquarByReference(int* ptr)
{
int num = *ptr;
*ptr = num * 100;
}
5번 실행결과
6번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int get_max(int* array, int n);
int main(void)
{
int num[5];
int i, max;
for (i = 0; i < 5; i++)
{
printf("정수5개를 입력하시오: ");
scanf("%d", &num[i]);
}
max = get_max(num, 5);
printf("최대값은 %d입니다.\n", max);
return 0;
}
int get_max(int* array, int n) // int get_min(int array[ ], int n)
{
int i, max;
max = *array;
for (i = 1; i < n; i++)
if (*(array + i) > max) max = *(array + i);
return max;
}
6번 실행결과
7번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int get_data(int* arr, int n);
int main(void)
{
int i, data[5];
get_data(data, 5);
for (i = 0; i < 5; i++)
printf("%d번째data: % d\n", i + 1, data[i]);
return 0;
}
int get_data(int* arr, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d번째 data를 입력하시오: ", i + 1);
scanf("%d", arr + i);
}
}
7번 실행결과
8번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void jung_so(double n, int* i, double* a);
int main(void)
{
double num, so = 0;
int jung = 0;
printf("실수를 입력하시오: ");
scanf("%lf", &num);
jung_so(num, &jung, &so);
printf("정수부 %d\n", jung);
printf("소수부 %f\n", so);
return 0;
}
void jung_so(double n, int* i, double* a)
{
*i = (int)n;
*a = n - *i;
}
8번 실행결과
9번
const 선언을 사용하는이유를설명하시오. => 컴파일러가 잡아내지 못하는 문제점을 쉽게 찾아낼 수 있으며 프로그램의 안전성을 올려주기 때문이다.
10번
아래 정의된 함수에서 const선언을 한 이유
void ShowAllData(const int* arr, int len)
{
int i;
for (i = 0 i < len; i++)
printf("%d ", arr[i]);
}
배열의 요소를 출력하는 함수이기 때문에 배열 요소의 값을 바꾸는 실수를 하지 않으려고 사용한것이다.
14장 정리문제
6. 정수 5개를입력받아최대,최소값을구하는프로그램을작성하라.5 개정수를입력받는부분(data_input), 최대값 구하는 부분(get_max), 최소값구하는부분(get_min)을 각각 함수로 만들어라
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void data_input(int num[]);
int get_max(int num[]);
int get_min(int num[]);
int main(void)
{
int num[5];
int max, min;
data_input(num);
max = get_max(num);
min = get_min(num);
printf("최대값: %d\n", max);
printf("최소값: %d", min);
return 0;
}
void data_input(int num[])
{
int i;
for (i = 0; i < 5; i++)
{
printf("%d번째 정수 입력: ", i + 1);
scanf("%d", &num[i]);
}
}
int get_max(int num[])
{
int max = num[0];
for (int i = 1; i < 5; i++)
{
if (num[i] > max)
max = num[i];
}
return max;
}
int get_min(int num[])
{
int min = num[0];
for (int i = 1; i < 5; i++)
{
if (num[i] < min)
min = num[i];
}
return min;
}
7. 정수 2개를 입력받아 큰값과 작은값을 구해주는 프로그램을 작성하 라. 정수2개를 입력받는 부분(input_data), 2개의 정수중 큰값과 작은 값을동시에구하는부분(get_minmax) 을 각각 함수로작성하라
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void input_data(int* n1, int* n2);
void get_minmax(int n1, int n2, int* max, int* min);
int main(void)
{
int num1, num2;
int max, min;
input_data(&num1, &num2);
get_minmax(num1, num2, &max, &min);
printf("최대값: %d\n", max);
printf("최소값: %d\n", min);
return 0;
}
void input_data(int* n1, int* n2)
{
printf("첫 번째 정수 입력: ");
scanf("%d", n1);
printf("두 번째 정수 입력: ");
scanf("%d", n2);
}
void get_minmax(int n1, int n2, int* max, int* min)
{
if (n1 > n2)
{
*max = n1;
*min = n2;
}
else
{
*max = n2;
*min = n1;
}
}
ch15 도전 프로그래밍 문제
1번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void odd(int* o);
void even(int* e);
int main(void)
{
int arr[10];
printf("정수 10개 입력 \n");
for (int i = 0; i < 10; i++)
{
printf("입력:");
scanf(" %d", &arr[i]);
}
odd(arr);
even(arr);
return 0;
}
void odd(int* o)
{
printf("홀수 출력: ");
for (int i = 0; i < 10; i++)
{
if (o[i] % 2 == 1) printf("%d ", o[i]);
}
}
void even(int* e)
{
printf("짝수 출력: ");
for (int i = 0; i < 10; i++)
{
if (e[i] % 2 == 0) printf("%d ", e[i]);
}
}
2번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void js(int n);
int main()
{
int n;
printf("10진수 정수 입력: ");
scanf("%d", &n);
js(n);
return 0;
}
void js(int n)
{
if (n > 1) js(n / 2);
printf("%d", n % 2);
}
3번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int arr[10];
int odd= 0;
int even = 9;
printf("10개의 숫자 입력\n");
for (int i = 0; i < 10; i++)
{
int num;
printf("입력: ");
scanf("%d", &num);
if (num % 2 == 1) {
arr[odd] = num;
odd = odd + 1;
}
else {
arr[even] = num;
even = even - 1;
}
}
for (int i = 0; i < 10; i++) printf("%d ", arr[i]);
return 0;
}
4번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char arr[40];
int i = 0, j;
printf("문자열입력: ");
scanf("%s", arr);
while (arr[i] != '\0')
i++;
for (j = 0; j < i / 2; j++)
if (arr[j] != arr[i - 1 - j]) break;
if (j == i / 2) printf("회문입니다.");
else printf("회문이 아닙니다.");
return 0;
}
5번
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void DesSort(int arr[]);
int main(void)
{
int arr[7];
for (int i = 0; i < 7; i++)
{
printf("입력: ");
scanf("%d", &arr[i]);
}
DesSort(arr);
for (int i = 0; i < 7; i++) printf("%d ", arr[i]);
return 0;
}
void DesSort(int arr[])
{
int i, j, k;
for (i = 0; i < 7 - 1; i++)
{
for (j = 0; j < (7 - i) - 1; j++)
{
if (arr[j] < arr[j + 1])
{
k = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = k;
}
}
}
}

첫댓글 함수의 인자와 매개변수의 차이를 설명하라. ⇒ 인자는 함수 호출 시 전달되는 실제 값이고, 매개변수는 함수에서 인자를 받아 저장하는 변수이다. -> 보완할것
주소에 의한 호출을 사용해야 하는 경우 3가지를 설명하고 각 각 이유를 상세히 설명하라 ⇒ 1. 함수에서 여러 개의 값을 반환, 2. 원래 변수 값을 변경, 3. 큰 데이터를 처리할 때->보완할것, 3가지경우에 문제점은 무엇이고 주소에 의한 호출을 사용하면 문제점을 어떻게 해결하는지 설명하라
[12-13], [14-15] 수정했습니다