Skip to main content

Command Palette

Search for a command to run...

Understanding C Language: Basic Structure (2/2)

Output function, input function, arithmetic operation, assignment operation

Updated
14 min read
Understanding C Language: Basic Structure (2/2)

Contents

1️⃣출력 함수(Output function)
2️⃣입력 함수(Input function)
3️⃣대입 연산(Assignment operation)
4️⃣산술 연산 (Arithmetic operation)


1️⃣출력 함수(Output function)

라이브러리 함수(Library function)

라이브러리 함수는 컴파일러나 프로그래밍 언어가 제공하는 함수로, 프로그래머가 반복적으로 사용되는 기능을 쉽게 구현할 수 있도록 도와준다. 이를 통해 프로그래머는 저수준의 코드 작성 없이도 자주 쓰이는 기능을 쉽게 활용할 수 있다.

위의 이미지에 있는 내용은 scanf()printf() 함수의 작동을 설명하는 다이어그램이다.

  1. 변수 x에 값 20이 저장되어 있음:

    • 프로그램 내에서 변수 x에 값 20이 저장되어 있다.

주요 라이브러리 함수 예시:

printf(): 모니터에 출력을 하기 위한 함수이다.

    • 위 그림에서는 printf() 함수가 변수 x에 저장된 값을 출력하는 과정이 나타나 있다.
  • scanf(): 키보드로부터 입력을 받아 변수에 값을 저장하는 함수이다.

    • 위 그림에서는 scanf() 함수가 변수 x에 값을 저장하는 과정이 설명되어 있다.

이 외에도 많은 라이브러리 함수들이 있으며, 이를 통해 다양한 입출력, 수학 계산, 문자열 처리 등의 작업을 쉽게 수행할 수 있게된다.


문자열 출력(String output)

  • printf() 함수를 사용하여 문자열을 출력할 수 있다. 예를 들어:
printf("Hello World!\n");

위 코드는 **"Hello World!"**라는 문자열을 출력하고, **\n**은 줄바꿈을 의미한다.

문자열(String)

  • 문자열은 문자들이 여러 개 나열된 것으로, 예를 들어 **"Hello World!\n"**와 같은 형태이다. 이 문자열은 여러 문자가 연속적으로 배치된 형태이며, 마지막에는 항상 null 문자(\0)가 자동으로 붙어 문자열의 끝을 나타낸다.

  • "Hello World!\n" 문자열의 구조:

    • H, e, l, l, o, , W, o, r, l, d, !, \n (문자들이 차례로 나열됨)

    • \n: 줄바꿈을 위한 특수 문자

    • \0: 문자열의 끝을 나타내는 null 문자 (보이지 않음)

문자열은 C 언어에서 큰 따옴표(" ")로 묶어서 표현하며, 이를 printf() 함수로 출력할 수 있다.


변수값 출력(Variable value output)

문자열을 출력할 때, 변수를 함께 출력하는 구문에서 약간의 수정이 필요하다. printf 함수 내에서 변수의 값을 출력할 때는 형식 지정자(%d 등)와 함께 변수를 정확한 위치에 전달해야 한다.

다음은 올바른 코드 예시이다.:

printf("두 수의 합: %d\n", sum);

설명:

  • "두 수의 합: %d\n": 이 부분은 문자열을 출력한다. **%d**는 정수형 데이터를 출력하기 위한 형식 지정자이다.

  • sum: 이 부분은 실제로 출력하고자 하는 변수이다. printf() 함수는 첫 번째 인자로 출력 형식을 받으며, 그 뒤에 출력할 값을 넘겨준다.

즉, **%d**는 sum 변수의 값을 해당 위치에 출력하도록 지정하는 역할을 한다.


형식 지정자(Format specifier)

각 형식 지정자는 변수나 값을 특정 방식으로 출력하기 위해 사용된다.

%d: decimal의 약자
%f: float의 약자
%c: character의 약자
%s: string의 약자


여러개의 변수값 출력(Output multiple variable values)

이미지에는 여러 개의 변수 값을 출력하는 printf() 함수의 사용법이 설명되어 있다.

