프로그래밍 언어란?

  • 기계어
    • 0과 1로 이루어진 언어입니다.
    • 기계가 이해할 수 있습니다.
  • 프로그래밍 언어
    • 비교적 사람이 이해할 수 있는 언어입니다.
    • 기계가 이해할 수 없습니다.
  • 컴파일러
    • 프로그래밍 언어를 기계어로 바꾸어 기계가 이해할 수 있도록 합니다. 이러한 작업을 컴파일이라고 합니다.

Low-level

  • 기계어, 어셈블리 언어입니다.
  • 기계는 이해할 수 있지만 사람은 이해하기 어려운 언어입니다.

High-level

  • C, Python, Java 같은 언어입니다.
  • 기계는 이해할 수 없지만 사람이 이해하기 쉬운 언어입니다.

C 언어의 역사

  • 1971년 UNIX라는 운영체제의 개발을 위해 만들어졌습니다.
    • 기존의 언어는 Assembly 언어로 만들어져 있었습니다.
    • 기존 언어는 하드웨어에 대한 의존도가 높았습니다.
    • Dennis Ritchie, Ken Thompson
    • ALGOL 60(1960) - CPL(1963) - BCPL(1969) - B(1970) - C(1971)

변수

  • 변수는 말 그대로 변하는 수 입니다.
    • 상황에 따라 크기가 변하는 수와 상황에 따라 값이 변하는 것을 의미합니다.

상수

  • 변경이 불가능한 데이터입니다.
  • Literal(그대로인) 상수 : 이름이 없는 상수
  • Const(constant, 변함없는) 상수 : 이름이 있는 상수

변수의 형(type)

  • 1 byte = 8 bit = 2^8

정수형

  • char < short < int < long < long long
  • char : 1바이트(-128 이상 +127 이하)
  • short : 2바이트(-32,768 이상 +32,767이하)
  • int : 4바이트(-2,147,483,648 이상 +2,147,483,647이하)
  • long : 4바이트(-2,147,483,648 이상 +2,147,483,647이하)
  • long long : 8바이트(-9,223,372,036,854,775,808 이상 + 9,223,372,036,854,775,807 이하)

실수형

  • float < double < long double
  • float : 4바이트(±3.4 _ 10^-37 이상 ±3.4 _ 10^-38 이하)
  • double : 8바이트(±1.7 _ 10^-307 이상 ±1.7 _ 10^-308 이하)
  • long double : 8바이트(double 이상의 표현)

함수란?

  • x를 넣었을 때, y로 반환 시켜주는 것입니다.

함수의 구성

composition of the function use function

산술 연산자

  • + : 덧셈
  • - : 뺼셈
  • * : 곱셈
  • / : 나눗셈
  • % : Modulo
  • = : 대입
#include <stdio.h>

int main(void)
{
  int num1 = 2, num2 = 2;
  printf("%d + %d = %d\n", num1, num2, num1 + num2);
  printf("%d - %d = %d\n", num1, num2, num1 - num2);
  printf("%d * %d = %d\n", num1, num2, num1 * num2);
  printf("%d / %d = %d\n", num1, num2, num1 / num2);

  return 0
}

연산자 짧게 쓰기

#include <stdio.h>

int main(void)
{
  int num1 = 2, num2 = 4, num = 6;
  num += 3;
  num2 *= 4;
  num %= 5;
  printf("%d %d %d", num1, num2, num3);

  int num1 = 2, num2 = 2;
  int num3 = num1++;
  int num4 = ++num2;
  printf("%d\n%d\n%d\n%d\n", num3, num4, num1, num2);

  return 0
}

논리 연산자

  • && : AND
  • || : OR
  • ! : 부정
#include <stdio.h>

int main(void)
{
  int num1 = 10;
  int num2 = 12;
  int result1, result2, result3;

  result1 = (num1 == 10 && num2 == 12);
  result2 = (num1 < 10 && num2 > 12);
  result3 = (!num1);

  printf("result1: %d \n", result1);
  printf("result2: %d \n", result2);
  printf("result3: %d \n", result3);

  return 0
}

