함수의 기초
#include
 <stdio.h>

/*int Add(int num1, int num2) //;만 있으면 원형 { }가 있으면 정의
{
  int result = num1 + num2;
  return result; //num1이랑 num2더한값을 돌려주세요.
} //실행이 끝나면 죽음
*/
 
//위에서 함수 선언 정의를 다하는경우
int Add(int num1, int num2);
int main()
{
  
  int iNum;
  iNum =  Add(30,20); //Add영역으로 점프   
  printf("%d\n", iNum);
  return 0;
}
//위에서 함수를 선언해놓고 밑에서 정의를 해놓는 경우.

{
  int result = num1 + num2;
  return result; 



덧셈프로그램
#include <stdio.h>

int Add(int num1, int num2) //반환있음 인자 있음
{
  return num1 + num2;
}
void ShowAddResult(int num) //반환 없음 인자 있음
{
  printf("덧셈결과 출력: %d \n", num);
}
int ReadNum(void)      //인자 없음 반환 있음
{
  int num;
  scanf("%d"&num);
  return num;
}
void HowToUseThisProg(void//인자 없음 반환 없음
{
  printf("두 개의 정수를 입력하시면 덧셈결과가 출력됩니다. \n");
  printf("자! 그럼 두 개의 정수를 입력하세요.\n");
}
int main()
{
  int result;
  int num1;
  int num2;
  HowToUseThisProg();
  num1=ReadNum();
  num2=ReadNum();
  result = Add(num1, num2);
  ShowAddResult(result);
    
  return 0;  

  
}


위와 똑같이 곱셈 소스를 만들어보자.

#include <stdio.h>
int Mul(int num1, int num2)
{
  return num1*num2;
}
int inPut(void)
{
  int num;
  scanf("%d"&num);
  return num;
}
showresult(int num)
{
  printf("결과는 %d입니다\n", num);

}
showprint(void)
{
  printf("곱셈프로그램입니다.\n");
  printf("두개의 수를입력하세요.\n");

}


int main()
{
  int num1;
  int num2;
  int result;
  showprint();
  num1 = inPut();
  num2 = inPut();
  result = Mul(num1,num2);
  showresult(result);
  return 0;

}


절대값이 큰 정수 출력하기
#include <stdio.h>

int AbsoCompare(int num1, int num2);
int GetAbsoValue(int num);
int main()
{
  int num1;
  int num2;
  printf("두 개의 정수 입력: ");
  scanf("%d %d"&num1, &num2);
  printf("%d와 %d중 절댓값이 큰 정수: %d \n"
    num1, num2, AbsoCompare(num1, num2));
  return 0;
}

int AbsoCompare(int num1, int num2)
{
  if(GetAbsoValue(num1) > GetAbsoValue(num2))
    return num1;
  else
    return num2;
}

int GetAbsoValue(int num)
{
  if(num<0)
    return num * (-1);
  else
    return num;
}



세정수를 입력받아 가장큰수와 작은수 구하기
#include <stdio.h>
int iCompare(int num1, int num2, int num3) //큰수 비교함수
{
  if(num1>num2 && num1>num3)
    return num1;
    
  else if(num2>num1 && num2>num3)
    return num2;
    
  else 
    return num3;
}
int iCompare2(int num1, int num2, int num3) //작은수 비교함수
{
  if(num1<num2 && num1<num3)
    return num1;

  else if(num2<num1 && num2<num3)  
    return num2;
  else 
    return num3;
}  
int myscanf(void)         //숫자 입력함수
{
  int num;
  scanf("%d"&num);
  return num;

}
  


int main()
{
  int iNum1;
  int iNum2;
  int iNum3;
  int result1;  
  int result2;

  iNum1 = myscanf();   
  iNum2 = myscanf();
  iNum3 = myscanf();
  
  result1=iCompare(iNum1,iNum2,iNum3);
  result2=iCompare2(iNum1,iNum2,iNum3);
  

  printf("가장 작은 큰수는 %d 작은수는%d입니다.\n", result1 , result2);

  return 0;
}


지역변수
#include <stdio.h>



int main()
{
  int cnt;
  for(cnt=04>cnt; cnt++)
  {
    int num = 0;
    num++;
  printf("%d번째 반복, 지역변수 num은 %d. \n", cnt+1, num);
  }
  
  if(cnt==3)
  {
    int num = 7;
    num++;
    printf("if문 내에 존재하는 지역변수 num은 %d. \n", num);
  }
  printf("%d", cnt);
  return 0;
}


'C언어' 카테고리의 다른 글

20140326 포인터와 배열  (0) 2014.03.26
20140324 지역변수 전역변수 & 배열  (0) 2014.03.24
20140320 포인터의 기초  (0) 2014.03.20
20140318 포인터의 이해  (0) 2014.03.18
20140317 break & continue & switch  (0) 2014.03.17
by 날라차숑 2014. 3. 21. 17:22

메모리 주소에 들어있는 값 HEX형태로 나타내기

#include <stdio.h>

int main()
{
  int iNum=0XABCDEF89;
  unsigned char * ucp= (unsigned char *)&iNum;
  int iCnt1;
  int iCnt2;
  
  for(iCnt2=0;20>iCnt2;++iCnt2)
  {
    printf("%08X\t", ucp); //주소값이 증가한다.
    for(iCnt1=0;16>iCnt1;iCnt1++)
    {
      printf("%02X ",*(ucp)); //32비트의 값을 나타낸다.
      ++ucp;//다음 비트의 값
    }
    printf("\n");//32비트를 나타내면 계행 해준다.
  }

  return 0;
}



printf 함수도 반환을 한다.
#include <stdio.h>

int main()
{
  int iNum1;
  int iNum2;

  iNum1 = printf("12345\n");     //Symbol 상수다.
  iNum2 = printf("I love my home\n");  //글자수에 따라서 iNum2에 대입
              

  printf("%d %d \n", iNum1 ,iNum2);  

  return 0;
}


부동소수점 저장 방식

6.25를 2진수로 만들면

0110의 정수부와 01의 소수부가 된다. 합쳐보자

110.01표현 할수있다.

부호비트에 음수면 1 양수면 0을 넣자.

1.1001 X 2^2은

110.01과 동일하다.









'C언어' 카테고리의 다른 글

20140324 지역변수 전역변수 & 배열  (0) 2014.03.24
20140321 함수(1)  (0) 2014.03.21
20140318 포인터의 이해  (0) 2014.03.18
20140317 break & continue & switch  (0) 2014.03.17
20140314 for 과 if else  (0) 2014.03.14
by 날라차숑 2014. 3. 20. 17:58


#include <stdio.h>

int main()
{
  int iNum = 0;
  int iCnt = 0;
  printf("%d\n", iNum);
  printf("%08X\n"&iNum); // X는16진수8은8자리 빈자리는 0으로채운다.
  printf("%p\n"&iNum);   // 08X 와 p는 같다. 
  printf("%08X\n"&iCnt); // &iCnt의 주소값
  *((int *)0x0012ff70) = 100;
  printf("%d\n", iNum);
  *((int *)0x0012ff74) = 200;
  printf("%d\n", iCnt);

  return 0;
}



 Data

 type

 address

 int

 iNum 

 1000

 int

 iCnt

 1004

*Symbol Tabel 이라 부름


*의 의미     1.곱셈

                2.주소(캐스팅)

3.값

                4.포인터 변수 선언


#include <stdio.h>

int main()
{
  int iNum = 0//iNum은 심볼명
//  &iNum = 100;
//  0x12FF74 = 100;
//  (int *)0x12FF74 = 100; //*는 캐스팅( *)할때도 쓰임. &주소를 알아내는 연산자
//  주소상수 = 정수상수
//  &iNum = 100;
//      * 1.곱셈 2항
//  * 2.주소(캐스팅) 단항
//      * 3.값(단항)
  *((int *)0x12ff74) = 100//3.번발동
  printf("%08X\n"&iNum);
  printf("%d\n", iNum);
  
  *(&iNum) = 1000//3.번발동
  iNum = 1000//윗줄과 같다.
  printf("%d\n", iNum);

  return 0;
// (int *)0x12ff74 와 &iNum 은 같다.



#include <stdio.h>

int main()
{
  int iNum = 0;
  int * iP = &iNum;      //iP는 iNum의 주소값을 가진다.
  
  printf("1. iNum : %d \n",iNum);      //iNum의 값.
  printf("2. iNum : %08X \n\n",&iNum);  //iNum의 주소값.
            //iNum은 두 가지로 표현할 수 있지만,
  printf("iP : %08X \n",iP);        //iP가 가리키는 주소값.
  printf("iP : %08X \n",&iP);        //iP의 주소값
  printf("iP : %d \n",*iP);        //iP가 가리키는 주소값이//가지고 있는 값.
            //iP로는 세 가지로 표현할 수 있다. 
            //가지고 있는 값.
            //iP로는 세 가지로 표현할 수 있다. 
  return 0;
}


'C언어' 카테고리의 다른 글

20140321 함수(1)  (0) 2014.03.21
20140320 포인터의 기초  (0) 2014.03.20
20140317 break & continue & switch  (0) 2014.03.17
20140314 for 과 if else  (0) 2014.03.14
20140313(2) IP확인하기  (0) 2014.03.13
by 날라차숑 2014. 3. 18. 17:34

break

#include <stdio.h>

int main()

{

  int iSum = 0;

  int iNum1 = 0;


  while(1)

  {

    iSum = iSum + iNum1;

    if(iSum>5000)

      break; //iSum이 5000이상이면 반복문을 탈출한다 

    iNum1++;

  }


  printf("iSum: %d \n", iSum);

  printf("iNum1: %d \n", iNum1);

  

  return 0;

}



continue
#include <stdio.h>

int main()
{
  int iNum;
  printf("start! ");

  for(iNum = 120>iNum; iNum++)
  {
    if(0==iNum%2 || 0==iNum%3)
      continue//이자리에서 반복영역을 다시실행한다.
    printf("%d ", iNum);//if가 참값이라면 이부분은 실행되지않음
  }
  printf("end! \n");

  return 0;
}



193page 예제1

#include <stdio.h>

int main()
{
  int i;
  int j;
  for(i=110>i; i++)
  {
    if(i%2!=0)
      continue; //1,3,5,7,9값은 아래로 내려가지 않는다.

    for(j=110>j; j++)
    {
      if(i<j)    //i값이 j값보다 같거나 더커지면 빠져나온다
        break;

      printf("%dX%d=%d \n", i ,j ,i*j);
    }
    printf("\n");
  }
  return 0;
}


193page 예제2

#include <stdio.h>

int main()
{
  int A;
  int Z;
  int iResult;
  for(A=010>A; A++)
  {
    for(Z=010>Z; Z++)
    {
      if(A==Z)
        continue;
      iResult=(A*10+Z)+(Z*10+A);
      if(iResult==99)
        printf("%d%d+%d%d=%d \n", A,Z,Z,A, iResult);
    }
  }

  return 0;
}



switch
#include <stdio.h>

int main()
{
  int iNum;
  
  printf("숫자를 입력하세요: ");
  scanf("%d"&iNum);

  switch(iNum)
  {
  case 1:
    printf("1을 입력하셨습니다.\n");
    break; //break문을 쓰지 않으면 아래의 문장이 모두 실행된다.  
  case 2:
    printf("2를 입력하셨습니다.\n");
    break;
  case 3:
    printf("3을 입력하셨습니다.\n");
    break;
  case 4:
    printf("4를 입력하셨습니다.\n");
    break;
  case 5:
    printf("5를 입력하셨습니다.\n");
    break;
  default:
    printf("입력이 잘못되었습니다.\n");
    
  }

  return 0;
}


'C언어' 카테고리의 다른 글

20140320 포인터의 기초  (0) 2014.03.20
20140318 포인터의 이해  (0) 2014.03.18
20140314 for 과 if else  (0) 2014.03.14
20140313(2) IP확인하기  (0) 2014.03.13
20140313 순서도 그리기 파워포인트 && while문 do while문 for문  (0) 2014.03.13
by 날라차숑 2014. 3. 17. 16:56

제어문 for


while 과 제어문의 비교




두개의 초기식 증감식이 들어가는 문장테스트




결과값은 아래와같다. 



같은결과를 여러방법으로 시도해봅시다.





아래의 결과가 출력된다.










by 날라차숑 2014. 3. 14. 17:51



by 날라차숑 2014. 3. 13. 17:15


순서도 도식화

빨간 테두리를 이용해서 순서도 만들면 됩니다.




제어문(while , do while ,for)

[while문 테스트]

#include <stdio.h>

int main()
{
  int iCnt;
  iCnt = 0;
  
  while(5 > iCnt)      //거짓이 될때까지 와일문은 돈다. 가급적 상수는 왼쪽 오른쪽은 변수
  {        //while은 중괄호를 써서 그안에 반복한다.
    printf("test\n");  //
    ++iCnt;      //+1씩 증가한다
  }
  return 0;


[for문 테스트]
#include
 <stdio.h>

int main()
{
  int iCnt;
  iCnt = 0;                                    // 이문장은 필요없다.아래의 for문 처음에
                                 //초기화 해주고 있다.

  for(iCnt = 05 > iCnt; ++iCnt)      //for(초기식 ; 조건식 ; 증감식
  {
    printf("test\n");
  }
}


[A부터Z까지 한꺼번에 출력하기]
#include
 <stdio.h>

int main()
{
  int iCnt = 'A';
  while('Z' >= iCnt)
  {
    printf("%d : [%c]\n", iCnt, iCnt); //출력을 [%c]로 1씩Z까지 증가시키고있다.
    ++iCnt;
  }
  return 0;
}

[A부터Z까지 한꺼번에 FOR문으로 써보기]
#include <stdio.h>

int main()
{  
  int iCnt;
  for(iCnt='A''Z' >= iCnt; ++iCnt) //초기화값, 조건씩, 증감식
  {
    printf("%d : [%c]\n", iCnt, iCnt);
    
  }
  return 0;
}  

[0~100까지 짝수만 모아서 더해주세요]

#include <stdio.h>

int main()
{
  int total = 0;
  int iNum = 0;

  do
  {
    total = total + iNum;
    iNum  = iNum  + 2//짝수의 합을 구하는 공식
                   // 홀수의 값을 구하려면 초기값 -1에서 +2를 하면 홀수의 합을 구할수있다.
  //   ++iNUM 윗줄을 이걸 넣으면 모든짝수를 더하는 공식
  }while(100 >= iNum);

  printf("Total: %d \n", total);

  return 0;
}



[총 5개의 정수를 입력받아서 그 수의  합을 출력하는 프로그램을 작성해보자
 정수는 반드시 1이상이어야한다. 1미만의 수가 입력되는 경우 재입력을 요구해야한다
그래서 1이상의 정수5개를 모두 입력 받을 수 있도록 프로그램을 완성해야한다]


#include <stdio.h>

int main()
{
  int iSum = 0;
  int iNum = 0;
  int i   = 0;

  while(i<5
  {  
    while(iNum <= 0//  첫번째는 0값이하는 참이 되서 아래의 문장이 무한 루프된다
    {
      printf("0보다 큰수를 입력(%d번째): ", i+1); // i값이 0~4까지니까 총5번째까지
                                           //  이문장을 찍을수있다.
      scanf("%d"&iNum);                             //  정수값을 입력받는다 0보다크면 
    }                                                          //  아래로 내려간다
      iSum = iSum + iNum;                             //  받은 정수값은 iSum에 쌓인다.
      iNum = 0;                                            //   iNum값이 1이상의 정수를 입력받
    i++;                                                      //  은 상태라서 0을 대입한다.
  }
  printf(" 총 합: %d \n", iSum);
    
  return 0;
}





'C언어' 카테고리의 다른 글

20140314 for 과 if else  (0) 2014.03.14
20140313(2) IP확인하기  (0) 2014.03.13
20140312(2) 상수와 기본자료형  (0) 2014.03.12
201403112 도스에서 ftp사용하기  (0) 2014.03.12
20140310(2) 비교연산자  (0) 2014.03.11
by 날라차숑 2014. 3. 13. 16:57

// ASCII (AMERICA STANDARD CODE INFORMATION INTERCHANGE)
알파벳과 일부 특수문자를 포함하여 128개의 문자로 이뤄져 있다.

아스키 코드     |   아스키코드값
A    |  65
B    |  66
a    |  96
b    |  126
소문자는 대문자값의 +32값 *외울필요는 없다.

char ch1 = 'A'// 작은 따옴표로 감싸서 표현한다.
char ch2 = 'C';

#include <stdio.h>

int main()
{
  printf("%d\n"65); 
  printf("%c\n"65);

  printf("%d\n"1); 
  printf("%c\n"49);

  printf("%d\n"'A'); //A의 번호 65 decimal로 출력하면 A의 코드값을 알수있다.
  printf("%c\n"'A'); 

  printf("%d\n"'1'); //1의 번호 49
  printf("%c\n"'1'); //숫자1

  
  return 0;
}


#include <stdio.h>

int main()
{
  char cNum;
  cNum = '\n'// '\n'의 코드값은 10이다.
  printf("%d\n", cNum);
  printf("---\t===\n");
  return 0;

}



형변환


#include <stdio.h>

int main()
{
  int iNum1 = 3;
  int iNum2 = 4;

  double divResult;
  divResult = (double)iNum1 / iNum2; 
/* (double)을 붙여주지 않으면 정수형 나눗셈으로 연산되서 값은 0이 출력된다.
   (double)iNum1 casting 연산자(명시적 형변환) 
   여기서 iNum1앞에만 적어줬기때문에 
   명시적 + 묵시적 형변환이 동시에 일어나고있다. */

  printf("나눗셈 결과: %f \n", divResult);

  return 0;
}


by 날라차숑 2014. 3. 12. 17:32




by 날라차숑 2014. 3. 12. 17:06

비교연산자는 아래의 논리식으로 표현된다.


#include  <stdio.h>

int main()
{

  int iNum1; 
  int iNum2;
  int iNum3;
  
  iNum1 = 2;
  iNum2 = 3;
  iNum3 = iNum1 & iNum2; //AND 연산
  printf("%X\n", iNum3);

  iNum3 = iNum1 | iNum2; //OR 연산
  printf("%X\n", iNum3);

  iNum1 = 0xFFFFFFF0;
  iNum3 = ~ iNum1;       //NOT 연산
  printf("%X\n", iNum1);
  printf("%X\n", iNum3);
    
  iNum1 = 0xB;
  iNum2 = 0x6;
  iNum3 = iNum1 ^ iNum2; //XOR 연산
  
  printf("%X\n", iNum3);

  iNum1 = 0x18>>1//비트SHIFT 오른쪽으로 한칸이동
  iNum2 = iNum1>>1
  iNum3 = iNum2>>2//비트SHITF 오른쪽으로 두칸이동
  printf("%X\n", iNum1);
  printf("%X\n", iNum2);
  printf("%X\n", iNum3);

  iNum3 = iNum3<<3;
  printf("%X\n", iNum3);
  return 0;
}

// 비트의 열을 왼쪽으로 1칸씩 이동시킬때마다 값은 두배로 된다.
// 비트의 열을 오른쪽으로 1칸씩 이동시킬 때마다 정수의 값은 2로 나누어진다.
// 2^N만큼 곱하기 나누기를 하면 편하다. 아래의 코드 작성를 작성해보자.

" 3X8÷4 를 계산하시오. *비트연산자로"

#include  <stdio.h>

int main()
{
  int iNum1 = 3;
  iNum1 = iNum1<<3;
  iNum1 = iNum1>>2;
  printf("값은 %d이다.\n", iNum1);
  
  
  return 0;
}



'C언어' 카테고리의 다른 글

20140312(2) 상수와 기본자료형  (0) 2014.03.12
201403112 도스에서 ftp사용하기  (0) 2014.03.12
20140310 CPU 3대 구성요소  (0) 2014.03.11
20140310(2) C에서 소수점의 표현  (0) 2014.03.10
20140310 scanf  (0) 2014.03.10
by 날라차숑 2014. 3. 11. 17:26