![]() |
#2
yxb00012009-09-29 23:22
上述问题运用类似的方法解为什么前一部份答案正确,而后半部份却时正时错?
#include<iostream.h> #include<stdlib.h> int a[30]={2,0,6,23,1,3,41,0,5,6,0,99,11,21,4,33,22,0,12,7,5,9,1,8,67,0,9,3,6,23}; int *p,i,j=0,**nn,**dd; int **y,*bb; int k=0; int r,f,g=0; int main() { y = (int **)calloc(30,sizeof(int *)); nn=(int **)calloc(30,sizeof(int*)); dd=(int **)calloc(30,sizeof(int*)); bb=(int *)calloc(1,sizeof(int)); p=&a[0]; for(i=0;i<20;i++) { if(*(p+i)!=0) { *(y+j)=p+i; cout<<**(y+j)<<" "; j++; } } cout<<"\n";//数组a非0元素的指针数组**y,元素j for(i=0;i<j-2;i++) { if((**(y+i)*3)>**(y+i+2)) { *(nn+k)=*(y+i); cout<<**(nn+k)<<" "; k++; } } cout<<"\n"; //符合条件**(y+i)*3)>**(y+i+2)的新指针数组 //求指针数组**nn中2相邻元素指向的数组a的相对应元素间非0的最小值,并以数组表示。 for(i=0;i<k-1;i++) { for(r=0;r<*(nn+i+1)-*(nn+i);r++) { if(*(*(nn+i)+r+1)!=0 && *(*(nn+i)+r)!=0) { if((*(nn+i)+r)>(*(nn+i)+r+1)) { bb=(*(nn+i)+r+1); } else bb=*(nn+i)+r; } }cout<<*bb<<endl; } return 0; } 运行结果如下: 2 6 23 1 3 41 5 6 99 11 21 4 33 22 12 7 //运行所得非零数组 6 23 3 41 6 99 11 21 33 22 //运行所得符合条件的数组 6 //条件数组元素6、23所对应的非零数组元素6、23间的最小值是6,正确 1 //条件数组元素23、3所对应的非零数组元素23、3间的最小值是1,正确 3 5 5 //条件数组元素6、99所对应的非零数组元素6、99间的最小值是6,而此处却莫名其妙的跑只5,不正确 99 //不正确 11 4 33 //不正确 Press any key to continue |
已知某数组a,假设其符合某条件的指针数组是**nn,求指针数组元素*(nn+i)与*(nn+i+1)所指向的数组a的元素值
**(nn+i)与**(nn+i+1)之间的最小的元素值。
#include<iostream.h>
#include<stdlib.h>
int a[30]={2,0,6,23,1,3,41,0,5,6,0,99,11,21,4,33,22,0,12,7,5,9,1,8,67,0,9,3,6,23};
int *p,i,j=0,**nn,**dd;
int **y,*bb;
int k=0;
int r,f,g=0;
int main()
{
y = (int **)calloc(30,sizeof(int *));
nn=(int **)calloc(30,sizeof(int*));
dd=(int **)calloc(30,sizeof(int*));
bb=(int *)calloc(1,sizeof(int));
p=&a[0];
for(i=0;i<20;i++)
{
if(*(p+i)!=0)
{
*(y+j)=p+i;
cout<<**(y+j)<<" ";
j++;
}
}
cout<<"\n";//数组a非0元素的指针数组**y,元素j
for(i=0;i<j-2;i++)
{
if((**(y+i)*3)>**(y+i+2))
{
*(nn+k)=*(y+i);
cout<<**(nn+k)<<" ";
k++;
}
}
cout<<"\n"; //符合条件**(y+i)*3)>**(y+i+2)的新指针数组
//求指针数组**nn中2相邻元素指向的数组a的相对应元素间非0的最小值,并以数组表示。
for(i=0;i<k-1;i++)
{
for(r=0;r<j-1;r++)
{
if(*(nn+i)<=*(y+r) && *(y+r)<=*(nn+i+1))
{
*bb=**(y+r)<**(y+r+1)?**(y+r):**(y+r+1);
cout<<*bb<<endl;
}
}
for(r=0;r<j;r++)
{
if(**(y+r)==*bb && *(nn+i)<=*(y+r))
{
*(dd+g)=*(y+r);
g++;break;
}
}
}
cout<<**(dd+g)<<" ";
cout<<endl;
return 0;
}
请问上面红色的这段程序应如何改写?
[ 本帖最后由 yxb0001 于 2009-9-29 23:22 编辑 ]