01.
더보기
#include <stdio.h>
int addbyvalue(int, int);
void addbyaddress(int*, int, int);
int main(void)
{
int x = 10, y = 20, result;
printf("a = %d b = %d, 합: %d\n", x, y, addbyvalue(x, y));
addbyaddress(&result, x, y);
printf("a = %d b = %d, 합: %d\n", x, y, result);
return 0;
}
int addbyvalue(int a, int b) {
return a + b;
}
void addbyaddress(int* sum, int a, int b) {
*sum = a + b;
}
02.
더보기
#include <stdio.h>
int main(void) {
int ary[][5] = { 2,1,7,9,10,6,3,8,4,5 };
int(*ptr)[5];
ptr = ary;
char* head[] = { "원 행렬값:", "\n계산후 행렬값:" };
for (int k = 0; k < 2; k++) {
printf("%s\n", head[k]);
printf("-------------------------------\n");
for (int i = 0; i < (sizeof(ary) / sizeof(ary[0])); i++) {
for (int j = 0; j < (sizeof(ary[0]) / sizeof(ary[0][0])); j++) {
printf("| %3d ", ptr[i][j]);
ptr[i][j] += 10;
}
printf("|\n");
}
printf("-------------------------------\n");
}
return 0;
}
03.
더보기
#include <stdio.h>
#include <stdarg.h>
void printvar(char* szTypes, ...);
int main(void) {
printvar("scfd", "원주율", 'P', 3.14, 4);
return 0;
}
void printvar(char* sztypes, ...) {
va_list argp;
va_start(argp, sztypes);
int i = 0;
while (*(sztypes + i)) {
switch (*(sztypes + i))
{
case 's':
printf("%s ", va_arg(argp, char*));
break;
case 'c':
printf("%c ", va_arg(argp, char));
break;
case 'f':
printf("%lf ", va_arg(argp, double));
break;
case 'd':
printf("%d ", va_arg(argp, int));
break;
}
i++;
}
puts("");
va_end(argp);
}
04.
더보기
#include <stdio.h>
void copyarray(double* source, double* target, int size);
int main(void)
{
double ary[5] = { 3.12,5.14,7.25,7.48,5.91 };
double ary2[5];
double *pary[2] = {ary, ary2};
char* head[] = { "원 행렬값:","\n함수 copyarray() 호출후 target 배열값:" };
for (int j = 0; j < 2; j++) {
printf("%s\n", head[j]);
for (int i = 0; i < (sizeof(ary) / sizeof(ary[0])); i++) {
printf("%7.2lf", pary[j][i]);
}
puts("");
if (j == 0)
copyarray(ary, ary2, sizeof(ary) / sizeof(ary[0]));
}
return 0;
}
void copyarray(double* source, double* target, int size) {
for (int i = 0; i < size; i++) {
target[i] = source[i];
}
}
05.
더보기
#include <stdio.h>
void pascaltriangle(int(*p)[10], int size);
void triangleprint(int(*p)[10], int size);
int main(void) {
int pascal[10][10] = { 0 };
int size = sizeof(pascal) / sizeof(pascal[0][0]);
//배열 전체 길이 100
pascaltriangle(pascal, size);
triangleprint(pascal, size);
return 0;
}
void pascaltriangle(int(*p)[10], int size) {
int row_size = size / (sizeof(*p) / sizeof((*p)[0]));
//전체 사이즈를 한 행의 사이즈로 나누면 열의 사이즈이다.
int col_size = sizeof(*p) / sizeof((*p)[0]);
//사실 파스칼 삼각형배열은 정방행렬로 가져오기 때문에 열 사이즈 필요없네;;
//배열포인터는 한 행의 배열을 가르키기 때문에 위와같이 사이즈를 구하면 열의 크기이다.
for (int i = 0; i < row_size; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) p[i][j] = 1;
else p[i][j] = p[i - 1][j] + p[i - 1][j - 1];
}
}
}
void triangleprint(int(*p)[10], int size) {
int row_size = size / (sizeof(*p) / sizeof((*p)[0]));
for (int i = 0; i < row_size; i++) {
for (int j = 0; j <= i; j++) {
printf("%3d ", p[i][j]);
}
puts("");
}
}
06.
더보기
#include <stdio.h>
void arraymerge(int*, int, int*, int, int*);
int main(void) {
int a[] = { 1,2,5,7,9,14 };
int b[] = { 2,3,6,8,13 };
int c[20];
int a_size = sizeof(a) / sizeof(a[0]);
int b_size = sizeof(b) / sizeof(b[0]);
arraymerge(a, a_size, b, b_size, c);
for (int i = 0; i < a_size + b_size; i++) {
printf("%d ", c[i]);
}
puts("");
return 0;
}
void arraymerge(int* a, int an, int* b, int bn, int* c) {
/* //sequential sort
for (int i = 0; i < an + bn; i++) {
if (i < an)
*(c + i) = *(a + i);
else
*(c + i) = *(b + i - an);
}
for (int i = 0; i < an + bn; i++) {
for (int j = 1 + i; j < an + bn; j++) {
if (*(c + i) > *(c + j)) {
int temp = *(c + i);
*(c + i) = *(c + j);
*(c + j) = temp;
}
}
}
*/
int i = 0, j = 0, k = 0;
while (i < an && j < bn) {
if (a[i] <= b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
// 남은 요소들을 추가
while (i < an) {
c[k++] = a[i++];
}
while (j < bn) {
c[k++] = b[j++];
}
}
07.
더보기
#include <stdio.h>
#include <stdarg.h>
double vafunc(char* type, int count, ...); //int count 이후는 가변인자
int main(void) {
printf("평균 %.2lf\n", vafunc("d", 5, 172, 21, 36, 43, 58));
printf("평균 %.2lf\n", vafunc("f", 5, 5.8, 17.3, 2.8, 31.8, 45.9, 5.9));
return 0;
}
double vafunc(char* type, int count, ...) {
va_list vargp;
va_start(vargp, count);
double sum = 0;
for (int i = 0; i < count; i++) {
switch (*type)
{
case 'd': sum += va_arg(vargp, int);
break;
case 'f': sum += va_arg(vargp, double);
break;
}
}
return (sum / count);
}
08.
더보기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
double add(double, double);
double subt(double, double);
double mult(double, double);
double devi(double, double);
int main(void) {
int op;
double a, b;
char* head[] = { "더하기","빼기","곱하기","나누기" };
char op_list[] = { '+','-','*','/' };
double (*pfary[4])(double, double) = { add,subt,mult,devi };
printf("사칙연산을 위해 각 연산에 대한 번호를 입력하세요. >>\n");
printf("[더하기]: 0, [빼기]: 1, [곱하기]: 2, [나누기]: 3 >> ");
scanf("%d", &op);
printf("\n사칙연산을 수행할 실수 2개를 입력하세요. >> ");
scanf("%lf %lf", &a, &b);
printf("\n문장: pfary[%d] 함수호출\n", op);
printf("%s 수행: %lf %c %lf == %lf\n", head[op], a, op_list[op], b, pfary[op](a, b));
return 0;
}
double add(double a, double b) {
return (a + b);
}
double subt(double a, double b) {
return (a - b);
}
double mult(double a, double b) {
return (a * b);
}
double devi(double a, double b) {
return (a / b);
}