恳求一个C语言程序改错

llh1186 2009-04-11 10:16:35
下面是一个随机数方面的程序,各部分我已注明,请大家给与指导,不胜感激。(我估计是错在数组那个地方,请大家用用心了。)拜谢!!!!!!!!!!!!!!!!
#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
double doublemod(double a,double b)
{
int i;
double value;
i=value;
i=(int)(a/b);
value=a-i*b;
return value;
}....................................//随机数的算法
double *edisrndsq(double *r,int n,double b,double c,double m)
{
double *value,*vp;
int i;
if(n>=1)
{
value=(double *)malloc(n*sizeof(double));
for(i=0,vp=value;i<n;i++,vp++)
{
*r=doublemod(*r,b);
*r=doublemod((*r)*m+c,b);
*vp=*r/b;
}
return (value);
}
return 0;
}。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//产生随机数的函数。
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//互相赋值
void main()
{
double min,max,All;
int site[5];
double b,c,m,n;
double i,x,d;
double *valsq,*vp,r;
r=(double)time(NULL);
n=5;
b=65536.0;
c=13849.0;
m=2053.0;
valsq=edisrndsq(&r,n,b,c,m);
printf("\nThe random number is:\n");
for(i=1,vp=valsq;i<n+1;i++,vp++)。。。。。//问题就出在这,我是想将产生的随机数跟0。5进行比较,然后给数组site[]赋值。最后好求出数组site[]最大值和最小值,但是我对数组不是很熟悉。
{
printf("%5.21f\n",*vp);
if(i<=0.5)
site[i]=site[i-1]-1;
else site[i]=site[i-1]+1;
}
}
for(x=4;x>0;x--)。。。。。。。。。。。。。。。。。。。。。。。。。//这个FOR是求最小值
{
if(site[x]<site[x-1]) swap(&site[x],&site[x-1]);
}
min=site[0];
printf("\nmin=%d\n",min);
for(d=0;d<4;d++).............................................//这个FOR是求最大值。
{
if(site[d]>site[d+1]) swap(&site[d],&site[d+1]);
}
max=site[4];
printf("\nmax=%d\n",max);
All=abs(min)+max;。。。。。。。。。。。。。。。。。。。。。。。。。。。//这是求最小值的绝对值和最大值的和。
printf("\nAll=%d\n",All);
}
...全文
189 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
llh1186 2009-04-12
  • 打赏
  • 举报
回复
非常感谢大家的跟帖,分数有限不能一一给予,请谅解。
特别感谢6楼和3楼。
ziweixinghello 2009-04-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>

double doublemod(double a,double b)
{
int i;
double value;
i=(int)(a/b);
value=a-i*b;
return value;
}//随机数的算法

double *edisrndsq(double *r,int n,double b,double c,double m)
{
double *value,*vp;
int i;
if(n>=1)
{
value=(double *)malloc(n*sizeof(double));
for(i=0,vp=value;i <n;i++,vp++)
{
*r=doublemod(*r,b);
*r=doublemod((*r)*m+c,b);
*vp=*r/b;
}
return (value);
}
return 0;
}//产生随机数的函数。
void swap(double *a,double *b)
{
double temp;
temp=*a;
*a=*b;
*b=temp;
}//互相赋值
void main()
{
double min,max,All;
double site[5];
double b,c,m;
int i,x;
double *valsq,*vp,r;
r=(double)time(NULL);
int n=5;
b=65536.0;
c=13849.0;
m=2053.0;
valsq=edisrndsq(&r,n,b,c,m);
printf("\nThe random number is:\n");
for(i=0,vp=valsq;i <n;i++,vp++)//问题就出在这,我是想将产生的随机数跟0。5进行比较,然后给数组site[]赋值。最后好求出数组site[]最大值和最小值,但是我对数组不是很熟悉。
{
printf("%5.21f\n",*vp);
if(*vp <=0.5)
site[i]=*vp-1;
else
site[i]=*vp+1;
}

printf("\nThe number of the array after transform:\n");
for(i=0;i<n;i++)
printf("site[%d]:%9f\n",i,site[i]);

for(x=4;x>0;x--)//这个FOR是求最小值
{
if(site[x] <site[x-1]) swap(&site[x],&site[x-1]);
}
min=site[0];
printf("\nmin=%f\n",min);
max=site[4];
printf("\nmax=%f\n",max);
All=abs(min)+max;//这是求最小值的绝对值和最大值的和。
printf("\nAll=%f\n",All);
}

