<Lab 10 문제 유형 요약>
- Program 1 : 이차원 배열(행렬) 출력, 더하기, 빼기 함수
- Program 2 : 이차원 배열 포인터, 함수
- Program 3 : 일차원 배열 최댓값, 최솟값 찾는 함수
- Program 4 : 오름차순 정렬 배열 병합
- Program 5 : 가변인자 함수
- Program 6 : 가변인자 함수
Program 1
두 이차원 배열의 출력, 더하기, 빼기를 수행하는 함수를 만들고, 실행 예를 참고하여 배열의 연산 결과를 출력하는 프로그램을 작성하시오.
- 아래 내용을 이용하여 함수를 정의 하고 실행
#define ROWS 2
#define COLS 3
typedef double matrixa[ROWS][COLS];
typedef double matrixb[ROWS][COLS];
typedef double resultc[ROWS][COLS];
void plus(resultc r, matrixa a, matrixb b, int rows, int cols);
void minus(resultc r, matrixa a, matrixb b, int rows, int col);
void display(resultc r, int rows, int cols);
#include<stdio.h>
#define ROWS 2
#define COLS 3
typedef double matrixa[ROWS][COLS];
typedef double matrixb[ROWS][COLS];
typedef double resultc[ROWS][COLS];
void plus(resultc r, matrixa a, matrixb b, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
r[i][j] = a[i][j] + b[i][j];
}
}
}
void minus(resultc r, matrixa a, matrixb b, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
r[i][j] = a[i][j] - b[i][j];
}
}
}
void display(resultc r, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("%8.2f ", r[i][j]);
}
printf("\n");
}
printf("\n");
}
int main()
{
matrixa a = { {4.2, 4.3, 3.8}, {3.7, 1.5, 0.7} };
matrixb b = { {5.2, 2.1, 1.8}, {3.2, 1.4, 2.9} };
resultc c, d;
plus(c, a, b, ROWS, COLS);
minus(d, a, b, ROWS, COLS);
display(a, ROWS, COLS);
display(b, ROWS, COLS);
display(c, ROWS, COLS);
display(d, ROWS, COLS);
return 0;
}
Program 2
아래와 같이 increase() 함수에서 배열 포인터를 이용하여 이차원 배열의 모든 원소의 값을 5씩 증가시키는 프로그램을 작성하시오.
int x[][5] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
#define COL 5
void print(int x[][COL], int rsize, int csize);
void increase(int (*ptr)[COL], int rsize, int csize, int num);
#include<stdio.h>
#define COL 5
void print(int x[][COL], int rsize, int csize)
{
for (int i = 0; i < rsize; i++)
{
for (int j = 0; j < csize; j++)
{
printf("%2d ", x[i][j]);
}
printf("\n");
}
printf("\n");
}
void increase(int(*ptr)[COL], int rsize, int csize, int num)
{
for (int i = 0; i < rsize; i++)
{
for (int j = 0; j < csize; j++)
{
*((ptr[i]) + j) += num;
}
}
}
int main()
{
int x[][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
print(x, 2, COL);
increase(x, 2, COL, 5);
print(x, 2, COL);
return 0;
}
Program 3
자료 유형 double형 1차원 배열에서 가장 큰 값을 찾는 함수, 가장 작은 값을 찾는 함수, 그 값의 차이를 반환하는 함수를 각각 만들어 결과를 알아보는 프로그램을 작성하시오.
double a[5] = {3.12, 5.14, 7.25, 7.48, 5.91};
void print(double *x, int size);
double findmin(double *a, int size);
double findmax(double *a, int size);
double diffminmax(double *a, int size);
#include<stdio.h>
#define COL 5
void print(double* x, int size)
{
for (int i = 0; i < size; i++)
{
printf("%.2f ", *(x + i));
}
printf("\n");
}
double findmin(double* a, int size)
{
double min = *a;
for (int i = 0; i < size; i++)
{
if (min > * (a + i)) min = *(a + i);
}
return min;
}
double findmax(double* a, int size)
{
double max = *a;
for (int i = 0; i < size; i++)
{
if (max < *(a + i)) max = *(a + i);
}
return max;
}
double diffminmax(double* a, int size)
{
return findmax(a, 5) - findmin(a, 5);
}
int main()
{
double a[5] = { 3.12, 5.14, 7.25, 7.48, 5.91 };
print(a, 5);
printf("최댓값 %.2f와 최솟값 %.2f의 차이는 %.2f\n", findmax(a, 5), findmin(a, 5), diffminmax(a, 5));
return 0;
}
Program 4
다음을 참고로 두 일차원 배열의 병합을 구하여 출력하는 프로그램을 작성하시오.
- 이미 오름차순으로 정렬되어 있는 두 배열 a, b의 병합 결과 c
- 배열 a, b의 병합 결과를 배열c에 저장하는 함수
int a[] = {1, 2, 5, 7, 9, 14};
int b[] = {2, 3, 6, 8, 13};
int c[20];
void arraymerge(int *a, int asize, int *b, int bsize, int *c)
#include <stdio.h>
void print(int* x, int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", *(x + i));
}
printf("\n");
}
void arraymerge(int* a, int asize, int* b, int bsize, int* c)
{
int i = 0, j = 0, k = 0;
for (i = 0; i < asize && j < bsize;)
{
if (*(a + i) < *(b + j))
{
*(c + k) = *(a + i);
k++; i++;
}
else
{
*(c + k) = *(b + j);
k++; j++;
}
}
while (i < asize)
{
*(c + k) = *(a + i);
k++; i++;
}
while (j < bsize)
{
*(c + k) = *(b + j);
k++; j++;
}
}
int main(void) {
int a[] = { 1, 2, 5, 7, 9, 14 };
int b[] = { 2, 3, 6, 8, 13 };
int c[20];
arraymerge(a, 6, b, 5, c);
print(a, 6);
print(b, 5);
print(c, 11);
return 0;
}
Program 5
다음 프로그램에서 문법오류 및 실행오류를 찾아 수정하시오.
- 아래 코드를 눈으로 분석해 보고, 어떤 부분에서 문제가 있는지 확인후, 코드를 IDE에 복사하여 잘못된 부분 수정하고 컴파일하고 실행해 본다.
#include <stdio.h> double sum(int count, ...); //int count 이후는 가변인자 ... int main(void) { printf("합 %.1f\n", sum(5, 1.2, 2.1, 3.8, 4.3, 5.9, 8.6)); return 0; } double sum(int numagrs, ...) { va_list argp; //가변인자 변수 선언 //numargs 이후의 가변인자 처리 시작 va_start(argp); double total = 0; //합이 저장될 변수 for (int i = 0; i < numagrs; i++) //지정하는 double 형으로 가변인자 하나 하나를 반환 total += va_arg(argp); va_end(argp); //가변인자 처리 종료 return total; } |
#include <stdio.h>
double sum(int count, ...); //int count 이후는 가변인자 ...
int main(void)
{
printf("합 %.1f\n", sum(5, 1.2, 2.1, 3.8, 4.3, 5.9, 8.6));
return 0;
}
double sum(int numagrs, ...)
{
va_list argp; //가변인자 변수 선언
//numargs 이후의 가변인자 처리 시작
va_start(argp, numagrs);
double total = 0; //합이 저장될 변수
for (int i = 0; i < numagrs; i++)
//지정하는 double 형으로 가변인자 하나 하나를 반환
total += va_arg(argp, double);
va_end(argp); //가변인자 처리 종료
return total;
}
Program 6
다음과 조건을 만족하도록 가변인자 함수를 처리하는 프로그램을 작성하시오.
- double vcountsum (int count, ...); //int count 이후는 가변인자 ...
- 함수 원형에서 첫 인자는 가변인자의 개수를 지정
- 함수는 가변인자의 합을 계산하여 반환
- 함수 main()에서 다음을 호출하여 출력되도록
vcountsum(3, 12.3, 23.67, 10.5);
vcountsum(5, 20.75, 51.3, 21.9, 5.56, 12.34);
#include <stdio.h>
double vcountsum(int numagrs, ...)
{
va_list argp; //가변인자 변수 선언
//numargs 이후의 가변인자 처리 시작
va_start(argp, numagrs);
double total = 0; //합이 저장될 변수
for (int i = 0; i < numagrs; i++)
//지정하는 double 형으로 가변인자 하나 하나를 반환
total += va_arg(argp, double);
va_end(argp); //가변인자 처리 종료
return total;
}
int main()
{
printf("12.30 23.67 10.50\n");
printf("%.2f\n", vcountsum(4, 12.30, 23.67, 10.50));
printf("20.75 51.30 21.90 5.56 12.34\n");
printf("%.2f\n", vcountsum(5, 20.75, 51.3, 21.9, 5.56, 12.34));
return 0;
}
'College Computer Science > C Language' 카테고리의 다른 글
[C 프로그래밍 실습] 함수와 포인터 활용 2 (Lab 11) (0) | 2021.01.07 |
---|---|
[C 프로그래밍 실습] 3인 블랙잭 Blackjack 카드 게임 만들기 (Term Project) (1) | 2021.01.07 |
[C 프로그래밍 실습] Report 03 (0) | 2021.01.04 |
[C 프로그래밍 실습] 구조체와 공용체 (Lab 09) (0) | 2021.01.04 |
[C 프로그래밍 실습] 변수 유효범위 (Lab 08) (0) | 2021.01.03 |
댓글