달력

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

이차원 배열의 활용 문제 1 구구단 저장 문제이다.

3*9배열에 아래처럼 저장, 출력하라.

 

 

행렬의 위치를 그대로 대입하면 된다.

다만, 2단을 나타내는 행은 [0], 3단에 대해서는 [1]이 된다. 즉, 행의 원소번호에 +2을 해줘야 한다.

마찬가지 원리로 열의 원소번호에는 +1을 해주어야 한다.

그래야만 3*2는, 3(1행+2)*2(1행+1)이 되기 때문이다.

 

이상으로 이차원 배열의 활용 문제 1 구구단 저장 문제를 풀어보았다.

잘 보았다 싶으시면 손가락을 꾸욱 눌러주세요 ㅋㅋ

Posted by C언어 보이
|

이차원 배열은 대입과 관련하여 다양한 알고리즘을 만들 수 있다.

(대표적으로 그래픽 분야에서 응용이 많이 된다. 그림의 화소정보를 각 각의 배열 원소로 넣을 수 있다.)

우선 문제를 보자.

문제 : 2행 4열의 A배열은..{{1,2,3,4},{5,6,7,8}} 처럼 되어 있다.

이를 4*2 배열의 A배열에 아래와 같이 값이 대입되도락 하라.

 

풀이: 핵심은 규칙성을 발견하는 것이다.

잘 보면, A배열의 행과 B배열의 열이 동일하게 값이 변하는 것을 알 수 있다.

(참고로 수학의 '등차수열' 이다.)

그럼 b배열은 a배열과 행과 열을 반대로 적으면 된다.

즉, a배열의 i행 j열의 값을 b 배열의 j행 i열에 넣으면 된다.

참고로 이 방식은 영상처리에서 '화면 좌우반전, 회전' 등의 분야에 그대로 응용할 수 있다.

 

이상으로 이차원 배열의 활용 문제를 풀어보았다.

잘 보았다 싶으시면 손가락을 꾸욱 눌러주세요 ㅋㅋ

 

Posted by C언어 보이
|

문제 : 사용자로부터 7개의 숫자를 입력받아 내림차순으로 정렬하라.

버블정렬을 이용하라. 아래를 참조하라.

 

풀이: 메인의 두 반복문은 일반적인 입력, 출력용 반복문임으로 설명이 불필요하다.

bubblesort함수만 살펴보자.

 

맨 안쪽에 있는 이프문이 스왑함수의 기능을 하는 부분이다.

 

이프문 바로 위의 반복문은 pivot (즉 왼쪽에 있는 기준값)과 대상값(pivot과 비교를 하는 값)을 비교한다. 이 대상값이 안 쪽 반복문에 의해 pivot 오른쪽에서부터 맨 끝의 숫자까지 바뀐다.

그렇게 해서 안쪽 반복문의 모두 수행되면,바깥쪽 반복문은 1회 수행이 완료되면서 i++고 pivot값이 오른 쪽으로 이동한다. 그리고 그 pivot 값을 기준으로 하여 또 나머지 값들에 대한 값 비교 반복문(즉 안쪽 반복문)이 모두 수행된다.

이상으로 내림차순 프로그램: 버블정렬 알고리즘, 스왑 함수에 대해서 알아보았다. 오름차순 또한 스왑함수의 조건식만 다르며 나머지는 다 똑같도.

잘 보았다 싶으시면, 링크추가나 손가락을 눌러주세요ㅋㅋ

 

 

 

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언어 보이
|

나머지 연산자(%)의 활용 : 홀수 짝수 출력 프로그램

 

%2는 2로 나눈 나머지 값이다.

가령 4%2는 0, 3%2는 1이다. 4%3은? 3이다.

이 나머지 연산자는 조건식으로 유용하게 쓰인다.

 

아래 기본적인 활용문제를 풀어보자.

3-1. 정수를 입력받아 홀수(odd number) 또는 짝수(even number) 결정하는 프로그램을 작성하라. 0의 경우는 zero라고 출력하라.

    

홀수와 짝수를%로 정의하는 것이 핵심이다.

홀수%2는 1, 짝수%2는 0 이다.

 

이상으로 '나머지 연산자(%)의 활용 : 홀수 짝수 출력 프로그램'

너무 간단하게 끝나서 허무한가?

말하지 않았던가 난 핵심만 말하는 깔끔한 사람이라고 ㅋㅋ

 

잘 보셨으면 손가락 꾸욱~ 눌러주세요~~

Posted by C언어 보이
|

0314 반복문,초기식,조건식,반복식,조건문,for,if else
삼항연산자 : 잘 안쓰며, 쓰라는 권유도 안 함. 다만 해석정도만 할 줄 알면 됌.
반드시 쓸 필요는 없으나..그게 코드상 짧을 때는 써도 뭐.

 

초기식
for (초기식,초기식,, ; 조건(하나만 쓸 수 있음!) ; 반복식,,,)
{
반복식
}

아래 반복문은 결과가 전부 같게 됌

무한루프 탈출방법
ctrl+c,ctrl+brk

조건문 최적화 : 걸릴 확률 높은 걸 첫순위 if 로.

 

#include<stdio.h>

