鱼C论坛

 找回密码
 立即注册
查看: 1409|回复: 0

[技术交流] 这个程序对初学者很难么?

[复制链接]
发表于 2015-3-29 16:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. /*****************************************************************
  2. 将一个 5*5 的矩阵中最大的元素放在中心,4个角分别放4个最小的元素
  3. (顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。
  4. 用 main函数调用。
  5. *****************************************************************/

  6. #if(1)
  7. #include<stdio.h>
  8. #include<string.h>

  9. int main()
  10. {
  11.         void sx(char *y[]);
  12.         char a[5][5][20],*p[25];
  13.         int i,k,j=0,n=25;
  14.     for(k=0;k<5;k++)
  15.         {
  16.                 for(i=0;i<5;i++,j++)
  17.                 {
  18.                                 gets(a[k][i]);
  19.                         p[j]=a[k][i];                       
  20.                 }
  21.         }  
  22.        
  23.         for (i=0,k=0;i<n;i++)         //打印原矩阵
  24.         {
  25.                 if(k%5==0) printf("\n");
  26.                 printf("%s  ",*(p+i));
  27.                
  28.                 k++;
  29.                
  30.         }
  31.         printf("\n");
  32.        
  33.         sx(p);
  34.        
  35.        
  36.        
  37.         for (i=0,k=0;i<n;i++)       //打印改变后的矩阵
  38.         {
  39.                 if(k%5==0) printf("\n");
  40.                 printf("%s  ",*(p+i));
  41.                 k++;
  42.         }
  43.         printf("\n");
  44.        
  45. }


  46. void sx(char *y[])
  47. {
  48.         void sh(char *y1,char *y2);     //指针所指字符串交换
  49.        
  50.         int i,k,n=25,a[5]={0};
  51.         char temp[30]={0};
  52.        
  53.         strcpy(temp,*(y+0));
  54.         for(i=0;i+1<n;i++)
  55.         {
  56.                 if(  strcmp( temp,*(y+i))>0  )                                                          
  57.                 {       
  58.                         strcpy(temp,*(y+i));       
  59.                         *(a+0)=i;
  60.                 }
  61.                
  62.                
  63.         }
  64.         if(  ( strcmp( *(y+0),*(y+*(a+0))) !=0 ))          sh(*(y+0),*(y+*(a+0)));  //最小的数放到左上角
  65.        
  66.        
  67.         strcpy(temp,*(y+1));
  68.         for(i=1;i+1<n;i++)
  69.         {
  70.         if(  strcmp( temp,*(y+i))>0  &&  strcmp( *(y+i),*(y+0) )>0 )                  
  71.                 {
  72.                         strcpy(temp,*(y+i));
  73.                         if(        strcmp( temp,*(y+0)  )>0 )
  74.                                 *(a+1)=i;
  75.                 }                               
  76.         }
  77.         if (*(a+1)==0) *(a+1)=1;
  78.         if(( strcmp( *(y+4),*(y+*(a+1)))!=0 ))          sh(*(y+4),*(y+*(a+1)));  // 第二小的数放到右上角
  79.        
  80.        
  81.         strcpy(temp,*(y+1));
  82.         for(i=1;i+1<n;i++)
  83.         {
  84.         if(  strcmp( temp,*(y+i))>0  &&  strcmp( *(y+i),*(y+4) )>0 )                  
  85.                 {
  86.                         strcpy(temp,*(y+i));
  87.                         if(        strcmp( temp,*(y+4)  )>0 )
  88.                                 *(a+2)=i;
  89.                 }               
  90.         }
  91.         if (*(a+1)==0) *(a+1)=1;
  92.         if(( strcmp( *(y+20),*(y+*(a+2)))!=0 ))         sh(*(y+20),*(y+*(a+2))); // 第三小的数放到左下角
  93.        
  94.        
  95.         strcpy(temp,*(y+1));
  96.         for(i=1;i+1<n;i++)
  97.         {
  98.         if(  strcmp( temp,*(y+i))>0  &&  strcmp( *(y+i),*(y+20) )>0 )         
  99.                 {
  100.                         strcpy(temp,*(y+i));
  101.                         if(        strcmp( temp,*(y+20) )>0 )
  102.                                 *(a+3)=i;
  103.                 }               
  104.         }
  105.         if (*(a+1)==0) *(a+1)=1;
  106.         if(( strcmp( *(y+24),*(y+*(a+3)))!=0 ))         sh(*(y+24),*(y+*(a+3))); // 第四小的数放到右下角
  107.        
  108.         strcpy(temp,*(y+1));
  109.         for(i=0,k=1;i+1<n;i++)
  110.         {
  111.                 if(  strcmp( temp,*(y+i))<0 )
  112.                 {
  113.                         strcpy(temp,*(y+i));
  114.                         *(a+4)=i;
  115.                 }            
  116.         }                       
  117.        
  118.         if(( strcmp( *(y+12),*(y+*(a+4)))!=0 ))  sh(*(y+12),*(y+*(a+4)));   // 最大的数放到中间
  119.        
  120. }


  121. void sh(char *y1,char *y2)
  122. {
  123.         char cc[20];
  124.         strcpy(cc,y1);
  125.         strcpy(y1,y2);
  126.         strcpy(y2,cc);               
  127. }
  128. #endif
复制代码

已经是第二次写这个程序了,还是用了6个小时,我笨死了55555555555555555555555


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表