정화 코딩

씨프실 기말고사 벼락치기 본문

Free

씨프실 기말고사 벼락치기

jungh150c 2022. 12. 13. 14:19

9장. 함수와 변수

 

 

- 팩토리얼 함수

 

#include <stdio.h>

int factorial1(int n)
{
    int result = 1;
    
    for(int i = 1; i <= n; i++)
        result *= i;
    
    return result;    
}

int factorial2(int n)
{
    if(n == 1)
        return 1;
    else
        return n * factorial2(n-1);
}

int main()
{
    int n;
    scanf("%d", &n);
    
    printf("by 반복문 : %d\n", factorial1(n));
    printf("by 순환문 : %d\n", factorial2(n));
    
    return 0;
}

 

 

- 거듭제곱 함수

 

#include <stdio.h>

int power1(int x, int n)
{
    int result = 1;
    
    for(int i = 1; i <= n; i++)
        result *= x;
    
    return result;    
}

int power2(int x, int n)
{
    if(n == 0)
        return 1;
    else if(n % 2 == 0)
        return power2(x*x, n/2);
    else
        return x * power2(x*x, (n-1)/2);
}

int main()
{
    int x, n;
    scanf("%d %d", &x, &n);
    
    printf("by 반복문 : %d\n", power1(x, n));
    printf("by 순환문 : %d\n", power2(x, n));
    
    return 0;
}

 

 

 

10장. 배열

 

 

예제1. 난수로 배열 만들고 평균, 최댓값 구하기

 

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

#define N 100

void makeArray(int A[], int n)
{
    srand(time(NULL));
    
    for(int i = 0; i < n; i++)
        A[i] = rand() % 100;
}

void printArray(int A[], int n)
{
    for(int i = 0; i < n; i++)
        printf("%d ", A[i]);
    printf("\n");
}

int minArray(int A[], int n)
{
    int min = A[0];
    
    for(int i = 1; i < n; i++)
    {
        if(A[i] < min)
            min = A[i];
    }
    
    return min;
}

int maxArray(int A[], int n)
{
    int max = A[0];
    
    for(int i = 1; i < n; i++)
    {
        if(A[i] > max)
            max = A[i];
    }
    
    return max;
}

int main()
{
    int A[N];
    int n;
    scanf("%d", &n);
    
    makeArray(A, n);
    printArray(A, n);
    
    printf("%d %d\n", minArray(A, n), maxArray(A, n));
    
    return 0;
}

 

 

- 주사위 던지기

 

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

#define N 10000

int main()
{
    int dice[6] = {0};
    
    for(int i = 0; i < N; i++)
        dice[rand() % 6]++;
    
    printf("==============\n");
    printf("  면    빈도  \n");
    printf("==============\n");
    
    for(int i = 0; i < 6; i++)
    printf("   %d    %4.d  \n", i, dice[i]);
    
    return 0;
}

 

 

- 예제2. 이차원 배열에서 행의 합, 열의 합 구하기

 

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

#define N 100

void makeArray(int A[N][N], int r, int c)
{
    for(int i = 0; i < r; i++)
        for(int j = 0; j < c; j++)
            A[i][j] = rand() % 100;
}

void printArray(int A[N][N], int r, int c)
{
    for(int i = 0; i < r; i++)
    {
        for(int j = 0; j < c; j++)
            printf("%d ", A[i][j]);
        printf("\n");
    }
}

void sumArray(int A[N][N], int r, int c)
{
    int sumR, sumC;
    
    for(int i = 0; i < r; i++)
    {
        sumR = 0;
        
        for(int j = 0; j < c; j++)
            sumR += A[i][j];
            
        printf("%d ", sumR);
    }
    
    printf("\n");
    
    for(int j = 0; j < r; j++)
    {
        sumC = 0;
        
        for(int i = 0; i < c; i++)
            sumC += A[i][j];
            
        printf("%d ", sumC);
    }
    
    printf("\n");
}

int main()
{
    int A[N][N];
    int r, c;
    scanf("%d %d", &r, &c);
    
    srand(time(NULL));
    
    makeArray(A, r, c);
    printArray(A, r, c);
    sumArray(A, r, c);
    
    return 0;
}

 

 

- 예제3. 계산 결과 출현 횟수 구하기

 

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

int main()
{
    int a, b, c, num;
    int appear[10] = {0};
    
    scanf("%d %d %d", &a, &b, &c);
    num = a*b*c;
    
    for(int i = 0; i < 7; i++)
    {
        appear[num % 10]++;
        num = num / 10;
        printf("%d\n", num);
    }
    
    for(int i = 0; i < 10; i++)
        printf("%d ", appear[i]);
    
    return 0;
}

 

 

- 선택 정렬

 

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

// 선택 정렬

#define N 10

void selectionSort(int A[])
{
    printf("Before Sort. : ");
    for(int i = 0; i < N; i++)
        printf("%d ", A[i]);
    printf("\n");
    
    printf("\n<<<<<<<<<< Selection Sorting... >>>>>>>>>>\n\n");
    
    for(int i = 0; i < N-2; i++)
    {
        int min = i;
        for(int j = i+1; j <= N-1; j++)
            if(A[j] < A[min])
                min = j;
        
        int temp = A[min];
        A[min] = A[i];
        A[i] = temp;
        
        printf(" %d Pass >> ", i+1);
        for(int i = 0; i < N; i++)
            printf("%d ", A[i]);
        printf("\n");
        
    }
}

int main()
{
    int A[N];
    srand(time(NULL));
    
    for(int i = 0; i < N; i++)
        A[i] = rand() % 100;
    
    selectionSort(A);
    
    return 0;
}

 

 

