[作業] 請教一下
我的作業出了一些問題 在此附上我的程式碼 若把reduce一段拿掉似乎就可以跑了
但是就不能約分了 可以指點一下嗎 謝謝:
#include <stdio.h>
#include <stdlib.h>
char scan_operator_fraction( int *nump , int *denomp);
int reduce_fraction( int n_answer , int d_answer);
void multiply_fractions( int n_1a , int d_1a , int n_2a , int d_2a , int *n_ansp , int *d_ansp);
void add_fractions( int n_1a , int d_1a , int n_2a , int d_2a , int *n_ansp , int *d_ansp);
int
main()
{
int n_1 = 0 , d_1 = 1 , n_2 , d_2 ;
char op ;
int n_ans , d_ans ;
int gcd ;
char q ;
do{
op = scan_operator_fraction(&n_2,&d_2) ;
switch(op){
case '+':
add_fractions( n_1 , d_1 , n_2 , d_2 , &n_ans , &d_ans);
break ;
case '-':
add_fractions( n_1 , d_1 , -n_2 , d_2 , &n_ans , &d_ans);
break ;
case '*':
multiply_fractions( n_1 , d_1 , n_2 , d_2 , &n_ans , &d_ans);
break ;
case '/':
multiply_fractions( n_1 , d_1 , d_2 , n_2 , &n_ans , &d_ans);
break ;
}
gcd = reduce_fraction( n_ans , d_ans );
n_ans = n_ans / gcd ;
d_ans = d_ans / gcd ;
printf("recent result is %d / %d.\n", n_ans , d_ans );
n_1 = n_ans ;
d_1 = d_ans ;
}while( op != 'q' );
printf("final result is %d / %d.\n", n_ans , d_ans );
return(0);
}
char
scan_operator_fraction( int *nump , int *denomp )
{
char op ,discard ;
char sign , slash ;
int status , error ;
do{
error = 0;
printf("Enter a common fraction as -7/6.\n");
status = scanf("%c%d%c%d",&sign,nump,&slash,denomp);
if (status < 4){
error = 1 ;
printf("Invalid-please read directions carefully.\n");
}else if (sign != '+' && sign != '-' && sign != '*' && sign != '/' && sign != 'q'){
error = 1 ;
printf("Invalid-please enter the symbol + - * /.\n");
}else if (slash != '/'){
error = 1 ;
printf("Invalid-by a slash(/).\n");
}else if (*denomp <= 0){
error = 1 ;
printf("Invalid-denominator must be positive.\n");
}
do{
scanf("%c",&discard);
}while(discard != '\n');
}while(error);
op = sign ;
return(op);
}
void
add_fractions( int n_1a , int d_1a , int n_2a , int d_2a , int *n_ansp , int *d_ansp)
{
int denom , numer , sign_factor ;
denom = d_1a * d_2a ;
numer = n_1a * d_2a + n_2a * d_1a ;
if(numer * denom >= 0)
sign_factor = 1 ;
else
sign_factor = -1 ;
numer = sign_factor * abs(numer);
denom = abs(denom);
*n_ansp = numer ;
*d_ansp = denom ;
}
void
multiply_fractions( int n_1a , int d_1a , int n_2a , int d_2a , int *n_ansp , int *d_ansp)
{
int numer , denom , sign_factor ;
numer = n_1a * n_2a ;
denom = d_1a * d_2a ;
if(numer * denom >= 0)
sign_factor = 1 ;
else
sign_factor = -1;
numer = sign_factor * abs(numer);
denom = abs(denom);
*n_ansp = numer ;
*d_ansp = denom ;
}
int
reduce_fraction( int n_answer , int d_answer)
{
int n1 , n2 ;
int temp ;
int gcd ;
if (abs(n_answer) > abs(d_answer)){
n1 = abs(n_answer) ;
n2 = abs(d_answer) ;
}
else{
n1 = abs(d_answer) ;
n2 = abs(n_answer) ;
}
do{
while(n1 > n2){
n1 = n1 – n2 ;}
temp = n2 ;
n2 = n1 ;
n1 = temp ;
}while( n2 != 0 );
return( n1 ) ;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.240.174
推
11/22 09:42, , 1F
11/22 09:42, 1F
噓
11/22 16:39, , 2F
11/22 16:39, 2F
→
11/22 16:39, , 3F
11/22 16:39, 3F
→
11/22 21:41, , 4F
11/22 21:41, 4F
討論串 (同標題文章)