看板 b93902HW 關於我們 聯絡資訊
我的作業出了一些問題 在此附上我的程式碼 若把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
loveayux:去C_and_CPP 或 Codejob[問一下吧 11/22 09:42
greydust:直接貼code又沒註解誰會想指點你...也不講個做法 11/22 16:39
greydust:被噓了砍掉重po也不會變成有人理你,ok? 11/22 16:39
robenten:抱歉,我的確給的太籠統了. 請問您說的版位置在哪裡? 11/22 21:41