'C언어'에 해당되는 글 54건

  1. 2007.11.09 배열, 구조체, 포인터 by 청웨일
  2. 2007.11.09 순환 by 청웨일
  3. 2007.11.09 자료구조와 알고리즘 by 청웨일
  4. 2007.11.03 파일 시스템 by 청웨일
  5. 2007.11.03 스트림 by 청웨일
 

배열 - 거의 모든 프로그래밍 언어에서 기본적으로 제공한다.

*C언어 참조.


구조체 - 타입이 다른 데이터를 묶는 방법 //struct


struct [구조체명] [구조체변수명]{

        항목1;

        항목2;

        ...

}


struct person {

        char name[10];

        int age;

        float height;

};


구조체 생성

person a;


구조체의 접근

a.name[0] =

a.age =

a.heigjt  =


포인터  *C언어 참고


타입의 일치는 중요하다.

포인터는 배열의 이름

배열을 가리킬수도 있고, 구조체를 가리킬수도 있다.

함수를 가리키는 것도 가능하다.


동적메모리할당


(int *)malloc(sizeof(int));  // 정수형 1개를 저장할 메모리를 할당.

free(할당받았던 메모리) - 할당받았던 메모리를 반납한다.

Posted by 청웨일

순환

C/C자료구조 : 2007. 11. 9. 09:40
 

순환 - 어떤 알고리즘이나 함수가        자기 자신을 호출하여 문제를 해결하는 기법.



int factorial(int n)

{

        if(n <= 1) return (1);   //조건을 만족하면 순환을 멈춘다.

        else return (n * factorial(n-1) );

}

- 자기 자신을 호출한다.


* 거듭제곱의 계산


*피보나치 수열의 계산


*하노이 탑 문제

Posted by 청웨일
 

프로그램 = 알고리즘 + 자료구조


자료구조는 수학공식에 비유하고 알고리즘은 풀이과정에 비유한다.


typedef <새로운 타입의 정의> <새로운 타입의 이름>;


새로운 타입의 정의 : int, char, float, double...

새로운 타입의 이름 : 사용자 지정.


typedef int element;  // int형 type element 선언


typedef struct ListNode {

        element data;

        struct ListNode *link;

} ListNode;                 //구조체형 타입 ListNode 선언


- 데이터의 타입만을 정의한다.

Posted by 청웨일

파일 시스템

C : 2007. 11. 3. 12:13
1.

* 파일을 열고 닫는 방법

FILE *fopen(char *파일이름, char *mode);
int fclose(FILE *fp); 열었으면 닫는다.


- mode

"r"     - 읽기 위한 텍스트파일 열기
"w"    - 쓰기 위한 텍스트파일 생성
"a"    - 텍스트파일에 추가
"rb"   - 읽기 위한 2진 파일 열기
"wb" - 쓰기 위한 2진 파일 생성
"ab" - 2진 파일에 추가


* 파일에서 문자들을 읽고 쓰는 방법

FILE - 파일의 크기, 현재 위치, 접근방법 등의 정보를 포함하는 구조체
fopen()함수가 실패하면 null이 반환된다.
null이 아니라는 것을 확인할 방법이 필요하다.

/*
 if((fp = fopen("myfile.txt", "w")) ==NULL) {
  printf("Cannot open file\n");
  exit(1);
 }
*/ null 포인트를 반환하면 프로그램을 종료한다.


int fgetc(FILE *fp);

- fp가 가리키는 파일에서 바이트를 문자형으로 읽어서 정수로 반환한다.
  에러가 발생하면 EOF(파일의 끝)을 반환한다.
  파일의 끝에 도달할때도 EOF를 반환한다.

int fputc(int ch, FILE *fp);

- ch의 하위바이트에 포함된 바이트를 fp와 관련된 파일에 문자형으로 쓴다.
   수행되면 쓴문자를 반환하고 에러가 발생하면 EOF를 반환한다.


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

int main(void)
{
 char str[80] = "This is a file system test.\n";
 FILE *fp;
 char *p;
 int i;
//출력을 위해서 myfile을 연다.

// fopen("myfile.txt", "w")
 if((fp = fopen("myfile.txt", "w")) ==NULL) {
  printf("Cannot open file\n");
  exit(1);
 }
//str을 디스크에 쓴다.
 p = str;
 while(*p) {
  if(fputc(*p, fp) == EOF) {
   printf("Error writiing file\n");
   exit(1);
  }
  p++;
 }
 fclose(fp);
//입력을 위해서 myfile을 연다.
 if((fp = fopen("myfile.txt", "r")) == NULL) {
  printf("Cannot open file\n");
  exit(1);
 }
//파일을 다시 읽는다.
 for(; ;) {
  i = fgetc(fp);
  if(i == EOF) break;
  putchar(i);
 }
 fclose(fp);

 return 0;
}


