옥수수와 식빵 그리고 코딩

9장 실습예제 본문

C/2021겨울계절 - 프로그래밍 이해

9장 실습예제

옥식 2021. 12. 31. 12:43

p.6 다른 파일에서 구현된 함수 사용

소스파일 안에 서브 함수파일을 같이 만들어 놓으면 됨

//메인
# include <stdio.h>

void message();
void cacao();

int main(void)
{
    puts("메인");
    message();
    cacao();
    puts("메인종료");

    return 0;
}

void message()
{
    puts("\t메시지입니다");
}
//cacao 함수

void cacao()
{
    puts("\t카톡입니다.");
}

 

p.11 함수의 정의와 호출

#include <stdio.h>

int main(void)
{
    int a = 3, b = 5;
    int add(int a, int b);

    int sum = add(a, b);
    printf("합: %d\n", sum);

    return 0;
}

int add(int a, int b)
{
    int sum = a + b;

    return (sum);
}

int findMin(int x, int y)
{
    int min = x < y ? x : y;

    return(min);

}

 

p.12 함수 정의후 함수 선언하여 함수 호출

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int intpow(int m, int n);

int main(void)
{
    int m, n;

    printf("정수 m을 n번 제곱합니다.\n");
    printf("정수 m,n입력: ");
    scanf("%d %d", &m, &n);

    printf("\n%d의 %d제곱은 %d입니다.\n", m, n, intpow(m, n));

    return 0;
}

int intpow(int m, int n)
{
    int mult = 1, i = 1;

    for (i = 1; i <= n; i++)
    {
        mult *= m;
    }
    return (mult);
}

 

p.16 오류남 질문하고 다시 하기 -- 해결~!. 함수의 정의와 호출

오류난 이유

int add(int a, int b) //a, b는 매개 변수
{
   return a+b;
}

//와

int add()
{
   int a; //a, b는 지역 변수
   int b;
   return a+b;
}

이 둘은 같지 않음
//메인 파일

# include <stdio.h>

int add(int a, int b);
int findMax(int, int);
void printMin(int, int); //함수선언

int main(void)
{
    int a = 10, b = 15;

    int max = findMax(a, b);
    printf("최대 : %d\n", max);
    printf("합 : %d\n", add(a, b));

    printMin(a, b);


    return 0;
}

void printMin(int a, int b)
{
    
    int min = a < b ? a : b;

    printf("최소: %d\n", min);
}
//함수가 정의된 파일

int add(int a, int b)
{
    
    int sum = a + b;

    return (sum);
}

int findMax(int a, int b)
{
    int max = a > b ? a : b;

    return(max);
}

int findMin(int x, int y)
{
    
    int min = x < y ? x : y;

    return (min);
}

파일: 연습 - project1-메인.c, 소스.c

 

 

p.19 함수에서 배열인자 사용

#include <stdio.h>

int sumary(int ary[], int SIZE);

int main(void)
{
    int point[] = { 95, 88, 76, 54, 85, 33, 65, 75, 99, 82 };

    int arySize = sizeof(point);
    printf("메인에서 배열 전체 크기: %d\n", arySize);
    int aryLength = arySize / sizeof(int);

    int sum = 0;
    for (int i = 0; i < aryLength; i++)
        sum += point[i];

    printf("메인에서 구한 합 %d\n", sum);
    printf("함수 sumary() 호출로 구한 합 %d\n", sumary(point, aryLength));
    printf("함수 sumary() 호출로 구한 합 %d\n", sumary(&point[0], aryLength));

    return 0;
}

int sumary(int ary[], int SIZE)
{
    int sum = 0;
    printf("함수에서 배열 전체 크기 :%d\n", (int)sizeof(ary));
    for (int i = 0; i < SIZE; i++)
    {
        sum += ary[i];
    }
    return sum;
}

 

p. 21

 2차원 배열을 인자로 하는 함수의 정의와 호출

#include <stdio.h>

double sum(double data[][2], int, int);
void printarry(double data[][2], int, int);

int main(void)
{
    double x[][2] = { 11, 12, 21, 22, 31, 32 };

    int rowsize = sizeof(x) / sizeof(x[0]);
    int colsize = sizeof(x[0]) / sizeof(x[0][0]);
    printf("2차원 배열의 자료값은 다음과 같다 \n");
    printarry(x, rowsize, colsize);
    printf("2차원 배열 원소 합은 %.3lf\n", sum(x, rowsize, colsize));

    return 0;
}

