float型出错了,怎么改呀?
我有这样一个程序,如下:程序的用意在于,输入一个浮点数,比如0.07(0.01-----0.07),然后我要找出其中等于0.07(可任意换)的序列
序列为:
0.07=0.01+0.06
0.07=0.01+0.02+0.04
0.07=0.02+0.05
0.07=0.03+0.04
程序,有错,不知道在哪里,请高手解答下。
程序代码:#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int main()
{
double n,flag;
int m,j,k,t,r,i;
double *p;
double sum=0.00;
printf("请输入数字的个数:"); //比如说,你输入一个50,其构成的序列是(1----50)的递增序列,有50个数。
scanf("%d",&m); //输入这个数字
p=(double *)malloc(m*sizeof(double)); //动态分配一个空间.(如果用数组,则无法保证你可以任意输入数字的个数,因为是静态的了)
for (i=0,flag=0.01;i<m;i++) //
{
p[i]=flag;
flag=flag+0.01; //赋值语句
}
for (i=0;i<m;i++) //格式控制输出,每一行输出10个数。
{
if (i%9==0)
printf("\n");
printf("%-5.2lf",p[i]);
}
printf("\n");
printf("请输入这个序列的和:"); //输入你要的那个序列的和的值
scanf("%lf",&n); //输入这个值
for (i=0;i<m/4;i++) //说明:为什么是(i<m/4)?我推算,其比较次数不会超过m/4,如果写成i<m也行。(其实比较次数并没有m次,有多余操作)
{
if (p[i]>n) //判断第一个数是否大于了n值
exit(-1);
for (j=1;j<m;j++) //j代表的是所选定的待比较的数字的个数
{
for (t=i;t<j+i;t++) //我们把前j+i个数字的和存到sum里面,备用。
sum+=p[t];
if (sum<n) //如果sum已经大于n值了,退出当前循环。选定下一个关键码p[1],当前关键码是p[0]
{
for (k=j+i;k<m;k++) //因为前j+i(并不包括p[j+i])的和已经知道,只需要比较(j+i)到m之间是否有值与sum的和恒等于n即可
{
if((sum+p[k])!=n) //如果当前待比较的值与sum的和不等于n,则需比较下一个
continue;
printf("%-5.2lf=",n);
for (r=i;r<j+i;r++) //输出选出的值并把先前选定的序列一起输出即为我们要的序列
printf("%-5.2lf+",p[r]);
printf("%-5.2lf",p[k]);
printf("\n");
}
}
sum=0.00; //再次清零
}
printf("\n");
}
getch();
return 0;
}
/*
说明:
比如,我现在有一个1----7的序列,分别为1 2 3 4 5 6 7 ,现在,我要让程序找出其中为7的组合
7=1+6
7=1+2+4
7=2+5
7=3+4
此时,我用个指针i和一个标志j。当前i指向2,j是3(表示从2开始的连续3个数是已经选定的)我们只需要从数字5这个位置往后开始判断,找到一个数,能与其和恒等于7即可
*/









