728x90

 

2014.03.18 수업 ver1_0a.docx

2014. 03. 18 수업 및 과제 


1 포인터(Pointer)의 이해 

  1.1 메모리 구조

- 일반적[1 byte(8 bit) 단위 마다 주소(address)를 지정]

- &변수명 :address 지정

[예제]

#include <stdio.h>
int main()
{
  int iNum=0;
  printf("%d \n", iNum);            /* 0 */
  printf("%d \n"&iNum);          /* 1245044 */
  printf("%X \n"&iNum);          /* 12FF74 */
  printf("%08X \n"&iNum);     
/* 0012FF74   08X: 8자리 빈자리에 0입력 16진수 출력*

  printf("%p \n", &iNum);          /* 0012FF74 
%p: 포인터의 16진수 주소값 출력*/

  
return 0;
}

 

  1.2 포인터(Pointer)설명

* : 주소(단항 /캐스팅) = 캐스팅 연산자 역할 (일시적인 형변환)

* : 값(단항)

 [예제]

#include <stdio.h>
int main()
{
  int iNum = 0;
//  &iNum = 100;                       컴파일 waring C4047  &iNum   같지않다 int형 (100)  

 iNum 의 주소상수(&) 를 의미함

 

//  (int*)0x12FF74 = 100;       컴파일 waring C4047  (int *)0x12FF74 같지않다 int(100)   

                                               iNum 의 주소상수(&) 를 의미함

  *(int*)0x12FF74 = 100;       *(int*)0x12FF74 좌변은 iNum 의 변수 를 의미    
  printf("%08X \n"&iNum);

 

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

 

  *(&iNum) = 1000;                (int *)0x12FF74 = &iNum 이랑 같다.  
                                        *& 가 만나면 서로 상쇄된다.  
  printf("%08X \n"&iNum);
  printf("%d \n", iNum);
  return 0;
}

 

1.3 캐스팅 연산자

* : 곱셈(2항 )

[예제]

#include <stdio.h>
int main()
{
  int iNum=0;
  int iAddr=0;  
  int *iP;

  iAddr=(int)(&iNum);          warning error       

iAddr=&iNum;   -> 좌변은 int(정수형) 우변은 int * (정수형 주소상수) 


  printf("%08X \n", iAddr);     // 0012FF6C   &iNum 주소값

  *( (int*)iAddr )=1000;    // 1000을 iAddr 주소 포인터에 넣어라. 
  printf("%d \n", iNum);        // 1000         1000출력

  iP=&iNum;
  *iP=999;

  printf("%d \n", iNum);        // 999       

  return 0;
}

 [결과]  

 

 

1.4 point 연산자 활용

[예제]

#include <stdio.h>
int main()
{
  int   iNum=0;
  int *   iP=&iNum;
  
  printf("%d \n", iNum);       // 0             iNum 변수값
  printf("%08X \n"&iNum);   // 12FF70    iNum 자신의 주소값
  printf("%08X \n", iP);    // 12FF70       iP 변수(&iNum주소)값
  printf("%08X \n"&iP);    // 12FF74    *iP 자신의 주소값    
  printf("%d \n", *iP);    // 0              &iP 주소가 가리키는 변수(iNum)의 값

  return 0;
}

[결과]

 

 

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140320  (0) 2014.03.20
[smart]이재우-20140319  (0) 2014.03.19
[smart]이재우-20140317  (0) 2014.03.17
[smart]이재우-20140314  (0) 2014.03.14
[smart]이재우-20140313  (0) 2014.03.13
728x90

2014.03.17 수업 ver1_0a.docx

 

20140317_수업예제.docx

2014. 03. 17 수업 및 과제 


1 continue & break 

  1.1 break

-Switch, 반복문(if else, for, while) 에 쓰임

-break를 만나면, 프로그램을 빠져나감 

  1.2 continue

-for문에서 continue를 만나면 증감수행으로 돌아감

