问题 问答题

【函数2.1说明】
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
【函数2.1】
Fun1 (int n)

int i;
for(i=2;i<=n;i++)

while ( (1) )

if (n%i==0)

printf("%d*",i);
(2) ;

else
break;


printf("%d",\n);

【函数2.2说明】
下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第 3、4、5只猴子都是这样做的,问海滩上原来最少有多少个猴子
【函数2.2】
main()

int i,m,j,k,count;
for(i=4;i<10000;i+=4)

count=0;
(3) ;
for(k=0;k<5;k++)   (4) ;
i=j;
if(j%4==0)
(5) ;
else
break;

i=m;
if(count==4)

printf("%d\n",count);
break;


答案

参考答案:(1)n!=i (2)n=n/i (3)m=i
(4)j=i/4*5+1 (5)count++

解析:

[分析]:
本题考查C语言中正整数分解质因数算法和猴子分桃算法的实现。
在程序2.1中,要求将一个正整数分解质因数。我们先来了解一下质因数的概念,一个自然数的因数中,为质数的因数叫做这个数的质因数。把一个合数,用质因数相乘的形式表示出来,叫做分解质因数。如90=2*3*3*5,其中2,3,5都是质数。在对数n进行分解质因数时,应先找到一个最小的质数i,然后按下述步骤完成:
(1)判断这个质数i是否等于n,如果相等,则说明分解质因数的过程已经结束,打印出结果即可。
(2)如果n≠i,但n能被i整除,则i是n的质因数,应打印出i的值,并用n除以 i的商,作为新的正整数n。
(3)如果n不能被i整除,则用i+1作为i的值,重复执行第(1)步。
通过代码我们已经知道了最小的质数为2,第(1)空是循环的判断条件,结合我们上面的分析,应该是判断质数i是否等于n,因此,此空答案为n!=i。
第(2)空在条件判断语句下,条件n%i==0成立,说明n能被i整除,根据分析,应打印出i的值,并用n除以i的商,作为新的正整数n。代码中已经实现了对i的输出,第(2)空的任务是用n除以i的商,作为新的正整数n,因此,答案为n=n/i。
在程序2.2中,要求我们求出原来海滩上的桃子数,这个数的特点是除以5余1,且减去它的商和余数后再除以5又余1,一直这样下去,直到最后一次。要求这样一个有特点的数,我们可以在一个较大的范围里编程去找具有这种性质的数。结合代码我们知道,程序设计是从4到10000这个范围里去找具有这种特征的数的基数。
第(3)空所在位置是第一层循环下面,应该是给变量赋初值阶段,结合后面的程序,可以发现m是用来临时存放当前求的基数乙因此,此空答案为m=i。
第(4)空在第二层循环下面,这个循环的作用是利用当前的基数i来求桃子数,那么求解的过程肯定是分桃过程的逆向过程。即此空的答案为i=i/4*5+1。
第(5)空在条件判断语句下面,如果条件成立,则执行此语句。我们接着看下面的程序,发现程序中有语句if(count==4),而在程序中一直没有出现变量count的值改变的语句,而它的初值是0,因此,此空肯定用来改变count的值的,再结合猴子分桃的特性,可以得到此空的答案为count++。

填空题
判断题