阅读下列程序说明和C代码,填入(n)处。【说明】 幼儿园有n(<20)个孩子围成一圈分糖果。老师先随机

13 查阅

阅读下列程序说明和C代码,填入(n)处。

【说明】

幼儿园有n(<20)个孩子围成一圈分糖果。老师先随机地发给每个孩子若干颗糖果,

然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友。如共有8个孩子,则第1个将原有的一半分给第2个,第2个将原有的一半分给第3个,……,第8个将原有的一半分给第1个,这样的平分动作同时进行。若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果数变成偶数。小孩人数和每个小孩的初始糖果数由键盘输入。下面的程序可求出经过多少次上述这样的调整,使每个孩子手中的糖果—样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。

【程序】

include <stdio.h>

define N 20

int allEqual (int a[ ],int n) /*检查每个孩子手中的糖果是否一样多*/

{ iht i;

for(i=1; i<n; i++)

if(a[O]!=a[i]) return O;

return 1;

}

int a[N], b[N];

void main ( )

{ int i, n, addk, loopc;

printf("Enter n((20)\n"); scanf("%d", &n);

printf ("Enter data\n");

for( i=O; i(n; i++) scanf("%d", &a[i]);

addk=O;(1);

while (2){ /*平分循环*/

loopc++;

for ( i=O; i ( n; i++){ /*为一次调整作准备*/

if(a[i]%2) { a[i]++;(3); }

if (i<n-1) b[i+1]=a[i]/2; else(4)

a[i]/=2;

}

for(i=O; i<n; i++)(5); /*完成一次调整*/

}

printf("调整%d次\n", loopc); printf("每个孩子有%d颗糖果\n", a[0]);

printf("调整过程中新增发%d颗糖果。\n", addk); }

参考答案:

(1)loopc=0 //loopc设置初值为0(2)! a11Equal(a n) 或者 a11Equal (a n)==0 //判断奈件a11Equal (a n)是否为假(3)addk++或者addk=addk+1 //addk的值增加1(4)b[0]=a[i]/2 //如果条件不满足b[0]的值是a[i]/2(5)a[i]+=b[i]或者a[i]=a[i]+b[i] //a[i]增加b[i](1)loopc=0 //loopc设置初值为0(2)! a11Equal(a, n

软考初级