C++프로그래밍

2013.05.13_J-K플립플롭,T,D_열거형_공용체_조건문

성엽이 2013. 5. 13. 21:33

________________________논리회로__________________________

J-K 플립플롭

T 플립플롭

플립플롭의 동작 특성

 

________________________________________________________________

________________________C 수업______________________________

열거형 (enum)

#include <stdio.h>

enum day_type

{

//sun,
mon,
tue,
wed,
thu,
fri,
sat,
smart,
DAY_END


};

char caDay[][10] = { //"sunday",

"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"smartday" };

int main()
{
int iCnt;
int iDay;
char Buff[11];

for(iCnt = 0; iCnt < DAY_END; ++iCnt)
{
printf("%s\n", caDay[iCnt]);
}


printf("숫자를 넣으세요\n");
scanf("%d", &iDay);

iDay = iDay%DAY_END; //DAY_END 이상의 숫자가 나오지 않게 하기 위해 %DAY_END
printf("%s\n", caDay[iDay]);

printf("찾고자하는 요일을 입력하시요\n");
iDay= read(0, Buff, sizeof(Buff)-1 );
--iDay;
Buff[iDay] = 0; // '\n' 제거하기 위함

for(iCnt = 0; iCnt < iDay; ++iCnt)
{
Buff[iCnt] = tolower(Buff[iCnt]);//소문자로 변환

}


for(iCnt = 0; iCnt < DAY_END; ++iCnt)
{

if(0 == strncmp(Buff, caDay[iCnt], iDay))
{
printf("%s\n", caDay[iCnt]);
//break;
}
}
/*
if(iCnt == DAY_END)
{
printf("찾고자 하는 요일이 없습니다.\n");
}
*/


return 0;


}

 

공용체(union)

공용체 : 예약어 union

※ 공용체의 선언은 구조체의 경우와 같으나 컴파일러는 구조체처럼 각 멤버를 위해서 독립된 공간을 마련하는것이 아니라

가장 큰 멤버를 수용할수 있는 공간만 할당함. 그리하여 주어진 일정한 메모리를 함께 사용함.

※ 공용체 멤버의 접근은 구조체와 같은 방법을 사용하며 동시에 두 멤버를 사용할수는 없다.

#include <stdio.h>


union SMART
{
unsigned int a; // 가장 큰 멤버를 수용할수 있는 공간으로 할당함. 여기서는 변수 a 이다.
unsigned short b;
unsigned char c;

};

int main()
{
union SMART val;

val.a = 0x12345678;
val.b = 0xabcd;
val.c = 0xef;

printf("%X\n", val.a);
printf("%X\n", val.b); // b는 a에서 b만큼 덮어씀,

printf("%X\n", val.c); // c는 a에서 c만큼 덮어씀.

return 0;
}

★ 공용체에서 가장큰 크기인 a 변수 크기만큼 4바이트 확보하고

위의 그림과 같이 b와 c가 모두 같이 확보된 4바이트를 사용함.

const

const는 변수나 인수의 선언에서 사용됨.

※ 변수의 선언에서 사용되었을 경우에는 프로그램 내에서 변수의 값이 수정될수 없고 함수의 인수에서 선언되었을 경우

함수 내에서 인수의 값을 수정할수 없다.

예> const int apple;

const int banana = 24;

위의 예에서 변수 apple의 값은 초기화 되지 않아 쓰레기 값을 가지고 있지만 const가 쓰였으므로 프로그램 내에서 바뀔수 없음.

banana는 24로 초기화는 되었지만 그후에 banana 변수로 접근하여 수정은 불가능하다 하지만 포인터를 이용하여 접근하면

수정할수 있다.

const int *ip;

int를 제한하기 때문에 ip의 값은 변할수 있지만 항상 정수형 상수를 가리켜야 함.

int *const ip;

ip를 제한하기 때문에 항상 같은 번지를 가리키게 됨.

const int * const ip;

int와 ip모두를 제한하기 때문에 ip는 항상 같은 번지를 가리키고

그 번지에 저장된 값도 수정 될수 없다.

 

 

조건연산자(삼항연산자)

/* (수식1)? 수식2 : 수식3

수식1 조건이 만족하면 수식2

수식1 조건이 만족하지 않으면 수식3

*/

#include <stdio.h>

int main()
{
int iNum;

scanf("%d", &iNum);

printf("%s\n", (1 == iNum)? "yes" : "no");//입력받은 iNum값이 1이면 yes 아니면 no가 출력됨.


return 0;
}

do-while 문

#include <stdio.h>

int main()
{
int i = 0;
int num = 0;
int sum = 0;

do//do-while문은 먼저 블록안의 내용을 한번 수행하고 조건을 검사함.
{
scanf("%d", &num);
sum = sum+num;
++i;

}while(i < 5);

printf("SUM : %d", sum);

return 0;
}

goto문과 라벨(label)

#include <stdio.h>

int main()
{
int iNum;

SMART: //레이블

printf("숫자를 입력하시오\n");

scanf("%d", &iNum);

if(0 == iNum)
{
return 0;
}

goto SMART; //goto문은 레이블이 명시된 위치로 점프

//goto문은 한 한수 내에서만 사용될수 있으며 다른 함수 내에 있는 레이블

//제어를 옮겨 갈수는 없음.

return 0;
}


________________________________________________________________________________________________