資源描述:
《c語(yǔ)言竟賽試題》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、C語(yǔ)言競(jìng)賽試題1.分?jǐn)?shù)變小數(shù)寫(xiě)出一個(gè)程序,接受一個(gè)以N/D的形式輸入的分?jǐn)?shù),其中N為分子,D為分母,輸出它的小數(shù)形式。假如它的小數(shù)形式存在循環(huán)節(jié),要將其用括號(hào)括起來(lái)。例如:1/3=.00000...表示為.(3),又如41/333=.123123123...表示為.(123)。一些轉(zhuǎn)化的例子:1/3=.(3)22/5=4.41/7=.(142857)3/8=.37545/46=.803(571428)用上面的分?jǐn)?shù)和11/59來(lái)測(cè)試你的程序。運(yùn)行舉例:ENTERN,D:171/7=.(142857)本題中,0<=
2、N<=65535,0<=D<=65535,設(shè)運(yùn)算結(jié)果小數(shù)點(diǎn)后最多保留100位。(1)解題思路本題可以模擬手算除法的形式,重復(fù)地進(jìn)行求商和余數(shù)的運(yùn)算,直到余數(shù)為0或出現(xiàn)循環(huán)節(jié)為止。(2)參考程序ConstMax=100;(小數(shù)點(diǎn)后最大位數(shù))VarLeft,Digit:Array[0..Max]of視頻教程'>word;(記錄每次的余數(shù)和商)n,d:Word;q,Top:Word;(q為循環(huán)字節(jié)的位置)ProcedureInit;BeginWrite('ENTERN,D:');Readln(n,d);End;Pro
3、cedureCacl;(計(jì)算)Vari:Word;BeginDigit[0]:=ncss.shtml'target='_blank'title='div視頻教程'>divd;Left[0]:=nModd;Top:=0;q:=0;(初始化商和余數(shù))WhileLeft[Top]<>0Do(余數(shù)不為0則循環(huán))BeginInc(Top);Digit[Top]:=(Left[Top-1]*10)Divd;Left[Top]:=(Left[Top-1]*10)Modd;Fori:=0ToTop-1DoIfLeft[Top]
4、=Left[i]ThenBeginq:=i+1;Exit;(假如出現(xiàn)循環(huán)節(jié)則退出)End;End;End;ProcedurePrint;Vari:Word;BeginWrite(n,'',d,'=');If(Digit[0]<>0ThenWrite(Digit[0]);IfTop>0ThenWrite('.');For(i:=1ToTopDoBeginIfi=qThenWrite('(');Write(Digit[i]);End;Ifq>0ThenWrite(')');Writein;End;BeginIni
5、t;{讀入數(shù)據(jù)}Cacl;{計(jì)算}Print;;{打印結(jié)果}End.(3)運(yùn)行結(jié)果ENTERN,D:115911/59=.(1864406779661016949152542372881355932203389830508474576271)附:改寫(xiě)后的C源程序如下:#include#defineMax100/*小數(shù)點(diǎn)后最大位數(shù)*/intLeft[Max];intDigit[Max];/*記錄每次的余數(shù)和商*/intn,d,q,Top;/*q為循環(huán)字節(jié)的位置*/voidInit(void){
6、printf("ENTERN,D:"); scanf("%d%d",&n,&d);}voidCacl(void)/*計(jì)算*/{ inti=0,j=1; Digit[0]=n/d;/*求商*/ Left[0]=n%d;/*求余數(shù)*/ Top=0; q=0;/*初始化商和余數(shù)*/ while(Left[Top]!=0&&j==1&&Top<100) { Top++; /*取下一個(gè)數(shù)組元素*/ Digit[Top]=(Left[Top-1]*10)/d; /*求商*/ Left[Top]
7、=(int)(Left[Top-1]*10)%d; /*求余數(shù)*/ for(i=0;i0)printf("
8、."); for(i=1;i<=Top;i++) { if(i==q)printf("("); printf("%d",Digit[i]); } if(q>0)printf(")");}voidmain(void){ Init(); /*讀入數(shù)據(jù)*/ Cacl();/*計(jì)算*/ Print();/*打印結(jié)果*/2.質(zhì)數(shù)豎式下面的豎式是一個(gè)乘法運(yùn)算問(wèn)題,它的每個(gè)*號(hào)可以代入