반응형

문제).

아래와 같은 연립방정식의 해 x와 y를 구하는 프로그램을 작성하시오.

연립방정식의 각 계수(a₁, b₁, c₁, a₂, b₂, c₂)는 scanf( )로 입력받는다.

    a₁x + b₁y = c₁
    a₂x + b₂y = c₂

 


 

예제1 ) 입력

방정식 a₁x + b₁y = c₁의
  a₁ b₁ c₁ 실수값 입력: 1 2 4
방정식 a₂x + b₂y = c₂의
  a₂ b₂ c₂ 실수값 입력: 5 2 6

 

결과)

연립 방정식>>
1x + 2y = 4
5x + 2y = 6

방정식 해>>
x = 0.5
y = 1.75

 


예제2 ) 입력 - 방정식을 잘 못 입력한 경우

방정식 a₁x + b₁y = c₁의
  a₁ b₁ c₁ 실수값 입력: 0 1 4
방정식 a₂x + b₂y = c₂의
  a₂ b₂ c₂ 실수값 입력: 0 2 5

 

결과)

연립 방정식>>
0x + 1y = 4
0x + 2y = 5

방정식 오류...

 


 

 

 

 

 

답은 아래에... ↓

 

 

 


 

 

 

 

스스로 풀어보시고... ↓

 

 

 

 

 

 


 

 

 

 

아래 답과 비교해보세요. ↓

 

 

 

 

 


#include <stdio.h>

int equation(const double *var1, const double *var2)
{
    double t_var1[3];
    double t_var2[3];
    double x, y;
    
    printf("연립 방정식>>\n");
    printf("%lgx + %lgy = %lg\n", var1[0], var1[1], var1[2]);
    printf("%lgx + %lgy = %lg\n", var2[0], var2[1], var2[2]);

    /* x, y의 계수가 모두 0이면 잘못된 방정식 */
    if(var1[0] == 0 && var1[1] == 0) {
        return 0;
    }
    if(var2[0] == 0 && var2[1] == 0) {
        return 0;
    }
    
    /* 두 방정식 x의 계수가 각각 0이면  */
    if(var1[0] == 0 && var2[0] == 0) {
        y = var1[2] / var1[1];
        if(y != (var2[2] / var2[1])) {
            return 0;
        }
        printf("y = %lg\n", y);
        return 1;
    }
    
    /* 두 방정식 y의 계수가 각각 0이면  */
    if(var1[1] == 0 && var2[1] == 0) {
        x = var1[2] / var1[0];
        if(x != (var2[2] / var2[0])) {
            return 0;
        }
        printf("x = %lg\n", x);
        return 1;
    }
    
    /* x의 계수를 같게 하기 위해서 두 방정식의 x계수를 상대방 방정식에 곱함 */
    for(int i = 0; i < 3; i++) {
        t_var1[i] = var1[i] * var2[0];
        t_var2[i] = var2[i] * var1[0];
    }
    if(var1[0] != 0) {
        y = (t_var2[2] - t_var1[2]) / (t_var2[1] - t_var1[1]);
        x = (var1[2] - var1[1] * y) / var1[0];
    } else {
        y = var1[2] / var1[1];
        x = (var2[2] - var2[1] * y) / var2[0];
    }
    
    printf("\n방정식 해>>\n");
    printf("x = %lg\n", x);
    printf("y = %lg\n", y);
    
    return 1;
}

int main()
{
    double var1[3];
    double var2[3];
    printf("방정식 a₁x + b₁y = c₁의 \n  a₁ b₁ c₁ 실수값 입력: ");
    scanf("%lf %lf %lf", &var1[0], &var1[1], &var1[2]);
    printf("방정식 a₂x + b₂y = c₂의 \n  a₂ b₂ c₂ 실수값 입력: ");
    scanf("%lf %lf %lf", &var2[0], &var2[1], &var2[2]);

    if(equation(var1, var2) == 0) {
        fprintf(stderr, "\n방정식 오류...\n");
        return 1;
    }

    return 0;
}

 

equation.c
0.00MB

 

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,