사용자로부터 입력 받기

  • 출력 : printf
  • 입력 : scanf
#include <stdio.h>

int main(void)
{
  int result;
  int num1, num2, num3;

  printf("3개의 정수 입력: ");
  scanf("%d %d %d", &num1, &num2, &num3);

  result = num1 + num2 + num3;
  printf("sum = %d\n", num1 + num2 + num3);

  return 0
}

프로그램 사용자로부터 두 개의 정수를 입력 받아서 두 수의 뺄셈과 곱셈의 결과를 출력하는 프로그램을 작성해 보세요.

#include <stdio.h>

int main(void)
{
  int num1, num2;
  printf("숫자 2개 입력 : ");
  scanf("%d %d", &num1, &num2);
  printf("%d\n", num1 - num2);
  printf("%d\n", num1 * num2);

  return 0
}

하나의 정수를 입력 받아서, 그 수의 제곱의 결과를 출력하는 프로그램을 작성해 보세요. 예를 들어서 5가 입력되면 25가 출력되어야 합니다.

#include <stdio.h>

int main(void)
{
  int num1;
  printf("숫자 1개 입력 : ");
  scanf("%d", &num1);
  printf("%d\n", num1 * num1);

  return 0
}

두 숫자를 입력받아 결과를 출력해주는 프로그램을 함수로 구현해 보세요.

#include <stdio.h>

void sum(void)
{
  int num1, num2;
  printf("두 수를 입력하세요: ");
  scanf("%d %d", &num1, &num2);
  int num3 = num1 + num2;
  printf("%c\n", num3);
  printf("%d\n", num3);
}

int main(void)
{
  sum();

  return 0
}

서식 문자

서식 문자 출력 대상(자료형, type) 출력 형태
%d char, short, int 부호 있는 10진수 정수
%ld long 부호 있는 10진수 정수
%lld Long long 부호 있는 10진수 정수
%u Unsigned int 부호 있는 10진수 정수
%o Unsigned int 부호 없는 10진수 정수
%x, %X Unsigned int 부호 없는 10진수 정수
%f float, double 10진수 방식의 부동 소수점 실수
%Lf Long double 10진수 방식의 부동 소수점 실수
%c char, short, int 값에 대응하는 문자
%s char* 문자열
#include <stdio.h>
int main(void)
{
  long long num = 100;
  printf("%lld", num);

  char a = 'a';
  printf("%c", a);

  return 0
}

문자의 표현

  • 숫자만 읽을 수 있는 컴퓨터에게 문자를 읽게 하는 방법은 문자를 숫자로 표현하게 하는 것입니다.(ASCII code)

ASCII code

  • ASCII(American Standard Code for Information Interchange, 미국 정보보안 표준 부호) code
#include <stdio.h>

int main(void)
{
  char ch1 = 'A', ch2 = 65;
  int ch3 = 'Z', ch4 = 90;

  printf("%c %d \n", ch1, ch1);
  printf("%c %d \n", ch2, ch2);
  printf("%c %d \n", ch3, ch3);
  printf("%c %d \n", ch4, ch4);

  return 0
}

프로그램 사용자로부터 알파벳 문자 하나를 입력 받아서 이에 해당하는 아스키 코드 값을 출력하는 프로그램을 작성해 보세요.

  • 문자 A를 입력하면 정수 65를 출력 해야 합니다.
#include <stdio.h>

int main(void)
{
  printf("문자를 입력해 주세요: ");
  char a;
  scanf("%c", &a);
  printf("%d\n", a);

  return 0
}

반복문 - for

for(초기식; 조건식; 중감식) {

}

for(int num=0; num <3; num++) {
  printf("Hello world!");
}

예제

#include <stdio.h>

int main(void) {
  int total = 0;
  int i, num;

  printf("0 ~ num 까지의 덧셈을 할 때, num은? ");
  scanf("%d", &num);

  for(i = 0; i < num+1; i++) {
    total += i;
  }
  printf("0 ~ %d 까지의 덧셈 결과: %d\n", num, total);

  return 0
}