설명:

  • 코드: printf("%d %f", number, grade);

    • 여기서 **%d**는 정수형 변수를 출력하고, **%f**는 실수형 변수를 출력하는 형식 지정자이다.

    • **number**와 **grade**는 각각 정수형과 실수형 변수를 의미한다.

출력 결과:

  • 예시로 **number = 23**과 **grade = 3.99**가 있다고 가정하면, **23 3.99**라는 값이 출력되게 된다.

주의사항:

형식 지정자의 개수변수의 개수는 같아야 한다. 예를 들어, 두 개의 형식 지정자(%d%f)가 있으므로 두 개의 변수를 각각 대입해야 올바른 출력이 가능하다.

형식 지정자가 있는 위치에 해당하는 변수의 값이 대치되어 출력된다고 이해하면 된다.


주의사항(Notes)

위의 이미지에는 printf() 함수에서 형식 지정자와 변수의 자료형이 일치해야 한다는 점을 강조하고 있다.

문제 설명:

  • 코드: printf("%f\n", sum);

    • **%f**는 실수형(double 또는 float) 데이터를 출력하기 위한 형식 지정자.

    • 하지만 **sum**이 정수형 변수일 때, 자료형이 일치하지 않아 오류가 발생하게 된다.

주의 사항:

  • 형식 지정자와 출력하고자 하는 변수의 자료형이 반드시 일치해야 한다.

    • 실수형 데이터를 출력할 때는 **%f**를 사용하고, 정수형 데이터를 출력할 때는 **%d**를 사용해야 한다.

예를 들어, 정수형 변수 sum을 출력하려면 아래와 같이 수정해야 한다.

printf("%d\n", sum);  // 정수형일 때

또는 실수형 sum을 출력하려면 아래와 같이 해야 한다:

printf("%f\n", sum);  // 실수형일 때

형식 지정자와 변수의 자료형이 일치하지 않으면 실행 시 잘못된 값이 출력되거나 프로그램이 오류를 발생시킬 수 있으니 주의해야 한다.


필드폭(width)과 정밀도(precision)

위의 이미지에서는 필드 폭(width)정밀도(precision)를 지정하여 출력 형식을 제어하는 방법을 설명하고 있다. printf() 함수의 형식 지정자를 사용해 출력할 때, 필드의 크기와 소수점 이하 자릿수를 제어할 수 있다.

1. 필드 폭 지정 (정수 출력)

  • printf("%10d", 123);

    • 출력 결과: 123

    • 설명: 폭을 10으로 설정하고 오른쪽 정렬하여 정수 123을 출력한다. 남는 공간은 공백으로 채워지게 된다.

  • printf("%-10d", 123);

    • 출력 결과: 123

    • 설명: 폭을 10으로 설정하고 왼쪽 정렬하여 정수 123을 출력한다. 남는 공간은 공백으로 채워지게 된다.

2. 필드 폭과 정밀도 지정 (실수 출력)

  • printf("%f", 1.23456789);

    • 출력 결과: 1.234568

    • 설명: 기본적으로 소수점 이하 6자리까지 출력된다.

  • printf("%10.3f", 1.23456789);

    • 출력 결과: 1.235

    • 설명: 필드 폭을 10으로 지정하고, 소수점 이하 3자리까지만 출력한다. 오른쪽 정렬된다.

  • printf("%-10.3f", 1.23456789);

    • 출력 결과: 1.235

    • 설명: 필드 폭을 10으로 지정하고, 소수점 이하 3자리까지만 출력하며, 왼쪽 정렬된다.

  • printf("%.3f", 1.23456789);

    • 출력 결과: 1.235

    • 설명: 소수점 이하 3자리까지만 출력하며, 필드 폭은 지정하지 않는다.

요약

  • 필드 폭(width): 출력할 데이터의 최소 폭을 설정한다. 지정한 폭보다 데이터가 작으면 나머지는 공백으로 채워지게 된다.

  • 정밀도(precision): 실수 출력 시 소수점 이하 자릿수를 설정할 수 있다.

이러한 설정을 통해 출력 형식을 세부적으로 조정할 수 있다.


Lab: 사칙 연산

이미지에 있는 프로그램은 **변수 xy**에 각각 값을 저장한 후, 기본적인 사칙 연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 수행하여 결과를 출력하는 예제이다.

