C언어 ⑤

정혜지·2023년 4월 13일

C언어는 고급언어에 속하지만 요즘은 어셈블리어 취급을 받기도 한다~!

어셈블리어: 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급언어

C언어에서 사용자 정의 함수, 배열, 문자열 및 포인터는 C언어의 특징이자 기본적인 자료형태이다.

포인터: 특정한 데이터가 저장되어 있는 메모리의 주소 그 자체를 저장하는 변수


사용자 정의 함수

정해진 특정한 기능을 수행하는 모듈을 의미 -> 각각의 모듈로 쉽게 관리
만약 사용자 정의 함수가 없다면 오직 main함수에서 모든 알고리즘을 처리해야하는데 이는 작업의 효율성을 저하시킨다.

  • 사용자 정의 함수가 많고 메인 함수가 적을수록
    • 더욱 잘 짜여진 프로그램
    • 가독성이 좋은 프로그램

함수

  • 함수는 각각 별도의 블럭{}으로 정의되며, 블록 안에서 호출된다.
  • 일반적으로 함수는 입력, ⭐처리, 출력으로 구현
    • 입력: 함수 호출 시 전달된 인수를 매개변수에 저장
    • 처리: 매개변수를 약속된 기능으로 가공
    • 출력: 함수의 처리 결과를 호출 프로그램에 반환

함수 정의

  • <반환타입> <함수명>(<매개변수>) {<코드>}
    • main 함수 밖에서 정의된다.
    • 반환 타입에는 반환 값의 타입을 지정하고, 반환값이 없는 경우에는 void사용


시간 더하기

#include <stdio.h>

// 전역 변수 : 프로그램 어디에서나 접근할 수 있는 변수
// main 함수 밖에서 선언
int hour;
int min;
int minAdd;

// <반환타입> <함수명>(<매개변수>) {<코드>}
void counter()
{
  min += minAdd;
  hour += min / 60;
  min %= 60;
  hour %= 24;
  // 반환되는 값의 타입과 함수 정의 타입이 일치해야한다.
  // 해당함수의 반환타입이 void이기에 반환값이 필요하지 않다.
}

int main()
{
  printf("시를 입력하세요 : ");
  scanf("%d", &hour);
  printf("분을 입력하세요 : ");
  scanf("%d", &min);
  printf("더할 분을 입력하세요 : ");
  scanf("%d", &minAdd);
  counter();
  printf("더해진 시간은 %d분 입니다.\n", hour, min);
  return 0;
}

거스름돈 계산
화폐의 개수를 가장 적게 주는 방법 프로그램
ex) 90원 입력 -> 5개 (50원 1개, 10원 4개)

#include <stdio.h>
  
// 특정한 금액을 받아서 가장 적은 화폐의 개수의 거스름돈을 구하는 함수
int smallest(int num)
{
  int conut = 0;
  while(num >= 50000)
  {
    num -= 50000;
    count++;
  }
  while(num >= 10000)
  {
    num -= 10000;
    count++;
  }
  while(num >= 5000)
  {
    num -= 5000;
    count++;
  }
  while(num >= 1000)
  {
    num -= 1000;
    count++;
  }
  while(num >= 500)
  {
    num -= 500;
    count++;
  }
  while(num >= 100)
  {
    num -= 100;
    count++;
  }
  while(num >= 50)
  {
    num -= 50;
    count++;
  }
  while(num >= 10)
  {
    num -= 10;
    count++;
  }
  return count;		//화폐의 개수
 }


// main 함수
int main()
{
  int num;
  printf("금액을 입력하세요 : ");
  scanf("%d", &num);
  printf("최소로 줄 수 있는 화폐의 개수는 %d개입니다.\n", smallest(num));
  return 0;
 }

1월 1일부터 현재의 날짜까지 날짜 차일 구하기

#include <stdio.h>
  
int getDays(int month, int day)
{
  int i, sum = 0;
  for(i=0; i<month; i++)
  {
    if(i == 2)   // 이 프로그램에서는 윤년을 감안하지 않음      
    {
      sum += 28;
    }
    else if(i % 2 == 0)		//짝수 달
    {
      sum += 30
    }
    else		//홀수 달
    {
      sum += 31
    }
  }
  return sum + day;
}

// main 함수
int main()
{
  int month, day;
  scanf("%d %d", &month, &day);
  printf("해당 날짜까지의 차일은 %d일입니다.", getDays(month, day));
  return 0; 
}




표준 라이브러리

  • C언어에서는 미리 개발된 함수들을 기능별로 묶은 라이브러리를 제공한다.
  • 전처리 지시자 #include를 이용해 필요한 라이브러리를 코드에 포함시킨다.

1. stdio.h (데이터 입출력)

  • printf() : 서식에 의한 기본 출력
  • scanf() : 서식에 의한 기본 입력
  • getchar() : 문자 하나 입력
  • putchar() : 문자 하나 출력

2. math.h (수학)

  • sqrt() : 제곱근
  • pow() : 제곱수
  • abs() : 절대값

3. string.h (문자열 처리)

  • strlen() : 문자열 길이
  • strcpy() : 문자열 복사
  • strcmp() : 문자열 비교

4. stdlib.h (기본 데이터 관련)

  • atoi() : 문자열을 정수로 변환(int)
  • atof() : 문자열을 실수로 변환(float)
  • atol() : 문자열을 정수로 변환(long)
  • rand() : 난수=랜덤
profile
오히려 좋아

0개의 댓글