달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

오전) 아트메가 각 버스별 비트숫자가 의미하는 명령어

 

오후) 링크드 리스트

 

핵심 : 중간삽입은...

삽입할 구조체가 stpnew라 카므는..

조건 만족시에,

stpfront->next=stpnew;

stpnew-next=rear;

즉 stpnew가 앞 놈의 next고, 자신의 next는 뒷 놈으로 넣는다.

 

 

 

 

조건 식은... stpnew->data가 stprear->데이타 보다 작다는 것.

 

아, 열 핵심스러운 설명이네요. 감탄감탄+_+;

 

 

 

위 코드는 아래와 같습니다.

 

void Node_Insert(Node * head,char Cdata)
{
 Node* stpfront=head;
 Node* stprear=head;
 
 Node* stpnew=malloc(sizeof(Node));
 stpnew->data=Cdata;
 stpnew->next=0;
 

 while(stprear->next!=0)
 {
  stpfront=stprear;
  stprear=stprear->next;
  if(stprear->data>stpnew->data)
  {
   stpfront->next=stpnew;
   stpnew->next=stprear;
   
   break;
  }
 }

}

 

이상으로,

링크드리스트 중간삽입에 대하여 알아보았습니다.

 

 

Posted by C언어 보이
|

문제 연결리스트 삽입.

: 연결리스트코드로  'a->b->c->null'로 출력되게 되어 있는데, 여기서 z를 삽입하여  'a->b->z->c->null'로 되게 하라.

 

조건1. 추가 변수 선언하지 말 것.

조건2. 삽입되는 z를 사용자 입력을 받아서 하면 더 칭찬해 줌. 

 

 

 

 

고친 부분은 30~38행 이다.

처음에 생각하기는 어려울 수도 쉬울 수도 있으나,

해석은 무지 쉽다.

 

특히 31행을 보라.

아주 쉽다.

 

 

 

 

 

 

 

 

 

이상 연결리스트의 삽입에 대해 알아보았습니다~

 

 

 

 

 

 

Posted by C언어 보이
|

[오전]

아트메가용 컴파일러의 이해와 설치

 

[오후]

- 구조체 멤버변수의 주소접근 (void 포인터의 사용)

- 구조체 typedef

 

 

Posted by C언어 보이
|

20140409 mcu 구조와 구조체 사용 시 주의점

 

[오전]

1. MCU

risc : 쪼개놓은 명령어. 복잡다양.

cisc : 뭉쳐놓은 명령어. 심플단순.

 

ALU

CU

Reg - 메모리

       - 기능 + 메모리

 

[오후]

구조체 : 저장방식이 4바이트 씩. 따라서 넘치지 않게.

또..2바이트 자료형 (short)은 ..중간에 저장되지 않음.

이 때 pragma pack 을 적절히 사용.

 

 

 

Posted by C언어 보이
|

putchar 함수의 활용 : 문자열의 주소접근과 포인터

 

 

putchar함수는 하나의 문자를 출력하는 함수이다.

용법은

putchar('출력문자 변수명');

와 같이 쓴다.

 

 

자 아닥하고 문제!

아래 반복문을 이용하여 testprogram을 출력하라.

 

 

즉, 아래처럼 하라.

단, 변수는 추가로 쓰지 말고, 출력함수도 putchar만 쓰라.

오로지 조건식과 실행식만 추가해라.

힌트 : 문자열의 각 글자와 그 주소값을 이용하라.

5분 주께..

1분..

2분..

 

정답은 아래와 같다.

 

이상으로 'putchar 함수의 활용'에 대하여 알아보았다.

아래 손가락! 눌러주시고 좋은 하루 보내세요~*

 

Posted by C언어 보이
|

헥사뷰:hexaview,포인터, 함수포인터와 void 포인터

 

오늘은 void 포인터와 함수 포인터에 대하여 배웠습니다.

함수 포인터는 함수를 가리키는 포인터 입니다.

즉, '함수의 반환형+(포인터표시*+포인터명)+(인자)' 와 같이 쓰면 됩니다.

그런 후 사용법은 함수와 같이 하면 됩니다. 즉, '함수 포인터이름(인자)'와 같이 하면 됩니다.