프로그램 설명:

/* 정수 간의 가감승제를 계산하는 프로그램 */
#include <stdio.h>

int main(void)
{
    int x;      // 첫 번째 정수를 저장할 변수
    int y;      // 두 번째 정수를 저장할 변수
    int sum, diff, mul, div;  // 두 정수 간의 연산 결과를 저장하는 변수

    x = 20;     // 변수 x에 20을 저장
    y = 10;     // 변수 y에 10을 저장

    sum = x + y;    // 변수 sum에 (x + y)의 결과를 저장
    diff = x - y;   // 변수 diff에 (x - y)의 결과를 저장
    mul = x * y;    // 변수 mul에 (x * y)의 결과를 저장
    div = x / y;    // 변수 div에 (x / y)의 결과를 저장

    // 출력 부분
    printf("두 수의 합: %d\n", sum);   // 변수 sum의 값을 화면에 출력
    printf("두 수의 차: %d\n", diff);  // 변수 diff의 값을 화면에 출력
    printf("두 수의 곱: %d\n", mul);   // 변수 mul의 값을 화면에 출력
    printf("두 수의 몫: %d\n", div);   // 변수 div의 값을 화면에 출력

    return 0;
}

주요 내용:

  • 변수 선언: xy는 각각 20과 10을 저장하고, sum, diff, mul, div는 각각 덧셈, 뺄셈, 곱셈, 나눗셈 결과를 저장한다.

  • 연산: 각 변수에 할당된 값을 바탕으로 사칙연산이 수행되며 그 결과는 다른 변수에 저장된다.

  • 출력: printf() 함수를 사용하여 결과를 출력한다.

출력 예시:

두 수의 합: 30
두 수의 차: 10
두 수의 곱: 200
두 수의 몫: 2

이 프로그램은 기본적인 사칙 연산을 다루며, C 언어에서 변수와 연산, 출력에 대한 개념을 이해하는 데 도움이 된다.


2️⃣입력 함수(Input function)


scanf()

위의 이미지에서 설명하고 있는 scanf() 함수는 키보드로부터 입력된 값을 변수에 저장하기 위한 함수이다. 주요 내용을 정리하면 다음과 같다.

scanf() 함수의 주요 개념:

  1. 형식 지정자(format specifier)

    • "%d": 정수를 입력받기 위한 형식 지정자이다. 입력받을 데이터의 형식을 지정해준다.
  2. 변수의 주소(Variable address)

    • &x: 변수 x의 주소를 가리킨다. scanf() 함수는 값을 변수에 저장하기 위해 해당 변수의 메모리 주소를 필요로 한다.

    • &(앰퍼샌드, ampersand) 기호는 변수의 주소를 얻기 위한 연산자이다. 정수를 입력받고 이를 x라는 변수에 저장하려면 그 변수의 주소를 scanf()에 전달해야 한다.

예시 코드:

int x;
scanf("%d", &x);  // 키보드로부터 정수를 입력받아 변수 x에 저장

동작 과정:

  1. 프로그램이 실행되면 사용자로부터 입력을 받는다.

  2. 사용자가 입력한 값이 변수 x의 주소에 저장된다.

요약:

  • scanf() 함수는 사용자 입력을 받아 변수를 초기화할 때 사용되며, 변수를 전달할 때는 해당 변수의 주소를 전달해야 한다.

& 표시가필요한 이유

위 이미지에서 설명하고 있는 내용은 변수의 주소가 필요한 이유를 직관적으로 설명한다.

요약:

  • 변수의 주소는 변수를 메모리 상에서 정확히 어디에 저장할지 알려주는 정보이다.

  • & 연산자는 변수가 저장된 메모리 주소를 반환한다.

  • 이 개념을 실제 생활에 비유하면, 우리가 온라인에서 제품을 구매한 후, 배달 주소를 제공해야 물건을 받을 수 있는 것과 유사하다. 즉, 주소만 있으면 제품이 올바른 목적지에 배달될 수 있게 된다.

마찬가지로, scanf() 함수는 입력된 데이터를 변수에 저장하기 위해 해당 변수의 주소를 필요로 한다. 그 주소를 사용하여 메모리의 정확한 위치에 데이터를 저장한다.


