05주차 - Donghwanteam/C2-10 GitHub Wiki

[수업 내용]

라이브러리: 미리 만들어서 제공하는 컴파일 완료된 바이너리 코드.

함수는 기능하는 명령들의 묶음이고, 한번 만들면 여기저기서 여러 번 쓸 수 있고 수정 용이성이 좋다는 장점이 있다.

함수는 호출(call), 런(run), 리턴(return)


서버(Server):
  • 서버는 데이터를 저장하고 관리하며 클라이언트가 요청하는 서비스를 제공하는 컴퓨터 또는 시스템입니다. 예를 들어, 웹 서버는 웹사이트의 데이터를 클라이언트에 전달하는 역할을 합니다.

  • 서버는 일반적으로 강력한 하드웨어와 소프트웨어 환경을 갖추고 있어 많은 요청을 동시에 처리할 수 있습니다.

  • 예시: 웹 서버, 게임 서버, 데이터베이스 서버 등.

클라이언트(Client):
  • 클라이언트는 서버에 요청을 보내고 서버로부터 응답을 받는 컴퓨터나 장치입니다. 보통 사용자가 직접 조작하는 장치(PC, 스마트폰 등)가 클라이언트 역할을 합니다.

  • 클라이언트는 서버에 요청을 보내고, 서버는 해당 요청을 처리하여 결과를 클라이언트에게 돌려줍니다.

  • 예시: 웹 브라우저, 이메일 클라이언트, 게임 클라이언트 등.

클라이언트가 전달 -> 서버가 이걸 받음


void PrintNumder(int~~) ->Head

{

}

-> Body

[실습]

[코드1]

#include <stdio.h>
int main() {

	printf("Hello\n");
	printf("integer : %d\n", 100);
	printf("string : %s\n", "Hello!");
}
#include <stdio.h>
int main() {

	puts("Hello");
	printf("integer : %d\n", 100);
	printf("string : %s\n", "Hello!");
}
  • puts는 표준 라이브러리 함수이고, 문자열만 출력 능한 함수

[코드2]

#include <stdio.h>
void PrintHello()
{
	printf("Hello\n");
}
int main() {
	PrintHello();
}
  • main은 PrintHello의 클라이언트.
#include <stdio.h>
void PrintHello()
{
	for(int i=0; i<5; ++i)
		printf("Hello: %d\n", i+1);
	puts("");
}
int main()
{
	PrintHello();
	PrintHello();
	PrintHello();
}
#include <stdio.h>
void PrintHello(int size)
{
	for (int i = 0; i < size; ++i)
		printf("Hello: %d\n", i + 1);
	puts("");
}
int main()
{
	PrintHello(2);
	PrintHello(3);
	PrintHello(10);
}

[코드3]

#include <stdio.h>
void PrintAdd(int a, int b)
{
	printf("%d + %d = %d\n", a, b, a + b);
}
int main()
{
	int a = 10;
	int b = 20;

	PrintAdd(a, b);
	PrintAdd(7, 5);
}
#include <stdio.h>
int Add(int a, int b)
{
	int sum = a + b;
	return sum;
}
int main()
{
	int a = 10;
	int b = 20;
	int r = 0;
	r = Add(a, b);

	printf("sum = %d\n", r);
}

void는 비어있다는 것이고 정수값을 던지는 것이기 때문에 void를 정수타입인 int로 바꿔줌.

실수라면 실수형식이 되어야함.

#include <stdio.h>
int Add(int a, int b)
{
	int sum = a + b;
	return sum;
}
int main()
{
	int a = 10;
	int b = 20;
	int r = 0;
	r = Add(a, b);

	printf("sum = %d\n", r);
	printf("sum = %d\n", Add(1, 3));
	printf("sum = %d\n", Add(12, 12));
}

[코드4]

#include <stdio.h>
int main()
{
	int sum = 10;
	for (int i = 1; i <= 10; ++i)
		sum = sum + i;

	printf("sum = %d\n", sum);

}
#include <stdio.h>
void PrintTotalInt(int start, int end) {
	int sum = 0;
	for (int i = start; i <= end; ++i)
		sum = sum + i;

	printf("sum = %d\n", sum);
}
int main()
{
	PrintTotalInt(1, 100);
	PrintTotalInt(6, 7);
	PrintTotalInt(200, 300);
}
#include <stdio.h>
int TotalInt(int start, int end) {
	int sum = 0;
	for (int i = start; i <= end; ++i)
		sum = sum + i;

	return sum;
}
int main()
{
	int sum = 0;
	sum = TotalInt(1, 100);
	printf("sum = %d\n", sum);
	sum = TotalInt(6, 7);
	printf("sum = %d\n", sum);
	sum = TotalInt(200, 300);
	printf("sum = %d\n", sum);
}
#include <stdio.h>
int TotalInt(int start, int end) {
	int sum = 0;
	for (int i = start; i <= end; ++i)
		sum = sum + i;

	return sum;
}
int main()
{
	printf("sum = %d\n", TotalInt(1, 5));
}

