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即可 */