欢迎来到天天文库
浏览记录
ID:40523714
大小:16.66 KB
页数:6页
时间:2019-08-04
《c语言竟赛试题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言竞赛试题1.分数变小数写出一个程序,接受一个以N/D的形式输入的分数,其中N为分子,D为分母,输出它的小数形式。假如它的小数形式存在循环节,要将其用括号括起来。例如:1/3=.00000...表示为.(3),又如41/333=.123123123...表示为.(123)。一些转化的例子:1/3=.(3)22/5=4.41/7=.(142857)3/8=.37545/46=.803(571428)用上面的分数和11/59来测试你的程序。运行举例:ENTERN,D:171/7=.(142857)本题中,0<=
2、N<=65535,0<=D<=65535,设运算结果小数点后最多保留100位。(1)解题思路本题可以模拟手算除法的形式,重复地进行求商和余数的运算,直到余数为0或出现循环节为止。(2)参考程序ConstMax=100;(小数点后最大位数)VarLeft,Digit:Array[0..Max]of视频教程'>word;(记录每次的余数和商)n,d:Word;q,Top:Word;(q为循环字节的位置)ProcedureInit;BeginWrite('ENTERN,D:');Readln(n,d);End;Pro
3、cedureCacl;(计算)Vari:Word;BeginDigit[0]:=ncss.shtml'target='_blank'title='div视频教程'>divd;Left[0]:=nModd;Top:=0;q:=0;(初始化商和余数)WhileLeft[Top]<>0Do(余数不为0则循环)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;(假如出现循环节则退出)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;{读入数据}Cacl;{计算}Print;;{打印结果}End.(3)运行结果ENTERN,D:115911/59=.(1864406779661016949152542372881355932203389830508474576271)附:改写后的C源程序如下:#include#defineMax100/*小数点后最大位数*/intLeft[Max];intDigit[Max];/*记录每次的余数和商*/intn,d,q,Top;/*q为循环字节的位置*/voidInit(void){
6、printf("ENTERN,D:"); scanf("%d%d",&n,&d);}voidCacl(void)/*计算*/{ inti=0,j=1; Digit[0]=n/d;/*求商*/ Left[0]=n%d;/*求余数*/ Top=0; q=0;/*初始化商和余数*/ while(Left[Top]!=0&&j==1&&Top<100) { Top++; /*取下一个数组元素*/ Digit[Top]=(Left[Top-1]*10)/d; /*求商*/ Left[Top]
7、=(int)(Left[Top-1]*10)%d; /*求余数*/ 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(); /*读入数据*/ Cacl();/*计算*/ Print();/*打印结果*/2.质数竖式下面的竖式是一个乘法运算问题,它的每个*号可以代入
此文档下载收益归作者所有