C语言答案解析 下载本文

用作测试题目:

例:下面程序求[3,750]之间同构数之和, 请将程序补充完整, 并给出正确结果,填入相应窗口。同构数是:一自然数平方的末几位与该数相同时,称此数为同构数,例如:5*5=25,则称5为自同构数。 分析:

(1)当n为1位数时,要将平方s的末位取出与n比较,需对10取余; (2)当n为2位数时,要将平方s的末位取出与n比较,需对100取余; (3)当n为3位数时,要将平方s的末位取出与n比较,需对1000取余; 2位数取余(n),3位数取余(n0),4位数取余(n00)

#include main() {

long sum,n,m,s,k; sum=0;

for (n=3;n<=750;n++) {

if (n<10) k=10; else

if (n<100) k=100; else k=1000; s=n*n; if(s%k==n)

sum=sum+n; }

printf(\}

输出:The sum = 1113

例:下面的程序是求500以内的所有的素数之和。请修改程序中的错误,使它

能得出正确的结果,并给出正确结果。

#include #include int prime(int n) { int yes, i;

if(n<=1) {return 1;} //改为:if(n<=1) {return 0;} yes=1;

for(i=2; i<=sqrt(n); i++) if(n%i==0){ yes=0; break;} return 1; //改为 return yes; } main()

{ int sum=0, i; for(i=2;i<=500; i++)

if(prime(i)) {printf(\

printf(\}

输出:21536

例:下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1))

请改正程序中的错误,并运行改正后的程序。当从键盘输入70时,给出程序运行的正确结果(按四舍五入保留6位小数)。输出:1.485915

#include double fun(int m) { double t=1.0; int i=2;

for(i=2; i<=m; i++)

t+=1.0/i*(i+1); //改为:t+=1.0/(i*(i+1));

return ; //改为:return t; } main() { int m;

printf(\请输入一个整数: \scanf(\

printf(\结果是: %lf \\n\fun(m)); //改为printf(“\\n 结果是:%.6lf\\n”,fun(m)); }

例:下面程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13或17整除的自然数之和。请改正程序中的错误,并运行正确的程序。当从键盘输入500时,给出程序运行的正确结果。输出:4622

#include int fun(int k) { int m=0, mc=0, j;

while((k>=2) || mc<10) //改为:while(k>=2 && mc<10) { if ((k==0) && (k==0)) //改为:if ((k==0) || (k==0)) { m=m+k; mc++; } k--; } return m; } main() { int k;

printf(\请输入整数:\ scanf(\

printf(\结果是: %d\\n\}

例:下列程序的功能是:求出以下分数序列的前30项之和,

2/1,3/2,5/3,8/5,13/8,21/13,……请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。 #include #include main() { int k; double s;

long a,b,c; //改为:double a,b,c; clrscr();

s=0.0; a=2; b=1;

for(k=1;k<=30;k++) { //添加括号 s=s+a/b;

c=a; a=a+b; b=c; }

printf(\结果: %lf\\n\ }

输出:48.840601

//改为:printf(\结果: %.6lf\\n\