我先说思路,你之后再看下面我写的代码,效果可能比较好。-------------思路------------------------若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni=1,则数列结束。这个用个函数判断,比如定义个contrast(),再在函数内用if(){}else{}做判断。考虑到你要用void hailstones(int x[],int n0,int *maxp,int *minp)那么就可以在void hailstones(int x[],int n0,int *maxp,int *minp)内部搞一个函数嵌套,把contrast()内嵌到void hailstones(int x[],int n0,int *maxp,int *minp)中,而x[]数组,则为了方便,你可以在contrast()的形参表中放一个int [],即contrast(int x[],)又由于要键盘输入数据值n0,则可以用contrast(int a[],int n0)于是函数建立完毕,为:contrast(int x[],int n0);【需要注意的是函数接受中要接收的是数组名】----------------------代码如下:----------------------------------------#include#include#includeint contrast(int a[],int n0);void hailstones(int x[],int n0,int *maxp,int *minp);#define Max 100int main(){ int n0; int a[Max],*Maxp,*Minp; printf("请输入n0的值:"); scanf("%d",&n0); printf("\n--------\n结果为:\n--------\n"); hailstones(a,n0,Maxp,Minp); return 0;}int contrast(int x[],int n0)//计算产生序列{ int i;//i是因为i专门做数组的下标 x[0]=n0; for(i=0;x[i]!=1;i++) { if(x[i]%2==0) x[i+1]=x[i]/2; if(x[i]%2==1) x[i+1]=3*x[i]+1; } x[i]=1; return (i+1);//之所以要加1(i+1),是因为n0也是一个数}void hailstones(int x[],int n0,int *maxp,int *minp){ int i; //i用来计算x[]的下标,也就是知道产生序列数量 int Maxcount=0,Mincount=0,j=0;/*用作循环,和i进行比较,直到j=i为止,把所有产生序列输出*/ maxp=&Maxcount,minp=&Mincount; i=contrast(x,n0);//计算产生序列的数量 while(j!=i) { if(n0>x[j]) Mincount++; if(n0