[코드5]

#include <stdio.h>
int main()
{
	for (int i = 1; i <= 100; ++i) 
	{
		printf("%d", i);
	}
	printf("\n");
}

모든 정수 출력

#include <stdio.h>
int main()
{
	for (int i = 1; i <= 100; ++i)
	{
		if(i%2 == 0)
			printf("%d", i);
	}
	printf("\n");
}

모든 짝수 출력

[코드6]

#include <stdio.h>
void PrintEvenNumder(int start, int end)
{
	for (int i = start; i <= end; ++i)
	{
		if (i % 2 == 0)
			printf("%d", i);
	}
	printf("\n");
}
int main()
{
	PrintEvenNumder(1, 10);
	PrintEvenNumder(20, 30);
}
#include <stdio.h>
void PrintEvenNumder(int start, int end, int flag)
{
	for (int i = start; i <= end; ++i)
	{
		if (i % 2 == flag)
			printf("%d ", i);
	}
	printf("\n");
}
int main()
{
	PrintEvenNumder(1, 10, 1);
	PrintEvenNumder(20, 30, 0);
}
#include <stdio.h>
void PrintEvenNumder(int start, int end, int isOdd)
{
	for (int i = start; i <= end; ++i)
	{
		int mod = i % 2;
		if (mod == isOdd)
			printf("%d ", i);
	}
	printf("\n");
}
int main()
{
	PrintEvenNumder(1, 10, 1);
	PrintEvenNumder(20, 30, 0);
}
#include <stdio.h>
void PrintNumder(int start, int end, int isOdd);	//선언
int main()
{
	PrintNumder(1, 10, 1);
	PrintNumder(20, 30, 0);
}
void PrintNumder(int start, int end, int isOdd)
{
	for (int i = start; i <= end; ++i)
	{
		int mod = i % 2;
		if (mod == isOdd)
			printf("%d ", i);
	}
	printf("\n");
}

[과제]

인터프리터와 컴파일러의 차이점, 대표적인 언어 찾기


image


인터프리터(Interpreter)

  • 프로그래밍 언어의 소스 코드를 한줄 한줄 바로 실행하는 컴퓨터 프로그램입니다.
  • 별도의 컴파일 과정을 거치지 않고, 소스 코드 각각을 한 줄씩 읽어들여 실행시킵니다.
  • 실행속도: 느림
  • 별도의 실행 파일을 생성하지 않아서 실행 시간이 오래 걸릴 수 있습니다.
  • 메모리 사용에서는 효율적입니다.
  • 한 줄씩 바이크코드로 변환한 후, 즉시 실행하는 형식입니다.
  • 코드 실행시마다 인터프리터 과정을 반복합니다.
  • 단점: 소스코드가 쉽게 공개될 수 있습니다. 컴파일한 결과를 바이트 코드 등으로 컴파일해서 배포하는 경우가 잘 없기 때문에 쉽게 디컴파일이 가능합니다.
  • 대표적인 언어: Python(파이썬), JavaScript(자바스크립트), Ruby, MATLAB, 스크래치..등

컴파일러(Compiler)

  • 고급 언어로 작성된 소스코드를 기계어(컴퓨터 언어)로 번역하는 프로그램입니다. _ 생성한 프로그램 코드 전체를 스캔하여 한꺼번에 기계어로 번역합니다.
  • 실행속도: 빠름
  • 전체를 번역하는데 초기 실행시간은 오래 걸리지만, 전체적인 실행시간은 빠릅니다. ==> 이유: 컴파일러는 초기 실행 파일을 한번 만들어놓은 뒤, 이후에 실행할 때 해당 실행파일을 그대로 실행하면 되기 때문.
  • 컴파일러는 별도의 실행 파일을 생성합니다.
  • 기계어 번역과정에서 더 많은 메모리를 사용합니다.
  • 단점: 고급언어로 작성된 소스 코드를 기계어로 변환하는 과정에서 오브젝트 코드라는 파일을 만들어야 하기 때문에 보다 더 많은 메모리가 필요합니다. 또한 프로젝트의 규모가 커지면 컴파일 시간이 오래 걸릴 수 있습니다.
  • 대표 언어: C, C++, C#, JAVA, 크리스탈, ADD(에이다), 파스칼.. 등
⚠️ **GitHub.com Fallback** ⚠️