Cloud_drift 2009-04-11
  • 打赏
  • 举报
回复
呵呵,慢了慢了,问题差不多都是一样的,我比较好奇的是楼主为什么已经有随即数了,还要和0.5比较然后加减,把这部分功能添加到随机数函数里不是更好吗?

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>

double doublemod(double a,double b)
{
int i;
double value;
i=(int)(a/b);
value=a-i*b;
return value;
}//随机数的算法

double *edisrndsq(double *r,int n,double b,double c,double m)
{
double *value,*vp;
int i;
if(n>=1)
{
value=(double *)malloc(n*sizeof(double));
for(i=0,vp=value;i <n;i++,vp++)
{
*r=doublemod(*r,b);
*r=doublemod((*r)*m+c,b);
*vp=*r/b;
}
return (value);
}
return 0;
}//产生随机数的函数。
void swap(double *a,double *b)
{
double temp;
temp=*a;
*a=*b;
*b=temp;
}//互相赋值
void main()
{
double min,max,All;
double site[5];
double b,c,m;
int i,x;
double *valsq,*vp,r;
r=(double)time(NULL);
int n=5;
b=65536.0;
c=13849.0;
m=2053.0;
valsq=edisrndsq(&r,n,b,c,m);
printf("\nThe random number is:\n");
for(i=0,vp=valsq;i <n;i++,vp++)//问题就出在这,我是想将产生的随机数跟0。5进行比较,然后给数组site[]赋值。最后好求出数组site[]最大值和最小值,但是我对数组不是很熟悉。
{
printf("%5.21f\n",*vp);
if(*vp <=0.5)
site[i]=*vp-1;
else
site[i]=*vp+1;
}

printf("\nThe number of the array after transform:\n");
for(i=0;i<n;i++)
printf("site[%d]:%9f\n",i,site[i]);

for(x=4;x>0;x--)//这个FOR是求最小值
{
if(site[x] <site[x-1]) swap(&site[x],&site[x-1]);
}
min=site[0];
printf("\nmin=%f\n",min);
max=site[4];
printf("\nmax=%f\n",max);
All=abs(min)+max;//这是求最小值的绝对值和最大值的和。
printf("\nAll=%f\n",All);
}
donle1000 2009-04-11
  • 打赏
  • 举报
回复
我不清楚你的site数组到底是要存放什么,但是有一点就是你的site没有初始化,后面对它里面的元素的操作产生的都是随机值.
还有你的edisrndsq函数写的很无语,你并没有事先分配一段连续的内存空间,而是先通过初始化一个指针,然后对指针的解引用进行赋值,再通过指针自加来实现给连续的内存空间赋值......最后返回首元素指针.......在我来看这样做是极其不安全的


