Google

«   2024/05   »
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
BLOG Total Visitors
Today Hit, Yesterday Hit
BLOG main image


visitor stats
'study/programming'에 해당되는 글 36건
[Schizo!, 2009. 4. 21. 02:43, study/programming]

WORD 는 unsigned int를 typedef한 것!

DWORD는 unsigned long을 typedef 한것입니다.

매번 unsigned long이라 쓰기 힘들어, DWORD라 타입을 재정의 한겁니다.


관련 헤더파일에

typedef unsigned long   DWORD;

라 선언되어 있습니다.


출처 : 네이버 지식

 

'study > programming' 카테고리의 다른 글

c언어 예약어  (0) 2009.04.21
터보c 에러  (0) 2008.06.09
getpass  (1) 2008.04.29
리눅스 명령어  (0) 2008.03.18
비주얼스튜디오 2008  (0) 2008.03.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2009. 4. 21. 02:38, study/programming]

1. 자료형 관련 예약어


char : character의 약자로서, 아스키코드로 저장되는 형태를 의미

         문자 형식을 저장 할 때 쓰인다.

 

int :  2^31 - 1 ~ -2^31의 범위를 가진 변수 타입

        integer의 약자로서. 정수 형태로 저장한다.

       

float : sign비트와 mentissa, exponent 비트로 나누어서 저장한다.          8Byte   ex)10.11 --> 1.011 * 10^1

 

short : 32767 ~ -32768의 범위를 가진 변수 타입

          int 형태보다 적은 비트로 숫자를 표현할 때 사용한다.     

          (시스템에 따라 크기가 다름)


long : 2^63 - 1 ~ -2^63의 범위를 가진 변수 타입

         int 형태보다 많은 비트로 숫자를 표현할 때 사용한다.


double : 플롯과 비슷한 형태로 저장되지만 10Byte이다.

           VC++에서 쓰면 더블로 고치라고 warnning이 나타난다.


unsigned : 원래 숫자의 맨 앞 비트 (most significant bit)는 부호

               비트이지만 언사인드를 앞에 붙이면 부호비트가 그냥

                숫자를 나타낸다.

                그래서 표현 가능한 최대값이 2배가됀다.


byte : 127 ~ -128의 범위를 가진 변수 타입


bool : true, false 값 만을 가진 논리 변수 타입


union : 공용체의 선언


enum : 열거.... 잘 쓰이지 않음.


void : 리턴해주는 값이 없거나, 혹은 상위함수로부터의 전달받는

         인자값이 없을 때 사용한다.



2. 기억 관련 예약어


auto : 자동 변수라고 해서 그 함수 내에서만 쓰이고 사라지는

         변수이다. 일반적으로 정의해주지 않는다.


static : 정적 지역변수를 정의할 때 사용한다.


extern : 외부변수를 정의할 때 사용한다.


register : CPU의 레지스터를 이용할 때 사용한다.




3. 제어관련 예약어


if ~ else : 조건문에서 사용한다.     

                if(A){ B } : A가 참일 때 B가 실행됨.

             else{ B } : 만약 위에 있는 if 문들이

              모두 거짓일 때 실행됨

for :  흔히 반복문(loop)이라고한다.  for(A;B;C){ D }- A는 변수

         선언부/혹은 값을 넣는 부분, B는 bool 형을 반환해야 하며

         B가 참이면 반복, C는 한번 반복 하면서 실행할 문장이다.


while : for와 용도가 비슷함. 순환문에서 사용한다.

          while(A){ B } : A가 참일 동안 B가 실행되는 문장.


do ~ while : 순환문에서 사용한다.

                  do{ A }while(B); : 먼저 A를 실행 시키고,

                  B가 반복하는 문.


switch ~ case : 분기 문을 사용할 수 있도록 한다.

                     switch(A){ ... } : A문을 가지고 switch문에

                     들어가는 것을 나타냄.

                     case B : C; : A가 B와 같을 경우  C가 실행됨.


break : swich 명령어와 더불어 분기문에서 사용한다.


continue : switch 명령어와 더불어 분기문에서 사용한다.


default : switch와 더불어 조건문에서 사용한다.


try ~ catch : try{ A }catch(B) { C } - A를 실행하다가 에러를   만나면 B와 에러 타입이 같은지 본 후에

                  같으면 C를 실행.


return : 상위함수에 값을 리턴 할 때 사용한다.


goto : 강제로 jump하게 하는 명령어이다.

          일반적으로 사용하지 않는다.


4. 기타 자료형


main : main 함수는 C언어의 entry point이다.

         프로그램이 처음 시작돼는 위치를 알려주는 곳이다.


sizeof : 변수의 (혹은 자료형의) 차지하는 크기를 보여준다.


include : #include 는 단순히 파일을 연결하는 개념이다.

            기존에 작성된 라이브러리를 사용하는 것.


struct : 구조체의 선언


typedef : 데이터형의 이름을  다르게 바꿀 수 있는 명령어이다.

            typedef char byte 라고 하면 char a; 대신에

            byte a; 라고 선언할 수 있다.


const : 상수로 만든다. const int days = 30; 이라고 선언해주면 ays 라는 문자열을 30이라고 인식해준다.


volatile : 프로그램이 변경하지 않아도 메모리의 값이

            변경할 수 있게 해준다. 

 

'study > programming' 카테고리의 다른 글

WORD의 의미  (0) 2009.04.21
터보c 에러  (0) 2008.06.09
getpass  (1) 2008.04.29
리눅스 명령어  (0) 2008.03.18
비주얼스튜디오 2008  (0) 2008.03.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 6. 9. 13:31, study/programming]
님의 경우는 메뉴에서 Options - Directories 에서 경로를 적절히 설정하여 해결할수 있습니다.

또한 C++ 로 컴파일 하려면 파일명도 *.cpp 이여야지만 C++ 로 컴파일 합니다.

아래는 제가 예전에 비슷한 문제(Turbo C++ 3.0)에 대한 답변을 한것들 입니다.
지금 문제 외에도 다음과 같은 문제와 만날수 있죠.

Turbo C++ 에서 간단한 소스에서 에러가 나는 원인들은 아래와 같습니다.

[그래픽 셋팅]

[F10]키 누르면 메뉴를 선택합니다.
Options
Linker
Libraries...

Libraries 선택하시면 Dos형 체크박스가 나올거에요.
Libraries OK
[ ] Container Class
[ ] Turbo Vision Cancel
[X] Graphics library
[X] Standard Run Time Help


[엉뚱한 파일 컴파일]

메뉴중에 Project 라고 있을거예요.
여기서 프로젝트를 지워 줍니다.
보통 책에서 프로젝트에 대한 내용이 안나오므로
초보자는 소스는 짜고서 엉뚱한걸 컴파일 할수도 있거든요.

Alt + 0 을 누르면 툴내의 차일드창 목록이 뜨는데
쓸데 없는 소스창이 있을수도 있어요.
그런 소스는 Delete 키로 없애세요

[헤더파일] - 님은 이경우에 속합니다

헤더파일을 Tc 에서 설정하지 않은 폴더로 정해놓았을 수도 있습니다.
#include "경로\stdio.h"
위와 같이 경로를 설정할수 있습니다.
물론 F10키로 메뉴상에서 경로를 선택할수도 있구요.
Options - Directories 메뉴를 클릭하면 경로를 바꿀수 있습니다.

[콘솔창 보기]

그리고 이런 경우는 적지만, 님이 에러가 나지 않았는데 에러라고 생각할 수도 있습니다.
컴파일하면 에러와 경고가 있는데 경고는 에러가 아닙니다.
위의 내용을 컴파일 하면 결과가 나오지 않습니다.
결과를 보려면 Alt + F5 키를 누르면 됩니다.

[프로그램 종료전 출력결과 보여주기]

결과를 자동으로 볼수 있는 Hello World를 짜려면 아래를 써넣으세요.

#include <stdio.h>
#include <conio.h>
main()
{
printf("Hello, world!");
getch(); // ←
키보드 누를때까지 프로그램이 종료되지 않습니다.
}



Hello, world!


[툴사용시 화면이 깨질 경우]

도스로 들어간 다음 프롬프트에
chcp 437
를 하면 영문도스로 바뀌며, Tc 실행시 글자가 깨지지 않습니다.

[지식인으로 올리면 일부소스가 없어질 경우]

올리신 소스에서 가 나타나지 않는 이유는 html 의 태그로 인식하기 때문이예요.
역시 태그를 사용함으로써 해결하면 됩니다.

[Bonus ! 무슨 짓을 해도 해결이 안되는 경우]

알수 없는 설정을 잘못 건드렸는데 단서가 될만한게 아무것도 없을때,
마지막으로 무조건 해결하는 방법도 있습니다.
Turbo C++ 3.0 은 이런 모든 설정을 Bin 폴더의 TCCONFIG.TC 에 저장합니다.
아무 이상 없이 자기가 원하는 설정에 맞추어진 곳 에서 TCCONFIG.TC 만 카피해 자신의 폴더에 옮겨 놓아도 모든건 해결 됩니다.



http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10104&eid=gTLBeVEFaetrrirB/HLbyJhB1wFVLKa2&qb=dW5hYmxlIHRvIG9wZW4gIMXNuri+vg==&pid=fZyxUdoQsD4ssZHKQkKsss--423649&sid=SEyxVzKeTEgAAEkqCu4

'study > programming' 카테고리의 다른 글

WORD의 의미  (0) 2009.04.21
c언어 예약어  (0) 2009.04.21
getpass  (1) 2008.04.29
리눅스 명령어  (0) 2008.03.18
비주얼스튜디오 2008  (0) 2008.03.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 4. 29. 14:18, study/programming]
사용자 삽입 이미지

'study > programming' 카테고리의 다른 글

c언어 예약어  (0) 2009.04.21
터보c 에러  (0) 2008.06.09
리눅스 명령어  (0) 2008.03.18
비주얼스튜디오 2008  (0) 2008.03.09
비주얼c  (0) 2008.03.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 3. 18. 11:12, study/programming]

유닉스/리눅스 명령어 레퍼런스


파일 명령어

ls - 디렉토리 목록보기
ls -al - 숨은 파일까지 정렬된 형태로 보기
cd dir - dir 디렉토리로 이동
cd - home 디렉토리로 이동
pwd - 현재 위치한 디렉토리 보여주기
mkdir dir - dir라는 디렉토리 만들기
rm file - file을 지우기
rm -r dir - dir 디렉토리를 지우기
rm -f file - 강제로 file 삭제
rm -rf dir - dir 디렉토리와 디렉토리 아래에 있는 모든 파일 삭제
cp file1 file2 - file1을 file2라는 이름으로 복사
cp -r dir1 dir2 - dir1 디렉토리에 있는 것들을 dir2 디렉토리로 복사; dir2가 존재하지 않는다면 만듬
mv file1 file2 - file1을 file2로 이름을 바꾸거나 옮김,
file2가 디렉토리로 존재한다면 file1을 file2 디렉토리로 옮김
ln -s file link - file로 연결된 link라는 심볼릭 링크를만듬
touch file - file을 생성하거나 업데이트
cat > file - 입력을 file로 저장
more file - file의 내용을 출력
head file - file의 첫 10줄을 출력
tail file - file의 마지막 10줄을 출력
tail -f file - file에 추가되는 내용을 출력,마지막10줄부터 출력함


프로세스 관리
ps - 현재 활성화된 프로세스 보여주기
top - 실행중인 모든 프로세스 보여주기
kill pid-프로세스id pid를 종료
killall proc - proc로 시작하는 모든 프로세스 종료
bg - 정지되있거나 화면에서 안보이게 실행중인 프로세스 보여주기; 정지된 프로세스를 화면에 출력하지 않고 계속 진행하기
fg - 화면에 보이지 않게 작동하던 작업 중 최근의 것을 화면에출력하면서 작동시키기
fg n - 화면에 보이지 않게 작동하던 작업 중 n 번째 작업을 화면에 출력하면서 작동시키기


파일 퍼미션
chmod 숫자 file - file의 퍼미션값을 숫자로 바꿈. 숫자는 3자리이며 첫 번째는 소유자,두 번째는 그룹,
세 번째는 익명의권한을 더해서 나타냄.
파일 퍼미션
chmod 숫자 file - file의 퍼미션값을 숫자로 바꿈. 숫자는 3자리이며 첫 번째는 소유자,두 번째는 그룹, 세 번째는 익명의
권한을 더해서 나타냄.

SSH
ssh
user@host - user로 host에 접속
ssh -p 포트넘버
user@host - host의 지정한 포트넘버에
user로 접속
ssh-copy-id
user@host-사용자명,암호를 입력하지 않고
로그인 할 수 있도록 ssh key를 복사


검색
grep pattern files - file안의 pattern을 찾기
grep -r pattern dir - dir 디렉토리 안에서 재귀적으로pattern 찾기
command | grep pattern - command 명령의 출력에서pattern을 찾는다
locate file - 파일을 찾음


시스템 정보보기
date - 현재 날짜와 시각을 출력
cal - 이번달 달력을 출력
uptime - 현재 기동시간을 출력
w - 온라인인 사용자를 출력
whoami - 어느 사용자로 로그인 하였는지 출력
finger user -user에 관한 정보 출력
uname -a - 커널 정보 출력
cat /proc/cpuinfo - cpu 정보 출력
cat /proc/meminfo - 메모리 정보 출력
man command - command에 대한 매뉴얼 출력
df - 디스크 사용량 출력
du - 디렉토리 사용량 출력
free - 메모리와 스왑 정보 출력
whereis app - app를 실행가능한 위치 출력
which app - app가 기본으로 실행되는 곳을 보여줌


압축
tar cf file.tar files - files들을 포함한 file.tar를 만듬
tar xf file.tar - file.tar을 압축해제
tar czf file.tar.gz files - Gzip 압축을 사용한 압축
tar zxf file.tar.gz - Gzip을 이용해 압축해제
tar cjf file.tar.bz2 - Bzip2 압축을 사용한 압축
tar xjf file.tar.bz2 - Bzip2 압축을 사용한 압축해제
gzip file - file을 압축해서 file.gz로 이름변경
gzip -d file.gz - file.gz를 fiel로 압축해제


네트워크
ping host - host에 핑을 보내 결과 출력
whois domain - domain에 대한 whois 정보 출력
dig domain - domain에 대한 DNS 정보를 출력
dig -x host - 호스트까지의 경로를 되찾아가기


설치
소스로부터 설치
./configure
make
make install
dpkg -i pkg.deb - 패키지 설치(Debian)
rpm -Uvh pkg.rpm - 패키지 설치(RPM)


단축키
Ctrl+C - 현재 명령의 실행을 강제로 마침
Ctrl+Z-현재 명령을 멈춤,fg를 이용해서 계속해서 화면에서 보
이도록 실행하거나 bg 를 이용해서 안보인채 계속 실행
Ctrl+D-현 세션에서 로그 아웃,exit와 비슷
Ctrl+W - 현재 라인에서 한 단어 삭제
Ctrl+U - 현재 줄 전체 삭제
Ctrl+R - 최근 입력한 명령어 보여주기
!! - 마지막 명령어 반복실행
exit - 현재 세션에서 로그 아웃

cal [[month] year]
달력을 출력

date [MMDDHHmm[[yy] | ccyy]]
컴퓨터의 시간을 알 수 있음

df [-lt][-f][{}]
슈퍼블록에서 카운트하고 있는 마운트된 파일 시스템, 디렉토리에서 사용가능한
디스크블록과 freeinode수를 알려줌

du
사용자 자신의 디스크 사용 상황을 블록 단위로 출력해줌

grep [option] limited regular expression [file]
파일에서 특정한 패턴을 찾는데 사용되며, 그 패턴을 포함하고 있는 모든 행을 출력함

kill [-sihno] PID
지정한 프로세서에게 종료신호를 보내는 명령어

ps
컴퓨터 시스템에서 활동중인 프로세서의 상태를 알려주는 명령

touch [-amc][MMddhhmm[yy]]files
지정된 파일에 접근하여 최종적으로 수정된 시간을 갱신

tr [-option][string1[string2]]
표준 입력의 특정 문자들을 삭제하거나 치환하여 표준 출력으로 내보내는 명령어

tty
컴퓨터 시스템에 연결하여 사용하고 있는 터미널의 이름을 알려줌

umask [###]
파일이 만들어질 때 적용되는 파일접근 허용모드를 설정

cd
현재 디렉토리를 바꿈

ls [-option][file/directory]
디렉토리의 내용을 화면에 출력

mkdir [-m]mode[-p]<경로><디렉토리 이름>
새로운 디렉토리를 만듬

rmdir [-ps]<디렉토리이름>
지정된 디렉토리를 제거

pwd
현재의 작업디렉토리를 화면에 출력

cat
파일의 내용을 표준 출력 장치로 내보내는 명령어

cmp [-l][-s]file1 file2
두개의 파일을 비교하여 차이점을 화면에 출력

comm [-[123]]file1 file2
지정된 두개의 파일을 비교하여 공통부분을 삭제 혹은 선택할 때 사용

cp file1 [file2] target
지정된 파일을 다른 이름으로 복사

cut -clist[files]
파일의 각 행에서 선택된 필드를 절단

dd[option=value]
파일을 변환 혹은 복사

diff
지정된 두개의 파일간의 차이를 비교하여 두개의 파일이 일치되기 위해 필요한
정보를 제공

fgrep [option] string[file]
문자열에 따라 파일을 검색

find path list expression
어떤 파일이 어느 디렉토리에 있는지를 찾아줌

join [option]file1 file2
관계형 데이터베이스 조작 명령으로 지정된 파일의 관계를 결합하여 결과를
표준 출력장치로 출력

ln [-f][-n][-s]file1[file2] target
두개의 파일을 연결하여 사용

mknod name b/c major-No minor-No
특수 파일을 위한 디렉토리 항목과 이에 대응하는 i-node를 생성

mv <현재 이름> <변경될 이름>
디렉토리 또는 파일의 이름을 변경

paste file1 file2
여러 개의 파일에 있는 같은 행의 내용을 병합

pr -option files
파일을 표준출력으로 보여주고 현재의 시각, 파일명, 페이지 등을 같이 보여줌

rm [-f][i]file
파일 혹은 디렉토리를 삭제

sort [option]files
파일을 정렬 혹은 병합

tail
지정된 파일의 끝 부분을 출력

tar [-]{txruc}[vwfblm][0-7[lmh]][tapefile][blocksize]file1 file2
파일들을 자기 테이프에 저장 또는 불러오기 위한 명령어

ulimit
v 사용자 범위의 출력, 설정, 프로세서의 보통 파일 크기 범위를 출력

umask[xxx]
v 파일 생성 마스크의 설정과 출력을 위해 사용

uniq [-udc [+n][-n]][input[output]]
중복되는 행을 삭제하는 명령

wc file
텍스트 파일에 담겨져 있는 문자 수, 단어 수 및 라인 수를 화면에 출력하는 명령

bc
간단한 산술 계산을 할 수 있게 함

enable, disable
프린터의 사용을 허용 혹은 불가능하도록 설정

factor [integer]
지정된 정수를 소인수 분해하여 화면에 출력

mesg [-n][-y]
다른 사용자가 메세지를 보낼 때 수신여부를 결정

mount [-v | -p]
이미 만들어져 있는 파일 시스템을 연결하는 명령

passwd
자신의 암호를 등록하거나 변경할 때 사용

stty [-a][-g][option]
현재 단말기나 콘솔의 입/출력 선택 항목을 설정

tee [-l][-a][file]
파이프를 접속

tr [-option][string1[string2]]
표준 입력의 특정 문자들을 삭제하거나 치환하여 표준 출력으로 내보내는 명령

wall
모든 사용자에게 동일한 메세지를 전송

write user[terminal]
다른 사용자에게 1대1 메시지를 전송

chgrp group file
지정된 파일의 소유권자 그룹을 바꾸는 명령

chmod mode file
지정된 파일에 대한 사용 권한을 변경하고자 할 때 사용

chown owner file
지정된 파일에 대한 소유 권한을 변경하고자 할 때 사용

'study > programming' 카테고리의 다른 글

터보c 에러  (0) 2008.06.09
getpass  (1) 2008.04.29
비주얼스튜디오 2008  (0) 2008.03.09
비주얼c  (0) 2008.03.09
공부  (0) 2008.01.16


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 3. 9. 11:47, study/programming]
마이크로소프트의 비주얼스튜디오 2008 공개버전
스텐다드 버전이 아니여도 프로그래밍 하는데는 지장 없음.

 

Microsoft Visual Studio Express Edition 2008

'study > programming' 카테고리의 다른 글

getpass  (1) 2008.04.29
리눅스 명령어  (0) 2008.03.18
비주얼c  (0) 2008.03.09
공부  (0) 2008.01.16
웹기반 다이어그램 제작 툴  (0) 2008.01.05


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 3. 9. 11:35, study/programming]

'study > programming' 카테고리의 다른 글

리눅스 명령어  (0) 2008.03.18
비주얼스튜디오 2008  (0) 2008.03.09
공부  (0) 2008.01.16
웹기반 다이어그램 제작 툴  (0) 2008.01.05
문자열 연결 strcat 안씀.  (0) 2007.12.26


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 1. 16. 22:50, study/programming]

#include <stdio.h>

int maxi(int max,int n);
int mini(int min,int n);

int main(void){
    int n,i,max,min;
    printf("비교할 숫자 입력\n");
    scanf("%d",&n);
    max=min=n;
    for(i=2;i<=10;i++){
        scanf("%d",&n);
        max = maxi(max,n);
        min = mini(min,n);
    }
    printf("최대값:%d 최소값:%d",max,min);
    return 0;
}
maxi(int max,int n){

    if(max<n){
        return n;
    }else
        return max;
}
mini(int min,int n){
    if(min>n){
        return n;
    }
    else
        return min;
}


#include <Stdio.h>

int main(void){
 int i,n;
 
 scanf("%d",&i);
 
 for(n=2;n<i;n++){
  if(i%n == 0){
   printf("%d는 소수가 아닙니다",i);
   return 0;
  }
 }
   printf("%d는 소수입니다",i);
   return 0;
}


'study > programming' 카테고리의 다른 글

비주얼스튜디오 2008  (0) 2008.03.09
비주얼c  (0) 2008.03.09
웹기반 다이어그램 제작 툴  (0) 2008.01.05
문자열 연결 strcat 안씀.  (0) 2007.12.26
후위식.  (0) 2007.12.25


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2008. 1. 5. 13:42, study/programming]
사용자 삽입 이미지

gliffy.com 이라는 플래시기반 다이어그램 툴입니다.
ms visio와 같은 기능을 제공합니다.
간단하게 가입만 하면 무료로 사용할 수 있습니다.


'study > programming' 카테고리의 다른 글

비주얼c  (0) 2008.03.09
공부  (0) 2008.01.16
문자열 연결 strcat 안씀.  (0) 2007.12.26
후위식.  (0) 2007.12.25
memset 함수  (0) 2007.12.17


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 26. 06:48, study/programming]

#include <stdio.h>
#include <stdlib.h>

char *hap(char *a,char *b){
 int i,j;
 char *temp;
 temp=(char*)malloc(strlen(a)+strlen(b));
 for(i=0;i<strlen(a);i++)
 temp[i]=a[i];
 for(j=0;j<strlen(b);j++)
 temp[i+j]=b[j];
 temp[i+j]='\0';
 return temp;

}


int main(void){
 char *str1="dog";
 char *str2="house";
 char *str;
 str1=hap(str1,str2);

 printf("%s",str1);
 return 0;
}



#include <stdio.h>
#include <stdlib.h>
int main()
{
    char str1[10]="cat";
    char str2[10]="house";
    int i,j;
   
    for(i=0;str1[i] != '\0';i++);//str1의 끝을 알아냅니다.(i의 위치)
   
    for(j=0;str2[j] != '\0';j++)//str2의 끝까지 돌려 줍니다.
       str1[i+j]=str2[j];//i는 str1의 마지막 위치 j를 더해주면서 str2의 문자를 하나씩 추가 해줌
   
    str1[i+j]='\0';//문자열 끝부분에 널문자를 넣어줌  
      
    printf("%s",str1);//결과 확인

    system("pause");
    return 0;
}


 ㅇ_ㅇ 기본적인 메카니즘은

 1개의 공간에 나머지 문자를 붙이는 것이랍니다.


 char* chStr1 = "cat";

 char* chStt2 = "house";


 라고 있을때

 Length 함수를 사용하면 길이를 구할수 있답니다.

 더 근본적으로 사용하면 \n 이 나올때까지 loop를 돌아서

 갯수를 파악하지요.


 cat는 0,1,2 까지 들어간 3개의 문자열입니다.

 이 뒤에 5개의 문자를 가져다가 넣으면 끝나지요.


 하지만 chStr1 이란 공간은 3개만 할당되어 있습니다.

 더 넣을 필요가 있겠지요?


 char* copyString(char* chStr1, char* chStr2)

 {

     char* chTemp = (char*)malloc(sizeof(char)*(Length(chStr1)+Length(chStr2));

     // chTemp 라는 저장공간에 chStr1, chStr2 만큼의 공간을 할당합니다.

     // 예제대로라면 8개의 공간이 할당되겠지요.


    for(int i = 0; i < length(chStr1); i++)

        chTemp[i] = chStr1[i];

    // 요렇게 하면 chTemp에는 "Cat" 이 들어갑니다.


    for(int i = 0; i < Length(chStr2); i++)

        chTemp[Length(chStr1) + i] = chStr2[i];

    // 이러면 chTemp 는 "Cathouse" 라는 문자가 들어갑니다.

    // 즉 Cat을 하나씩 넣어준후에 그 뒷공간에 house를 가져다 넣는것이지요.


    return chTemp;

 }

 요렇게 하면 반환되는 것은 "cathouse"가 반환되겠죠?

 이런 메카니즘이랍니다.

 strcpy도 비슷해서

 2개의 공간을 받아서 메모리를 잡고 앞의 공간을 지운후에

 새로운 공간을 넣어서 복사해 나가는 것이랍니다.

 CString 같이 String을 전문적으로 처리해주는 Class도 비슷하게 돌아가지요.





string str1="kor";
string str2="jpn";
char *i[]={NULL};

*i=&str1;
*i+1=&str2;

printf(%s,"i");




C 언어의 경우.. 문자열 정보 맨마지막에는 0x00(\0)의 정보를 가지고 있습니다..

즉, 각 문자열을 구분하는 것은 아무것도 있지 않는 0 이라는 정보지요.. ('0' 과는 다릅니다..)


그리고 문자열이 합쳐지는 변수에는 그냥 포인터로 설정하시면 안 됩니다.

이유는 주소가 어디로 되어 있는지 알 수 없는 포인터에 자료를 쓰게되면 다운에 이를 수 있습니다..


char *str1 = "kor";

char *str2 = "jpn";


두개의 문자열이 있습니다.. 이때 이 두개의 문자열을 str 이라는 변수에 합쳐서 저장하고 싶다면..

우선 str 변수를 선언해야겠지요.. 포인터 변수로 정의하고 싶으시다면..

그 내용이 저장될 배열 변수도 필요합니다.


char *str, str_real[128];

str = &str_real[0]; // 포인터 변수 str 을 정의하고 그 내용을 저장할 str_real 배열을 선언 후 그 주소를 대입.


이제 준비는 끝났습니다.. 합치기만 하면 되죠..


char *tmp; // 이건 포인터를 이용해서 편리하게 문자열을 복사하기 위함입니다..


tmp = str1;

while ( *tmp ) // 0x00 이 아니면 while문 반복합니다.

  *str++ = *tmp++; // 여기서 주의할 점은 괄호를 사용하면 큰일납니다. ++ 이 먼저 실행되어서 이상해집니다.


이것으로 str1의 데이터가 str으로 복사되었습니다. str2 도 똑같이 반복해주면 됩니다.


tmp = str2;

while ( *tmp ) *str++ = *tmp++;


자, 여기서 끝난것이 아닙니다.. 처음에 설명드렸듯이 문자열의 끝에는 0x00 이 붙어야한다고 했지요..

현재 str 포인터가 가르키고 있는 위치는 str1과 str2를 합치고 난 뒷부분입니다..


*str = 0x00; // 그냥 *str = 0; 해도 됩니다만.. 확실하게 구분짓기 위해.. 0x00 이라 사용합니다.. 눈에 띄라고;;

str = &str_real[0]; // 이제 문자열 합치기가 끝났으므로.. str의 주소값을 원래대로 복구합니다.


puts ( str ); // 이제 출력하면.. str1 과 str2 가 합쳐진 korjpn 이라는 결과가 나오게됩니다.


[[[[ 다소 복잡하지만.. 포인터를 이해하는데는 더없이 좋은 예제입니다.. ]]]]


위의 설명을 이용하여 2개의 문자열을 하나로 합치는 함수를 작성해 보겠습니다.


void my_strcat ( char *src1, char *src2, char *des )

{

  while ( *src1 ) *de

}

'study > programming' 카테고리의 다른 글

공부  (0) 2008.01.16
웹기반 다이어그램 제작 툴  (0) 2008.01.05
후위식.  (0) 2007.12.25
memset 함수  (0) 2007.12.17
이분검색  (0) 2007.12.14


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 25. 11:56, study/programming]

A+B*C/D  -  E/F*G+H   =>

A+BC*D/  - E/F*G+H   =>

ABC*D/+  - E/F*G+H   =>

ABC*D/+ -  EF/G*+H  =>

ABC*D/+EF/G*- +H     =>

ABC*D/+EF/G*-H+      



(1+2)*3+4/(5+6*7)+8  =>

1+2)*3+4/(5+6*7)+8

'study > programming' 카테고리의 다른 글

웹기반 다이어그램 제작 툴  (0) 2008.01.05
문자열 연결 strcat 안씀.  (0) 2007.12.26
memset 함수  (0) 2007.12.17
이분검색  (0) 2007.12.14
call by value  (0) 2007.12.14


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 17. 11:18, study/programming]
void *memset( void *dest, int c, size_t count ); 원형을 가지고 있습니다.

리턴값은
dest 매개변수의 값입니다.

매개변수에 대해서 설명해 드리겠습니다.

dest : Pointer to destination
(즉, 아래의 c의 문자로 셋팅할 메모리 블록을 가리킵니다.
예를 들면 초기화를 시킬 어떤 문자배열이나 동적배열로 할당받은 메모리 영역의
시작 주소를 가리킵니다.)

c : Character to set
dest 메모리 블록을 초기화하는데 쓰일 문자를 적어줍니다.

count : Number of characters

dest 의 시작주소로부터 몇 바이트를 c 로 전달된 문자로 초기화 할 것인지를

바이트단위로 적어줍니다.

-----------예제입니다--------------
#include
#include

void main( void )
{
char buffer[] = "This is a test of the memset function";

printf( "Before: %s\n", buffer );
memset( buffer, '*', 4 );
printf( "After: %s\n", buffer );
}


출력

Before: This is a test of the memset function
After: **** is a test of the memset function

출처 : 본인 머리 & MSDN

'study > programming' 카테고리의 다른 글

문자열 연결 strcat 안씀.  (0) 2007.12.26
후위식.  (0) 2007.12.25
이분검색  (0) 2007.12.14
call by value  (0) 2007.12.14
문자열  (0) 2007.12.10


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 14. 02:23, study/programming]

#include <stdio.h>

int find(int low, int high);
int arr[5]={1,3,5,7,9};
int n;
int cnt=0;

int main(void){
 printf("숫자를 입력하세요:");
 scanf("%d",&n);
 find(0,4);
 return 0;
}

int find(int low, int high){

 int mid;
 while(1){
  if(low>high){
   printf("찾는 수가 없습니다");
   return 0;
  }
  mid=(low+high)/2;
  ++cnt;
  if(n==arr[mid]){
   printf("찾았습니다!%d는 %d번째 회전수는 %d입니다.",n,mid,cnt);
  return 0;
  }
  else if(n>arr[mid])
   low=mid+1;
  else if(n<arr[mid])
   high=mid-1;
 }
}


 

'study > programming' 카테고리의 다른 글

후위식.  (0) 2007.12.25
memset 함수  (0) 2007.12.17
call by value  (0) 2007.12.14
문자열  (0) 2007.12.10
소수구하기,이분검색  (0) 2007.12.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 14. 01:37, study/programming]

#include <stdio.h>

void o ( int r )
{
 r += 10;

 printf ("함수 안 =%d\n", *r );

/* return; */
}



void main()
{
 int r = 10;

 printf ("함수 호출 전 = %d\n", r );

 o ( r );
printf("함수 호출 후 = %d\n", r );


 /* return; */
}


하고


#include <stdio.h>

void o ( int *r )
{
 *r += 10;

 printf ("함수 안 =%d\n", *r );

/* return; */
}


void main()
{
 int r = 10;

 printf ("함수 호출 전 = %d\n", r );

 o ( &r );
 printf("함수 호출 후 = %d\n", r );

    /* return; */
}


의 차이는 무엇입니까???

또 return이란 어떤 녀석이며 어떻게 사용되지요???? 대충

void형에선 생략 되는것은 알구요..

main()함수에 뭐 데이터값을 넘겨주는것?? 머시기 는 대충그정도 까진 알겟는데

자세한건 잘..

또 return이란 뭡니까 도대체

return 이 녀석이 절 엄청 괴롭혀요 아..;; 증말 여태까지 보지 못햇던 녀석이

갑자기 함수에 출현해가지고 막 대충 책에는 설명해놓고

도대체 return은 무엇이면 또 return은 언제 사용되고 또 return이 있어야 하는지를

안알려준다는거죠

일단 void형 함수는 return을 생략해도 됩니다 삐리리... ㅜ.ㅜ


아차차ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

위에 두 예제의 차이점은 무엇입니까??

한개는 call by value방식이라는거고

그 밑에꺼는 call by reference라는데.. call by reference를 이해하기 전에 주소라는 개념을 또 이해 한다네요??

주소는 또 무엇이죠??.. 책에는 뭐 메모리 딱 .. 칸같은거 나와서 설명하는데 부족한감이 없지안나 싶구요..

또 *r 에서 *가 상징하는 의미는 무엇이죠??

부탁합니다..;;ㅜㅜ





먼저 C언어에는 Call By Value 만이 존재합니다. 포인터를 사용하여 Call By Reference를 흉내내는 것입니다.

함수를 정의할때 매개변수를 같이 정의하지요... 위의 예에서는 함수 o에 매개변수가 하나 있는데 이것이 Call By Value에서는 int r, 즉 변수 r이 정수임을 표시하고 있죠. 다음 예에는 int *r, 즉 변수 r이 정수값의 기억장소 주소임을 나타내고 있습니다.


C/C++에서 포인터는 매우 중요하고 강력한 기능을 가지고있습니다. 질문하신 내용으로 볼때 포인터에 대한 학습이 아직 다 끝나지 않으신듯 합니다만...

포인터와 관계된 연산자 두가지에 대해 먼저 설명을 드리면...

변수 앞에 &라는 연산자를 사용하면 해당변수의 주소를 얻어오게 되어 변수의 주소(기억장소번지)값을 결과로 받게 됩니다.

또 변수 앞에 *라는 연산자를 사용하면 해당변수가 주소라는 가정하에 해당주소에 있는 값에 접근할 수 있도록 하지요.


위 설명을 기준으로 한다면 두번째 예제는 주소값을 매개변수로 넘겨주어 해당 기억장소에 접근하여 값을 변경하도록 함으로써 호출된 main 함수에서 할당받은 r 변수를 수정할 수 있게 되는 것입니다. 즉, 엄밀히 이야기하면 주소를 값으로하는 Call By Value 인 것이죠. (이게 더 햇갈리나요??? 어찌 됐던 C언어에는 Call By Reference는 없습니다.) 주소값을 사용함으로써 Call By Reference 효과를 얻게 되는 것입니다.

(아~~~ 설명하면서도 어렵다...)


마지막으로 return이라는 것에 대해 설명을 드리죠.

return은 정의된 함수의 반환자료형에 따른 함수 처리결과를 호출한 함수로 되돌려주는 기능을 합니다.

위의 예는 함수 o에 대한 반환형이 void, 즉 반환되는 값이 없는 것으로 정의되어 있습니다.

따라서, 함수 마지막의 return은 있어도 되고 없어도 되는 것이죠... 그러나 반환형이 정수나, 실수, 자료형의 주소 등과 같이 특정한 값을 가져야 하는 경우에는 반드시 return 문장이 필요하게 됩니다.

그리고 함수 수행도중에 return을 만나게 되면 더이상 함수를 처리하지 않고 결과를 반환하고 호출된 함수로 복귀하게 됩니다.


도움이 되시길 바랍니다.


'study > programming' 카테고리의 다른 글

memset 함수  (0) 2007.12.17
이분검색  (0) 2007.12.14
문자열  (0) 2007.12.10
소수구하기,이분검색  (0) 2007.12.09
정렬하기 (포인터함수)  (2) 2007.12.09


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 10. 01:13, study/programming]
// gainax.c

#include <stdio.h>

int main(void)
{
 int i = 0;
 char c1[] = {'C', ' ', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
 char cerr[] = {'C', ' ', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e'};

 char c2[] = "C language";
 char c3[15] = "C language";
 char *c4 = "C language";

 printf("각 변수의 크기는 >> \n");
 printf("c1 = %d, cerr = %d, c2 = %d, c3 = %d, c4 = %d \n\n",
  sizeof c1, sizeof cerr, sizeof c2, sizeof c3, sizeof c4);
 printf("c1 = %12s, cerr = %12s \n", c1, cerr);
 printf("c2 = %12s, c3 = %12s, c4 = %12s \n\n", c2, c3, c4);

 //문자 배열의 각 원소를 하나 하나 출력.
 printf("문자 배열의 각 원소를 하나 하나 출력 >> ");
 while(c1[i] != '\0')
  printf("%c", c1[i++]);
 printf("\n");

 i=0;
 printf("문자 포인터의 각 원소를 하나 하나 출력 >> ");
 while(*(c4 + i) != '\0')
  printf("%c", *(c4 + i++));
 printf("\n");

 printf("문자 포인터의 각 원소를 하나 하나 출력 >> ");
 while(*(c4) != '\0')
  printf("%c", *(c4++));
 printf("\n");

 return 0;
 }


 




// gainax.c

#include <stdio.h>

int main(void)
{
 int i = 0;
 char strary[][5] = {"c", "c++", "java", "c#"};
 char *pary[] = {"AT&t", "AT&t", "Sun", "MS"};

 printf("각 문자열 출력 >> \n");
 for (i =0; i <4;)
  printf("%-8s", strary[i++]);
 printf("\n");
    for (i =0; i <4;)
  printf("%-8s", *(strary + i++));
 printf("\n");
 for (i =0; i <4;)
  printf("%-8s", pary[i++]);
 printf("\n");
 for (i =0; i <4;)
  printf("%-8s", *(pary + i++));
 printf("\n\n");

 printf("각 문자열의 첫 글자 출력 >> \n");
 for (i =0; i <4;)
  printf("%-8c", *strary[i++]);
 printf("\n");
 for (i =0; i <4;)
  printf("%-8c", *pary[i++]);
 printf("\n\n");

 printf("각 문자열의 개별 문자 출력 >> \n");
 printf("C++의 앞 + 출력 strary[1][1] = %c\n",
  strary[1][1]);
 printf("Sun의 앞 u 출력 *(*(pary + 2) + 1) = %c\n",
  *(*(pary + 2) + 1));

 return 0;
}






// gainax.c

#include <stdio.h>

void reverse(char *line);

int main(void)
{
 char line[81];
 char *ptr;
 int cnt;

 char *str = "객체지향 언어를 하나 써 보세요.";
 puts(str);
 gets(line);
 printf("%s를 아신다고요. 대단하십니다.\n", line);
 cnt = puts("아시는 클래스 이름(영어)을 적어보세요.");

 ptr = gets(line);
 while (*ptr)
  putchar(* ptr++);
 printf("\n");

 reverse(line);
 puts(", 아이고 아시는 것을 반대로 출력했네요!!");

 return 0;
}

void reverse(char *line)
{
 char ch = *line;
 if (ch)
 {
  reverse(++line);
  printf("%c", ch);
 }
}




// gainax.c

#include <stdio.h>
#include <conio.h>

int main(void)
{
 char ch;
 printf("문자를 계속 입력하고 Enter를 누르면 >> \n");
 while ((ch=getchar()) != 'q')
  putchar(ch);

 printf("\n문자를 누를 때마다 두 번 출력 >> \n");
 while ((ch=getchar()) != 'q')
  putchar(ch);

 printf("\n문자를 누르면 한 번 출력 >> \n");
 while ((ch=getch()) != 'q')
  putchar(ch);
 printf("\n");

return 0;
}

'study > programming' 카테고리의 다른 글

이분검색  (0) 2007.12.14
call by value  (0) 2007.12.14
소수구하기,이분검색  (0) 2007.12.09
정렬하기 (포인터함수)  (2) 2007.12.09
포인터  (2) 2007.12.07


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 9. 02:08, study/programming]
/*
#include <stdio.h>

int main(void){
    int i,number;
    printf("소수를 입력하세요\n");
    scanf("%d",&number);
    for(i=2;i<=number;i++){
        if(number%i==0){
            if(number==i)
                printf("소수입니다");
            else
                printf("소수가아닙니다");
                return ;
        }
           
    }
}




#include <stdio.h>

int main(void){
    int i,n;
    printf("소수를 입력하세요\n");
    scanf("%d",&n);
    for(i=2;i<n;i++){
        if(n%i==0){
            printf("소수가아닙니다");
            return 0;
        }
    }
    printf("%d는 소수입니다.",n);
    return 0;
}




*/
/*
        if(number%i==0){
            printf("%d는 소수가 아닙니다\n",number);
            return 0;
        }   
        else if ((number-1)==i){
            printf("소수입니다");
        }
        */

#include<stdio.h>

    int list[8] = {1,3,4,5,6,8,9,13};
    int key;
    location(int low, int high);

main(){
    printf("정수값을 입력하세요. : ");
    scanf("%d", &key);
    printf("%d\n",location(1,8)); // 이렇게 출력하는 것 말구요;ㅁ;
}

location(int low, int high){
    int mid;
    if(low > high)
        return 0;
    else {
        mid=(low + high)/2;
        if(key == list[mid])
            return mid +1;
    else if(key < list[mid])
        return location(low , mid -1);
    else
        return location(mid + 1, high);
    }
}

'study > programming' 카테고리의 다른 글

call by value  (0) 2007.12.14
문자열  (0) 2007.12.10
정렬하기 (포인터함수)  (2) 2007.12.09
포인터  (2) 2007.12.07
포인터  (0) 2007.12.07


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 9. 00:30, study/programming]
//배열에 입력된 수를 오름차순으로 정렬하시오.

#include <stdio.h>

int sort(int *i,int w);

int main(void){
    int k;
    int n;

    int arr[100];
    int *i;//포인터변수 선언
    i=&arr[0];//포인터 변수 i에 배열 arr 의 주소값을 넣는다
    printf("몇개를 입력할지\n");
    scanf("%d",&n);
    for(k=0;k<n;k++){
        printf("입력\n");
        scanf("%d",&i[k]);
    }
    printf("당신이 입력한수는?\n");
    for(k=0;k<n;k++){
        printf("%d\n",*(arr+k)); //arr[k]
    }
    sort(arr,n);
    return 0;
}

int sort(int *i,int n){
    int j,k;
    int temp;
    
    for(k=0;k<n;k++){
        for(j=k+1;j<n;j++){
            if(i[k]<i[j]){
                temp=i[k];
                i[k]=i[j];
                i[j]=temp;
            }
        }
    }
    printf("정렬!\n");
    for(k=0;k<n;k++)
    printf("%d\n",i[k]);
    return 0;
}

/*
int sort(int *i,int n){
    int j,k;
    int temp;
    
    for(k=0;k<n;k++){
        for(j=k+1;j<n;j++){
            if(*(i+k)<*(i+j)){
                temp=*(i+k);
                *(i+k)=*(i+j);
                *(i+j)=temp;
            }
        }
    }
    printf("정렬!\n");
    for(k=0;k<n;k++)
    printf("%d\n",*(i+k));
    return 0;
}
*/

'study > programming' 카테고리의 다른 글

문자열  (0) 2007.12.10
소수구하기,이분검색  (0) 2007.12.09
포인터  (2) 2007.12.07
포인터  (0) 2007.12.07
포인터  (0) 2007.12.04


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 7. 18:24, study/programming]

포인터는 처음 들어갈 때 아주 중요합니다. 구조에 대한 정확한 이해가 있어야 파일 입출력에 가서도 헷갈리지 않아요.


 int a[3][2]= { {1,2},{3,4},{5,6}};

기본적으로 C에서의 배열은 행과 열로 이루어진 것이 아니라 하나의 선 위에 위치해 있다는 표현이 좋겠네요.(그림을 그려가면서 설명하면 좋은데 조금 아쉽네요.)

교수에 따라 처음에 문제를 빠르게 이해시키려고 행과 열로 설명하는 교수도 있는데 그건 잘못된 교육이라고 생각합니다. 그런 사람들이 하는 것은

a라는 배열 안에

12

34

56

이렇게 자료가 들어가 있다는 말인데 C에서는 그런 식으로 자료가 들어가지 않습니다.


 int a[3][2]= { {1,2},{3,4},{5,6}};

이 선언문을 예로 들면

 int a[3][2]에서 일단 a라는 이름을 가진 int형 공간을 2*3개만큼 만들어 줍니다.

배열은 가장 뒷자리 부터 생각하셔야 합니다.

"int형을 가진 2개의 자료가 3개 모여서 a라는 배열을 이룬다."

{ {1,2},{3,4},{5,6}};는 자료를 넣어주는 거죠

1은 a[0][0], 2는 a[0][1]의 자리에 들어갑니다. (배열의 자리가 0부터 시작하는 건 아시죠?)

이 둘을 a[0]으로 표현할수 있습니다.  *a[0]을 하면 1과 2가 나오죠.

마찬가지로

a[1][0] = 3, a[1][1] = 4, a[2][0] = 5, a[2][1] = 6

이렇게 들어갑니다.


또한  a[3][3] 이렇게 고쳐 보니

*(ptr+0)=1

*(ptr+1)=2

*(ptr+2)=0

*(ptr+3)=3

*(ptr+4)=4

*(ptr+5)=0

이렇게 나오는 이유는

int a[3][3]은 "int형을 가진 3개의 자료가 3개 모인 배열a"

이렇게 되죠.

그리고 초기값을 지정해 줄때

{ {1,2},{3,4},{5,6}};이렇게만 넣어줬기 때문에

3번째 자리 즉,  a[0][2], a[1][2], a[2][2]의 자리에 아무런 값이 들어가지 않았다는 말입니다.

값을 지정해주지 않고 프린트문을 넣을 경우 프로그램에 따라 쓰레기값이 나올수도 있습니다.

지금 배열에는 1,2,??,3,4,??,5,6,??

이렇게 들어가 있죠. 그리고 앞에서 부터 3개씩 끊어 배열에 넣습니다.

a[0][0]부터시작해서 1을 넣고 뒷자리를 늘려주죠

a[0][1]에 2를 넣고 a[0][2]에 초기화되지 않은 값을 넣고,

이제 뒷자리가 3개 다 입력되었으니 다시 앞의 자리를 늘려주고(a[1][0])

다시 자료를 대입하는 식이죠.


*******

만약 { {1,2},{3,4},{5,6}};이 식이 { 1,2,3,4,5,6};이런 식으로 중괄호 없이 넣어줬다면

a[0][0] = 1

a[0][1] = 2

a[0][2] = 3

a[1][0] = 4

a[1][1] = 5

a[1][2] = 6

a[2][0] = 비초기화

a[2][1] = 비초기화

a[2][2] = 비초기화

이렇게 대입됩니다. 가능하면 중괄호를 넣어주는 습관을 기르시는 게 좋겠네요.

'study > programming' 카테고리의 다른 글

소수구하기,이분검색  (0) 2007.12.09
정렬하기 (포인터함수)  (2) 2007.12.09
포인터  (0) 2007.12.07
포인터  (0) 2007.12.04
불 대수의 법칙..  (0) 2007.11.26


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 7. 13:56, study/programming]

#include <stdio.h>

int main(void){
 int arr, *i;
 arr=2;
 i=arr;

// int arr=2;
// int *i=arr;
 printf("%d\n",i);
}

위에거는 *i = arr 이 아니라 i = arr으로 해야죠.
이미 i가 *로 선언이 되어 있으니까요.
밑에는 선언과 동시에 하는거니까는 괜찮죠

위의 *i=arr 은 어딘지 알 수 없는 메모리 공간에 2 를 할당하는 꼴

맞아요.
i는 주소값이고 *i는 그 주소에 들어 있는 실제 데이터를 지칭하는거니까
i는 arr이 들어가는게 아니라 arr의 주소인 &arr이 들어가야죠.

'study > programming' 카테고리의 다른 글

정렬하기 (포인터함수)  (2) 2007.12.09
포인터  (2) 2007.12.07
포인터  (0) 2007.12.04
불 대수의 법칙..  (0) 2007.11.26
배열 c  (3) 2007.11.26


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 12. 4. 23:11, study/programming]
이번 과제는 포인터를 사용하여 스트링에서 부분적으로 일치하는 스트링을 찾는 것이다.  스트링과 관련된 함수로 strcpy, strcmp, strcat, strlen, strlwr, strupr, strchr, strstr, strdup, strspn,  등 많은 함수들을 제공한다.  이들 함수들에 대하여 숙지하기 바라며 이번 과제는 strstr을 구현하는 과제이다.  문서에 보면 이 함수는 다음과 같이 선언된다.
char *strstr(const char *string, const char *strCharSet);
여기서 const는 함수의 정의 내에서 그 매개변수는 변경시킬 수 없음을 의미한다.  이 함수는 string에서 strCharSet를 찾아서 처음으로 나타나는 스트링의 위치를 return 하는데 찾을 수 없으면 NULL을 return한다.   이러한 기능을 가지는 함수
myStrstr(const char *string, const char *strCharSet);
를 구현하라.  더 필요한 것이 있으면 strstr를 참고하기 바랍니다.
예를 들어 string이 “abcdefghijklmnopqrstuvwxyz”일 경우 찾는 문자열을 입력받아 실행되는 과정은 다음과 같다.
? bced
No ...
? bcde
bcdefghijklmnopqrstuvwxyz
? hijkl
hijklmnopqrstuvwxyz
? stuv
stuvwxyz
? xyz
xyz
? opqr
opqrstuvwxyz
?
Bye ...
Press any key to continue