- 삽입 정렬

 

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

// 삽입 정렬

#define N 10

void insertionSort(int A[])
{
    printf("Before Sort. : ");
    for(int i = 0; i < N; i++)
        printf("%d ", A[i]);
    printf("\n");
    
    printf("\n<<<<<<<<<< Insertion Sorting... >>>>>>>>>>\n\n");
    
    for(int i = 1; i < N-1; i++)
    {
        int key = A[i];
        
        int j = i - 1;
        
        while(j >= 0 && A[j] > key)
        {
            A[j+1] = A[j];
            j--;
        }
        A[j+1] = key;
        
        printf(" %d Pass >> ", i);
        for(int i = 0; i < N; i++)
            printf("%d ", A[i]);
        printf("\n");
        
    }
}

int main()
{
    int A[N];
    srand(time(NULL));
    
    for(int i = 0; i < N; i++)
        A[i] = rand() % 100;
    
    insertionSort(A);
    
    return 0;
}

 

 

 

11. 포인터

 

 

 

12. 문자열

 

 

예제1. 공백 삭제하기

 

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

#define N 100

void deleteSpace(char str[])
{
    char tmp[N];
    int k = 0;
    
    for(int i = 0; i < strlen(str); i++)
    {
        if(str[i] != ' ')
        {
            tmp[k] = str[i];
            k++;
        }
    }
    
    tmp[k] = '\0';
    strcpy(str, tmp);
}

int main()
{
    char str[N];
    fgets(str, sizeof(str), stdin);
    deleteSpace(str);
    printf("%s\n", str);
    
    return 0;
}

 

 

예제2. 문자열 속 문자 개수 세기

 

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

#define N 100

int strChr(char str[], char key)
{
    int count = 0;
    
    for(int i = 0; i < strlen(str); i++)
    {
        if(str[i] == key)
            count++;
    }
    
    return count;
}

int main()
{
    char str[N];
    char key;
    
    fgets(str, sizeof(str), stdin);
    scanf("%c", &key);
    printf("%d\n", strChr(str, key));
    
    return 0;
}

 

 

예제3. 문자열 속 단어 개수 세기

 

#include <string.h>

#define N 100

int countChr(char str[])
{
    char *token;
    int count = 0;
    
    token = strtok(str, " ");
    while(token != NULL)
    {
        count++;
        token = strtok(NULL, " ");
    }
    
    return count;
}

int main()
{
    char str[N];
    
    fgets(str, sizeof(str), stdin);
    
    printf("%d\n", countChr(str));
    
    return 0;
}

 

 

예제4. 문자열 역순으로 출력하기

 

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

#define N 100

void countChr(char str[])
{
    char *token[10];
    int i = 0;
    
    token[i] = strtok(str, " ");
    
    while(token[i] != NULL)
    {
        i++;
        token[i] = strtok(NULL, " \n");
    }
    
    for(int j = i-1; j >= 0; j--)
        printf("%s ", token[j]);
}

int main()
{
    char str[N];
    
    fgets(str, sizeof(str), stdin);
    
    countChr(str);
    
    return 0;
}

 

 

예제5. 문자열에서 단어 찾아서 바꾸기

 

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

#define N 100

int main()
{
    char str1[N], str2[N], find[N], replace[N];
    
    fgets(str1, N, stdin);
    fgets(find, N, stdin);
    fgets(replace, N, stdin);
    
    char *token;
    
    token = strtok(str1, " ");
    
    while(token != NULL)
    {
        if(strcmp(token, find) == 0)
            strcat(str2, replace);
        else
            strcat(str2, token);
        
        strcat(str2, " ");
        
        token = strtok(NULL, " ");
    }
    
    printf("%s\n", str2);
    
    return 0;
}

 

 

 

13. 구조체

 

 

예제1. 

 

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

typedef struct Bank
{
    int num;
    char name[20];
    int rest;
}Bank;

int main()
{
    Bank b;
    scanf("%d %s %d", &b.num, b.name, &b.rest);
    
    printf("%s의 %d계좌 잔액은 %d원\n", b.name, b.num, b.rest);
    
    return 0;
}

 

 

예제2.

 

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

typedef struct Bank
{
    int num;
    char name[20];
    int rest;
}Bank;

void test(Bank *a)
{
    scanf("%d %s %d", &a->num, a->name, &a->rest);
    printf("%s의 %d계좌 잔액은 %d원\n", a->name, a->num, a->rest);
}

int main()
{
    Bank b;
    
    test(&b);
    
    return 0;
}

 

 

예제3.

 

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

typedef struct Student
{
    int num;
    char name[20];
    float grade;
} Student;

void inputStudents(Student s[])
{
    for(int i = 0; i < 3; i++)
        scanf("%d %s %f", &s[i].num, s[i].name, &s[i].grade);
}

void findByName(Student s[])
{
    char name[20];
    scanf("%s", name);
    
    for(int i = 0; i < 3; i++)
        if(strcmp(name,s[i].name) == 0)
            printf("%d %s %.2f\n", s[i].num, s[i].name, s[i].grade);
}

void findByScore(Student s[])
{
    float grade;
    scanf("%f", &grade);
    
    for(int i = 0; i < 3; i++)
        if(grade <= s[i].grade)
            printf("%d %s %.2f\n", s[i].num, s[i].name, s[i].grade);
}

int main()
{
    Student s[3];
    inputStudents(s);
    findByName(s);
    findByScore(s);
    
    return 0;
}

 

 

 

14. 포인터 활용

 

 

 

Comments