'Programming/C'에 해당하는 글 22건

입력받은 행, 단어, 문자의 개수 세는 프로그램

빈칸, tab, 행바꿈문자(\n)가 나오면 한 단어가 끝났다고 본다.

#include <stdio.h>

#define IN 1  // inside a word
#define OUT 0 // outside a word

/* count lines, words, and characters in input */
main()
{
  int c, nl, nw, nc, state;

  state = OUT;
  nl = nw = nc = 0;
  while( ( c = getchar() ) != EOF )
  {
    ++nc;  // increase character
    if( c == '\n')
      ++nl;  // increase line
    if( c == ' ' || c == '\n' || c == '\t' )
      state = OUT;
    else if( state == OUT ) {
      state = IN;
      ++ nw;  // increase word
    }
  }
  printf( "%d %d %d\n", nl, nw, nc );
}

  • 문자를 입력받을 때마다 행인지 단어인지 문자인지 체크를 한다.
  • 입력이 들어올 때마다 문자 개수 변수인 nc는 1씩 증가한다.
  • enter(\n)이 입력되면 행 개수 변수인 nl은 1씩 증가한다.
  • 빈칸, tab, 행바꿈문자가 나오면 그 다음 입력문자 체크를 하여 단어 개수 변수인 nw는 1씩 증가한다.
  • state 값을 1과 0이 아닌 상수 IN과 OUT 상수로 나타낸 이유는 나중에 프로그램이 복잡해지면 해석이 쉬워지기 때문이다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,
문자의 개수 세는 프로그램

#include <stdio.h>

/* count characters in input; 1st version */
main()
{
  long nc;
  nc = 0;

  while( getchar() != EOF ){
    ++nc;
  }
  printf( "%ld\n", nc );
}

  • 한 문자씩 입력을 받았을 때 파일 종료가 아니라면 nc 변수 1씩 증가
  • 파일 종료 명령을 받으면 누적된 변수 nc값을 출력

*  for문, double형 사용
#include <stdio.h>

/* count characters in input; 2st version */
main()
{
  double nc;

  for( nc = 0; getchar() != EOF; ++nc )
    ;
  printf( "%.0f\n", nc );
}


행의 개수 세기

#include <stdio.h>

/* count lines in input */
main()
{
  int c, nl;
  nl = 0;
  while( ( c = getchar() ) != EOF )
    if( c == '\n' )
      ++nl;
  printf( "%d\n", nl );
}

  • 문자 입력을 받고 파일 종료 명령이 아닐 때 enter(\n)키를 만나면 nl 변수를 1씩 증가
  • 파일 종료 명령을 받으면 누적된 변수 nl값을 출력

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,
getchar()
문자 하나를 받아들이는 함수 (stdio lib)

putchar()
문자 하나를 출력하는 함수

c = getchar()
putchar(c)


입력을 그대로 출력으로 내보내는 프로그램

1. 문자를 읽어 들인다.
2. while (문자가 파일의 끝을 나타내는 기호가 아닌 동안)
3. 문자를 출력한다.
4. 다음 문자를 읽어 들인다.

#include <stdio.h>

/* copy input to output; 2nd version */

main()
{
  int c;

  c = getchar();
  while( c != EOF )
  {
    putchar( c );
    c = getchar();

  }
}

EOF(End Of File)는 프로그램에서 파일의 끝을 나타내는 기호이다. (stdio lib)
보통 파일의 끝을 나타내는 기호는 -1 또는 0 이다.
문자를 읽어들이는 getchar를 정수로 정의한 이유는 파일에서 -1(EOF)같은 값이 들어오면 처리할 수가 없기 때문에 ASCII번호를 읽을 수 있는 정수형으로 선언한 것이다.

* 다음처럼 간결하게 나타낼 수도 있다.
#include <stdio.h>

/* copy input to output; 1st version */

main()
{
  int c;

  while( ( c = getchar() ) != EOF )
    putchar( c );
}

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

상수 정의

Programming/C 2006. 9. 10. 20:44
#include <stdio.h>

#define LOWER 0  /* lower limit of table */
#define UPPER 300  /* upper limit */
#define STEP 20  /* step size */

/* print Fahrenheit-Celsius table */

main()
{
  int fahr;

  for( fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP )
    printf( "%3d %6.1f\n", fahr, ( 5.0 / 9.0 ) * ( fahr - 32 ) );
}

  • #define이 상수를 정의해 주는 부분이고, 뒤에 세미콜론(;)을 붙이지 않는다.
  • 상수는 대문자를 사용하고, 변수와 달리 값이 변하지 않는다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

For문

Programming/C 2006. 9. 10. 20:35
#include <stdio.h>
main()
{
  int fahr;
  for( fahr = 0; fahr <= 300; fahr = fahr + 20 )
    printf( "%d %6.1f\n", fahr, ( 5.0 / 9.0 ) * ( fahr - 32 ) );
}

  • 앞의 while문 보다 길이도 짧아지고 변수도 하나뿐이다.
  • C에서는 어떤 변수가 있어야 될 자리에 수식이 들어가도 상관없지만 형(type)은 맞아야 한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,