[C프로그래밍] 240501_9주차_함수

김나정·2024년 5월 1일
0

C

목록 보기
3/8

대학수업을 듣고 이해한 내용을 정리해서 올리는 게시물입니다. 틀린 부분이 있을지do...


함수사용법 예제 #1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int get_integer() {
	int value;
	printf("정수를 입력하시오 : ");
	scanf("%d", &value);
	return value;
}
int get_max(int x, int y) {
	return (x > y) ? x : y;
}
int power(int x, int y) {
	long result = 1;
	for (int i = 0; i < y; i++) {
		result *= x;
	}
	return result;
}
int main() {
	int x = get_integer();
	int y = get_integer();
	int result = x + y;
	printf("두 수의 합 = %d\n", result);
	return 0;
}

Lab #1: 온도 변환 함수

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

//함수 원형
double FtoC(double temp_f);

int main() {
	double c, f;
	f = 32.0;
	c = FtoC(f);//함수 호출
	printf("화씨온도 %f는 섭씨온도 %f에 해당한다.\n", f, c);
	return 0;
}

//함수 정의
double FtoC(double temp_f) {
	double temp_c;
	temp_c = (temp_f - 32) * (5.0 / 9.0);
	return temp_c;
}
//화씨온도 32.000000는 섭씨온도 0.000000에 해당한다.

Lab #2: 다트 점수 계산 함수

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int get_points(float x, float y) {
	float distance = sqrt(x * x + y * y);
	if (distance > 10) {
		return 0;
	}
	else if (distance > 5) {
		return 1;
	}
	else if (distance > 1) {
		return 5;
	}
	else /*if (distance > 0)*/ {
		return 10;
	}
}

int main(void) {
	float x, y;
	printf("다트의 x, y좌표를 입력하세요 : ");
	scanf("%f %f", &x, &y);
	int points = get_points(x, y);
	printf("다트는 %d점을 획득했습니다.\n", points);
	return 0;
}
//다트의 x, y좌표를 입력하세요 : 6 6
//다트는 1점을 획득했습니다.

Lab #3: 시간 예측 게임

#include <stdio.h>
#include <time.h>//1970년 1월1일부터 흘러온 초를 반환


int main(void) {
	time_t stime, etime; //time_t는 unsigned long과 동일
	stime = time(NULL);
	printf("10초가 되면 아무 키나 누르세요\n");
	getch();//int를 반환하지만 반환값무시하고 입력하면 다음동작을 수행한다는 뜻

	printf("종료되었습니다.");
	etime = time(NULL);
	printf("경과된 시간은 %ld 초 입니다.\n", etime-stime);//long이므로 형식지정자 %ld

	return 0;
}
//10초가 되면 아무 키나 누르세요
//종료되었습니다.경과된 시간은 10 초 입니다.

time.h헤더를 통한 time()사용
getch()사용, int를 반환함


Lab #4: 자동차 경주 프로그램

#include <stdlib.h>//난수를 사용을 위한 srand(), rand()를 호출하기위한 헤더
//srand()는 seed값에따라 rand()가 달라짐->seed값을 랜덤으로지정하기위해서 time()사용
#include <stdio.h>
#include <Windows.h>//time.h가 포함되어있어서 time()을 쓴다고 따로 추가하지않음

//자동차의 위치는 전역함수로 선언
int car1_pos = 1, car2_pos = 1; //car_pos=자동차의 위치라는 뜻, 시작은 1로 초기화

//경주판 표시하기, 총거리30으로가정
/*경주판 모양 예제
1*****************************Goal1
2*****************************Goal2
*/
void disp_car(int car_number, int pos) {//차번호,위치
	for (int i = 0; i < pos - 1; i++) { //pos-1까지 거리표시, pos에는 차번호를 표시해야하니까
		printf("*");
	}
	printf("%d", car_number);

	for (int i = 0; i < 30 - pos; i++) {//차번호 이후부터 30-pos만큼 남은 거리 표시
		printf("*");
	}
	printf("Goal%d\n", car_number);
}

//반복해서 자동차 움직이기
void move_car() {
	getch();//enter누르면 움직임
	system("cls");//움직일때마다 화면 지우고 그림

	if (car1_pos > 30) //30초과하면 30까지 간걸로하고 경주판 그리기
		car1_pos = 30;
	if (car2_pos > 30)
		car2_pos = 30;
	disp_car(1, car1_pos);
	disp_car(2, car2_pos);
}

//main (rand함수를 이용해서 pos값을 변경)
int main(void) {
	//시작하기전 경주판 그리기
	disp_car(1, car1_pos);
	disp_car(2, car2_pos);

	//난수를 생성하면서 위치조정
	srand(time(NULL));
	printf("Enter키를 누르면 자동차가 움직입니다.");
	for (int i = 0; i < 30; i++) {//랜덤수가 계속 1만뜬다면 최대 30번 실행하므로 30까지 반복

		car1_pos += 1 + rand() % 6;//1~6사이로 랜덤수만큼 이동(주사위 던졌다고 생각ㅋ)
		move_car();
		if (car1_pos == 30) {
			printf("Car1 승리!\n");
			break;
		}

		car2_pos += 1 + rand() % 6;
		move_car();
		if (car2_pos == 30) {
			printf("Car2 승리!\n");
			break;
		}
	}
	return 0;
}
profile
molbwa

0개의 댓글