实在是没能找出出错的地方,程序本身无语法错误,请大家帮帮忙。
/*问题:统计并输出100-999之间所有的"水仙花"数及其个数。"水仙花数"是指一个3位数,其各个位上数字的立方之和等于该数本身。如:153
编程要求:
①自定义函数,原型为int sxh(int n,int x[]),
计算x数组中所有元素值的立方和是否等于n的值,
如果相等,说明n是"水仙花数",则返回1,否则返回0。(20分)
②自定义函数,原型为void resolven(int n,int x[]),
将整数n值各个位上的数字,分别存储到数组x的各个元素中。假设n值为153,分解为1、5、3,分别存储到元素x[0]、x[1]、x[2]中,分解结构通过数组返回到主调函数。(20分)
③主函数中,定义数组及有关变量:int a[3];,通过单循环控制100-999的所有数;
调用函数resolven(k,a)将k的各位值分解到数组a的元素中;
调用函数sxh(k,a)判断任一正整数k是否"水仙花"数,若是则统计其个数,并输出该"水仙花"数(输出6位宽度)。(50分)
④最后输出统计结果,输出单独占一行。(10分)*/
#include"stdio.h"
#include"stdlib.h"
int sxh(int n)
{
int a,b,c;
a=n/100;b=(n/10)%10;c=n%100;
if(a*a*a+b*b*b+c*c*c==n) return 1;
else return 0;
}
void main()
{
int w,k,gs=0;
FILE *fp;
if((fp=fopen("C201606084235.dat","wb+"))==NULL)
{
printf("文件建立失败!");
exit(0);
}
for(k=100;k<=999;k++)
{
if(sxh(k))
{
fwrite(&k,sizeof(int),1,fp);
}
}
rewind(fp);
while(fread(&w,sizeof(int),1,fp))
{
gs++;
printf("%6d",w);
}
printf("\n总个数:%d\n",gs);
fclose(fp);
}