scanf()의 형식지정자 (format specifier)

대부분 printf()와 같다.

💡C 언어에서 double형 변수는 실수(소수점이 포함된 수)를 저장하기 위한 자료형이다. double형은 double-precision floating-point number를 의미하며, 이는 부동소수점을 보다 높은 정확도로 저장할 수 있다.

주요 특징:

  1. 메모리 크기:

    • 일반적으로 8바이트(64비트)를 차지하며, 이는 float형(4바이트)보다 더 많은 메모리를 사용한다.
  2. 정밀도:

    • double형은 float형보다 두 배 더 높은 정밀도를 가지며, 매우 큰 값이나 매우 작은 값을 더 정확하게 표현할 수 있다.

    • 소수점 이하 약 15~16자리 정도의 정확도를 가진다.

  3. 사용 예시:

    • 소수점이 포함된 숫자, 특히 높은 정밀도가 필요한 계산에서 double형을 사용한다.

예시 코드:

cCopy code#include <stdio.h>

int main(void) {
    double a = 3.141592653589793;  // 파이 값을 double로 저장
    printf("a = %.15lf\n", a);     // 소수점 이하 15자리까지 출력

    return 0;
}

출력:

a = 3.141592653589793

위 예시에서 double형 변수를 사용하여 소수점 이하 15자리까지 출력할 수 있음을 보여준다.

결론:

double형 변수는 정밀한 실수를 저장할 때 사용되며, float형보다 더 많은 소수점 자릿수를 처리할 수 있다. 과학 계산이나 금융 계산과 같은 정확도가 중요한 상황에서 많이 사용된다.


실수 입력시 주의할 점

위의 이미지에서 설명하는 내용은 실수형 데이터를 입력받을 때 주의해야 할 점에 대한 것이다.

요약:

  1. float형 변수:

    • **float ratio**와 같은 float형 변수를 입력받을 때는 %f 형식 지정자를 사용한다.

    • 예시:

        float ratio = 0.0;
        scanf("%f", &ratio);  // float형 변수는 %f 사용
      
  2. double형 변수:

    • **double scale**과 같은 double형 변수를 입력받을 때는 %lf 형식 지정자를 사용.

    • 예시:

        double scale = 0.0;
        scanf("%lf", &scale);  // double형 변수는 %lf 사용
      

주의사항:

  • 형식 지정자자료형이 일치하지 않으면 입력 과정에서 오류가 발생할 수 있다.

    • float형은 **%f**를 사용하고,

    • double형은 **%lf**를 사용해야 한다.

이를 정확히 사용하지 않으면 프로그램이 올바르게 작동하지 않으므로, 변수의 자료형에 맞는 형식 지정자를 사용하는 것이 매우 중요하다.


scanf()

이미지에서 설명하는 scanf() 함수는 여러 개의 값을 입력받을 때 사용하는 예시를 보여주고있다. 주의해야할 점 2가지를 기억하자.

  • 형식 지정자의 개수변수의 개수는 일치해야 한다.

  • 형식 지정자는 입력받을 데이터의 타입과 일치해야 한다.


비주얼 스튜디오 2022에서 scanf()오류

Visual Studio 2022에서 발생하는 scanf() 함수의 오류는 Microsoft의 컴파일러가 보안성 문제로 인해 scanf() 대신 scanf_s() 함수를 권장하기 때문에 발생한다. 이와 관련된 몇 가지 중요한 사항을 요약하면 다음과 같다.

주요 내용:

  1. 오류 내용:

    • Visual Studio에서 scanf() 함수가 안전하지 않으니 **scanf_s()**를 사용하라는 경고가 발생할 수 있다.
  2. scanf_s() 함수:

    • **scanf_s()**와 같은 _s가 붙은 함수들은 C11 표준의 Annex K에서 선택적으로 도입된 "안전한" 함수들이다.

    • Visual Studio와 같은 일부 컴파일러에서 지원되지만, gcc와 같은 다른 컴파일러에서는 이 표준을 아직 도입하지 않았거나 **'유익하지 않은 표준'**으로 평가되어 다음 버젼에서는 삭제될 가능성이 제기되고 있다.


