改错题
1. 下列给定的程序中,函数proc()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
请修改函数proc()中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<math.h>
void proc(int num,int*b,int*c)
{
int i,j,d,y;
for(i=3;i<=hum/2;i=i+2)
//****found****
{ y=0;
for(j=2;j<=sqrt((double)i);j++)
if(i%j==0)y=0;
if(y==1)
//****found****
{ d=i-num;
for(j=2;j<=sqrt((double)d);
j++)
if(d%j==0)y=0;
if(y==1)
{ *b=i;*c=d;}
}
}
}
void main()
{ int num,b,c;
do
{ printf("\nInput num:");
scanf("%d",&num);}
while(num%2);
proc(num,&b,&c);
printf("\n\n%d=%d+%d\n",num,b,c);
}
}
【正确答案】(1)错误:y=0;
正确:y=1;
(2)错误:d=i-num;
正确:d=num-i;
【答案解析】 由函数proc()可知,变量y是判断小于num/2的整数中是否存在素数的标志,y=1为找到所要的素数,其初始值应该为1,因此,“y=0;”应改为“y=1;”。变量num为两个素数之和,变量i和d为要求的两个素数,因此,“d=i-num;”应改为“d=num-i;”。