본 섹션에서는 표준 라이브러리를 활용한 데이터 입력 및 출력 처리, 조건부 제어 구조, 그리고 기본적인 수학적 연산 알고리즘에 대한 구현 사례를 다룹니다. 각 예제는 C 언어의 핵심 문법을 적용하여 실제 문제를 해결하는 과정을 보여줍니다.
01. 텍스트 기반 그래픽 출력
콘솔 환경에서 특정 문자 패턴을 구성하고 화면에 출력하는 작업을 수행합니다. 줄바꿈 이스케이프 시퀀스를 적절히 배치하여 원망적인 형태를 표현합니다.
#include <stdio.h>
void printShape(int rows) {
for (int i = 0; i < rows; i++) {
printf(" O \n");
printf("<H>\n");
printf("I I\n");
}
}
int main(void) {
// 두 개의 모양을 세로로 나열하거나 한 행에 배치
printShape(1);
printShape(1);
return 0;
}
02. 기하학적 조건 검증
세 변의 길이가 주어졌을 때, 해당 길이로 삼각형을 형성할 수 있는지 판단하는 로직입니다. 임의의 두 변의 합이 나머지 한 변보다 커야만 성립합니다.
#include <stdio.h>
#include <stdbool.h>
int main(void) {
double edgeX, edgeY, edgeZ;
if (scanf("%lf %lf %lf", &edgeX, &edgeY, &edgeZ) != 3) {
return 1;
}
bool isValidTriangle = false;
if ((edgeX + edgeY > edgeZ) &&
(edgeX + edgeZ > edgeY) &&
(edgeY + edgeZ > edgeX)) {
isValidTriangle = true;
}
printf(isValidTriangle ? "유효한 삼각형입니다.\n" : "삼각형이 될 수 없습니다.\n");
return 0;
}
03. 사용자 인터랙티브 질의 응답
사용자에게 예/아니오 질문을 하고 입력 버퍼의 잔여 데이터를 처리하여 정확한 문자 입력을 받는 방법을 구현합니다. 대소문자 구분을 위한 전처리 작업이 포함되어 있습니다.
#include <stdio.h>
int getConfirmationResponse(char question[], char defaultAnswer) {
char answer;
int ch;
printf("%s [y/n]: ", question);
answer = getchar();
// 버퍼의 남은 개행 문자 등을 비움
while ((ch = getchar()) != '\n' && ch != EOF);
return (answer == 'y' || answer == 'Y') ? 1 : 0;
}
int main(void) {
int prepStatus = getConfirmationResponse("수업 전预习를 했습니까?", 'n');
int codePractice = getConfirmationResponse("실제 코딩을 하였습니까?", 'n');
if (prepStatus && codePractice) {
printf("훌륭한 습관입니다. 일어서서 진행하세요.\n");
} else {
printf("기반을 다지겠습니다. 지금부터 시작합시다.\n");
}
return 0;
}
04. 포인터 연산을 통한 변수 입력 수정
scanf 함수 호출 시 주소 연산자 (&) 생략으로 인한 오류를 방지하고, 적절한 형식 지정자를 사용하는 올바른 입력 방식을 제시합니다.
#include <stdio.h>
int main(void) {
int num1, num2, num3;
char alpha1, alpha2, alpha3;
float realNum1, realNum2;
// 정수 입력: 주소 전달 필수
printf("3개의 정수를 입력하세요: ");
if (scanf("%d %d %d", &num1, &num2, &num3) == 3) {
printf("저장된 정수: %d, %d, %d\n", num1, num2, num3);
}
// 문자 입력
printf("3개의 문자를 입력하세요: ");
if (scanf(" %c %c %c", &alpha1, &alpha2, &alpha3) == 3) {
printf("저장된 문자: %c, %c, %c\n", alpha1, alpha2, alpha3);
}
// 실수 입력: 콤마 구분 주의
printf("2개의 실수 입력 (콤마 구분): ");
if (scanf("%f,%f", &realNum1, &realNum2) == 2) {
printf("계산 결과: %.2f + %.2f\n", realNum1, realNum2);
}
return 0;
}
05. 시간 단위 변환 계산
특정 초 (Second) 수치를 연 단위로 환산하는 과정에서 부동 소수점 반올림 처리를 포함하여 전체 연산 로직을 확인합니다.
#include <stdio.h>
#define SECONDS_IN_HOUR 3600
#define HOURS_IN_DAY 24
#define DAYS_IN_YEAR 365
int main(void) {
double totalSeconds = 1e9;
int equivalentYears;
double conversionFactor = SECONDS_IN_HOUR * HOURS_IN_DAY * DAYS_IN_YEAR;
// 0.5 를 더하여 반올림
equivalentYears = (int)(totalSeconds / conversionFactor + 0.5);
printf("초 단위의 %g 는 약 %d 년에 해당합니다.\n", totalSeconds, equivalentYears);
return 0;
}
06. 거듭제곱 알고리즘 반복 처리
입력된 값의 365 제곱을 수학 라이브러리를 사용하여 계산하며, 연속된 입력 데이터 스트림을 처리하는 구조를 보입니다.
#include <stdio.h>
#include <math.h>
int main(void) {
double baseValue;
while (scanf("%lf", &baseValue) != EOF) {
double result = pow(baseValue, 365);
if (baseValue != 0 && baseValue >= 1) {
printf("입력값 %.2f 의 365 승은 %.2f 입니다.\n\n", baseValue, result);
} else {
printf("영 또는 음수에 대해서는 결과가 0 에 수렴합니다.\n\n");
}
}
return 0;
}
07. 온도 척도 상호 변환
섭씨 온도를 기반으로 화씨 온도를 유도하는 물리적 공식에 따라 실시간 변환 값을 출력하는 프로그램을 구현합니다.
#include <stdio.h>
int main(void) {
double celsiusInput;
printf("섭씨 온도를 입력하면 화씨로 변환됩니다 (끝내려면 Ctrl+D): \n");
while (scanf("%lf", &celsiusInput) != EOF) {
double fahrenheitResult = (celsiusInput * 1.8) + 32.0;
printf("C=%.2f °C = F=%.2f °F\n", celsiusInput, fahrenheitResult);
}
return 0;
}
08. 해론의 공식을 이용한 면적 도출
삼각형의 세 변 길이를 통해 반둘레를 산출하고, 이를 바탕으로 헤론의 공식 (Heron's Formula) 을 적용하여 최종 면적을 산정합니다.
#include <stdio.h>
#include <math.h>
int main(void) {
double sideA, sideB, sideC;
while (scanf("%lf %lf %lf", &sideA, &sideB, &sideC) != EOF) {
double semiPerimeter = (sideA + sideB + sideC) / 2.0;
double areaSurface = sqrt(semiPerimeter * (semiPerimeter - sideA) * (semiPerimeter - sideB) * (semiPerimeter - sideC));
printf("변의 길이: %.0f, %.0f, %.0f | 면적: %.3f\n", sideA, sideB, sideC, areaSurface);
}
return 0;
}