프로그램 사용자로부터 두 개의 정수를 입력 받습니다. 그리고 두 정 수 사이의 수를 모두 더한 결과를 출력하는 프로그램을 작성합니다.

#include <stdio.h>

int main(void)
{
  int num1, num2, result = 0;
  printf("두 수를 입력하세요: ");
  scanf("%d %d", &num1, &num2);
  for (int i = num1; i <= num2; i++)
  {
    result += i;
  };
  printf("%d\n", result);

  return 0
}

계승(factorial)을 계산하는 프로그램을 작성해보자.

#include <stdio.h>

int main(void)
{
  int num, result = 1;
  printf("수를 입력하세요: ");
  scanf("%d", &num);
  for (int i = 1; i <= num; i++)
  {
    result *= i;
  }
  printf("%d\n", result);

  return 0
}

반복문 - while

  • 조건을 만족하는 동안, 내용을 수행한다.
while (조건)
{
  내용
}

while (num < 5)
{
  printf("Hello world! %d\n", num);
  num = num + 1;
}

9단을 while문을 써서 출력해 보세요.

#include <stdio.h>

int main(void)
{
  int i = 1;
  while (i < 10)
  {
    int result = 9 * i;
    printf("9 x %d = %d\n", i, result);
    i++;
  }
  return 0;
}

사용자에게 입력받은 단의 구구단을 while문을 써서 출력하되, 역순으로 출력해 보세요.

#include <stdio.h>

int main(void)
{
  int num;
  printf("숫자를 하나 입력해 주세요\n");
  scanf("%d", &num);
  int i = 9;
  while (i >= 1)
  {
    int result = num * i;
    printf("%d x %d = %d\n", num, i, result);
    i--;
  }

  return 0;
}

반복문 - do ~ while

  • 최소 한번은 무조건 실행을 해야 할 때 사용합니다.
  • 조건을 먼저 검사하고 내용을 수행하는 while과 달리, 내용을 수행을 먼저 하고 조건을 검사합니다. 때문에 최소 한번은 무조건 실행이 됩니다.
do {
  내용
} while(조건)

do {
  prinf("Hello world!\n");
  num = num + 1;
} while(num < 3);

사용자에게 입력 받은 단의 구구단을 do~while문을 써서 출력하되, 역순으로 출력하세요.

#include <stdio.h>

int main(void)
{
  int num;
  printf("숫자를 하나 입력해 주세요\n");
  scanf("%d", &num);
  int i = 9;
  do {
    int result = num * i;
    printf("%d x %d = %d\n", num, i, result);
    i--;
  } while (i >= 1);

  return 0;
}

반복문의 중첩

입력한 숫자 만큼 별(*)을 찍어줍니다.

#include <stdio.h>

int main(void)
{
  int num;
  printf("숫자를 하나 입력해 주세요\n");
  scanf("%d", &num);
  char st[2] = "*";
  for (int i = 0; i < num; i++)
  {
    for (int j = 0; j <= i; j++)
    {
      printf("%s", st);
    }
    printf("\n");
  }

  return 0;
}

분기문 - if

  • 조건이 참이면, 내용을 수행합니다.
if (조건) {
  나용
}

if (num % 2 == 0) {
  printf("%d", num);
}

분기문 - if else

if (조건 1) {
  내용 1
} else if (조건 2) {
  내용 2
} else if (조건 3) {
  내용 3
}

if (num % 2 == 0) {
  printf("2의 배수 입니다.");
} else if (num % 3 == 0) {
  printf("3의 배수 입니다.");
} else if (num % 5 == 0) {
  printf("5의 배수 입니다.");
}

입력받은 숫자까지 홀수의 합을 더한다.

#include <stdio.h>

int main(void)
{
  printf("숫자 하나 입력해 주세요.\n");
  int num = 0;
  scanf("%d", &num);
  int result = 0;
  for (int i = 0; i <= num; i++)
  {
    if (i % 2 == 1)
      result += i;
  }
  printf("%d\n", result);

  return 0;
}