CS50_c언어_(3)[사용자 정의함수,하드웨어의 한계]

김두미·2022년 6월 20일
0
post-thumbnail

1. 사용자 정의함수

void cough(void)
{
	printf("cough\n");
}

int main(void) 
{
	for(int i=0;i<3;i++) {
    	cough();
    }
}

이렇게 cough라는 사용자 정의함수를 만들 수 있다.
cough라는 함수를 호줄하면 함수를 사용할 수 있지만 함수내부에서는 어떻게 실행되는지 알수없다. 이를 추상화라고 한다.

그런데 여기서 문제는 사용자 정의함수가 많아질수록 main이 뒤로 간다는 것이다.
이를 해결하기위해서 만약 cough함수를 main뒤에 놓는다면?

에러가 발생한다!

이유는 c는 생각보다 멍청해서 반드시 위->아래, 왼쪽 -> 오른쪽으로 이해하기 때문이다.

즉 이 문제를 해결하기 위해서는 함수 프로토타입인 void cough(void); 를 main앞에 위치시키면 함수의 몸체는 main뒤에 있어도 에러가 발생하지않고 잘 실행된다.

void cough(void);

int main(void) 
{
	for(int i=0;i<3;i++) {
    	cough();
    }
}


void cough(void)
{
	printf("cough\n");
}

인수로 받은 횟수만큼 cough를 출력하는 함수로 만들려면?

void cough(int n);

int main(void) 
{
	cough(3);
}

void cough(int n)
{
	for(int i=0;i<n;i++) {
    	printf("cough\n");
    }
	
}

함수 왼쪽에 있는 단어는 출력의 종류를 의미하고 괄호 안의 단어는 입력의 종류를 의미한다.

양수만 입력받는 함수 : (do while 문 이용)
일단 이 부분을 적어도 한번 수행한다는 것이 장점

int get_positive_int(void){
	int n;
    do
    {
    	n = get_int("Positive Integer: ");
    }
    while(n<1);
    return n;
}

2. 하드웨어의 한계

컴퓨터 메모리 용량은 유한하다.
그래서 무한한 숫자들을 100% 정확하게 저장할 수 없다.

RAM은 모든 프로그램이 실행 중 저장되는 곳으로 저장용량은 당연히 유한하다.
그래서 유한한 저장용량을 넘는 데이터가 발생할 경우 문제가 발생하는데
이를 오버플로우라고한다.


3. 퀴즈 2

1번 문제


이것을 c언어로 작성하면??

int main(void)



2번 문제

printf('hello'!);



3번 문제

hello.c를 소스코드를 머신코드로 컴파일하기 위해 어떤 명령어?

$clang hello.c



4번 문제

사용자 이름의 저장된 문자열 변수 name과 'Hello"를 연결해서 출력

printf("hello %s",name);



5번 문제

x와 y가 같다면 이라는 조건을 ?

if (x==y) 



6번 문제

변수 x가 입력되었을 때 x가 짝수인지 홀수인지 알아내는 프로그램을 구현하기위해 사용하면 좋은 연산자는 다음 중 무엇인가요?

짝수인지 홀수인지 알아내려면 2를 나눠서 나머지를 알아야한다.

나머지를 구하는 연산자 "%"를 이용해야한다.



7번 문제
int main(void) 
{
	printf("hello, wolrd\n");
}

printf를 사용하기위해서는 #include <stdio.h>를 해야한다.



8번 문제

이를 위해서 필요한 것은 함수 프로토타입이라고 한다.
이는 사용자 정의 함수를 main함수 뒤에 쓸 수 있게 해준다.
void hello(int); 그대로 써주면 된다.
여기서 void는 출력의 종류를 ,int는 입력의 종류를 의미한다.



9번 문제

어떤 작업을 50번 반복 수행하는 루프를 구현하기위한 c코드는?

for (int i =0 ; i<50 ; i++) 



10번 문제

컴퓨터 하드웨어의 한계로 인해 발생하는 문제로, 변수가 담을 수 있는 최대 허용범위를 벗어난 값을 저장해 예상치 못한 결과가 나오는 현상은 ?

당연히 오버플로우

EASY~!

profile
개발자를 꿈꾸는 대학생

0개의 댓글