비주얼 스튜디오 2022에서의 scanf() 함수 오류 해결방법

scanf() 사용시 컴파일 오류가 난다면?

해결 방법:

    • Visual Studio에서 scanf() 함수의 경고를 피하면서 기존 함수들을 그대로 사용하려면, 소스 코드의 맨 첫 부분에 **_CRT_SECURE_NO_WARNINGS**를 정의해야 한다.

      • 이를 통해 Visual Studio의 보안 경고를 비활성화하고 기존 표준 함수를 사용할 수 있게 된다.

주의사항:

**_CRT_SECURE_NO_WARNINGS**는 Visual Studio의 보안 경고를 끄는 역할을 한다.

  • #define 구문은 stdio.h 헤더 파일을 포함하기 전에 작성해야 한다.

  • Visual Studio에서는 권장 사항으로 _s가 붙은 함수를 사용하지만, 다른 컴파일러에서는 일반적인 scanf() 함수를 사용하는 것이 보편적이다.

이와 같이 설정하면 Visual Studio에서 기존의 표준 입력 함수인 scanf()를 그대로 사용할 수 있게된다.


다른 방법

Visual Studio 2022에서 scanf() 함수와 같은 안전하지 않은 함수에 대한 경고를 비활성화하는 또 다른 방법으로, 프로젝트 속성에서 설정을 변경하는 방법을 사용할 수 있다. 이는 코드 내에 **_CRT_SECURE_NO_WARNINGS**를 정의하지 않고도 문제를 해결할 수 있게 된다.

이 방법은 보안 경고를 끄고 프로젝트를 좀 더 간결하게 관리하는데 유용할 수 있다.

다른 방법: Visual Studio에서 프로젝트 속성 변경
(Alternative Method: Disabling Warnings via Visual Studio Project Settings)

  1. 프로젝트 속성으로 이동:

    • 메뉴에서 [프로젝트] → **[프로젝트 속성(P)]**을 클릭한다.
  2. C/C++ 설정으로 이동:

    • [C/C++] → **[일반]**을 선택한다.
  3. SDL 검사 비활성화:

    • [SDL 검사] 옵션을 **"아니요"**로 설정한다.
  4. 변경 사항 저장:

    • 변경 사항을 저장한 후 프로젝트를 다시 빌드하면, scanf()와 같은 함수에 대한 보안 경고가 더 이상 발생하지 않게된다.

결론:

  • 코드 내에서 **#define _CRT_SECURE_NO_WARNINGS**를 사용하는 방법이 편리할 수도 있지만, 프로젝트 설정을 변경하여 안전하지 않은 함수에 대한 경고를 끄는 것도 하나의 방법이다.

  • 각자 상황에 맞는 방법을 선택하여 사용하면 된다.


scanf() 정리


수식(Expression)

  • 수식(expression): 수식은 피연산자(operand)와 연산자(operator)로 구성된 식을 말한다. 예를 들어, 3 + 5는 하나의 수식이다.

  • 수식의 결과값(the result of the expression): 모든 수식은 결과값을 가진다. 예를 들어, 3 + 5라는 수식의 결과값은 8이다.

예시:

  1. 산술 수식(Arithmetic expression): 3 * (4 + 2)는 피연산자 3, 4, 2와 산술 연산자 *, +로 구성된 수식이며, 결과값은 18이다.

  2. 논리 수식(Logical expression): a > bab라는 두 피연산자와 비교 연산자 >로 구성된 수식이며, 결과는 true 또는 false가 된다.

수식은 프로그래밍에서 계산, 비교 등의 작업을 수행하는 기본적인 요소이다.


변수에 값 저장하기 x = 100

  • 대입 연산(assignment operation): 변수에 값을 저장하는 연산을 의미한다. 예를 들어, x = 100은 변수 x에 값 100을 저장하는 대입 연산다.

  • 대입 연산 = 배정 연산 = 할당 연산(Assignment operation): 대입 연산은 배정 연산 또는 할당 연산이라고도 불린다. 이들 용어는 모두 동일한 개념을 나타낸다.

예시:

