#include <stdio.h>

#include <time.h>

#include <stdlib.h>


int Create();


int main ()

{

    int arr[5][5] = {0,};

    int number = 1;

    int i,j = 0 ;

    int tmp1, tmp2;

    

    srand(time(NULL));

    

    while ( number < 25)

    {

        tmp1 = Create();

        tmp2 = Create();

        

        if(arr[tmp1][tmp2]==0)

            {

                arr[tmp1][tmp2] = number;

                number ++;

            }

    }

    

    for(i = 0; i < 5; i++)

    {

        for(j = 0; j < 5; j++)

        {

            if(j%5 ==0)

            {

                printf("\n");

            }

            printf("%d " , arr[i][j]);

        }

    }

    system("pause");

}


int Create()

{

    int num;

    num = rand()%5;

    return num;

}





이거 5X5 배열에 1~25 까지 숫자 랜덤으로 넣는 방식임 ! 


코딩 복습 

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23

이 문제는 배열의 있는 문자열의 공백을 제고하고, 문자열의 갯수를 세어주는 프로그램임 


|| 연산자랑 && 연산자랑 햇갈려서 잠깐 고민했음 

잠깐임

잠깐

아주잠깐


#include <stdio.h>

#include <string.h>


void compress_line(char str[]);


int main()

{

    char str[] = " Is it fun   !";

    compress_line(str);

    printf("%s: %d \n",str, strlen(str));

}


void compress_line(char str[])

{

    int i =0, j=0;

    char compressed[100];

    char prev = '\0';

    

    while(str[i] == ' ') //앞부분의 공백 제거

        i++

        

        while(str[i] != '\0') //str배열의 값이 \0이 아닐때까지 반복해라 -> 배열의 끝까지 반복해라

        {

            if(str[i] != ' ' || prev != ' ') // 만약 str[i] 가 공백이 아니거나 prev 가 공백이 아니라면

            {

                compressed[j] = str[i]; // str[i] 번째에 있는 값을 compressed[j] 에 대입해라

                j++; // 그리고 j 를 증가시켜 다음 글자를 받을 준비를 해라

            }

            prev = str[i];

            i++;

        }

    if(prev == ' ')

        j--;

    

    compressed[j] = '\0';

    

    strcpy(str, compressed);

}



'개인공부 > C ' 카테고리의 다른 글

배열과 반복문 복습  (0) 2018.07.10
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23

함수에 관한 전반적인 내용은 이미 다 알고있지 .. 하지만 복습 개념으로 시작해씀 ! 


어찌 되었든 블로그에 정리해야 하니 정리를 하자면 


중요내용은 


1. 함수를 설계할때 UI, 부분과 기능 부분을 분리해서 구현해라 ! 

ex) 나이를 입력받아서 나이에 해당하는 요금을 계산하는 함수일 경우 


나이를 입력받는 UI 부분과, 요금을 계산하는 기능 부분으로 나누어서 구현학자 


2. 함수 원형이랑, 함수 시그니처랑은 같은말임 


일반적으로 함수 구현해서 원형선언(나는 원형선언이라함) 할때 


#include <stdio.h>


int Add(int a, int b) ;  <----------------------이거 말하는거임 이게 함수 원형선언 이라고 하고 또한 함수 시그니처 선언 이라고 함     


int main()

{

blah blah ~~

}


그렇다고 카더라 ~ 

'개인공부 > C ' 카테고리의 다른 글

배열과 반복문 복습  (0) 2018.07.10
자료구조 연습문제 복습  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23

c언어에서 호출하는 방식의 차이임 


총 3가지가 있음 


1. call by value (값에 의한 호출)

2. call by address (주소에 의한 호출)

3. call by reference ( 참조에 의한 호출)


예제를 통해 하나씩 살펴보자 


1. call by value 

예를들어 다음과 같이 두개의 매계변수를 받아 두 수를 교환하는 프로그램이 있다고 해보자


#include <stdio.h>


void swap(int x, int y)

{

    int tmp;

    tmp = x;

    x = y;

    y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(a,b);

    

    printf("%d , %d \n", a,b);

}



일케해서 프린트 문 찍으면 바뀔거 같은데 안바뀜 , 그냥 바뀌는건 swap() 함수내에서만 바뀌고 메인에서는 int a = 20; int b = 30 이니까 출력이 20 , 30 걍 일케댐 그럼 어케해야 


하냐 해서 나온게 call by address 임 


2. call by address

위에랑 똑같은 프로그램인데 이번엔 좀 다름 자세히 봐보셈 ㅋ 


#include <stdio.h>


void swap(int *x, int *y)

