![](https://lstatic.shangxueba.com/sxbzda/h5/images/m_q_title.png)
请教:2005年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷第1大题第3小题如何解答?
【题目描述】
阅读以下函数说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
函数int funl (int m,int n)的功能是:计算并返回正整数m和n的最大公约数。
【函数2.1】
int funl (iht m,int n){
while((1)) {
if(m>n) m=m-n;
else n=n-m;
}
(2);
}
【函数2.2说明】
函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字字符形成一个十进制整数(最多8位)。
例如,若字符串str的值为“f3g8d5.ji2e3p12fkp",则函数返回值为3852312。
【函数2.2】
long fun2 (char*str)
{ int i=0;
long k=0;
char*P=str;
while (*p!='\0'&& (3)) {
if (*p>='0'&&*p<='9') {
k=(4)+*p-'0';
++i;
}
(5);
}
return k;
}
【我提交的答案】:
【参考答案分析】:
(1)m!=n,及其等价形式(2)return m,或return n(3)i<8,或i<=7,及其等价形式(4) k*10(5)p++,或++p,或p+=1,或p=p+1 解析:由函数2.1的说明可知,该函数的功能是计算并返回正整数m和n的最大公约数。由于函数体中只有变量m和n,因此空(1)所在的循环条件只
能是关于m和n关系的表达式,且最大公约数保存在m或n中。同时从while的循环体可知,反复从较大者中减去较小者后,最后m和n的值会相等,
因此循环条件为m!=n或其等价形式。
函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str仕中最多8位数字字符形成一个十进制整数。从函数的功能描述和函
数体语句可知,变量i是用于计算得到的数字字符个数的,由于i的初始值为0,因此空(1)处应填“i<8”或其等价形式。8位长度的十进制整数
a1a2a3a4a5a6a7a8表示为:
a1a2a3a4a5a6a7a8=a1*107+a2*106+a3*105+a4*104+a5*103+a6*102+a7*101+a8
=(((((((0*10+a1)*10+a2)*10+a3)*10+a4)*10+a5)*10+a6)*10+a7)*10+a8
因此有:k0=0,ki=ki-1*10+ai (1≤i≤8),k8就是计算结果。
(4)、(5)答案如何来的还是不懂
![](https://lstatic.shangxueba.com/sxbzda/h5/images/tips_org.png)