검색결과 리스트
전체 글에 해당되는 글 201건
- 2014.03.18 [smart]이재우-20140318
- 2014.03.17 [smart]이재우-20140317
- 2014.03.14 [smart]이재우-20140314
글
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 |
설정
트랙백
댓글
글
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 |
설정
트랙백
댓글
글
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 |
RECENT COMMENT