Void 포인터는 형이 없는 포인터로서 'void*포인터이름'으로 선언합니다. 즉, 모든 자료형을 대입할 수 있으며, 대입 및 출력에는 원하는 자료형으로 지정을 하면 됩니다 (이를 캐스팅 이라 합니다).

 

아래의 헥사뷰를 예로 설명하겠습니다.

 

헥사뷰 함수를 선언하고, 메인에서 호출합니다.

메인에서 헥사뷰 함수 호출시에 인자로 inum의 주소를 전달했습니다.

 

 

아래 헥사뷰 함수를 보면..

Vpdata의 값(즉, inum의 주소)을 출력합니다.

 

 

아래 반복문에서는 1바이트 char형으로 출력을 하고 있습니다. 즉, 4바이트 숫자를 1바이트 씩 쪼개서 보고 싶기 때문에 이와 같이 쓰는 것입니다.

출력문에서 1바이트 자리만큼 출력을 한 후에 +1을 해주어, 다음 반복문에서 다음 바이트의 값을 나타내도록 하고 있습니다.

이렇게 메인의 inum 변수 메모리 공간의 값을 모두 출력하였습니다..그 후 옆 칸에 아스키 코드 출력을 위하여 아래의 코드를 작성합니다.

 

보면은 값이 32~127 사이 즉 아스키표에서 문자에 할당된 값일 때에만 해당 문자를 출력합니다.

 

함수포인터와 void 포인터 그리고 헥사뷰에서의 활용에 대하여 알아보았습니다.

추천 눌러주세요 ㅋㅋ

 

Posted by C언어 보이
|

[C언어 핵심강의 05] 포인터의 이해

 

변수란 무엇인가? 기록할 수 있는 공간 (블록)이다.

하드웨어 디스크 상의 어떤 위치의 블록 (실제로는 아주 아주 작은 조각)의 상태 (:기록된 형태. 즉 값)가 '0000 0111'라고 되어 있다 하자. 이는 2진수로서 10진수로 바꾸면 7이다.

 

만약 이 블록의 이름을 num 이라고 하면, 이제부터 이 블록은 num이라는 변수이며, 이 블록에 적힌 상태 7이 num의 값이다. 그리고 하드웨어 상에서 이 블록의 위치가 곧 num의 주소이다.

즉, '변수의 주소'는 하드웨서 상에서 블록(변수)의 위치를 표시해 놓은 숫자이다. 집 주소를 예로 들면, 우리집 우체통이 변수이고 우체통의 주소가 변수의 주소 그리고 우체통의 내용 (편지, 소포 등)이 변수의 내용이다.


그리고 컴퓨터가 2진수를 다루는 만큼 (즉, 값의 저장도 2진수 상태. 연산도 2진수를 기반으로 이루어짐), 메모리를 8비트나 16비트 단위로 표기한다. 그래서 메모리 주소를 흔히 16진수로 표현한다.

 

자 그럼..num의 값이 7이고 그 주소가 0x12ff76이라고 하자.

근데 이 num의 주소도 숫자이므로, 이 주소값을 다른 변수의 값으로 저장할 수도 있지 않을까?

있다. 그렇게 하겠다고 선언하는 지시자가 포인터 연산자 (*)이다.

 

따라서 포인터 변수는 다른 '변수의 주소값'을 값으로 저장하는 변수이다. 

 

아래 그림을 보면서 이해하자.

아래 pnum에 저장된 값은 num의 조소값이다. 즉, pnum==&num 이다.

그러면 'pnum의 값(주소)안에 있는 값(num의 값 7)'을 가리키고 싶을 때는 어케해야 할까?

이 땐 *을 붙혀, *pnum이라 한다.

 

 그럼 또 이렇게도 생각해 볼 수 있겠지...

pnum의 주소를 값으로 갖는 변수 ppnum (이를 더블포인터 라고 한다)을 말이야.

그럼 ppnum은 뭐지? &pnum이지

그럼 *ppnum은? pnum 즉, &num 이지.

글머 **ppnum은? *pnum즉, *(&pnum) 하여 7이지.

