二、程序修改题1. 给定程序中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:642。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
[试题源程序]
#include<stdio.h>
/************found************/
void fun(long s,long t)
{
long s1=10;
s/=10;
*t=s%10;
/************found************/
while(s<0)
{
s=s/100;
*t=s%10*s1+ *t;
s1=s1*10;
}
}
mein()
{
long s,t;
printf("\nPlease enter s:");
scanf("%1d",&s);
fun(s,&t);
printf("The result is:%1d\n",t);
}
(1)错误:void fun(long s,long t)
正确:void fun(long s,long *t)
(2)错误:while(s<0)
正确:while(s>0)
[解析] 错误1:在函数fun体中,t是一个指针型变量,由C的基础知识我们可以知道,定义形参时也应定义指针。
错误2:由题目可以知道,此处条件应该s>0,所以这里应改为:while(s>0)。
三、程序设计题1. 请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。
例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。
注意:要求n的值大于2但不大于100。部分源程序给出如下。清勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
[试题源程序]
#include<math.h>
#include<stdio.h>
double fun(int n)
{
}
main()
{
int n;
double sum;
printf("\n\nInput n:");
scanf("%d",&n);
sum=fun(n);
printf("\n\nsum=%f\n\n",sum);
}
double fun(int n)
{
int i,j=0;
double s=0;
for(i=3;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j == i)
s=s+sqrt(i);
}
return s;
}
[解析] 本题是计算并输出3到n之间(含3和n)所有素数的平方根之和。要求能掌握sqrt()函数的用法。