교재 : C언어로 쉽게 풀어쓴 자료구조 (천인국, 공용해, 하상호 지음)

자료구조를 배위기 위한 C언어 기본문법 정리

  1. 예제_1 : 가격계산
#include <stdio.h>
#include <stdlib.h>

int main(void){
    int K , N ,M ; 
    // K(가격), N(햄버거 개수), M(지갑에 있는 돈)
    scanf("%d %d %d", &K, &N, &M);
    // 각각의 값을 scanf함수로 받음
    int total = K*N;
    //총 햄버거의 가격
    if (total > M){
        printf("%d\n" ,total -M);
        // 가격이 부족한 경우
    }
    else {
        printf("0\n");
    }
    return 0;
}

  1. 예제_2 : 성적 출력
#include <stdio.h>

int main(void){
    int score ;
    scanf("%d", &score); // 성적 입력

    if(score<0 || score>100) // 0~100 이외 값 처리
        printf("Wrong Input\n"); 
    else{ //각각 점수에 맞게 성적 출력
        if(score >=90 && score <=100)
            printf("A\n");
        else if(score >=80 && score <90)
            printf("B\n");
        else if (score >= 70 && score <80)
            printf("C\n");
        else 
            printf("D\n");
    } // else

    return 0;
}

  1. 예제_3 : 입력받은 정수를 각각의 자릿수에 맞게 출력
#include <stdio.h>

int main(void){
    int N ;
    scanf("%d", &N); // 정수 입력
    while(N!=0){ // 정수값이 0보다 큰 경우
        printf("%d\n", N%10); 
        N = N/10; 
    } // while

    return 0;
}
  1. 예제_4 : 정수를 입력받아 1~N까지 홀수와 짝수의 합 구하기
#include <stdio.h>

int main(void){
    int N; 
    scanf("%d", &N); //정수 입력
    int evenSum = 0; // 짝수 합 
    int oddSum = 0; // 홀수 합
    // 합은 0으로 초기화 시켜주는게 좋음

    for (int i=1; i<=N; i++){
        if (i%2 == 0) //짝수 조건
            evenSum = evenSum + i;
        else
            oddSum = oddSum +  i;
    }
    
    printf("%d\n%d\n",evenSum, oddSum);
    return 0;
}
  1. 예제_5 : 추를 이용한 경우의 수
#include <stdio.h>
//함수 구현
void sumOfWeghit(int G){ 
    // 3중 반복문을 이용하여 모든 경우의 수 확인
    int cnt = 0;
    for (int i=1; i<11; i++)
        for(int j=1; j<11; j++)
            for(int k=1; k<11; k++)
                if((2*i + 3*j + 5*k) == G ){
                    printf("%d %d %d\n", i, j, k);
                    cnt ++;
                }
    // 경우의 수 출력
    if (cnt == 0){
        printf("%d\n" , cnt);
    }
    else{
        printf("%d\n", cnt);
    }
};



int main(void){
    int G ;
    scanf("%d" , &G);
    sumOfWeghit(G);
    return 0;
}
  1. 예제_6 : 1차원 배열에 1~100 난수를 저장 후 최댓값 구하기

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 최댓값 함수 구현 값을 반환해야 하므로 int자료형으로 선언
int findMax(int A[], int N){ //배열과 정수 인자
    int Max = A[0]; //초기 최댓값은 모르기 때문에 배열의 첫번째 Index값을 삽입
    for(int i=1; i<N; i++){
        if (Max <= A[i]){ //Max값보다 더 큰 값이 존재하면 
            Max = A[i]; // 교체 
        }
        else{
            continue;
        }
    }
    return Max;
};

int main(void){
    int A [50], N;
    scanf("%d", &N);

    srand(time(NULL)); //실행마다 항상 바뀌기 때문에 rand에서는 seed값이 항상 변함

    for (int i=0; i<N; i++){
        // C에서 rand에서는 seed값이 고정되어있어서 seed값을 time값으로 난수 발생
        A[i] = rand()%100 +1; // 1~100 사이 난수
    }
    for (int i=0; i<N; i++){
        printf("%d ", A[i]);
    }
    printf("\n");
    printf("%d\n", findMax(A, N)); // 함수 실행
    return 0;
}
  1. 예제7 : 주사위를 10000번 던져 각 면이 나오는 횟수를 시물레이션 하는 프로그램 작성

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

int main(){
    int arr[6] ={0};
    //  여러개를 한번에 0으로 초기화
    srand(time(NULL));
    for(int i=0; i<10000; i++){
        arr[rand()%6]++;
    }
    for(int i=0; i <6; i++){
        printf("%d %d\n", i+1, arr[i]);
    }



    return 0;
}
  1. 예제 8: 2차원 배열 생성

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

int main(){
    int Arr[3][4] ={
        {0,1,2,3},
        {10,11,12,13},
        {20,21,22,23},
    };
    for(int y=0; y<3; y++)
    {
        for(int x=0; x<4; x++){
            printf("%2d ", Arr[y][x]);
        }
        printf("\n");   
    }


    return 0;
}

  1. 예제9 : 2차원 배열의 임의의 수를 입력받아 각 행과 열의 합을 출력

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

int main(){
    int arr[3][4]; //2차원 배열 생성
    srand(time(NULL)); //랜덤 시드 
    int y_sum = 0;
    int x_sum = 0;

    for (int y=0; y<3; y++){
        for(int x=0; x<4; x++){
            arr[y][x] = rand() % 40+60;
        }
    }
    

    for(int i=0; i<3; i++){
        x_sum = 0;
        for(int j=0; j<4; j++){
            x_sum = x_sum + arr[i][j];
        }
         printf("%d %d", i, x_sum);
    }
    printf("\n");
    return 0;
}

  1. 예제10 구조체를 사용하여 접근해보기
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int account;
    int balance;
    char name[20];
    // 정보 입력
} Bank; //구조체 별명

int main(){

    Bank a;
    scnaf("%d %s %d", &a.account, &a.name, %a.balance);
    printf("%d %s %d\n", a.account, a.name, a.balance);

    return 0;
}

  1. 구조체 응용
#include <stdio.h>
#include <stdlib.h>

typedef struct 
{
    int account;
    int balance;
    int name[20];
}Bank; //구조체

void deposit(Bank *a, int amount)
{
    //(*a).balance += amount ;
    a->balance += amout ;
    printf("%d %s : %d\n", a->account, a->name, a->balance);
}

int main(){

    Bank a;
    scanf("%d %s %d", &a.account, a.name, &a.balance);
    printf("%d %s: %d\n", a.account, a.name, a.balance);

    deposit(&a, 10000);
    printf("%d %s: %d\n", a.account, a.name, a.balance);
    //구조체 변수는 레퍼런스를 가지고 있지않다. 클래스 객체와 구조체와의 차이이다. 즉 , 인자로 a를 주면 call by value , 인자로 &a를 주면 call by reference이다 

    return 0;    
}
//Main함수에는 구조체를 접근할 때 .으로 접근하지만 사용자 정의 함수에서는 구조체 주소와 ->를 쓴다.