CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

多谢指教……

楼主love_dawn(七月的猪)2002-03-21 15:24:38 在 C/C++ / C语言 提问

几个简单问题    
  问题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

相关问题

  • 请帮忙,多谢,多谢!
  • 求助!多谢!!!
  • 多谢关照
  • To daiwoo,多谢
  • 多谢了!
  • 急!!多谢了!!!
  • 多谢LXFY
  • 求救CommonDialog的问题!多谢多谢!
  • 多谢winne_ll了!
  • 多谢j9988前辈

关键词

  • rand
  • turn
  • array
  • include

得分解答快速导航

  • 帖主:love_dawn
  • prototype
  • nomy

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo