/********************************************************************************
 
 
 
                     제작자: 신대용
 
                     제작일: 2005년 5월 7일
 
                     제작시작시간: 오후 10시 59분

                     제작종료시간: 오후 11시 42분

                     


                     알고넘어가야할것:변수는 하나의 값만 저장할수있다.
 
 
 
********************************************************************************/

 

월요일날 저희 학교 1학년들의 두번째 씨언어 테스트가 있답니다.

 

제 후배가 메신저에서 안된다며 질문을 했는데 어떤 실수를 했는지 살펴보겠습니다.^^

 

후배:

#include  <stdio.h>
//표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라
//
main()
{
        int c;
        c = getchar();
        while(c!=EOF){
                if((c>='A')&&(c<='Z'))
                        c++;
                c=getchar();
        }
        printf("개수:%d\n",c);
}


후배:오빠 여기서 모틀렷어요?ㅋㄷ

후배:앗알겟다

나:ㅋㅋㅋ

나:만화책 보고있었어 ^^

후배:ㅋㅋ오빠

후배: int n=0;

후배:하나더쓰고

후배:출력에서 콤마뒤에 n으로 바껏든데

후배:안되요 ㅋㅋ왜그럴까요?ㅋ

 

 

 

여기까지가 대화 내용이었습니다.

자 과연 무엇이 틀렸을까요? 처음 소스에서 후배가 말한대로 한후 문제가 해결됐을까요?

 

주석을 달면서 하나하나 따라가 보겠습니다. 안보셔도 되요^^

#include  <stdio.h>  //표준 입출력 함수를 사용하려면 include를 해야겠죠?
//표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라
//
main() //머 이렇게 축약시켜도 됩니다.

{
        int c; //외부로 부터 문자를 입력 받기 위해서 c라는 변수를 만들었네요
        c = getchar(); //입력을 받고
        while(c!=EOF){  //입력 받은 값이 입력의 종료를 나타내는 EOF가 아니라면
                if((c>='A')&&(c<='Z')) //입력 받은값이 대문자 A 와  Z 사이의 값이라면
                        c++; //c라는 변수의 값을 1증가
                c=getchar(); //입력을 받고 while문의 처음으로 갑니다.
        }
        printf("개수:%d\n",c); //c의 값을 출력
}

무엇이 문제라고 생각하세요?

 

 

문제 분석을 해볼까요?

표준입력에서 글자를 하나씩 읽어서 영문자의 개수를 출력하는 프로그램을 작성하라

글자를 하나씩 읽어서 -> 문자를 하나씩 입력 받는걸 말하는것이겠죠? getchar라는 함수가 떠올라야 합니다. scanf의 경우 엔터를 입력해야하니깐 좀 비효율적이죠

영문자의 갯수를 출력  -> 입력 받은 값이 영문자일경우 들어온 영문자의 갯수를 1증가 시켜야겠죠?

 

사용할 함수는? getchar 혹은 문자를 하나씩 입력받게 해주는 함수들

사용할 변수는? getchar로 입력 받은 문자를 저장할 변수, 영문자의 갯수를 저장할 변수

 

어때요? 어디서 실수를 했는지 아시겠나요?

 

변수가 하나 부족합니다.^^ 그래서 후배는 변수를 하나더 만들었죠

그런데 바꾸지 않은 부분이

c++;

이부분이었답니다. 나중에 해결 하게 됐죠

c라는 변수는 입력 받은 문자를 저장하는 변수이니까 거기에 1을 더해봤자 의미가 없습니다^^

입력 받은 영문자의 갯수를 저장할 변수에 1을 더해 줘야 하죠^^

 

 

변수는 말이죠~~

 

한번에 한가지만 저장할수있어요~

int형이면 한가지 숫자만  포인터 변수는 한개의 메모리 주소만^^

저장해야할게 2가지라면 변수는 2개만들어줘야해요^^

 

변수에서 중요한것이 무엇인지 다시한번 보자!

 

 

type (자료형)

자료형 , 타입, 종류라고 번역되죠 자료형이 라고 말할께요

int type의 변수에는 int만 넣어야 해요 float type을 넣으면 에러 

"친구"라는 type의 변수에 "적"이라는 type의 값을 넣으면 안되겠죠?

 

한번에 한가지만 저장할수있다

변수 하나는 자기 type에 해당하는 자료를 하나만 저장할수있어요

int a;

a=1;

a=10;

이라고 하면 a에 처음에 들어있던 1은 사라지고 10이 들어가는거예요^^

 

 

(이 밑은 구조체를 모르면 보지 마세요)

"어라 이상하다 struct로 만들어진 구조체는 여러개를 저장할수있는데요?'

라는 질문을 하실수있는데요 구조체 역시 구조체자체를 여러개 저장하고있을순 없어요^^

struct s{

        int a;

        int b;

};

struct s newtype;

이런 구조체가 있다면(구조체는 기본자료형을 붙여놓은거예요)

구조체 s 형으로 만든 구조체 변수 newtype는

newtype.a 에 자료를 하나

newtype.b 에 자료를 하나 저장할수있잖아요?^^ a,b에 각각 두개씩 저장할순없어요^^

 

 

 

시험볼때 문제가 나오면 제가 한것처럼 대강 필요한게 뭔지 적어보시면 좋아요^^

어떤 함수가 필요하고 어떻게 해결할건지 어떤 변수를 사용할지를 적어보면

나중에 빠뜨리고 실수하는게 좀 줄어들수있어요 ^^

 

그럼 또 내일 뵈요 ㅎㅎ

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by dosuser(신대용) dosuser