第48套:
给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对 应的数值,计算出这些数值的累加和作为函数值返回。
 例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
int fun(char *s) 
{ int sum=0; 
while(*s) { 
if( isdigit(*s) ) sum+= *s- __1__ ; 
__2__; 
} 
return __3__ ; 
} 
main() 
{ char s[81]; int n; 
printf("\nEnter a string:\n\n"); gets(s); 
n=fun(s); 
printf("\nThe result is: %d\n\n",n); 
} 
解题思路:
 本题是把字符串中是数字字符转换成对应的数值并进行累加。
 第一处:'0’字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填:48。
 第二处:到字符串下一个位置,所以应填:s++。
 第三处:返回累加和sum,所以应填:sum。
给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或 17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。
 请改正程序中的错误,使程序能输出正确的结果。
 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
int fun( int k ) 
{ int m=0, mc=0, j ; 
while ((k >= 2) && (mc < 10)) 
{ 
if ((k%13 = 0) || (k%17 = 0)) 
{ m = m+ k; mc++; } 
k--; 
} 
return m; 
____ 
main ( ) 
{ 
printf("%d\n", fun (500)); 
} 
解题思路:
 第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。
 第二处:经过编译可知,"{“和”}“没有配对,所以在横线处加上”}"。
编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。
 例如若n为1000时,程序输出应为:s = 153.909064。
 注意: 部分源程序在文件PROG1.C文件中。
 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
 给定源程序:
#include <math.h> 
#include <stdio.h> 
double fun( int n) 
{ 
} 
main() /* 主函数 */ 
{ 
printf("s =%f\n", fun ( 1000) ); 
NONO(); 
} 
解题思路:
 本题是求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。
 参考答案:
double fun( int n) 
{ 
double sum=0.0; 
int i; 
for(i=21; i<=n; i++) 
if((i % 3==0) && (i % 7==0)) sum+=i; 
return sqrt(sum) ; 
}