[프로그램]
#include <stdio.h>

#defineN50

void main()
{
char strMsg[] = "abcdefghijklmnopqrstuvwxyz";
char strMyStr[N];

while (1) {
printf("? ");
gets(strMyStr);
if (*strMyStr == NULL)
break;
char *myStrStr(const char *string, const char *strCharSet);
char *strFound = myStrStr(strMsg, strMyStr);
if (strFound == NULL)
printf("No ...\n");
else
printf("%s\n", strFound);
}
printf("Bye ...\n");
}

char *myStrStr(const char *string, const char *strCharSet)
{
// ???
// ???
}

'study > programming' 카테고리의 다른 글

포인터  (2) 2007.12.07
포인터  (0) 2007.12.07
불 대수의 법칙..  (0) 2007.11.26
배열 c  (3) 2007.11.26
배열 오름차순  (0) 2007.11.21


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 26. 21:21, study/programming]
기본 논리회로
⑴ 불 대수(Boolean Algebra)
    컴퓨터는 디지털 회로로 구성된 디지털 시스템으로 참(True)과 거짓(False), 0 또는 1, 전기신호의 유무등 두가지 상태로 표현하여 처리하는 이진 논리회로로 구성됨
   1) 불 대수의 기본공식
    정리1
    정리2
    교환법칙
    결합법칙
    배분법칙
    드모르강의
    법칙
    흡수법칙
   2) 카르노도(Kamaugh Map 또는 K-Map)를 이용한 간략화
    ① 카르노도의 특징
    • 맵은 여러 개의 사각형으로 구성
    • 각각의 사각형은 민텀을 표시
    • 출력값에 따라 각 사각형에 0이나 1을 표시(일반적으로 0은 공백으로 놓아둠)
    • 인접한 민텀끼리 묶어서 공통된 부분만을 표시
    • 민텀(Minterm) : 진리표(Truth Table)에서 그 결과 1이 되는 변수들의 각 조합
    ② 변수가 2개인 경우
    ③ 변수가 3개인 경우
⑵ 기본 논리 게이트(Logic Gate)
    게이트란 2진 입력 정보를 이용해서 논리적인 값 ( 0또는 1의 값) 을 생성하는 기본적인 논리회로를 의미
    게이트
    의미
    회로도형
    AND
    두 개의 입력정보가 모두 1일 때 1이 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    OR
    두 개의 입력 중 하나가 1이면 1이 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    NOT
    (Inverter)
    입력정보 1의 보수를 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    NAND
    Not AND의 의미로 AND 게이트 결과의 반대값을 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    NOR
    Not OR의 약자로 OR게이트 결과의 반대 값을 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    XOR
    (eXcusive-OR)
    두 개의 입력정보가 서로 베타적일 때(반대일 때) 1이 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    XNOR
    (eXclusive-NOR)
    XOR 게이트 결과의 반대값을 출력
    논리식
    진리표
    게이트
    의미
    회로도형
    Buffer
    입력 정보를 그대로 출력
    논리식
    진리표


    <질문>

    A+A' * B = A+B

    <답글>

    질문내용을 풀이해 보면 이렇게 됩니다.

    A+A' * B = (A+A') * (A+B)
                 =1 * (A + B)
                 =A + B

    A+A' * B에서 (A+A') * (A+B)로 풀이 되는 것은 분배법칙에 의해서 풀이 되는 것입니다.

    분배법칙은 2가지 예로 볼수 있습니다.

    1. A*(B+C)=(A*B)+(A*C)
    2. A+B*C=(A+B)*(A+C)

    위에서 설명한 것처럼
    (A+A') * (A+B)를 계산하여 보겠습니다.
    일단 첫 괄호인 (A+A')

    이것을 보수법칙으로 풀이하면 1 이란 결과가 나옵니다.

    보수법칙은

    A+A'=1
    A*A'=0

    즉,

    1 * (A + B)라는 결과가 나타납니다.
    1곱하기 (A + B)는 즉 (A + B)와 같으니

    A + B가 됩니다.

'study > programming' 카테고리의 다른 글

포인터  (0) 2007.12.07
포인터  (0) 2007.12.04
배열 c  (3) 2007.11.26
배열 오름차순  (0) 2007.11.21
배열 오름차순  (0) 2007.11.13


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 26. 00:22, study/programming]
#include <stdio.h> //printf() 의 이용을 위한 헤더 파일 포함

#define SIZE 60

void mean(int [] );
void mode(int [], int []) ;
void printArray(int []);

/*>>>>>>>>>>>>>>> main() 함수 시작 <<<<<<<<<<<<<<<<<<<<*/
int main()
{
int frequency[10] = { 0 };
int response[SIZE] = {
5, 6, 7, 2, 5, 3, 9, 4, 6, 4,
4, 8, 0, 6, 3, 7, 0, 2, 0, 8,
7, 8, 0, 5, 8, 7, 3, 9, 7, 8,
3, 5, 2, 9, 7, 5, 3, 8, 7, 2,
7, 4, 7, 2, 5, 3, 8, 7, 5, 6,
4, 7, 6, 1, 6, 5, 7, 7, 7, 6 };

/* fill here to call printArray() */
printArray(response); //배열명은 배열의 시작주소

/* fill here to call mean() */
mean(response);

/* fill here to call mode() */
mode(frequency,response);

return 0;
}
/*>>>>>>>>>>>>>>> main() 함수 종료 <<<<<<<<<<<<<<<<<<<<*/

void printArray(int a[])
{
int j;
printf("다음과 같은 0에서 9까지의 정수에서 \n");
for (j = 0; j < SIZE; j++) {
if (j%20 == 0)
printf( "\n" );

printf("%d ",a[j]);

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

void mean(int answer[])
{
int j, total = 0;

printf("%s\n%s\n%s\n", "********", " 평균", "********");

for (j = 0; j < SIZE; j++)
{

total += answer[j];
}

printf( "배열 원소의 평균을 구하려한다.\n"
"배열 원소의 수는 %d 이고 \n"
"배열 원소의 전체 합은 %d 이므로\n"
"평균은 %.4f 이다.\n",


j,total,(total*1.0)/j


);
}

void mode(int freq[], int answer[])

{
int rating, j, h, largest = 0, modeValue = 0;

printf( "\n%s\n%s\n%s\n",
"********", " 분포", "********" );

for ( rating=0; rating<=9; rating++ )
{
freq[rating]=0;
}

for ( j=0; j <= SIZE - 1; j++ )
{
for(rating=0;rating<=9;rating++)
if (answer[j]==rating) { freq[rating]++; break; }

}

printf("-------------------------------------------------------\n");
printf("%10s%10s%8s%-20s\n\n", "수", "횟수", " ", "히스토그램");
printf("%28s%-40s\n%28s%-40s\n", " ",
" 1 1 2 2", " ",
"1 5 0 5 0 5" );
printf("-------------------------------------------------------\n");

for (rating = 0; rating <= 9; rating++) {
printf("%10d%10d%8s", rating, freq[rating], " ");
if (freq[rating] > largest) {
largest = freq[ rating ];
modeValue = rating;
}

/* Fill here to print '*' as many as the histogram value.
You have to use for loop. */
for(h=0;h<freq[rating];h++) printf("*");

printf( "\n" );
}
printf("-------------------------------------------------------\n");


printf( "분포에서는 수의 빈도 횟수를 나타낸다.\n"
"분석 결과, 가장 많은 빈도수는 수 "
"%d이(가) %d번 나타났다.\n",modeValue,largest);
}

'study > programming' 카테고리의 다른 글

포인터  (0) 2007.12.04
불 대수의 법칙..  (0) 2007.11.26
배열 오름차순  (0) 2007.11.21
배열 오름차순  (0) 2007.11.13
배열  (0) 2007.11.13


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 21. 14:17, study/programming]

/*
#include <stdio.h>

int main(void){
    char arr2[]="lprea";
 
 printf("%s",arr2);
 
 return 0;
 }
*//*
#include <stdio.h>

int main(void){
 int i;
    int arr2[]={122,3,4,5};
 for(i=0;i<arr2[i];i++){
  printf("%d\n",arr2[i]);
 }
 return 0;
 }*/

#include <stdio.h>
#define max 10
int main(void)
{
 int z,j;
 int i=0;
 int arr2[max];
 printf("정수 10개를 입력하시오\n");
 for(i=0;i<max;i++)
 {
  printf("%d번째:",i+1);
  scanf("%d",&arr2[i]);
 }

 for (i=0; i<max; i++) {  
        for(j=i+1; j<max; j++) {
   if(arr2[i] > arr2[j])  {
    z = arr2[i];
    arr2[i] = arr2[j];
    arr2[j] = z;
   }
  }
 }

for(i=0;i<max;i++){
 printf("\n%d",arr2[i]);
 }
 return 0;
 
}


 

'study > programming' 카테고리의 다른 글

불 대수의 법칙..  (0) 2007.11.26
배열 c  (3) 2007.11.26
배열 오름차순  (0) 2007.11.13
배열  (0) 2007.11.13
c  (0) 2007.11.13


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 13. 19:51, study/programming]


#include <stdio.h>
 void sort(int* i, int n);

 int main()
 {
  int arr[100];
  int *i=arr;
  int j,n;

  printf("몇개까지 입력할래?");
  scanf("%d",&n);

  for(j=0;j<n;j++)
  {
   printf("숫자 처넣어 ~ :");
   scanf("%d",&i[j]);
  }

  for(j=0; j<n; j++)
  {
   printf("니가 처넣은 수는 %d \n",arr[j]);
  }

  sort(i,n);
  return 0;
 }

 void sort(int *i,int n)
 {
  int y,j,k;
  int temp;

 
  printf(" sort 시작 \n");

for(y=0; y<n; y++)
 {
  for(j=0; j<n; j++)
 {
  if(i[y] < i[j])
  {
    temp = i[y];
    i[y] = i[j];
    i[j] = temp;
   }
  }
 }
     for(k=0;k<n;k++)
   printf("%d\n",i[k]);
 }


'study > programming' 카테고리의 다른 글

배열 c  (3) 2007.11.26
배열 오름차순  (0) 2007.11.21
배열  (0) 2007.11.13
c  (0) 2007.11.13
c  (0) 2007.11.12


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 13. 15:16, study/programming]

제 7 강 : 배열

학습목표 : 배열 데이터에 데이터를 입력하고 출력하는 기법을 배운다.

*요점정리 :

배열이란 같은형의 데이터 n개가 연속적으로 설정되어 있는 것을 의미한다.

1차원 배열은 변수끝에 [ ]을 사용하여 배열을 설정한다.

2차원 배열은 [][]을 사용하여 그안에 배열의 수를 설정한다.


7-1.배열의 형식

배 열이란 여러개의 데이터형을 한꺼번에 설정하는 것을 말합니다. 다시 말하면 여러개의 데이터가 한  묶음으로 되어있다는 말입니다. 문자데이터를 연결하여 30개를 사용하고자 할때나 정수형 데이터를 5개를 한번에 사용할 때 배열을 사용합니다. 그럼 이런 배열은 어떻게 표현 되는지 알아보겠습니다. 형식을 보면 형을 선언하고, 변수를 선언하고, 대괄호 다음에 배열개수를 선언합니다. 문자열 배열 5개를 한다고 하면 char형을 선언하고 string[5](변수명은 자기가 마음대로 쓰면 된다.)라고 표현하면 됩니다 여기서 가로안에 5라는 것은 문자를 5개 저장할 수 있다는 뜻입니다. 그렇다면 정수형 3개가 들어가는 배열이 있다 라고 한다면 어떻게 표현하면 될까요? 임의적으로 배열의 이름을 num이라고 한다면 int num[3] 이라고 표현하면 될 것입니다 float형이나 double형 등도 같은 방법으로 표현 할 수 있습니다. 그림 7-1은 배열의 형태를 도시한 것입니다.


(그림 7-1) 여러 가지 배열


