第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) ;
}