int main()

 /*
 int inum1,inum2;
 inum2=0;
 for (inum1=0;inum1<5;inum1=inum1+1)
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
 inum2=inum2+2;
 printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
 */

 /*
 for (inum1=0,inum2=0;inum1<5;inum1=inum1+1,inum2=inum2+2)
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
  */

 /*
 inum1=0;
 inum2=0;
 while (inum1<5)
 {
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
  inum2=inum2+2;
  inum1=inum1+1;
 }
 */

 /*
 inum1=0;
 inum2=0;
 for (;inum1<5;)
 {
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
  inum2=inum2+2;
  inum1=inum1+1;
 }
 */


 /*
 inum2=0;
 for (inum1=0;inum1<5;inum1=inum1+1)
 {
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
  inum2=inum2+2;
 }
 */

 /*
  for (inum1=0,inum2=0;inum1<5;inum1=inum1+1,inum2=inum2+2)
 {
  printf("inum1 : %d, inum2 : %d \n",inum1,inum2);
 }
 */

 return 0;
}

Posted by C언어 보이
|

[C언어 강의] 강의소개

 

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

 

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

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

 

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

 

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

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

 

 

Posted by C언어 보이
|


0312 폰트, 화면주사방식, 아스키코드, 형변환


나의 출석번호 18

윈도우용 출석번호 +10

리눅스용 출석번호 +40

cmd ftp 접근하는 방법 : ftp 192.168.10.100

user 

password 

1.bin

2.mget *.hwp

3.get main.c

인제부터 보이는 건 전부 리눅스명령어

도스에서 연 ftp끊을 땐 quit


lf : long float 즉 double


폰트. 문자란 존재하지 않는다. 다만 문자처럼 출력하는 픽셀점멸정보에 관한 이진수가 있을 뿐.

alt+숫자 -> 숫자에 해당되는 아스키코드 문자 출력

화면출력방식 픽셀들의 점멸을 이진수로. 따라서..아스키코드에서는 A에 해당하는 2진수에 대하여 


순서버호 65가 부여되어 있음.

화면주사방식 ntsc

             pal

영문푼트(문자출력 이진수?)가 들어있는 곳이 BIOS. basic input output system.  

따라서..우리가 키보드에 a를 치면 컴터안에 a에 해당하는 폰트수?가 입력됌.

'a' : ' '안의 문자에 해당되는 아스키코드 숫자

ascii : america standard code information interchange 미국 표준 코드 정보 교환


아스키코드는..초기에 0~127. 즉 128가지인 7비트만 필요.

하지만..어차피 8비트 단위로 쓰므로..확장 아스키코드가 나옴 (다른 나라 언어 포함하는).

한글폰트들의 분류. 조합형과 완성형


도스영문형 : chcp 437

도스한글형 : chcp 949


아스키코드(8비트)를 저장하기 위해 제일 접합한 자료형은 char (1바이트). char은 정수형 자료형.

참고로..처리속도는 32비트 컴터에서는 32비트(4바이트) 크기인 int가 좋음. 이유는, 안 쓰는 버스


들은 죽이는 신호를 보내야 함으로.

        용량최적화에서는 char임.


/t : 가로(오리엔탈) 텝


int형 변수 값을 char형 변수에 넣을 때 : 하향식 형변환. down casting

부호단위로 넣으며..끝에서 부터 넣는다. 따라서..크기가 다르면 상위바이트의 손실 발생.


반면..int형 변수 값을 float형 변수에 넣을 때. 혹은 소+대 : 상향식 형변환. up casting

정수.0 으로 그대로 들어감. 형동등의 원칙 (자료형이 큰 쪽으로. 상향식 형변환) 

              : 정수형<실수형. 1+1.4=2.4실수형으로.

      1바이트형(->4바이트형으로)+4바이트형


() 형변환 연산자 = (double)num1/num2; ()부터 먼저 처리.

printf(":%3.2f:",11.56789); 3필드폭 지정, 소수점.이후부터는 2자리까지 반올림 표현.

Posted by C언어 보이
|


[수업]

scanf에만 & 있는 이유는 뒤에서 설명.

0x64 : 숫자0. 16진수. 임베디드 (엘이디 킬 때) 프로그래밍시에 16진수 표시형식이 보기 편함 (특정 엘이디 점멸여부 파악 용이).

소수점 지수부. 2의 n승이면 n을 표현하는 부분. 지수부 = 127+지수. 즉.. 지수부 8비트의 경우의 수는 256가지 (0~255). 이를..

0-> -128

255-> +127. 따라서.. 소수점이 들어가면 컴터 느려짐 (저장처리 과정 상).

출석 18번.


[컴퓨터공학, 디지털공학]

- 멀티플렉서 입출력 게이트. 회로구성.


Posted by C언어 보이
|

0307
c 표준.
char=<short=<int=<long
=> 다 같아도 어긴 건 아님..

0을 +로 하는 이유:전기절약,연산속도?
자료형을..반바이트(4비트)만 사용가능??

우리 수업 코딩 시 선언과 동시에 초기화 하지 말 것. 지저분.
선언 시..메모리 할당만
변수명 지정 팁 : cAge (자료형 변수의미).
변수명에..알파벳,숫자,언더바(유일한 특수기호). 숫자 앞에 오는 건 안 됌.
a=7/3 몫이 들어감
b=7%3 나머지가 들어감

iva=inum++; 후치. 대입 후, inum 증가. 대입없이 단독 증가연산은 선치, 후치 차이 없음.
            선치는 선증가 후대입.

inum2=100;
inum1=7||(inum2++);  || (inum2++) 이 부분은 조건검사도, 실행도 하지 않음 (효율적으로 하고자 회로설계를 이렇게 함).

'C언어 업무보고' 카테고리의 다른 글

0311 연산자  (0) 2014.03.11
140310 소수점 float, double  (0) 2014.03.10
0306 변수,라인피드,프린트  (0) 2014.03.07
0305 업무보고 리눅스 파일생성  (0) 2014.03.06
0304 업무일지 전처리,컴파일  (0) 2014.03.04
Posted by C언어 보이
|