연재 완료/C Lang 예제코드 모음

C언어 연습문제 풀이 CH6 (18~20)

라이피 (Lypi) 2018. 5. 13. 23:40
반응형

문제 출처 : YES C (정보공학연구소/생능출판사)


18. 황금비를 구하는 프로그램을 배열을 이용해 작성하라. 값이 약 1.61803이 되려면 언제까지 계산하면 될까?

#include <stdio.h>
#include <math.h> //ceil, round, floor함수 사용

int main(void)
{
	//변수 선언부
	const int index = 50;
	int fibonacci[index] = { 1,1, };
	float goldenratio;

	//피보나치 수열 초기화
	for (int i = 2; i < index; i++) {
		fibonacci[i] = fibonacci[i - 2] + fibonacci[i - 1];
	}

	//피보나치 수열 출력, int형으로 저장할 경우 46번째 수에서 오버플로우가 일어난다.
	for (int i = 0; i < index; i++) {
		printf("fibonacci[%d] = %d \n", i, fibonacci[i]);
	}

	//황금비 계산
	for (int i = 1; i < index; i++) {
		goldenratio = (float)fibonacci[i] / (float)fibonacci[i-1];
		printf("golden ratio(%d) = %.6f \n",i, goldenratio);

		//ceil함수는 소수자리수를 올림하는 함수.
		if (ceil(goldenratio * 100000) == 161803) {
			printf("올림시 %d번째 / %d번째에서 달성 (%d/%d) \n", i, i - 1, fibonacci[i], fibonacci[i - 1]);
		}

		//round함수는 소수자리수를 반올림하는 함수.
		if (round(goldenratio * 100000) == 161803) {
			printf("반올림시 %d번째 / %d번째에서 달성 (%d/%d) \n", i, i - 1, fibonacci[i], fibonacci[i - 1]);
		}

		//floor함수는 소수자리수를 버리는 함수.
		if (floor(goldenratio*100000)  == 161803) {
			printf("버림시 %d번째 / %d번째에서 달성 (%d/%d) \n", i, i - 1, fibonacci[i], fibonacci[i - 1]);
			break;
		}
	}
}


19. 10글자 이하의 문자열 5개를 받아서 abc순서로 정렬하는 프로그램을 작성하라. (문제를 좀 변형했음)

#include <stdio.h>
#include <string.h> // strcpy_s함수 사용

int main(void)
{
	//단어 갯수 결정
	const int N = 5;

	//배열 선언
	char word[N][10];
	char temp[10];	

	//문자열 입력받기
	for (int i = 0; i < N; i++) {
		printf("%d번째 문자열을 입력하세요 : ",i+1); scanf_s("%s", &word[i],sizeof(word[i]));
	}

	//문자열 정렬 
	int ns = 0;
	for (int i = 0; i < N-1; i++) {
		for (int k = i + 1; k < N; k++) {
			while (word[i][ns] == word[k][ns]) {
				ns++;
			}
			if (word[i][ns] > word[k][ns]) {
				strcpy_s(temp, word[i]);
				strcpy_s(word[i], word[k]);
				strcpy_s(word[k], temp);
				ns = 0;
			}
		}
	}
	//삽입정렬 방법을 적용했더니 되는 것 같은데 정작 내가 제대로 이해가 안되서 빡침.


	//문자열 출력
	for (int i = 0; i < N; i++) {
		printf("%d번째 문자열은 %s입니다. \n", i+1, word[i]);
	}

}


20. 다음과 같은 문자열이 있을 때, 'C'를 포함하는 문자열을 출력하라.

"COMPUTER", "HOT", "TURBO", "CIRCLE", "FLY", "COUPLE"

#include <stdio.h>

int main(void)
{
	//단어수 지정
	const int N = 6;

	//배열에 단어 저장
	char word[N][10] = { "COMPUTER", "HOT", "TURBO", "CIRCLE", "FLY", "COUPLE" };

	for (int i = 0; i < N; i++) {
		int k = 0;
		while (word[i][k] != '\0') { // 널문자가 나오기 전까지
			if (word[i][k] == 'C') { // 'C'가 나오면 출력하고 while문 빠져나감
				printf("C가 포함된 단어 : %s \n", word[i]);
				break;
				}
			k++;
		}
	}
}


반응형