-while(조건)문에서  continue를 만나면 조건으로 돌아감

 

[예제1]구구단을 출력하되 짝수 단(2단, 4단, 6단, 8단)만 출력되도록 하자, 또한 2단은 2 x 2까지, 4단은 4 x 4까지,

6단은 6 x 6까지, 8단은 8 x 8까지, 출력되도록 프로그램 구현

#include <stdio.h>
int main()
{
  int iNum, iDan;
  
  for(iDan=1 ; iDan<10 ; iDan++)
  {
    if(iDan%2!=0)
    continue;
  
    for(iNum=1 ; iNum<10 ; iNum++)
    {
      if(iDan<iNum)
        break;
      printf("%d * %d = %d \n", iDan, iNum, iNum*iDan);
    }
    printf("\n");

  }
  printf("\n");
  return 0;
}

[실행]  

 

[예제2] 다음 식을 만족하는 모든 A와 Z를 구하는 프로그램 작성 

 

#include <stdio.h>
int main()
{
  int iA, iZ;
  int iResult;
  for(iA=0;10>iA;iA++)
  {
    for(iZ=0;10>iZ;iZ++)
    {
/*      if(iA==iZ)
        continue;
*/
      iResult=(iA*10+iZ)+(iZ*10+iA);
      if(iResult==99)  
        printf("%d%d+%d%d=%d \n", iA, iZ, iZ, iA, iResult);
    }

  }

  return 0;
}

[결과] 

2 switch & case

구간, 범위를 설정 할 때는 if문이 유리

특정 조건이 정해진 때는 switch case문이 유리

  2.1 switch(정수형 변수)

   조건: 정수형 변수만 올 수 있음

  2.2 case(상수형 정수)

   조건: 상수형 정수만 올 수 있음

   [예제]

#include <stdio.h>
int
 main()
{
  
int
 iNum;
  printf(
"숫자을 입력:"
);
   scanf(
"%d"&
iNum);

  
switch
(iNum)
  {
  
case
 1:
    printf(
"1를 입력하였습니다.\n"
);
    
break
;
  
case
 2:
    printf(
"2를 입력하였습니다.\n"
);
    
break
;
  
case
 3:
    printf(
"3를 입력하였습니다.\n"
);
    
break
;
  
case
 4:
    printf(
"4를 입력하였습니다.\n"
);
    
break
;
  
case
 5:
    printf(
"5를 입력하였습니다.\n"
);
    
break
;
  
default
:
    printf(
"잘 못 입력 하였습니다!\n"
);
    
break
;                                                 /* 생략되어도 되나 일반적으로 다 적어 줌 */
  }
  
return
 0;
}

[결과] 

3 goto문

프로그램 시 사용하지 않는 것이 좋다.

  2.1 goto문 무한루프

:AAA
printf("무한루프\n");
goto AAA;


 

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140319  (0) 2014.03.19
[smart]이재우-20140318  (0) 2014.03.18
[smart]이재우-20140314  (0) 2014.03.14
[smart]이재우-20140313  (0) 2014.03.13
[smart]이재우-20140312  (0) 2014.03.12
728x90

 

2014.03.14 수업 ver1_0a.docx

2014. 03. 14 수업 및 과제 


1. for문의 구조와 이해

 

 

for문 예시 .아래 문장들은 5번,6번 문장을 제외 한 모두 같은 결과 