{

    int tmp;

    tmp = *x;

    *x = *y;

    *y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(&a,&b);

    

    printf("%d , %d \n", a,b);

}


짜라잔 ! 뭐가 달라졌는지 틀린그림 찾기 해보셈 총 3개임 !

하나. swap 함수에서 매개변수로 받는데 갑자기 *이 붙어버림
둘   . 그리고 swap 함수 내 x , y 앞에도 *이 붙어버림 
셋  . 마지막으로 메인 함수에서 swap 함수 호출할때 넘겨주는 인자값에 & 가 붙어버림 


여기서 알고 가야 할 사실 2개 
포인터에서 변수 앞에 & 가 붙으면 뭐다 ? 주소값
포인터에서 변수 앞에 * 가  붙으면 뭐다 ? 실제값

이해갔지 ? 

바바 만약

#include <stdio.h>


int main()

{

    int a = 20;

    int *p = &a;;

    

    printf("%d\n", a);

    printf("%d\n", &a);

    printf("%d\n", *p);

}



일케 있으면 &a 는 a변수가 메모리에 저장된 메모리 주소값이 나올꺼고 *p 는 20이 나올꺼임 ㅇㅇ 이해 안간다면 포인터 를 다시 공부하셈 (양주종의 코딩스쿨 - 여기 포인터 강의 좋음)

다시 돌아가서 swap(&a, &b) 로 a, b 의 주소값을 매계변수로 넘겨주고 실제 그 값(*x , *y 를 통해) 을 변경해 주기 때문에 저건 바뀌여서 출력됨 ㅇㅇ 

마지막으로 call by reference 이건데 이건 C문법이 아니라 C++ 문법임 

그래서 혹시라도 테스트 해보려면 확장자가 .c  가 아닌 .cpp 환경에서 해야할거임 아마도 ㅇㅇ 

3. call by reference 

#include <stdio.h>


void swap(int &x, int &y)

{

    int tmp;

    tmp = x;

    x = y;

    y = tmp;

}


int main()

{

    int a = 20;

    int b = 30;

    

    swap(a,b);

    

    printf("%d , %d \n", a,b);

}


call by reference 이거는 엄청 간단함 == 편함 == 좋음

그냥 매개변수에다가 & 를 통해 주소값을 참조하게 해줌 call by address 랑 비슷하지만 다름 뭐가 다른진 정확히 설명할수 없지만 머릿속으론 알고있음 

쨋든 이건 call by value 랑 똑같은데 그냥 매개변수에 & 를 통해 주소값을 넘겨줘 버리면 swap 이 댐 ㅇㅇ 굿 


정리 끝

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

구구단을 찍는 문제이다 .


사용자 입력값이 구구단 단수가 된다.


  1 #include <stdio.h>

  2 

  3 int main()

  4 {

  5         int i,n ;

  6 

  7         scanf("%d" , &n);

  8 

  9         for(i=1; i<=9; i++)

 10                 printf("%d * %d = %d\n", n,i,n*i);

 11 

 12         return 0;

 13 

 14 }


이게 답이다


'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2742번: 기찍 N  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

2742번 문제와 유사하다 근데 거꿀로 찍으면 된다.


그래서 조건문을 수정해 주었다 


사용자가 주는 인풋값을 i의 초기값으로 주어서 역순으로 찍게 만들었고, i 의 값의 최소값을 0으로 잡아주어 0 이하로 내려가지 못하게 하였으며, 역순으로 가기위해 i-- 옵션을 주었다.


처음에 0이하로 찍게 못해서 존나 내려가다가 랙걸림 ㅋ



  1 #include <stdio.h>

  2 

  3 int main()

  4 {

  5         int n,i;

  6         scanf("%d" , &n);

  7 

  8         for(i=n; i>0; i--)

  9                 printf("%d\n",i);

 10 

 11         return 0;

 12 }

 13 


끄읏!

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2741번:N 찍기  (0) 2018.01.23

이건단순 for 문을 이용하는 문제이다. 



입력이 5로 주어지면

1

2

3

4

5

일케 출력하는 문제



#include <stdio.h>


int main()

{

int n,i ;

scanf("%d" &n); 


for(i=1; i<=n; i++)

printf("%d\n", &i);


return 0;

}


끝 노잼이다

'개인공부 > C ' 카테고리의 다른 글

자료구조 연습문제 복습  (0) 2018.07.02
독하게 시작하는 C프로그래밍 10강 함수  (0) 2018.07.02
Call - By  (0) 2018.05.17
백준 2739번: 구구단  (0) 2018.01.23
백준 2742번: 기찍 N  (0) 2018.01.23

+ Recent posts