int x;
x = 100;  // 대입 연산: 변수 x에 100을 저장

대입 연산자는 변수에 새로운 값을 설정하는 데 사용된다.


3️⃣대입 연산(Assignment operation)

다양한 대입 연산

위의 이미지에서 설명하는 다양한 대입 연산의 주요 내용은 다음과 같다:

  1. 변수에 값 저장:

    • 변수는 = 기호를 사용하여 값을 저장할 수 있다.

    • 변수의 값은 여러 번 변경할 수 있다. 예를 들어, 처음에 value = 10;으로 저장된 값은 이후 value = 20;으로 변경될 수 있다.

    int value;
    value = 10;  // value에 10 저장
    value = 20;  // value에 20으로 변경
  1. 변수 간의 값 대입:

    • 변수에는 다른 변수의 값도 대입할 수 있다. 예를 들어, 변수 yx의 값을 복사하는 경우, y = x;와 같이 사용할 수 있다.
    int x = 10;
    int y = 20;
    y = x;  // y는 이제 x의 값인 10이 된다.

요약:

  • 변수는 = 연산자를 통해 값을 저장하거나 다른 변수의 값을 대입받을 수 있다.

  • 위 예시에서는 x에 저장된 값 10y로 복사되어 y의 값도 10이 된다.


4️⃣ 산술 연산 (Arithmetic operation)

산술 연산

산술 연산자는 일반적으로 수학에서 사용하는 연산 기호와 유사하며, 숫자 값을 계산하는 데 사용된다. 그 결과를 변수에 저장할 수 있다.


산술 연산 #2

Uploaded image

이미지에서 설명하는 산술 연산의 예시는 두 변수 xy의 값을 더하여 sum 변수에 저장하는 과정을 보여주고 있다.

설명:

  • 코드: sum = x + y;

    • 변수 xy에 각각 100200이 저장되어 있다.

    • + 연산자를 사용하여 xy의 값을 더한 결과 300이 되고, 이 값이 sum 변수에 저장된다.

연산 과정:

  1. **x**의 값은 100, **y**의 값은 200이다.

  2. x + y100 + 200이므로, 그 결과는 300이 된다.

  3. **sum**에 300이 저장된다.

요약:

  • 산술 연산에서 + 연산자는 덧셈을 수행하며, 두 값의 합이 sum 변수에 대입된다.

  • 이 예시에서는 x = 100, y = 200일 때 sum = 300이 된다.


정리

이미지에는 두 정수를 입력받아 더한 값을 출력하는 프로그램의 흐름을 보여주고 있다.

프로그램 흐름 설명:

  1. Start: 프로그램이 시작된다.

  2. read x: 사용자로부터 첫 번째 정수 **x**를 입력받는다.

  3. read y: 사용자로부터 두 번째 정수 **y**를 입력받는다.

  4. sum = x + y: 입력받은 두 값 **x**와 **y**를 더하여 sum 변수에 저장한다.

  5. print sum: 계산된 **sum**의 값을 화면에 출력한다.

  6. End: 프로그램이 종료된다.

프로그램 코드 with scanf():

#include <stdio.h>

int main(void)
{
    int x, y;

    scanf("%d", &x);  // 사용자로부터 정수 x 입력받기
    scanf("%d", &y);  // 사용자로부터 정수 y 입력받기

    int sum = x + y;  // 두 값을 더하여 sum에 저장

    printf("%d", sum);  // sum 값을 출력

    return 0;
}

설명:

  • scanf("%d", &x);: 사용자로부터 정수 **x**를 입력받는다.

  • scanf("%d", &y);: 사용자로부터 정수 **y**를 입력받는다.

  • sum = x + y;: xy를 더한 값을 sum에 저장한다.

  • printf("%d", sum);: 계산된 **sum**의 값을 출력한다.

위 프로그램은 두 정수를 입력받아 그 합을 계산하고 출력하는 매우 기본적인 프로그램이다.


덧셈 프로그램 #2

#include <stdio.h>

