블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday


    - for(초기식; 조건식; 증감식) 명령문

    → 초기식: 처음 한번만 수행되는 식(식을 여러개 쓸 수도 있다. i=1,j=0), 식의 생략도 가능

    → 조건식(while문과 동일)

    → 명령문: 끝에 매번 수행(초기식과 마찬가지로 식을 여러개 쓸 수 있다.), 식의 생략 가능


    초기식, 조건식, 증감식은 괄호로 묶고, 그 사이에 세미콜론을 찍는다. 초기식에는 제어변수의 초기값을 설정한다. 조건식은 논리식으로 반복을 계속할 것인지 중단할 것인지 여부를 결정한다. 증감식에는 제어변수의 값을 증가 도는 감소시킨다.


    #include<stdio.h>

    int main()

    {

            int i;

            for(i=1,j=100;i<=5;++i,j=j+100) /* ① 조건식으로, 매번 반복할 때마다 논리식을 계산하여 제어변수 i의 값이 5보다 작거나 같으면(참) 명령문을 수행하고 거짓이면 반복을 끝내고 다음의 명령문을 실행한다. ② 초기식과 조건식에는 식을 여러개 쓰거나 생략할 수 있지만 조건식에는 하나의 식만 들어갈 수 있다.*/

            {

                    printf("%d\t",i); // 한줄이므로 중괄호를 생략할 수 있지만 중괄호를 사용하는 쪽이 한눈에 보기에 훨씬 좋다.

            }

            putchar('\n'); // for문이 끝나고 한번 수행

            printf("%d\t",j); // j의 값이 출력된다. → 600

            return 0;

    }

    ⇒ for문의 경우 (i=1,j=100;i<=5;++i,j=j+100)는

            for(i=1,j=100;

               i<=5;

               j=j+100) 과 같다.(하지만 이렇게 쓰는 것은 역시 한눈에 보기에 좋지 않으므로 사용하지는 않는다.)


    ⇒ 위의 for문을 while문으로 바꾸어 보면 (①번만)

            i=1; // 초기식

            while(i<=5) // 조건식

            {

                    printf("%d\t",i);

                    ++i; // 증감식

            }

      으로 되며, for문과 같은 동작을 수행한다.

    ⇒ 위의 for문을 (①번만)

            i=1; // 초기식

            for(;i<=5;) // 조건식

            {

                    printf("%d\t",i);

                    ++i; // 증감식

            }

      로 써도 역시 동일하다.


    for문 흐름도(flow chart)

     

    ① 초기식 - 처음 한번만 실행된다.

    ② 조건식 ③증감식 ④ 출력 → ②, ③, ④가 조건내에서 반복된다.


    ⇒ for(i=1;i<=5000;++i); → for문 뒤에 바로 ;(세미콜론)을 붙이면 50000까지 증가하는 과정만을 반복한다.

     → 그러나 요즘의 컴파일러는 최적화를 시켜 일일이 계산하지 않고 50000을 바로 출력해 낸다.

     → 최적화는 컴파일러에 따라 CPU에 따라 다른 결과를 내는 경우가 얼마든지 있다.(컴파일러는 gcc 등의 무료 프로그램 보다는 유료 컴파일러 등이 더 낫다. - 하지만 gcc의 경우 세상에서 가장 방대한 컴파일러이다.)

    ⇒ 최적화: 시간제한을 줄이는 것.

     → CPU와 Memory, Bus 중 CPU 내부가 가장 빠르다. 그래서 CPU에서 버스를 거쳐 메모리를 왔다 갔다 하며 반복하는 계산은 CPU 내에서 하는 계산보다 느리며, 그렇기에 CPU안에는 캐시가 있어 그 안에 값을 두어 계산을 하며 최적화를 한다.


    ⇒ volatile → 최적화 하지 않는다.(캐시에 집어넣지 않는다.)

     → volatile int i; // 변수 i를 최적화 하지 않는다.(→ 캐시에 집어넣지 않고 CPU가 버스를 통해 메모리를 이동하며 계산한다. 임베디드에서 주로 쓰인다.)



    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함