多谢指教……
几个简单问题
问题1:
实现矩阵转置:
#include <iostream.h>
#include <stdlib.h>
int array[5][5]={{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()}};
void turn(int* pointer);
void main()
{ int i,j,l=0;
int* p=&array[0][0];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if((l++%5)==0)
cout <<endl;
cout <<array[i][j]<<" ";
}
cout <<endl;
cout <<"turn:\n";
turn(p);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if((l++%5)==0)
cout <<endl;
cout <<array[i][j]<<" ";
}
cout <<endl;
}
void turn(int* pointer)
{
int i,j,temp;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{temp=*(pointer+5*i+j);
*(pointer+5*i+j)=*(pointer+5*j+i);
*(pointer+5*j+i)=temp;
}
}
编译能通过,但是矩阵不变,如把turn函数中的循环体改为int i=3,j=4;又能行,
难道循环有问题?
问题2:
关于qsort()的原型void qsort(void*,size_t nelem,size_t wideth,int(*fcmp)(const void* ,const void*))
第4个函数指针参数不能理解,能不能举例说明(简单的数组排序我好象都不会用)?谢谢
问题3:如何测试堆内存的容量?
问题点数:20、回复次数:7Top
1 楼love_dawn(七月的猪)回复于 2002-03-21 15:45:58 得分 0
为什么半天没人理我?
这些问题太简单你们不屑回答?Top
2 楼nomy()回复于 2002-03-21 15:47:33 得分 0
for (i=0;i<5;i++)
for (j=0;j<i;j++)
...
这样大概就可以了.
在你的代码里面,举个例子,当i=0,j=2的时候,你将array[0][2]和array[2][0]交换了。到了i=2,j=0的时候,你又换了一遍,将array[0][2]和array[2][0]又给换回来了。Top
3 楼kaitty(阿凯)回复于 2002-03-21 15:52:03 得分 0
关键算法有错误:
void turn(int* pointer)
{
int i,j,temp;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{temp=*(pointer+5*i+j);
*(pointer+5*i+j)=*(pointer+5*j+i);
*(pointer+5*j+i)=temp;
}
改为:
void turn(int* pointer)
{
int i,j,temp;
for(i=0;i<5;i++)
for(j=0;j<i;j++)
{temp=*(pointer+5*i+j);
*(pointer+5*i+j)=*(pointer+5*j+i);
*(pointer+5*j+i)=temp;
}
#include <iostream.h>
#include <stdlib.h>
int array[5][5]={{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()},
{rand(),rand(),rand(),rand(),rand()}};
void turn(int *pointer);
void main()
{ int i,j,l=0;
int* p=&array[0][0];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if((l++%5)==0)
cout <<endl;
cout <<array[i][j]<<" ";
}
cout <<endl;
cout <<"turn:\n";
turn(p);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{if((l++%5)==0)
cout <<endl;
cout <<array[i][j]<<" ";
}
cout <<endl;
}
void turn(int* pointer)
{
int i,j,temp;
for(i=0;i<5;i++)
for(j=0;j<i;j++)
{temp=*(pointer+5*i+j);
*(pointer+5*i+j)=*(pointer+5*j+i);
*(pointer+5*j+i)=temp;
}
}Top
4 楼prototype(原型)回复于 2002-03-21 15:53:34 得分 10
made a bit modification:
#include <iostream.h>
#include <stdlib.h>
int array[5][5] = { {rand (), rand (), rand (), rand (), rand ()},
{rand (), rand (), rand (), rand (), rand ()},
{rand (), rand (), rand (), rand (), rand ()},
{rand (), rand (), rand (), rand (), rand ()},
{rand (), rand (), rand (), rand (), rand ()}
};
void turn (int a[][5]);
void
main ()
{
int i, j, l = 0;
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
{
if ((l++ % 5) == 0)
cout << endl;
cout << array[i][j] << " ";
}
cout << endl;
cout << "turn:\n";
turn (array);
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++)
{
if ((l++ % 5) == 0)
cout << endl;
cout << array[i][j] << " ";
}
cout << endl;
}
void
turn (int a[][5])
{
int i, j, temp;
for (i = 0; i < 5; i++)
for (j = i+1; j < 5; j++)
{
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
re: Q2, example:
int compare( const void* a1, const void* a2 ) {
// assumes a1 and a2 point to 'int' variables
int a = *((int*)a1);
int b = *((int*)a2);
if (a > b) return 1; // if a1 > a2, returns a position number.
if (a < b) return -1; // if a1 < a2, returns a negative number.
return 0; // a1 = a2
}
Top
5 楼love_dawn(七月的猪)回复于 2002-03-21 15:53:40 得分 0
明白了~~多谢指点~Top
6 楼nomy()回复于 2002-03-21 15:56:28 得分 10
关于qsort,我举一个例子好了。比如我要对一个整数数组排序。
int array[50];
int cmp1(const void * pElem1, const void * pElem2)
{
const int * pInt1=(const int *) pElem1;
const int * pInt2=(const int *) pElem2;
int ret = (*pInt1)-(*pInt2);
return ret;
}
int cmp2(const void * pElem1, const void * pElem2)
{
const int * pInt1=(const int *) pElem1;
const int * pInt2=(const int *) pElem2;
int ret = (*pInt2)-(*pInt1);
return ret;
}
qsort(array,50,sizeof(int),cmp1); //结果按照从小到大排序
qsort(array,50,sizeof(int),cmp2); //结果按照从大到小排序
第四个参数是让你自己定义数组元素的相对大小。Top
7 楼love_dawn(七月的猪)回复于 2002-03-21 16:50:48 得分 0
前2个已经懂了~谢谢Top