으크크크크~~  헷갈린다 그치?

그니깐 '포인터 연산자 표현'은 이해만 했다고 넘어가지 말고, *이랑 주소표시&를 앞뒤로 붙혀가며 그 형태에 익숙해 져야 한다구.

 

 

 위에서 설명한 내용을 한 화면에 합쳐 보았어.

 

 이상으로 포인터의 이해 : 변수의 개념, 변수의 주소, 더블포인터에 대해 공부해 보았습니다.

질문을 댓글로, 강의료는 손가락 꾸욱~*


Posted by C언어 보이
|

[C언어 핵심강의 04] 조건문 예제 : 두 수 빼기 프로그램

 

아닥하고 문제부터 보자.

3-5. 두개의 정수 a와 b를 입력받아, 큰 수에서 작은 수를 뺀 값을 출력하는 프로그램을 작성하라.

    

a-b하면 돼지 뭐가 문제야? 할 수 있다. 근데 a=2,b=4면? -2를 출력하게 되므로 곤난하다..

이 경우 b-a로 하게 해야 한다. 이게 풀이의 핵심이다. 읭? 10분 주께 풀어보자.

 

정답공개.

핵심은 조건검사의 구간을 둘로 나누는 것.

 

알겠즤??

이상으로 '조건문 예제 : 두 수 빼기 프로그램'를 풀어보았다.

잘 보셨으면 추천 꾸욱~*

 

Posted by C언어 보이
|

[C언어 핵심강의 02] 반복문, 조건문의 개념과 예시

 

반복문 : 반복의 조건을 만족하는 한, 계속 반복하라는 명령문.

조건문 : 조건을 만족하면, 함 해 달라는 명령문. 여자친구가 잘 해 주면, 뽀뽀를 해 준다. 여기서 '잘 해 주다'가 조건이며, '뽀뽀를 해 준다'가 명령문이다. 이 '잘 해 주다'를 식으로, '뽀뽀를 해 준다'를 식으로 쓰는 것이 프로그래밍인 것이다.  

 

위 반복문과 조건문이 프로그래밍에서 제일 많이 쓰인다. 뽀뽀는 물론 그 이상도 가능하다는 말이다. 읭??

 

[체크사항]

- break : 반복문 로프 탈출

- continue : 이하 코드를 통과하여 위로 다시 점프

- while 조건식을..while 안에 if break로 대체할 수 있음.

- switch문의 case나 goto문의 label이나 둘 다 주소.

- If 문은 조건식 중에서도 범위를 나타낼 때에 특히 유리함.

 

아래코드는 조건문과 반복문 두 가지 예제를 합쳐 놓은 것이다.

코드 1. 누적합 구하기. 조건문 : 두 수 num1, num2를 입력받고, 그 중에 큰 수를 big에 넣는 것이다. 그래서 big만 출력하게 하면 두 수 중에 num1, num2 중에 큰 수만 출력하게 되는 것이다.

 

코드 2. 등차수열 누적합. 반복문 : 설명이 필요없다.

 

이상으로 반복문, 조건문의 개념과 예시에 대하여 알아보았다.

아래 손가락! 눌러주시고 좋은 하루 보내세요~*

 

Posted by C언어 보이
|

[C언어 강의] 강의소개

 

 본 연재물은 C언어를 공부하는 사람에게 '쉽고 빠른 요약 및 보충설명'을 제공하기 위해 기획되었다.  그러므로, 아래의 사람에게 적합하다.

 

1. 공부하는 교재보다, 더 쉬운 혹은 깊은 설명이 필요한 사람.

2. 이미 C언어를 공부한 후, '핵심위주로 빠르게' 복습하고 싶은 사람.

 

따라서 교재에 있는 중복설명은 핵심만 요약하며, 경우에 따라 어려운 주제에 대해서만 설명을 하기로 한다. 다만, 본 강의물에서 제시된 예제는 최소한의 필수 예제이므로 꼭 따라해 보기를 바란다.

 

설명의 편의를 위하여, 문체는 인터넷음슴체를 쓰기로 한다.

그럼 본격적인 강의로 고고싱 해 보자.

 

 

Posted by C언어 보이
|