p.302_1
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 FILE *fp;
 char ch;

 if(argc != 2) {
  printf("wrong");
  exit(1);
 }
 if((fp=fopen("myfile.txt", "r"))==NULL) {
  printf("null space");
  exit(1);
 }

 while((ch=fgetc(fp)) != EOF) {
  putchar(ch);
 }

 fclose(fp);
 printf("\n\n");
 return 0;
}

p.302_2

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

int count[26];  //전역변수니까 기본적으로 0으로 초기화된다.

int main(int argc, char argv[])
{
 FILE *fp;
 char ch;
 int i;


 if(argc != 2) {
  printf("weong");
  exit(1);
 }


 if((fp=fopen("myfile.txt", "r"))==NULL) {
  printf("null space");
  exit(1);
 }


 while((ch=fgetc(fp))!=EOF) {
  ch=toupper(ch);
  if(ch>='A' && ch<='Z') count[ch-'A']++;
 }


 for(i=0; i<26; i++) printf("%c - %d\n", i+'A', count[i]);


 fclose(fp);

}



 

2.

FILE *fopen(char *fname, char *mode);

- mode
"r"     - 읽기 위한 텍스트파일 열기
"w"    - 쓰기 위한 텍스트파일 생성
"a"    - 텍스트파일에 추가
"rb"   - 읽기 위한 2진 파일 열기
"wb" - 쓰기 위한 2진 파일 생성
"ab" - 2진 파일에 추가

int fclose(fp); - 파일을 닫는다.

int fgetc(FILE *fp);
                     - fp가 가리키는 파일에서 바이트를 문자형으로 읽어 정수로 반환한다.
                     - error가 발생하면 EOF(음의정수 -1)를 반환한다.
int fputc(int ch, FILE *fp);
                     - ch의 하위바이트에 포함된 바이트를 fp와 관련된 파일에 문자형으로 쓴다.
                     - ch가 정수형으로 정의되나 문자형으로 사용하여 함수를 호출할 수 있다.
                     - error가 발생하면 EOF를 반환한다.

3.

feof(*fp) - 파일의 끝에 도달하면 0이 아닌 값을 반환한다.
ferror(*fp) - 에러가 발생하면 0이 아닌 값을 반환한다.

4.

int fputs(char *str, FILE *fp); - fp와 관련된 파일에 str이 가리키는 문자열을 쓴다.
                      - 에러가 발생하면 EOF를 반환한다. 문자열 끝의 null은 기록되지 않는다.
char *fgets(char *str, int num, FILE *fp);
                      - 파일에서 문자들을 str이 가리키는 문자열에 넣는다.
                      - num값만큼 넣거나 뉴라인을 만나거나 파일의 끝에 도달할때까지 에러가 발생하면 널포인트를 반환한다.

*파일을 대상으로 입출력이 이루어진다.
fprintf(FILE *fp, char *cintrol-string, ...);     - 파일에 출력한다.
fscanf(FILE *fp, char *cintrol-string, ...);    - 파일에서 입력받는다.

5.

size_t fread(void *buffer, size_t size, size_t num, FILE *fp);
- fp와 관련된 파일에서 num개의 객체를 buffer가 가리키는 버퍼속으로 읽어들인다.
- 실제 읽은 객체의 수를 반환한다.

size_t fwrite(void *buffer, size_t size, size_t num, FILE *fp);
- buffer가 가리키는 버퍼에서 num개의 객체를 fp롸 관련된 파일에 쓴다.
- 쓰여진 객체의 수를 반환한다.

size_t - 컴파일러가 지원하는 가장 큰 객체의 크기에 해당하는 값을 저장할수 있도록 한다.

Posted by 청웨일

스트림

C : 2007. 11. 3. 12:07
 

스트림은 추상적인 개념과 물리적인 개념으로 나눈다.

프로그래머에게 있어서 스트림은 파일을 내장하고 있는 모든것,

하드디스크, 키보드, 모니터, 메모리 등등등등등... 을 말한다고 할수 있다.

이것이 물리적인 스트림이다.

추상적인 스트림은 관문적의 의미가 포함되어 있다.

이것은 fopen()와  fclose() 함수 두개로 연결되고 단절된다.

책을 읽자면 더 어려울수도 있는 개념이다.

위의 두 개의 개념은 서로 같은 것을 말하고 있을 수도 있고, 아닐수도 있다.

Posted by 청웨일