반응형
문제).
아래와 같은 연립방정식의 해 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;
}
반응형
'C언어 문제 > 수학 문제' 카테고리의 다른 글
복소수의 더하기/빼기/곱하기/절대값 구하기 (0) | 2020.06.12 |
---|---|
[삼각함수] 0˚ ~ 180˚의 sin값 구하기 (0) | 2019.12.20 |
소수 여부 판단하는 알고리즘 (제곱근 범위 나누기법) (0) | 2019.12.04 |
입력한 자연수보다 작은 모든 소수를 출력하기 (0) | 2019.11.19 |
최대 공약수, 최소 공배수 구하기 (0) | 2019.11.19 |