int main(void)
{
    int x;
    int y;

    printf("첫번째 숫자를 입력하시오: ");   // 사용자에게 입력 안내
    scanf("%d", &x);  // 사용자로부터 정수 x 입력받기
    printf("두번째 숫자를 입력하시오: "); // 사용자에게 입력 안내
    scanf("%d", &y);  // 사용자로부터 정수 y 입력받기

    int sum = x + y;  // 두 값을 더하여 sum에 저장

//입력된 값 출력
    printf("첫번째 숫자%d\n", x); 
    printf("두번째 숫자%d\n", y);
    printf("두수의 합:%d", sum);

    return 0;
}

알고리즘

원의 면적 계산 프로그램

#include <stdio.h>

int main(void)
{
    float x;

    printf("원의 반지름을 입력하시오 ");   // 사용자에게 입력 안내
    scanf("%f", &x);  // 사용자로부터 반지름 길이 입력받기

    float sum = x * x;  // 두 값을 곱하여 반지름 제곱
    float pie = sum * 3.14;

//입력된 값 출력
    printf("원의 반지름%f\n", x); 
    printf("반지름 제곱%f\n", sum);
    printf("원의 면적:%f", pie);

    return 0;
}

환율 계산 프로그램

#include <stdio.h>

int main(void)
{
    double krw;
    double aud;
    float sum;

    printf("환율을 입력하세요.");   // 사용자에게 입력 안내
    scanf("%lf", &x);  // 사용자로부터 호주 환율 입력 받기

    printf("원화 금액을 입력하세요.");   // 사용자에게 입력 안내
    scanf("%lf", &y);  // 사용자로부터 환전할 금액 입력받기

    float sum = krw / aud;  // 환전 받기


//입력된 값 출력
    printf("원화%lf원은 %f입니다.", krw, sum); 

    return 0;
}

평균 계산하기 프로그램

#include <stdio.h>

int main(void)
{
    double x,y,z;

    printf("3개의 과목의 각각 점수를 입력하세요 ");   // 사용자에게 입력 안내
    scanf("%lf", &x,y,z);  // 사용자로부터 각 점수 입력 받기

    double sum = x + y + z;  // 각 점수 더하기
    double ave = sum / 3; // 더한 점수를 3으로 나누기기

//입력된 값 출력
    printf("3개의 과목의 평균은 %lf입니다.", ave); 

    return 0;
}

💡오류 발생: 40,50,60으로 입력시 평균이 50이 아닌 13.333으로 나온다.

💡해결방법:

위의 코드에서 몇 가지 수정이 필요하다. 주요 문제는 scanf() 함수 사용 방법과 형식 지정자에 있다. scanf() 함수에서 여러 값을 입력받을 때는 각각의 변수에 대해 주소 연산자(&)를 명시해줘야 한다.

수정된 코드:

#include <stdio.h>

int main(void)
{
    double x,y,z;

    printf("3개의 과목의 각각 점수를 입력하세요. 3개의 점수는 공백으로 구분해주세요. ");   // 사용자에게 입력 안내
    scanf("%lf %lf %lf", &x,&y,&z);  // 사용자로부터 각 점수 입력 받기

    double sum = x + y + z;  // 각 점수 더하기
    double ave = sum / 3; // 더한 점수를 3으로 나누기기

//입력된 값 출력
    printf("3개의 과목의 평균은 %.2lf입니다.", ave); 

    return 0;
}

문제점 및 수정 사항:

  1. scanf() 함수의 문제:

    • 원래 코드에서 scanf("%lf", &x, y, z); 부분은 & 연산자가 x에만 붙어 있다. 따라서 yz에 대해 입력받지 못한다.

    • 해결책: scanf() 함수에서 여러 개의 실수(double)를 입력받을 때, 각 변수에 대해 &를 명시해야 한다. 수정된 부분: scanf("%lf %lf %lf", &x, &y, &z);

  2. 형식 지정자:

    • printf()에서 ave 값을 출력할 때, 소수점 이하를 2자리로 제한하기 위해 %.2lf 형식 지정자를 사용했다.

실행 결과 예시:

입력:

3개의 과목의 각각 점수를 입력하세요: 40 50 60

출력:

3개의 과목의 평균은 50.00입니다.

이제 코드가 올바르게 작동하며, 평균을 정확하게 계산하여 출력할 수 있다.


Mini Project: 사각형의 둘레와 면적