C언어 기초(4) : 함수

STUDY_J·2024년 7월 1일

기초 지식

  • void : 아무것도 반환하지 않겠다는 의미

함수

  • 아래의 연산 내용을 함수를 사용하여 간단하게 코드 작성해보기
#include <stdio.h>

int main(){

	int num = 2;
	printf("num = %d\n", num);
	
	num += 3; //5
	printf("num = %d\n", num);
	
	num -= 1; // 4
	printf("num = %d\n", num);
	
	num *= 3; // 12
	printf("num = %d\n", num);
	
	num /= 6; //2
	printf("num = %d\n", num);
}

#include <stdio.h>

void p(int num);

int main(){

	int num = 2;
	//printf("num = %d\n", num);
	p(num);
	
	num += 3; //5
	//printf("num = %d\n", num);
	p(num);
	
	num -= 1; // 4
	//printf("num = %d\n", num);
	p(num);
	
	num *= 3; // 12
	//printf("num = %d\n", num);
	p(num);
	
	num /= 6; //2
	//printf("num = %d\n", num);
	p(num);
}

void p(int num){
	printf("num = %d\n", num);
}

=> 출력하는 부분을 함수로 설정하여 간단하게 작성할 수 있음.
=> 여기서 위의 void p(int num); 은 선언을 해주는 부분이고 맨 아래의 void p(int num){ } 은 함수의 정의를 해주는 부분이다.

함수 종류 (1) : 반환값이 없는 함수

#include <stdio.h>

void p(int num);

void function_without_return();

int main(){

	function_without_return();
}

void function_without_return(){
	printf("Function without return\n");
}

여기서 void는 아무 것도 반화하지 않겠다는 것을 의미

함수 종류 (2) : 반환값이 있는 함수

#include <stdio.h>

void p(int num);

void function_without_return();

int function_with_return();

int main(){

	//function_without_return();
	int ret = function_with_return();
	p(ret);
	
	return 0;
}

void p(int num){
	printf("num = %d\n", num);
}

void function_without_return(){
	printf("Function without return\n");
}


int function_with_return(){
	printf("Function with return\n");
	return 10;
}

여기서는 int function_with_return() 을 선언, 정의 해준다.
함수 정의에서 "Function with return"을 출력하고, 그에따는 return 값은 10이라고 정의했다.
따라서 이 함수가 메인 함수에서 작동하여 아래와 같은 결과를 나타낸다.

함수 종류 (3) : 전달 값(parameter)이 없는 함수

#include <stdio.h>

void function_without_params();

int main(){

	function_without_params();
	
	return 0;
}


void function_without_params(){
	printf("Function without paramters\n");
}

함수 종류 (4) : 전달 값(parameter)이 있는 함수

#include <stdio.h>

void function_with_params(int num1,int num2,int num3);

int main(){

	//function_with_params(1,2,3);
	function_with_params(25,27,35);
	return 0;
}

void function_with_params(int num1,int num2,int num3){
	printf("Function with params, params = %d, %d, %d\n", num1, num2, num3);
}
  • 위 메인 함수에서 function_with_params( , , ); 의 숫자를 변경해주면 변경된 숫자가 출력된다.

함수 종류 (5) : 전달 값(parameter)도 받고, 반환 값이 있는 함수

  • 사과 5개에서 2개를 먹고 남은 개수를 출력하는 코드
#include <stdio.h>

int apple(int total, int ate);// 전체 total개 에서 ate개를 먹고 남은 개수

int main(){
	int ret = apple(5,2); // 사과 5개에서 2개를 먹었다
	printf("Total - Ate = %d\n", ret);
	return 0;
}

int apple(int total, int ate){
	printf("Function with params and return\n");
	return total - ate;
}

  • 심화 버전으로 main함수의 printf에서
    printf("사과 %d개 중에 %d개를 먹으면 %d개가 남아요") 라는 것을 출력하도록 코드 작성해보기
#include <stdio.h>

int apple(int total, int ate);// 전체 total개 에서 ate개를 먹고 남은 개수

int main(){
	//int ret = apple(5,2); // 사과 5개에서 2개를 먹었다
	//printf("Total - Ate = %d\n", ret);
	printf("%d(Total) - %d(Ate) = %d\n", 10, 4, apple(10,4));
	return 0;
}

int apple(int total, int ate){
	printf("Function with params and return\n");
	return total - ate;
}

사과를 먹고 남은 개수에 apple(10,4) 를 입력하여 function이 돌아가게 한다.

C언어에서의 전역 변수

C 언어에서 전역 변수를 사용하는 방법은 Python의 global 키워드를 사용하는 것과는 조금 다릅니다.
C에서는 전역 변수를 파일의 '최상위(함수 정의 외부)'에 선언하면, 모든 함수에서 이를 사용할 수 있습니다.

#include <stdio.h>

// 전역 변수 선언
int global_var = 10;

// 함수 선언
void print_global_var();
void increment_global_var();

int main(void) {
    printf("Initial global_var: %d\n", global_var); // 10 출력
    
    print_global_var();  // 전역 변수 출력
    increment_global_var(); // 전역 변수 증가
    print_global_var();  // 전역 변수 출력
    
    return 0;
}

// 전역 변수 사용 예제 함수
void print_global_var() {
    printf("global_var in print_global_var: %d\n", global_var);
}

void increment_global_var() {
    global_var++;
    printf("global_var incremented to: %d\n", global_var);
}

프로젝트

  • 5개의 문을 통과하기
    (문을 통과하기 위해서 정답을 맞춰야하고, 정답을 맞추면 다음 문으로 이동한다.
    중간에 멈추고 싶다면 "-1"을 입력해서 나가고 (여기서는 break 대신 exit(0)을 사용함)
    마지막에 맞춘 정답의 개수가 출력된다.)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int getRandomNumber(int level);

void showQuestion(int level, int num1, int num2);

int main(){

	srand(time(NULL));
	int count = 0;
	for(int i = 1; i <= 5; i++){
		int num1 = getRandomNumber(i);
		int num2 = getRandomNumber(i);
		
		//printf("%d x %d = ?\n", num1, num2);
		showQuestion(i, num1, num2);
		
		int answer = -1;
		scanf("%d", &answer);
		
		if(answer ==  -1){
			printf("Quit\n");
			exit(0);
		}
		else if(answer == num1 * num2){
			printf("Correct! Move next level\n");
			count += 1;
		}
		else if(answer != num1 * num2){
			printf("Wrong!\n");
			//break;
		}
	}
	printf("You got %d correct answers\n", count);
	return 0;

}


int getRandomNumber(int level)
{
	return rand() % (level * 7) + 1; //레벨이 올라갈수록 숫자의 범위가 커지도록 설정
}


void showQuestion(int level, int num1, int num2)
{
	printf("\n\n\n ##### %d번째 비밀번호 #####\n", level);
	printf("\n%d x %d = ?\n", num1, num2);
	printf("Press the number (Quit : -1)\n");
}

0개의 댓글