그 림 7-1)에 있는 그림은 문자열 배열, 정수형 배열, 실수형 배열의 예를 보여주고 있습니다 문자열 배열 string[5]라는 것은 문자열이 5개가 있는 배열이라는 것 입이다. 문자형은 1바이트이니까 1바이트가 하나, 둘, 셋, 넷, 다섯 개 이렇게 쭉 일렬로 연결되어 있다, 라는 것입니다. 거기서 첫 번째 값에는 L, 두 번째  값에는 O, 세 번째 V, E, 마지막에 0값 이렇게 데이터가 들어갈 수 있다는 것입니다. 그 다음 int[3] 이라고 하는 것은 int형 대이타가 배열로 3개가 있다는 것입니다 그런데 그림 7-1)을 보면 문자열 하고는 모양이 틀리지요? 문자열은 1바이트이지만 정수형은 4바이트를 쓰기 때문에 4byte 짜리가 연결돼서, 3개가 연결돼서 들어가 있다라는 얘기가 되기 때문입니다. float형도 4바이트를 쓰기 때문에 정수형과 같은 모습을 하게 됩니다. 결론적으로 int num 3개라는 것은 가로로 4개, 세로로 3개니까 12개의 바이트를 소유하게 됩니다. 또 float 데이터 4개라고 하면, 이렇게 데이터가 들어가 있는 것이 하나, 둘, 셋, 네 개가 들어가 있는 것입니다. 정리하면 문자형 같은 경우에는 문자는 1byte니까 배열을 5개를 주겠다 하면 문자가 5개가 연속으로 있는 것이고, 정수형일 때의 배열은 정수형이 4byte이니까 4byte짜리가 3개가 연속적으로 있는 것이고 , float형일 경우에는 4byte이니까 4byte가 쭉 연속돼서 들어가 있다는 이야기 입니다. 그래서 정수형일 때는 3015가 4byte 안에 들어가 있고 6234라는 값이 4byte, 그 다음에 7262라는 값이 4byte 안에 이렇게 들어가 있다는 이야기 입니다. 프로그램을 하다 보면 배열을 많이 씁니다. 문자배열로 예를 들어보면 ‘안녕하세요’, ‘ABCD’, ‘LOVE’ 이런 것들은 글자들을 하나 하나들을 쭉 연결시킨 배열 형태입니다. 숫자 같은 경우도 100, 110, 120, 130 이렇게 값을 연속적으로 저장하고자 할 때에는 배열을 이용할 경우가 많습니다.  배열을 이용하고자 할 때 그 배열의 저장방식은 바로 이렇게 크기에 따라서 그 자기의 크기가 일렬로 연결되어 있는 형태입니다.


7-2.문자형배열

앞에서 문자, 정수, 실수배열을 어떤 식으로 처리해 나가는가하는 것을 배웠습니다. 이제 문자배열이 대해 좀 더 알아보도록 하겠습니다.

문자형 배열은 char라고 선언해 주고, 변수명을 선언해 주고, 배열 개수 선언해 주면 문자열 배열이 되는 것입니다. char temp[8] 이라고 한다면 문자형 8개가 일렬로 나열되어있는 배열의 이름이 temp 라는 것입니다.

8 개의 배열 중에 첫 번째 주소값은 0입니다. 그래서 temp[0]이라고 표현 됩니다. 이 첫 번째 값에 A를 놓고자 한다면 temp[0]=‘A'; 이렇게 해서 문자를 넣어 주면 됩니다. 두 번째가 1, 세 번째가 2, 네 번째가 3, 이렇게 한 값씩 지정되게 됩니다. 조심하셔야 할 것은 배열의 주소값이 1부터 시작하는 것이 아니라 0부터 시작한다는 것입니다. 문자열을 처리하는 함수들은 많습니다. 왜냐하면 우리가 문자를 많이 쓰기 때문입니다. 대표적인 함수로 strcpy라는 함수가 있는데 string copy의 약자입니다. strcpy(문자배열 변수1, 문자배열 변수2) 라고 하면 문자배열 변수2에 있는 데이터를 문자배열 변수1로 저장하겠다, 라는 말이 됩니다.


알 고 가자^^) 나중에 또 다루겠지만 문자열 배열은 다른 정수형배열이나 실수형 배열과 값을 입력하는 방법이 다릅니다 정수형 배열이나 실수형 배열은 직접 넣어주면 되지만 정수형 배열은 strcpy나 strcat 등의 문자열 함수를 이용하면 편리하게 처리할수 있습ㅈ니다. 뒤에서 다루게 되는 예제중에 이름과 전화번호를 입력받는 예제가 있는데 전화번호는 정수이기 때문에 바로 변수를 입력받아서 배열에 입력할 수가 있습니다 그러나 이름의 경우에는 strcpy를 써서 입력하는 방법을 사용했습니다.. 많은 분들이 그것을 잊어버리시고 헤메는 것을 볼 수 있는데 여러분들은 꼭 기억하시기 바랍니다. 무슨 소리인지 모르시겠다고요? 그럼 일단 넘어가세요. 같이 공부하시다보면 “아 이 소리였군” 하시게 될 것입니다.

 

문 자열 배열에는 다른 형의 배열에는 없는 것이 있는데 문자열 배열 마지막에는 꼭 “null" 값이 들어간다는 것입니다. ”null"이라는 값은 코드값으로 0에 해당됩니다. 예를 들어서 “test”라는 문자가 들어있는 문자형 배열이 있다고 하면 ‘t’ ‘e’ ‘x’ ‘t’라는 4개의 문자가 들어가고 마지막에는 숫자 ‘0’ 값이 들어간다는 것입니다 보통 0을 null이라고 하는데, 0값, 아무것도 없다, 라는 뜻입니다. 문자열 배열은 일반적으로 문자열이 끝나는 지점에 0값이 집어넣어진 것까지 포함시킨 것이 바로 문자열 배열이라고 합니다. 이 ‘null'값은 한 분장이 끝났다라는 것을 알려주는 역할을 하게 됩니다. 그림 7-1에서 LOVE 다음에 숫자 0이 설정된것도 바로 이런 예입니다.

문 자열 배열을 출력할 때는 printf 함수로 %s 기호를 이용해서 출력할 수가 있습니다. printf 함수를 이용하여 문자열을 출력할때는 printf("%s", 출력하고자하는 문자형 배열) 과 같은 형식을 사용하게 됩니다. 다른 방법으로 큰 타옴표를 이용하는 방법이 있는데 printf("출력하고자 하는 내용\n")라고 코딩을 하면 큰따옴표 안에 있는 내용을 그대로 화면에 출력하게 됩니다. 큰따옴표 안에 있는 ‘\n'의 의미는 한줄이 끝났다라는 것을 알려주는 것입니다 그럼 이젠 한 단계 더 발전된 형태로 화면에 출력해볼까요? 예를 들어 printf("이것은 %s 입니다.“, ”테스트“); 라고 코딩을 한다면 어떻게 화면애 출력될까요? 화면에는 ”이것은 테스트 입니다.“ 라고 출력될 것입니다 %s는 문자형 배열을 듯한다면 앞에서 말슴드렸지요? 그러면 여기서는 문자형 배열 테스트가 %s 대신에 출력되게 됩니다.

C 언어에서는 문자를 출력하는 기능들을 많이 사용하고 있기 때문에 문자형 배열에 대한 함수들이 많이 있습니다. 그 함수들을 string함수라 하는데 물론 나중에 가서 string함수에 대한 것들을 많이 배우겠지만, 중요한 것은 문자형 printf함수도 문자열을 출력하라는 함수다, 라는 것을 기억하시면 됩니다.

다음의 두 예제는 문자형 배열에 “Love is"라는 문자열을 입력하는 프로그램입니다.

예제 1)문자를 직접 할당해서 출력 하는 예

#include <stdio.h>

void main()

{

        char string[8];

        string[0]='L';

        string[1]='o';

        string[2]='v';

        string[3]='e';

        string[4]=' ';

        string[5]='i';

        string[6]='s';

        string[7]=0;

        printf("%s\n", string);

}

결과)


예제2)문자열 함수를 이용한 예

#include <stdio.h>

#include <string.h>


void main()

{

        char string[8];

        strcpy(string, "Love is");

        printf("%s\n", string);

}

결과)


첫 번째 예제는 string문자열에 문자를 하나씩 넣어주는 프로그램입니다. string이란 이름의 8개의 문자형 공간을 가지는 문자형배열을 만든 다음 첫 번째부터 L, o, v, e, 공백(스페이스, 32번이라고도 하는데 빈칸을 말함), i, s하고 마지막에 0 까지 8개의 문자를 하나씩 넣어 줍니다. 여기서 0은 맨 마지막에 문자열 끝에 항상 0번을 넣는다고 했죠? 이렇게 해서 printf함수를 써서 화면에 출력하면 "Love is" 라는 문자가 출력되게 됩니다. 2번째 예제는 strcpy라는 함수를 사용해서 문자열을 입력하는 프로그램입니다. 여기서 주목해야 하는 것은 프로그램 처음에 #include <string.h>를 꼭 집어넣어 주어야 한다는 것입니다 이 #include 부분은 나중에 뒤에 가서 다시 설명하도록 하겠습니다. 문자열 8개 해주고, 그 다음에 strcpy(string, "Love is"); 이렇게 코딩하시면 “Love is” 라는 문자열이 string으로 들어가게 됩니다. 이 방법은 첫 번째 방식과 결과는 같지만 더 간결하게 프로그램을 만들 수 있습니다.

만 약 Love is 다음에 뒤에 더 많은 글자들을 집어넣게 되면 어떤 문제가 발생될까요? 배열은 8개 밖에 없는데, 8개 이상으로 데이터를 집어넣게 되면 error가 납니다. 글자를 8개 이상 넣고 싶다면 원하는 만큼 배열을 미리 늘려 놓아야 한다, 라는 것입니다. 배열을 선언하게 된다는 건 미리 내가 어느 정도의 크기의 데이터를 가지고 쓰겠다, 라는 것을 미리 설정하는 의미가 됩니다.

scanf 함수를 이용해서 문자열을 입력 받을수 있습니다. 다음 예는 scanf 함수를 이용해서 string[20]개의 배열에 문자를 입력받는 예입니다.

예)scanf("%s",string);

scanf 함수로 입력을 받게 되면 공백 문자가 나올때까지만 string에 입력됩니다. 예를 들어서 “Love is" 라고 입력을 하였을 경우 Love 와 is 사이에 공백이 있기 때문에 string안에는 "Love" 만 들어오게 됩니다. 예제3)은 scanf 함수를 이용한 문자열 입력 예입니다.

예제3)scanf 함수를 이용한 문자열 입력 예

#include <stdio.h>

#include <string.h>


void main()

{

        char string[50];

        printf("문자열을 입력 받습니다.\n");

        scanf("%s", string);

        printf("입력한 문자열은\n");

        printf("%s\n", string);

}


결과)


예제3) 문자를 입력받는 예제인데, scanf함수에도 마찬가지로 %s로 문자를 입력받을 수 있습니다. string의 배열로 50개를 잡고 문자를 입력하게 되면  string(scanf("%s", string);) 에 들어가게 됩니다. 입력한 문자열이 저장된 string을 다시 출력하면 “안녕하세요”가 출력되게 됩니다. scanf에서 %s로 문자를 입력 받으면 공백이 나오기 전까지 문자열을 받습니다. 여기서 주의 하실게 있는데 영어는 한글자가 1바이트이지만 한글은 한글자가 2바이트라는 것입니다 입력을 할때 “안녕하세요”라고 한글을 입력했기 때문에 한글자당 2바이트를 차지해서 “안녕하세요”가 차지하는 배열은 11개가 됩니다 (문자열을 마지막에 무조건 'null'이 한바이트 차지한다는 것을 잊지마세요)

배 열은 '&'기호를 사용하지 않습니다. 지금까지 단일 문자형 데이터일 경우 scanf함수를 이용한다고 할 경우 '&'을 사용하였습니다. 배열은 단일형이 아니라 하나의 포인터 개념이기 때문에 사용하지 않는다고 말씀드릴수 있습니다. 이부분에 대한 내용도 뒤에 자세히 설명하겠습니다.

공백을 포함한 문자를 모두 받고자 한다면 gets함수를 사용하면 됩니다. 예를 들어서 string[20]에 문gets를 사용하여 문자열을 받고자 한다면 다음 예와 같이 쓸수 있습니다.

예)gets(string);

gets 함수의 인수에는 문자열 배열이나 문자열 포인터 변수를 설정할수 있습니다. 설정된 인수로 명령 프롬포트에서 Enter 키가 눌리기 전까지의 문자열을 string에 저장합니다.

예제 4)는 gets함수를 이용한 문자열 입력 예제 입니다.

예제 4)문자열 입력 예제

#include <stdio.h>

#include <string.h>


void main()

{

        char string[80];

        printf("입력할 문자열\n");

        gets(string);

        printf("%s\n",string);

}

결과)

예제 4)는 string 문자 배열을 설정하고 gets함수를 이용하여 문자열을 입력 받은 예입니다. 출력 결과를 보면 알수 있듯이 공백을 포함한 모든 문자열이 string에 저장됩니다.


7-3.정수형 배열

정 수형 배열은 int 변수[배열개수]와 같은 방법으로 표현합니다. 예를 들어 int data[8]이라고 한다면 8개의 정수를 넣을 수 있다는 말이 되고 data[0] = 3625 라고 한다면 배열의 첫 번째 자리에 3625 라는 값을 넣어 준다는 말입니다.

