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

  1. 2007.11.03 콘솔 입출력 by 청웨일
  2. 2007.11.03 순환 함수, 매개변수, main()함수의 인수 by 청웨일
  3. 2007.11.03 함수의 원형 by 청웨일
  4. 2007.11.03 다중참조와 매개변수 by 청웨일
  5. 2007.11.03 포인터 배열 by 청웨일

콘솔 입출력

C : 2007. 11. 3. 12:05
 

* 선행처리 지시자.


#define [매크로이름] [대체문자]


#으로 시작하는건 선행처리 지시자이다.

새미콜론(;)이 붙지 않는다.

문장중에 [매크로이름]이 나오면 [대체문자]로 대치된다.

[대체문자]로 문자열도 가능하다.


p.263

#include <stdio.h>

#define MAX 100          //MAX가 나오면 100으로 대치한다.

int main()

{

    int i;

    for(i=0; i<MAX; i++) printf("%d ", i);

    return 0;

}


- 0~99까지 출력된다.

 

* ANSIC 표준 문자입출력

"STDIO.H"

int getchar(void);

int putchar(int ch);


* 비표준 콘솔 입출력 함수

"CONIO.H"

int getche(viod);

int getch(void);

int kbhit(viod);   //키보드의 키가 눌러졌는지 아닌지 결정하기 위해


*gets(), puts()

"STDIO.H"

char *gets(char *str);  
//enter가 입력될때까지 입력되는 문자들을 읽고 str이 가리키는 배열에 저장한다.

int puts(char *str);  


* printf()의 형식지정자.

%c, %d, %i, %e, %E, %g, %x, %n, %s, %u, %p, %f, %%


* scanf()의 형식지정자.

%c, %d, %i, %e, %f, %g, %o, %s, %x, %p, %n, %u, %[]


Posted by 청웨일
 

* 함수는 자기자신을 호출할수 있다.

* 자기자신을 호출함으로써 반복문을 흉내낼 수 있다.


p.243_1
#include <stdio.h>

int fact(int num);

int main(void)
{
 int num, sum;

 printf("enter number: ");
 scanf("%d", &num);

 sum = fact(num);
 printf("  %d  ", sum);

 return 0;
}

int fact(int num)
{
 int sub = 1, i;

 if(num>1) {
  printf("%d  ", num);
  for(i=0; i<num; i++) sub = sub * num;
  fact(num-1);
 }
 else if(num == 1) sub = sub *1;
 
 return sub;
}


* 값에 의한 호출

- 인수의 값이 서브루틴의 형식매개변수에 복사

- 매개변수에서 일어나는 변화가 인수에 영향을 미치지 않는다.


* 참조에 의한 호출

- 인수의 주소가 매개변수에 복사된다.

- 매개변수에서 일어나는 변화가 인수에 영향을 미친다.


#include <stdio.h>


void swap(int *i, int *j);


int main(void)
{
 int num1, num2;

 num1 = 100;
 num2 = 800;

 printf("num1: %d num2: %d\n", num1, num2);
 swap(&num1, &num2);
 printf("num1: %d num2: %d\n", num1, num2);

 return 0;
}


void swap(int *i, int *j)   //정수 포인터가 가리키는 값을 교환
{
 int temp;

 temp = *i;
 *i = *j;
 *j = temp;
}


두개의 정수포인터가 함수에 전달되어 인수가 가리키는 실제 값들이 교환된다.


* 배열을 사용하는 매개변수

1.함수의 호출시 사용되는 배열과 같은 형과 크기의 배열로 매개변수 선언

2. 매개변수의 크기가 정해지지 않은 배열로 선언

*3. 배열의 기본형에 대한 포인터로 매개변수를 선언


* 명령어 - 라인 인수

int main(int argc, char argv[])


int argc - 명령어의 수를 나타낸다. 공백으로 개수 분리
              공백을 포함하는 명령어-라인인수의 경우 큰 따옴표로 묶는다.


p.251_3
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 double pounds;

 if(argc != 2) {                   //argv[0], argv[1] 두개니까
  printf("usage: CONVERT <ounces>\n");
  printf("try afain ");
 }
 else {
  pounds = atof(argv[1]) /16.0;
  printf("%lf pounds", pounds);
 }

 return 0;
}


argv[0]-실행프로그램의 이름을 가리킨다.

argv[1]-첫번째 인수를 가리킨다.


p.253_2
#include <stdio.h>

int sum(int a, int b);

int main(void)
{
 int a, b;

 printf("first number: ");
 scanf("%d", &a);
 printf("second number: ");
 scanf("%d", &b);

 printf("sum : %d    ", sum(a, b));

 return 0;
}

int sum(int a, int b)
{
 return a + b;
}

p.235_3
#include <stdio.h>

int cul(int a, int b, int c);

int main(void)
{
 int a, b, i;

 printf("1: add, 2: subtract, 3: multiply, 4: divide \nchoice: ");
 scanf("%d", &i);

 printf("first number: ");
 scanf("%d", &a);
 printf("second number: ");
 scanf("%d", &b);

 printf("result : %d    ", cul(i, a, b));

 return 0;
}