#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
double doublemod(double a,double b)
{
int i;
double value;
// i=value;
i=(int)(a/b);
value=a-i*b;
return value;
}//....................................//随机数的算法
double *edisrndsq(double *r,int n,double b,double c,double m)
{
double *value,*vp;
int i;
if(n>=1)
{
value=(double *)malloc(n*sizeof(double));
for(i=0,vp = value;i <n;i++,vp++)
{
*r=doublemod(*r,b);
*r=doublemod((*r)*m+c,b);
*vp=*r/b;
}
return (value);
}
return 0;
}//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//产生随机数的函数。
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//互相赋值
void main()
{
double max, min, All;
int site[5]; //不初始化吗?
double b,c,m;
double *valsq,*vp,r;
r=(double)time(NULL);
int n=5, i, x, d;
b=65536.0;
c=13849.0;
m=2053.0;
valsq=edisrndsq(&r,n,b,c,m);
printf("\nThe random number is:\n");
for(i=1,vp=valsq;i <n+1;i++,vp++)//。。。。。//问题就出在这,我是想将产生的随机数跟0。5进行比较,然后给数组site[]赋值。最后好求出数组site[]最大值和最小值,但是我对数组不是很熟悉。
{
printf("%5.21f\n",*vp);
if(*vp <=0.5)
site[i]=site[i-1]-1; //没有初始化,这里的值???
else site[i]=site[i-1]+1;
}
for(x=4;x>0;x--)//。。。。。。。。。。。。。。。。。。。。。。。。。//这个FOR是求最小值
{
if(site[x] <site[x-1]) swap(&site[x],&site[x-1]);
printf("%lf ", site[x]); //输出类型
}
min=site[0];
printf("\nmin=%lf\n",min);
for(d=0;d <4;d++)//.............................................//这个FOR是求最大值。
{
if(site[d]>site[d+1]) swap(&site[d],&site[d+1]);
}
max=site[4];
printf("\nmax=%lf\n",max);
All=abs(min)+max;//。。。。。。。。。。。。。。。。。。。。。。。。。。。//这是求最小值的绝对值和最大值的和。
printf("\nAll=%lf\n",All);
}
blems 2009-04-11
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
double doublemod(double a,double b)
{
int i;
double value;
i=value; //????
i=(int)(a/b);
value=a-i*b;
return value;
}//....................................//随机数的算法
double *edisrndsq(double *r,int n,double b,double c,double m)
{
double *value,*vp;
int i;
if(n>=1)
{
value=(double *)malloc(n*sizeof(double));
for(i=0,vp=value;i <n;i++,vp++)
{
*r=doublemod(*r,b);
*r=doublemod((*r)*m+c,b);
*vp=*r/b;
}
return (value);
}
return 0;
}//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//产生随机数的函数。
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}//。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。//互相赋值
void main()
{
double min,max,All;
int site[5],i,x; //<-----------将i,x的定义改为int,数组下标不能使用浮点型
double b,c,m,n;
double d;
double *valsq,*vp,r;
r=(double)time(NULL);
n=5;
b=65536.0;
c=13849.0;
m=2053.0;
valsq=edisrndsq(&r,n,b,c,m);
printf("\nThe random number is:\n");
for(i=1,vp=valsq;i <n+1;i++,vp++)//。。。。。//问题就出在这,我是想将产生的随机数跟0。5进行比较,然后给数组site[]赋值。最后好求出数组site[]最大值和最小值,但是我对数组不是很熟悉。
{
printf("%5.21f\n",*vp);
if(*vp <=0.5) //<------------ i<0.5 ?????*vp才是随机数啊
site[i]=site[i-1]-1;
else site[i]=site[i-1]+1;
}

for(x=4;x>0;x--)//。。。。。。。。。。。。。。。。。。。。。。。。。//这个FOR是求最小值
{
if(site[x] <site[x-1])
swap(&site[x],&site[x-1]);
}
min=site[0];
printf("\nmin=%d\n",min); //doule定义,为什么要用整形输出?如果输出double可用%lf
for(x=0;x <4;x++)//.............................................//这个FOR是求最大值。
{
if(site[x]>site[x+1]) swap(&site[x],&site[x+1]);
}
max=site[4];
printf("\nmax=%d\n",max); //doule定义,为什么要用整形输出?如果输出double可用%lf
All=abs(min)+max;//。。。。。。。。。。。。。。。。。。。。。。。。。。。//这是求最小值的绝对值和最大值的和。
printf("\nAll=%d\n",All); //doule定义,为什么要用整形输出?如果输出double可用%lf

}
rjianfeili 2009-04-11
  • 打赏
  • 举报
回复
double doublemod(double a,double b)
{
int i;
double value;
i=value; //这里刚定义 i value 你怎么把value 赋值给 i 了?
ylywyn136 2009-04-11
  • 打赏
  • 举报
回复
double i,..site[i]=site[i-1]-1;
改成:int i;
数组的下标不能用double
gao125210 2009-04-11
  • 打赏
  • 举报
回复
up
ylywyn136 2009-04-11
  • 打赏
  • 举报
回复
占个位,帮你看看

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