정 수형 배열에 정수를 넣을 때는 4byte의 int의 배열이나 long의 배열을 사용합니다. 정수형 배열은 문자열 배열처럼 strcpy와 같은 함수가 없고 scanf함수를 이용할 때 %s 기호로 한 번에 입력받을 수 없습니다. 그것은 정수가 4byte 단위로 들어가고 또 따로따로 입력받는 것이 사용할 때 정확하기 때문입니다. 물론 나중에 배우시게 될 포인터를 이용해서 한번에 지정하는 방법이 있기는 합니다. 그래서 정수형 데이타는 입력 받을 때와 마찬가지로 출력하고자 할 경우에도 따로따로 해서 %d를 이용해서 출력합니다. 부호가 없는 정수형일 때 앞에 unsigned %u를 해주고, 뒤에 []안에 숫자를 써주면 됩니다.

다음에는 이런 배열을 가지고, 정수형 배열과 소수형 배열들이 예제를 어떻게 작성 한 번 해보면서 데이터를 넣고, 빼는 방법들을 알아보도록 하겠습니다.


예제5)정수형 배열 예제

#include <stdio.h>


void main()

{

        int data[5];

        int i;

        printf("5개의 수를 입력받습니다.\n“);


        for(i=0; i<5; i++)

        scanf("%d", &data[i]);

       

        printf("입력한 수를 씁니다.\n");


        for(i=0; i<5; i++)

        printf("%d,", data[i]);


        printf("\n“);

}

결과)


이 예제는 먼저 5개의 정수를 입력받고 입력받은 정수를 다시 화면에 출력하는 프로그램입니다. 여기서는 for문을 이용하여 5개의 정수를 5번을 반복하여 하나씩 입력을 받고 다시 for문을 이용하여 5개의 정수를 출력하는 예제입니다. scanf함수를 이용하여 데이터를 받아다가 반복번호에 해당되는 data[i]에 해당하는 값을 입력하게 되는데, 배열 첫 번째 주소는 0 이므로 첫 번째 데이터는 0번째에 이 들어가고 두 번째는 1에 들어가는 방식으로 하나씩 메모리를 차지하게 되는 것입니다 출력하는 것도 마찬가지로 printf 함수를 이용하여 정수를 하나씩 for문의 반복에 의해 출력하게 되는데, 이런 식으로 데이터를 입력받을 수가 있고, 그리고 출력할 수 있게 됩니다. 또 하나 중요한 것은 int data라는 배열을 놓고 원하는 배열 순서에 데이터 값을 놓고 싶다고 할 경우에는 data[2]=365처럼 직접 원하는 배열 번호에 값을 입력할 수 있습니다. 일단 이런 데이터들을 우리가 입력하고 난 다음에 산술연산을 하게 됩니다.


예제6).실수형 배열 예제


#include <stdio.h>

void main()

{

        float data[7], total;

        int i;


        printf("소수 7개를 입력 받습니다.\n");


        for(i=0; i<7; i++)

        scanf("%f", &data[i]);


        total = 0;


        for(i=0; i<7; i++)

        total = total + data[i];


        printf("총계 %f", total);

}

결과)


실 수형 배열 예제도 정수형 예제와 같습니다. 다만 형식을 쓸 때 float로만 썼다는 것입니다. 데이터 7개를 받고, total이라는 것을 하나 넣었습니다. 그래서 이렇게 데이터 값을 7개를 받은 다음에 total=0 해주고 total을 이용해서 계속적으로 받은 값들을 반복(for문)시켜서 더한 합계를 내는 프로그램입니다. 여기서 결과를 보시면 화면에 총계가 353.200012 라고 나왔는데 밑줄 친 부분의 값이 외 나왔을가요? 이렇게 되는 이유가 무엇인가 하면, 데이터 값들을 초기화하지 않아서입니다. 원래 float를 쓸 때는 data[0]=0이렇게 초기화를 해줘야 합니다. 물론 초기화하지 않아도 값은 비슷하게 나옵니다. 그렇지만 float는 4바이트 중에서 지수부하고 가수부로 나뉘어 지면서 안 쓰는 데이터들이 쓰레기 값이 들어가는 문제점이 있습니다. 그래서 초기화 해주는 버릇도 들이셔야 합니다. 아래와 같이 초기화부분을 삽입하여 주시면 값이 깨끗하게 나오는 것을 확인 하실 수 있으실 것입니다.


for(i=0;i<7;i++)

{

        data[i]=0 //이렇게 해주면 초기화되고 그 다음에 들어간다. 이렇게 하면 그 뒤로 값이

                  깨끗하게 나올 것이다.

        scanf("%f", &data[i]);

}


7-4.Select Sort

이 제 배열을 배웠으니까 배열을 이용한 하나의 알고리즘을 이용해 보도록 하겠습니다. 배열을 사용하여 데이터를 설정하였을 경우 가장 흔하게 이용하는 것이 배열의 데이터를 정렬하는 방법입니다. 이런 정렬 방법에는 Select Sort, Quict Sort, Bubble Sort 등이 있습니다. 그중에서 가장 간단한 방법으로 정렬하는 방식이 Select Sort 라고 하고 합니다. 보통 선택정렬이라고 하기도 합니다.  그림 7-2는 Select Sort 의 알고리즘을 그림으로 표현한것입니다.

(그림 7-2)선택정렬


데 이터들이 그림7-2)에서 처럼 3 6 8 4 2가 0번부터 차례로 들어가 있는데 이것을 나중에 2 3 4 6 8로 정렬을 해주고 싶다는 것입니다.  정렬을 하는 방식은 먼저 첫 번째 다섯 번을 반복하면서, 가장 작은 값을 찾습니다. 가장 작은 값을 찾은 다음에 그 값을 맨 위로 올려줍니다. 그러면서 맨 위에 있던 값 3은 가장 작은 값이 있던 자리로 보내집니다. 이제 맨 위에는 데이터는 빼고 다음 부분부터 시작해서 가장 작은 값을 찾고 그 중에서 가장 작은 값은 2번째 배열로 올립니다. 이런 방식으로 하다가 보면 정렬이 되는 것을 보실 수 있을 것입니다 이런 식으로 반복해서 정렬하는 방식이 Select Sort방법인데, 이 방법은 총계산량은 n(n-1)/2 정도가 됩니다. 이런 방식은 연산량이 굉장히 많은 편에 속합니다. 이 외에 여섯 가지 정도가 있는데 Select Sort말고 버블 소트, 쉘 소트, 퀵 소트.. 버블 소트등이 있습니다. 예제 7은 Select Sort를 사용한 예입니다.


예제7).Select Sort 예제

#include <stdio.h>

void main()

{

        int i, num, j, tem;

        int data[5];

        for(i=0; i<5;i++)

                scanf("%d",&data[i]);

        for(i=0; i<5; i++)

        {

                num = i;

                for(j=i; j<5; j++)

                {

                        if(data[j]<data[num])

                                num = j;

                }

                tem = data[i];

                data[i] = data[num];

                data[num] = tem;

        }

        for(i=0; i<5; i++)

                printf("%d",data[i]);

        printf("\n");

}

결과)



아까 말한 Select Sort의 예제입니다. 프로그램을 보면 for(i=0;i<5;i++) 에 의해서 점점 비교해야 하는 수가 줄어듭니다. 준다는 것이 반복이 줄지만 시작점에 처음에는 0으로 들어갔다가 그 다음엔 1로 들어가고, 2로 들어가고, 3으로 들어가고, 4가 들어가는 방식으로 진행 되어 나갑니다. 결국 여기 i값부터 시작되는 것인데, 처음에는 0으로 들어가는 것으로 해서 i값이 초기 값으로 들어갑니다. 이렇게 5번 반복해서 반복을 해서 데이터 j값이 (j값이라 함은 검색해서 첫 번째 값이 된다.) 데이터 num(첫 번째 값들) 값보다 작으면 이것이 최소 값이 되는 것입니다. 여기서부터 최소 값이 작아지는 것인데 최소 값의 번호를 잡은 다음에 이 반복을 종료하고 temp라는 곳에 data i값을 넣습니다. data I값이라는 것은 5, 4, 3, 2, 1인 것들 입니다. 첫 번째 값은 0이 되고, 그 다음엔 1값이 되고, 그 다음엔 2값이 되는 형식으로 데이터 i값을 채워가는 것입니다. 이렇게 채어들어 가는 값들을 temp에 저장을 하고, 최소 값에 있는 값을 바로 data[i] 고 위치에 집어넣고, 그 다음에 원래자리에다가 temp값을 다시 집어넣는 것이지요. 그러니까 이 자리에 있었던 것을 최소 값이 있는 자리로 집어넣으면서 반복을 하게 되면 sorting이 됩니다.


7-5. 2차원 배열

2차원 배열 역시 다차원 배열에 속하는 것이지만 보통 많이 쓰는 것이 2차원 배열이기 때문에 2차원 배열만 먼저 설명하겠습니다.


char data[5][5]를 그림으로 표현하면 그림 7-14와 같은식으로 표현 할 수 있습니다.

그림 7-3)2차원 배열


이 차원배열은 데이터형 변수명 [변수][변수] 와 같은 방식으로 표현되는데 앞에 있는 가로의 수가 세로열의 수를 표시하고 뒤에 있는 가로의 변수가 가로열의 수를 표시합니다. 예를 들면 char data[4][20] 이라고 했을 때 20바이트짜리 char형 배열 4개가 있다는 뜻이 됩니다. 이 이차원배열에 데이터를 넣어보면 첫 번째 배열에는 ‘태권V’, 2번째 배열에는 ‘지구천왕’, 세 번째 배열에는 가오가이거, 네번째 배열에는 ‘디지몬’ 식으로 입력할 수 있습니다 정수와 소수의 2차원 배열은 행렬 데이터를 정렬시키거나 계산할 때 굉장히 유리한 방법입니다.


예제8). 2차원 배열 예제

#include <stdio.h>
void main()
{    
  char name[5][20];
        int i;
        printf("이름5개를 입력하세요\n");
        for(i=0; i<5; i++)  {
        scanf("%s", name[i]);
        printf("출력 합니다.\n");
  }
        for(i=0; i<5; i++){
        printf("%s",name[i]);
  }

}

결과)


이 름을 입력 할 때 “만득이, 천득이, 백득이, 십득이, 일득이” 5개를 입력해서 입력한데로 출력하는 예제입니다. 일반적으로 문자열 2차원 배열은 1차원 문자열 배열로 보시는 것도 좋습니다. char name[5][20]이라고 설정하였다면 20개의 문자열을 가질수 있는 5개의 배열로 생각한다는 것입니다. 이렇게 보면 name[0]이라고 선언하게 되면 name[0]은 20개의 문자열을 가질수 있는 변수가 됩니다.

정수형이나 실수형 2차원 배열은 각각의 배열을 하나하나 사용해야 합니다. 예제9)는 2차원 소수 배열의 각 가로열의 평균을 구하는 예입니다.

예 9)실수형 2차원 배열

#include <stdio.h>


void main()

{

        float data[5][4],sum[5];

        int i,j;

        printf("실수 4개의 값을 5번 입력하세요\n");

        for(i=0;i<5;i++)

        {

                sum[i]=0;

                for(j=0;j<4;j++)

                {

                        scanf("%f",&data[i][j]);

                        sum[i]+=data[i][j];

                }

        }

        printf("각 항의 총합은 \n");

        for(i=0;i<5;i++)

                printf("%f\n",sum[i]);

}


결과)

2 중 for 반복문에서 총 20개의 실수형 데이터를 받습니다. 이때 Enter키는 상관이 없습니다. 결과 그림에서 보듯이 5개씩 입력을 했다 하더라도 처음 4개만 data[0]의 4개항목에 입력이 됩니다. 이렇게 입력된 데이터를 1차원 실수 배열 sum[5]에 총 합을 출력합니다.



12.다차원 배열

다 차원 배열은 3차원 배열 이상을 말하는 배열입니다. 에를 들어 char data[3][4][10]; 이라고 한다면 문자열 10개를 쓸 수 있는 것이 4개가 있는데, 그 4개 짜리가 3개가 있다, 라는 말입니다. 2차원배열, 3차원배열 하면 어렵게 생각 하시는 분들이 있는데 우리가 어린 시절에 받았던 종합선물 세트를 생각하시면 이해하시기 쉽습니다. 종합선물 세트가 3개 있다고 하고 안에는 껌이 한 3통 정도 들어있습니다 그리고 그 껌한통에는 껌이 한 5개 정도 들어 있습니다. 이것이 3차원 배열입니다 만약 4차원 배열이라고 한다면 이 종합선물 세트가 들어있는 박스가 3개 정도 있다고 생각하시면 됩니다 이 4차원배열을 표현식으로 표현해 보면, “과자(데이타형) 종합선물세트(배열명) [3](박스가 3개)[3](종합선물세트 3개)[3](껌이 3통)[5](껌이 5개) 와 같은 방식으로 표현 됩니다