int cul(int i, int a, int b)
{
 if(i == 1) return a + b;
 else if(i == 2) return a - b;
 else if(i == 3) return a * b;
 else if(i == 4 && b != 0) return a / b;
}

Posted by 청웨일

함수의 원형

C : 2007. 11. 3. 12:00

프로그램의 소스를  작성하면서 모든 처리를 함수를 이용해서 해야 할수도 있다.
함수의 원형을 쓰지 않고 main()함수의 위쪽에 함수를 모두 작성하면 프로그램에 문제는 없지만 소스가 길어지면 문제가 생길 가능성도 있고, 솔직히 어떤 함수가 있는지 알게 뭔가.
어떤 함수가 사용되었는지 알려주기 위해서 함수의 원형을 선언하기도 하는 것이다.

서술형이 되니까 어려워보일지도 모르지만
결론은 main()도 함수. 시작을 위한 함수인것과 함수의 원형이 왜 필요한지, 그리고 변수의 사용과 인수의 넘김을 이해한다면 별 볼일 없다고 생각된다.

함수의 원형은 선행처리문과 main()함수의 중간에 위치한다.
함수의 원형을 쓸때 필요한 것은 함수의 반환형과 매개변수 이 두가지이다.
정수형, 문자형 등등의 어떤 타잎을 반환할것인지, 넘겨받을 매개변수의 타잎과 몇개의 매개변수를 받을 것인지.

main()함수는 선언된 함수를 호출하기만 하면 된다.


p.238

#include <stdio.h>


int avg(void);      //함수 원형


int main(void)
{
 int sum;

 sum = avg(); // 함수 호출, 함수에서 계산된 sum 값 되돌려 받음.

 printf("avg = %d  ", sum);  //결과값 출력

 return 0;
}


int avg(void)
{
 int sum =0, i;                        //sum값 초기화
 int num[10];                         //배열 선언

 for(i=0; i<10; i++) {             //입력 반복문
  printf("enter number: ");
  scanf("%d", &num[i]);
  sum = sum + num[i];       //sum 에 입력값 누적
 }

 return sum/10;             //평균값 돌려줌
}

Posted by 청웨일

다중참조와 매개변수

C : 2007. 11. 3. 11:56
 

이를테면 평소의 일상적인 상식과 별반 다를 것이 없는 이유로 대충 넘어감.


p.219_1
#include <stdio.h>

int main(void)
{
 float *fp, **mfp, val;

 fp = &val;     //val pointing
 mfp = &fp;     //fp  pointing

 **mfp = 123.903;       //역참조
 printf("%f %f   \n", val, **mfp);

 printf("fp %p %p\n", &fp, fp);
 printf("mfp %p %p\n", &mfp, mfp);
 printf("val %p\n", &val);

 return 0;
}

사용자 삽입 이미지

p.219_2
#include <stdio.h>

int main(void)
{
 char *p, **mp, str[80];

 p = str;          //str[80] pointing
 mp = &p;          //p pointing

 printf("Enter your name: ");
 gets(*mp);                //mp enter string
 printf("Hi %s.  ", *mp);  //mp output

 return 0;
}

p.221_1
#include <stdio.h>

void myputs(char *p);

int main(void)
{
 myputs("this is a test");

 return 0;
}

void myputs(char *p)
{
 while(*p) {
  printf("%c", *p++);
  //p++;     //p가 가리키는 주소를 증가
 }
 printf("\n");
}

p.221_2
#include <stdio.h>

void myputs(char *to, char *from);

int main(void)
{
 char str[80];

 myputs(str, "this is test");
 printf(str);

 return 0;
}

void myputs(char *to, char *from)
{
 while(*from) *to++ = *from++;
 *to = '\0';
}

Posted by 청웨일

포인터 배열

C : 2007. 11. 3. 11:49
 

int *pa[20]; ->정수형 포인터 배열 선언

pa[8]=&myvar; ->myvar라는 정수형 변수의 주소를 배열에 치환할수 있다.

*pa[2] = 100; ->pa의 세번째 원소가 가리키는 정수에 100을 치환한다.


p.216_1
#include <stdio.h>
#include <string.h>

char *p[][2] = {               //언사이즈드 배열
 "Red Delicious", "red",
 "Golden Delicious", "yellow",
 "Winesap", "red",
 "Gala", "reddish orange",
 "Lodi", "green",
 "Mutsu", "yellow",
 "Cortland", "red",
 "Jonathan", "red",
 "", ""
};


int main(void)
{
 int i;
 char apple[80];

 printf("enter name of apple: ");
 gets(apple);

 for(i=0; *p[i][0]; i++) {             //(i+1)번째 문자열의 첫번째 바이트의 문자를 얻는식
  if(!strcmp(apple, p[i][0]))
   printf("%s is %s\n", apple, p[i][1]);
 }
 return 0;
}

Posted by 청웨일