[作業] 請教一下

看板b93902HW作者 (大椎)時間18年前 (2005/11/22 01:05), 編輯推噓0(112)
留言4則, 3人參與, 最新討論串1/2 (看更多)
我的作業出了一些問題 在此附上我的程式碼 若把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
去C_and_CPP 或 Codejob[問一下吧
11/22 09:42, 1F

11/22 16:39, , 2F
直接貼code又沒註解誰會想指點你...也不講個做法
11/22 16:39, 2F

11/22 16:39, , 3F
被噓了砍掉重po也不會變成有人理你,ok?
11/22 16:39, 3F

11/22 21:41, , 4F
抱歉,我的確給的太籠統了. 請問您說的版位置在哪裡?
11/22 21:41, 4F
文章代碼(AID): #13WVvhLi (b93902HW)
討論串 (同標題文章)
文章代碼(AID): #13WVvhLi (b93902HW)