다차원 배열들을 갈 때 너무 많은 다차원 배열을 쓰는 것이 좋다고는 볼 수 없습니다. 왜냐하면, 데이터들을 처리할 때 자기 자신도 많이 헷갈리고 프로그램에서의 퍼포먼스도 많이 떨어집니다.

다 차원배열은 이런 것들이 있지만 일반적으로 정수형 데이터나, 소수형 데이터, 숫자형 데이터는 2차원까지 쓰는 것이 좋고, 문자 데이터는 3차원까지 쓰는 것이 좋습니다. 이 부분에 대해서는 나중에 포인터로 가면서 더욱 자세하게 설명하게 될 것입니다

'study > programming' 카테고리의 다른 글

배열 오름차순  (0) 2007.11.21
배열 오름차순  (0) 2007.11.13
c  (0) 2007.11.13
c  (0) 2007.11.12
07.11.04 정보처리산업기사 합격수기  (0) 2007.11.11


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 13. 13:37, study/programming]

#include < stdio.h>

#define MAX_CNT 20 //최대 문자열 개수

void main()
{
int cnt,n,k;
char s[MAX_CNT][81]; //문자열 저장할 변수 최대 80자
char temp[81]; //sorting 시 사용할 임시 변수

cnt=0;
while(1) {
printf("%d 번째 string(종료:.) ", cnt+1);
scanf("%s", s[cnt]);
if (s[cnt][0]=='.') break;
cnt++;
if (cnt==MAX_CNT) break;
}

//sorting
for (n=0; n < cnt-1; n++)
for (k=n+1; k < cnt; k++)
if (strcmp(s[n],s[k])<0) {
strcpy(temp, s[n]);
strcpy(s[n], s[k]);
strcpy(s[k], temp);
}

for (n=0; n < cnt; n++)
printf("%s\n", s[n]);
}

'study > programming' 카테고리의 다른 글

배열 오름차순  (0) 2007.11.13
배열  (0) 2007.11.13
c  (0) 2007.11.12
07.11.04 정보처리산업기사 합격수기  (0) 2007.11.11
c  (0) 2007.11.10


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 12. 19:24, study/programming]
/*
#include <stdio.h>

int main(void){
    char  answer;
    int course=0;
    answer = (course == 0) ? 'A': 'B';

    printf("%c\n",answer);
    return 0;
}
*/
/*
#include <stdio.h>
int main(void)
{
int str[11];
int n,j,i=0;
printf("10진수 입력");
scanf("%d",&n);

for(j=0;j<10;j++){
str[j]=n%2;
n=n/2;
}

printf("2진수:");

for(j=9;j>=0;j--){
printf("%d",str[j]);
}
printf("\n");
return 0;
}
*/
/*
#include <stdio.h>

int main(void)
{
    int invalid_operator = 0;
    char operator;
    float number1,number2,result;
    printf("두 수를 다음과 같은 형태로 입력하세요.\n");
    printf("number1 연산자 number2\n");
    scanf("%f %c %f", &number1, &operator, &number2);

    switch(operator){
    case '*':
        result = number1 * number2;
        break;
    case '/':
        result = number1 / number2;
        break;
    case '+':
        result = number1 + number2;
        break;
    case '-':
        result = number1 - number2;
        break;
    default :
        invalid_operator = 1;
    }
    switch(invalid_operator){
    case 1:printf("연산자가 잘 못 입력되었습니다.\n");
        break;
    default :
        printf("\n>>>>>>>>결과는\n");
        printf("%5.2f %c %5.2f = %5.2f\n", number1, operator, number2, result);
        break;
    }
    return 0;
}
*/

#include <stdio.h>

int main(void){
    int x=0;
    scanf("%d",&x);
    (x%2==0)?printf("짝수입니다"):printf("홀수입니다");
    return 0;
}

'study > programming' 카테고리의 다른 글

배열  (0) 2007.11.13
c  (0) 2007.11.13
07.11.04 정보처리산업기사 합격수기  (0) 2007.11.11
c  (0) 2007.11.10
반복문 9월 17일  (0) 2007.09.17


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 11. 20:52, study/programming]

75점 이상으로 합격예상입니다!

사실 걱정을 많이 했었는데 알고리즘이 생각보다 쉽게 나와서..

필기실기 둘다 한번에 합격입니다/


1. 알고리즘(30점):

무조건 다 맞아야 합니다.

공부하기 전에 솔직히 무슨 말인지 전혀 몰랐는데..저같은 경우 인강을 보면서 하니까

금방금방 이해 되더군요..

산업기사셤에서는 주로 수학과 자료구조에서 문제가 출제되는 듯 합니다.

 이번 시험에서는 7의 배수 구하기가 나왔습니다.


2. 데이타베이스(30점)

24점 이상을 목표로 공부해야 합니다. 개념을 확실히 이해 하시면 될듯.

알고리즘과 함께 가장 시간을 많이 투자해야하는 과목.

3. 업무프로세스(20점)

예전엔 국어만 할줄 알면 붙는다고 생각했었는데,, 좀 어려워졌더군요.

이번 시험 1,2번 같은 경우 본문에 나오지 않는 경영용어가 튀어나와서

당황스러웠습니다.

4. 신기술 동향(10점) & 전산영어(10점)

비전공자이신 경우 힘드실듯..

범위가 상당히 광범위하거니와 시간대비점수가 낮기 때문에 ...


07년 4회 정보처리산업기사 알고리즘

<문제>
10개의 정수가 배열 T(10)에 기억되어 있다.
10개의 정수 중에서 7에 가장 가까운 정수를 찾아 그 정수를 출력하고자 한다.
배열에 기억되어 있는 순서에 따라 10개의 정수와 7과의 차이값을 구하여 그 차이값이 가장 최소의 차이값을 가지는 정수를 7에 가장 가까운 값으로 선택하여 출력하는 방법으로 알고리즘을 구현하고자 한다.
제시된 (그림)의 괄호 안 내용에 가장 적합한 항목을 <답항보기>에서 선택하여 답안지의 해당번호에 마크하라.

<처리조건>
- 그림에 제시되어 있는 알고리즘과 연계하여 가장 적합한 조직으로 구현될 수 있게 유의하라
- 배열에 기억된 10개의 데이터를 절대값이 500이하 정수라고 가정한다.
- 10열의 크기가 10일 경우 배열의 요소는 0부터 9까지 구성된다.



사용자 삽입 이미지


<답안>
1. -1 (21)     2. S = T(N)-7 (17)     3. S = 7-T(N) (39)     4. C=S (24)     5. T(N) (18)

'study > programming' 카테고리의 다른 글

c  (0) 2007.11.13
c  (0) 2007.11.12
c  (0) 2007.11.10
반복문 9월 17일  (0) 2007.09.17
tcp/ip  (0) 2007.09.13


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 11. 10. 21:18, study/programming]

1번

#include < stdio.h>

void main()
{
 int nMonth, nCheck;

 printf("달을 입력하세요 : ");
 scanf("%d", &nMonth);

 nCheck = nMonth > 0 ? (nMonth <= 12 ? ((nMonth < 7) ? 0 : 1) : -1 ) : -1;
 

 if(nCheck == -1)
  printf("달의 범위가 아닙니다.\n");
 else if(nCheck == 0)
  printf("상반기\n");
 else
  printf("하반기\n");
}


2번

#include < stdio.h>

void main()
{
 int nNumber, nCheck;

 printf("정수를 입력하세요 : ");
 scanf("%d", &nNumber);

 nCheck = nNumber % 2 == 0 ? 0 : 1;
 
 if(nCheck == 0)
  printf("짝수입니다.\n");
 else
  printf("홀수입니다.\n");
}

3번

#include < stdio.h>

void main()
{
 int a, b, c, max;

 printf("정수를 입력하세요 : ");
 scanf("%d %d %d", &a, &b, &c);

 max = (a>b) ? ((a>c) ? a : c) : ((b>c) ? b : c);
 
 printf("가장 큰 수는 %d입니다.\n", max);
}

5번

#include < stdio.h>

void main()
{
 int a, b[32]={0,}, i=31, temp;

 printf("정수를 입력하세요 : ");
 scanf("%d", &a);

 while(a!=0)
 {
  temp = a % 2;
  a /= 2;
  b[i] = temp;
  i--;  
 }
 
 for(i=0; i<32; i++)
  printf("%d", b[i]);

 printf("\n");
}

'study > programming' 카테고리의 다른 글

c  (0) 2007.11.12
07.11.04 정보처리산업기사 합격수기  (0) 2007.11.11
반복문 9월 17일  (0) 2007.09.17
tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 9. 17. 22:37, study/programming]

/*
#include <Stdio.h>
int main(void)
{
 int invalid_operator = 0;
 char operator;
 float number1,number2,result;

 printf("두 수를 다음과 같은 형태로 입력하세요.\n");
 printf("연산자는 네 가지(+,-,*,/)중의 하나여야 합니다.\n");
 printf("number1 연산자 number2\n");
 scanf("%f %c %f", &number1,&operator, &number2);
 
 switch(operator){
 case '*' :
  result =number1*number2;
  break;
    case '/' :
  result = number1 / number2;
  break;
 case '+' :
  result = number1 + number2;
  break;
 case '-' :
  result = number1 - number2;
  break;
 default :
  invalid_operator = 1;

 }

 switch(invalid_operator){
 case 1: printf("연산자가 잘못 입력되었습니다.\n");
  break;
 default :
  printf("\n>>>>>>>>>>>결과는\n");
  printf("%5.2f %c %5.2f = %5.2f\n", number1, operator,
   number2,result);
  break;
 }
 return 0;
}
*/
/*
#include <stdio.h>
int main(void){
 int d=3;
 switch(d) {
 case 3 :printf("소수입니다.");
 case 4 :printf("zzzz");
 }


 return 0;
}

  */
/*
#include <stdio.h>

int main(void){
 int i;
 for(i=0; i<5; i=i+1){
  printf("*****\n");
 
 }
}
*/
/*
#include <stdio.h>

int main (void)
{
       int i,j,n=11;
       for(i=0;i<n;i++)
       {
            for(j=0;j<i;j++)
           {
               printf("%d",j);
            }
         printf("\n");
       }
 
       return 0;
}
*/
/*
#include <stdio.h>

int main(void)
{
int a,i,b=0;
printf("몇번째 줄까지 *를 출력할까요");
scanf("%d",&a);
for(b; b<a;b++)
{
for(i=0;i<=b;i++)

printf("*");
printf("\n");
}

}
*/
/*
#include < stdio.h >

void main()
{
 int i,j;
 for(i=5; i>0; i--)
 {
  for(j=1; j<=i; j++)
  {
   printf("*");
  }
  printf("\n");
 }
}
*/
/*
#include <stdio.h>

void main()
{
int i, j, a[5][2] = {
{4,3},
{6,4},
{4,5},
{7,8},
{7,5}
};

int b[2][5]; // 행렬 b 새로 지정

for(i=0; i<2 ; i++){ // 행렬b 초기화
for(j=0; j<5; j++){
b[i][j]=0;
}
printf("\n");
}


printf("원래의 행렬\n \n");
for (i=0; i< 5; i++) {
for(j=0; j< 2; j++){
printf(" %d ", a[i][j]);
}
printf(" \n");
}
printf(" \n");


printf("전치 행렬\n");

for (i=0; i< 5; i++){ // a를 b에 행과 열을 바꿔서 넣음
for(j=0; j< 2; j++){
b[j][i]=a[i][j];
}
}

printf("\n");

for(i=0; i<2 ; i++){
for(j=0; j<5; j++){
printf("%d ",b[i][j]);
}
printf("\n");
}

printf("\n");
}
*/

#include <stdio.h>
#define LIMIT 10

int main(void){
 int mult=1,i=0;

 mult=1*2*3*4*5*6*7*8*9*10;
 printf("반복문을 이용하지 않고 :\n");
 printf("1에서 10까지의 곱은 %d입니다.\n",mult);

 mult=1;
 
 for(i=1;i<=LIMIT;i++){
  mult *= i;
 }
 printf("for 반복문을 이용 :\n");
 printf("1에서 10까지의 곱은 %d입니다. \n", mult);

 i=1;
 mult =1;
 while(i<=LIMIT){
  mult *= i;
  i++;
 }
 printf("while 반복문을 이용:\n");
 printf("1에서 %d까지의 곱은 %d 입니다.\n",LIMIT,mult);

 return 0;
}

'study > programming' 카테고리의 다른 글

07.11.04 정보처리산업기사 합격수기  (0) 2007.11.11
c  (0) 2007.11.10
tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13
조건if  (0) 2007.09.07


본인의 아이피 주소 확인과 위치 추적
*1 *2