double sum(double data[][2], int rowsize, int colsize)
{
    double total = 0;
    for (int i = 0; i < rowsize; i++)
        for (int j = 0; j < colsize; j++)
            total += data[i][j];
    return total;
}

void printarry(double data[][2], int rowsize, int colsize)
{
    for (int i = 0; i < rowsize; i++)
    {
        printf("%d행 원소: ", i + 1);
        for (int j = 0; j < colsize; j++)
            printf("x[%d][%d] = %5.2lf   ", i, j, data[i][j]);
        printf("\n");
    }
    printf("\n");
}

 

p. 22 배열에 모든 원소를 지정한 수 만큼 증가시키는 함수

#include <stdio.h>

void increment(int ary[], int n, int SIZE);
void printary(int data[], int SIZE);

int main(void)
{
    int data[] = { 4, 7, 2, 3, 5 };
    int aryLength = sizeof(data) / sizeof(int);
    int inc = 3;

    printary(data, aryLength);

    increment(data, inc, aryLength);
    printf("배열 원소에 각각 %d의 더한 결과 \n", inc);
    printary(data, aryLength);

    return 0;
}

void increment(int ary[], int n, int SIZE)
{
    for (int i = 0; i < SIZE; i++)
        ary[i] += n;
}

void printary(int data[], int SIZE)
{
    for (int i = 0; i < SIZE; i++)
        printf("%2d ", data[i]);
    printf("\n");
}

 

p. 24 재귀함수를 이용하여 팩토리얼 구하기

#include <stdio.h>

int factorial(int);

int main(void)
{
    for (int i = 1; i <= 10; i++)
        printf("%2d! = %d\n", i, factorial(i));

    return 0;
}

int factorial(int number)
{
    if (number <= 1)
        return 1;
    else
        return (number * factorial(number - 1));
}

 

p. 26 난수를 위한 함수 rand()이용

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("0~%5d 사이의 난수 8개 : rand()\n", RAND_MAX);
    for (int i = 0; i < 8; i++)
        printf("%5d ", rand());
    puts("");

    return 0;
        
        
}

 

p. 27 srand()로 시드 값을 먼저 지정한 후 1~100사이의 난수를 생성

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100

int main(void)
{
    long seconds = (long)time(NULL);
    srand(seconds);

    printf("0~%5d 사이의 난수 8개 : rand()\n", MAX);
    for (int i = 0; i < 8; i++)
        printf("%5d ", rand()% MAX + 1);
    puts("");

    return 0;


}

실행 할 때마다 다른 결과가 나옴

 

p.29 <ctype.h> 문자관련 함수

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>

void print2char(char);

int main(void)
{
    char ch;

    printf("알파벳(종료x) 또는 다른 문자 입력하세요.\n");
    do
    {
        printf("문자 입력 후 Enter: ");
        scanf("%c", &ch);
        getchar(); //Enter키 입력받음
        if (isalpha(ch))
            print2char(ch);
        else
            printf("입력: %c\n", ch);
    } while (ch != 'x' && ch != 'X');

    return 0;
}

void print2char(char ch)
{
    if (isupper(ch))
        printf("입력: %c, 반환: %c\n", ch, tolower(ch));
    else
        printf("입력: %c, 반환: %c\n", ch, toupper(ch));

    return 0;
}

 

p. 31 1~100사이의 난수 알아 맞추기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAX 100

int main(void)
{
    int guess, input;

    srand((long)time(NULL));
    guess = rand() % MAX + 1;

    printf("1에서 %d사이에서 한 정수가 결정되었습니다.\n", MAX);
    printf("이 정수는 무엇일까요? 맞춰보삼: ");

    while (scanf("%d", &input))
    {
        if (input > guess)
            printf("입력한 수 %d보다 작음. 다시 ㄱㄱ : ", input);
        else if (input < guess)
            printf("입력한 수 %d보다 큼. 다시 ㄱㄱ : ", input);
        else
        {
            puts("정답");
            break;

        }
    }
    return 0;
}

 

 

'C > 2021겨울계절 - 프로그래밍 이해' 카테고리의 다른 글

10장 실습예제  (0) 2022.01.04
9장 실전예제  (0) 2021.12.30
8장 실전예제  (0) 2021.12.30
if else를 이용한 연봉 계산  (0) 2021.12.29
7장 실습예제  (0) 2021.12.29
Comments