티스토리 뷰
컴퓨터프로그래밍 12주 Quiz
(quiz-1) 정수형 변수 x, y, z 각각의 주소(포인터)를 보관하는 px, py, pz 변수를 선언하고 화면과 같이 출력될 수 있도록 완성하시오.
(px, py, pz 의 값은 화면과 다르게 나올 수 있다.)
(1) 실행화면 Capture
(2) 프로그램 소스코드
HWP에서 Text 붙여넣기 할 때 색상이 잘못되는 경우 해결 방법
(Ctrl-A 전체선택 > 서식 > 글자모양 > 테두리/배경 > 면색 --> 흰색)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main()
{
int x = 1, y = 2, z = 3;
// 포인터 변수 px, py, pz 선언
int* px, * py, * pz;
// px, py, pz를 각각 x, y, z의 주소로 지정
px = &x, py = &y, pz = &z;
// 아래 5라인을 같은 결과가 나오도록 px, py, pz 로만 완성
// x = 1000
*px = 1000;
// x += 2;
*px += 2;
// y = 2000
*py = 2000;
// y -= 3;
*py -= 3;
// z = x + y
*pz = *px + *py;
// 아래 부분은 수정하지 말 것
printf("px=%X py=%X pz=%X\n", px, py, pz);
printf("x=%d y=%d z=%d\n", x, y, z);
printf("*px=%d *py=%d *pz=%d\n", *px, *py, *pz);
}
(quiz-2) iputxy()는 정수 x, y를 입력받고 swapxy()는 두 정수를 교환하는 함수이다. 완성하시오.
(1) 실행화면 Capture
(2) 프로그램 소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// x, y 입력
void inputxy(int *x, int *y) // () 안의 변수 선언도 완성
{
scanf("%d %d", x, y);
}
// x, y를 교환
void swapxy(int* x, int* y) // () 안의 변수 선언도 완성
{
int temp = *x;
*x = *y;
*y = temp;
}
void main() // main은 수정할지 말 것
{
int x, y;
inputxy(&x, &y);
printf("swapxy()전 : x=%d y=%d\n", x, y);
swapxy(&x, &y);
printf("swapxy()후 : x=%d y=%d\n", x, y);
}
quiz-3) 다음과 같이 배열 arr[10]에 데이터가 있다. print_array(), compute_sum(), compute_avg(), find_max(), find_min() 함수는 각각 배열을 출력, 배열의 합을 return, 평균값을 계산해서 return, 배열의 최대값과 최소값을 구해서 return 하는 함수들이다. 배열 기호 []를 사용하지 말고 포인터만 사용하여 함수들을 완성하시오.
(1) 실행화면 Capture
(2) 프로그램 소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void print_array(int* arr, int n) // 배열값을 출력 [] 사용하지 말 것
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int compute_sum(int* arr, int n) // 배열의 합을 return [] 사용하지 말 것
{
int i, sum = 0;
for (int i = 0; i < n; i++)
{
sum += arr[i];
}
return sum;
}
double compute_avg(int* arr, int n) // 배열의 평균을 return [] 사용하지 말 것
{
double sum = 0;
for (int i = 0; i < n; i++)
{
sum += arr[i];
}
return sum / n;
}
int find_max(int* arr, int n) // 배열에서 최대값을 찾아서 return [] 사용하지 말 것
{
int i, max = arr[0];
for (int i = 0; i < n; i++)
{
if (max < arr[i]) max = arr[i];
}
return max;
}
int find_min(int* arr, int n) // 배열에서 최소값을 찾아서 return [] 사용하지 말 것
{
int i, min = arr[0];
for (int i = 0; i < n; i++)
{
if (min > arr[i]) min = arr[i];
}
return min;
}
void main() // main은 수정하지 말 것
{
int arr[10] = { 10, 30, 5, 21, 44, 13, 120, 88, 9, 101 };
print_array(arr, 10);
printf("합 = %d\n", compute_sum(arr, 10));
printf("평균 = %lf\n", compute_avg(arr, 10));
printf("최대 = %d\n", find_max(arr, 10));
printf("최소 = %d\n", find_min(arr, 10));
}
(quiz-4) 다음과 같이 배열 arr[10]에 데이터가 있다. find_max(), find_min() 함수는 각각 배열의 최대값 또는 최소값과 함께 몇번째 배열인지까지 찾아주는 함수들이다.
배열 기호 []를 사용하지 말고 포인터만 사용하여 함수들을 완성하시오.
(1) 실행화면 Capture
(2) 프로그램 소스코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// n개의 배열에서 최대값과 그 index를 *max, *index에 담아서 return
void find_max(int* arr, int* max, int* index, int n)
{
*max = arr[0];
// void 이므로 return 값은 없고 max, index에 값을 넘겨주어야 함
for (int i = 0; i < n; i++)
{
if (arr[i] > *max) {
*max = arr[i];
*index = i;
}
}
}
// n개의 배열에서 최소값과 그 index를 *min, *index에 담아서 return
void find_min(int* arr, int* min, int* index, int n)
{
// void 이므로 return 값은 없고 min, index에 값을 넘겨주어야 함
*min = arr[0];
// void 이므로 return 값은 없고 max, index에 값을 넘겨주어야 함
for (int i = 0; i < n; i++)
{
if (arr[i] < *min) {
*min = arr[i];
*index = i;
}
}
}
void main() // main은 수정하지 말 것
{
int arr[10] = { 10, 30, 5, 20, 44, 13, 120, 88, 9, 101 };
int max, min, index;
find_max(arr, &max, &index, 10);
printf("최대 : arr[%d]=%d\n", index, max);
find_min(arr, &min, &index, 10);
printf("최소 : arr[%d]=%d\n", index, min);
}