반응형
문제 출처 : 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++; } } }
반응형