#include <stdio.h>
int main()
{
  int iNum1;
  int iNum2;
/*1-----------------------------------------------------------------  
  for(iNum1=1,iNum2=0 ; iNum1<5 ; iNum1=iNum1+1,iNum2=iNum2+2)
  {
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
  }
초기식 , 증감식은 콤마(,)구분으로 여려 문장을 쓸 수 있음*/

/*2-----------------------------------------------------------------
  iNum2=0;

  for(iNum1=1; iNum1<5 ; iNum1=iNum1+1)
  {
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
    iNum2=iNum2+2;
  }
*/

/*3-----------------------------------------------------------------
  iNum1=1;
  iNum2=0;

  for( ; iNum1<5 ; )
  {
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
    iNum2=iNum2+2;
    iNum1=iNum1+1;
  }
*/

/*4-----------------------------------------------------------------
  iNum1=1;
  iNum2=0;

  while(iNum1<5)
  {
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
    iNum2=iNum2+2;
    iNum1=iNum1+1;
  }
*/

/*5-----------------------------------------------------------------
  for(iNum1=1,iNum2=0 ; iNum1<5 ; iNum1=iNum1+1,iNum2=iNum2+2)
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
처리 문장이 한줄 일때는 중괄호 생략 가능*/

/*6-----------------------------------------------------------------
  iNum2=0;

  for(iNum1=1; iNum1<5 ; iNum1=iNum1+1)
    printf("iNum1=%d, iNum2=%d\n", iNum1, iNum2);
    iNum2=iNum2+2;
처리 문장이 두줄 일때는 두번째 문장 한번만 실행*/


  return 0;
}

     [결과]

 

2. 무한 루프 예

[예제]

#include <stdio.h>
int main()
{
  unsigned int uiCnt=0;
      for(;;) /* 무한루프 조건식 공백 같은 결과 while(1) */
  {
    printf("%u \n", uiCnt);
    ++uiCnt;
  }
  
return 0;
}

[결과]

0에서 1증가 하면서 무한 반복 

 

3. 조건적 실행과 흐름의 분기

  3.1 if문

 참이면 실행 거짓이면 건너뜀

[예제1]

 #include <stdio.h>
int main()
{
  int iNum;
  scanf("%d"&iNum);
  printf("입력하신 숫자는 %d입니다.\n", iNum);

  if(100<iNum) /* 조건이 참이면 실행/ 아니면 분기(건너뜀)*/
  {
    printf("입력하신 숫자는 100보다 커다\n");    
  }
  return 0;
}
 
 

[결과] 

 

[예제2]

#include <stdio.h>
int main()
{
  int iNum;
  
  for(iNum=1; iNum<100; ++iNum)
  {
    if(   (0==(iNum%3) ) || (0==(iNum%4) )   )    연산우선 순위 비교를 괄호를 필히 해준다.

{                                                   문장의 명확을 위해 중괄호를 해주는 것이 좋다.*/
        printf("3 or 4 배수 %d \n",iNum);
}

  }  return 0;
}

[결과]

 

3.2 if~else

 if절의 조건이 참이면 if블록 거짓이면 else블록 실행

 else은 if가 반듯이 있어야 가능한 문장

[예제]

#include <stdio.h>
int main()
{
  int iNum;
  printf("정수 입력:");
  scanf("%d"&iNum);

  if(iNum>0)
  {
    printf("%d이 0보다 큰 수\n", iNum);
  } 
  
else
  {
    printf("%d이 0보다 작은 수\n", iNum);
  }
  
return 0;
}

[결과]

 

3.3 if else if문

셋 이상의 블록 중 하나를 선택해서 실행

 

 

3.4 삼항 연산자

조건 ? data1 : data2

조건이 참이면 data1반환 거짓이면 data2 반환

 

int iNum3= (iNum1>iNum2) ? (iNum1) : (iNum2);

 

[예제]

#include <stdio.h>
int main()
{
  int iNum1, iNum2;
  int iResult;

  printf("두 개의 정수 입력: ");
  scanf("%d %d"&iNum1, &iNum2);

  iResult= (iNum1>iNum2) ? iNum1-iNum2:iNum2-iNum1;
  printf("뺄셈의 결과: %d \n",iResult);

  return 0;
}

[결과]

 

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140318  (0) 2014.03.18
[smart]이재우-20140317  (0) 2014.03.17
[smart]이재우-20140313  (0) 2014.03.13
[smart]이재우-20140312  (0) 2014.03.12
[smart]이재우-20140311  (0) 2014.03.11