haiouda 发表于 2015-3-29 16:38:09

这个程序对初学者很难么?

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

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

int main()
{
        void sx(char *y[]);
        char a,*p;
        int i,k,j=0,n=25;
    for(k=0;k<5;k++)
        {
                for(i=0;i<5;i++,j++)
                {
                                gets(a);
                        p=a;                       
                }
        }
       
        for (i=0,k=0;i<n;i++)         //打印原矩阵
        {
                if(k%5==0) printf("\n");
                printf("%s",*(p+i));
               
                k++;
               
        }
        printf("\n");
       
        sx(p);
       
       
       
        for (i=0,k=0;i<n;i++)       //打印改变后的矩阵
        {
                if(k%5==0) printf("\n");
                printf("%s",*(p+i));
                k++;
        }
        printf("\n");
       
}


void sx(char *y[])
{
        void sh(char *y1,char *y2);   //指针所指字符串交换
       
        int i,k,n=25,a={0};
        char temp={0};
       
        strcpy(temp,*(y+0));
        for(i=0;i+1<n;i++)
        {
                if(strcmp( temp,*(y+i))>0)                                                          
                {       
                        strcpy(temp,*(y+i));       
                        *(a+0)=i;
                }
               
               
        }
        if(( strcmp( *(y+0),*(y+*(a+0))) !=0 ))        sh(*(y+0),*(y+*(a+0)));//最小的数放到左上角
       
       
        strcpy(temp,*(y+1));
        for(i=1;i+1<n;i++)
        {
      if(strcmp( temp,*(y+i))>0&&strcmp( *(y+i),*(y+0) )>0 )              
                {
                        strcpy(temp,*(y+i));
                        if(        strcmp( temp,*(y+0))>0 )
                                *(a+1)=i;
                }                               
        }
        if (*(a+1)==0) *(a+1)=1;
        if(( strcmp( *(y+4),*(y+*(a+1)))!=0 ))        sh(*(y+4),*(y+*(a+1)));// 第二小的数放到右上角
       
       
        strcpy(temp,*(y+1));
        for(i=1;i+1<n;i++)
        {
      if(strcmp( temp,*(y+i))>0&&strcmp( *(y+i),*(y+4) )>0 )              
                {
                        strcpy(temp,*(y+i));
                        if(        strcmp( temp,*(y+4))>0 )
                                *(a+2)=i;
                }               
        }
        if (*(a+1)==0) *(a+1)=1;
        if(( strcmp( *(y+20),*(y+*(a+2)))!=0 ))         sh(*(y+20),*(y+*(a+2))); // 第三小的数放到左下角
       
       
        strcpy(temp,*(y+1));
        for(i=1;i+1<n;i++)
        {
      if(strcmp( temp,*(y+i))>0&&strcmp( *(y+i),*(y+20) )>0 )       
                {
                        strcpy(temp,*(y+i));
                        if(        strcmp( temp,*(y+20) )>0 )
                                *(a+3)=i;
                }               
        }
        if (*(a+1)==0) *(a+1)=1;
        if(( strcmp( *(y+24),*(y+*(a+3)))!=0 ))         sh(*(y+24),*(y+*(a+3))); // 第四小的数放到右下角
       
        strcpy(temp,*(y+1));
        for(i=0,k=1;i+1<n;i++)
        {
                if(strcmp( temp,*(y+i))<0 )
                {
                        strcpy(temp,*(y+i));
                        *(a+4)=i;
                }          
        }                       
       
        if(( strcmp( *(y+12),*(y+*(a+4)))!=0 ))sh(*(y+12),*(y+*(a+4)));   // 最大的数放到中间
       
}


void sh(char *y1,char *y2)
{
        char cc;
        strcpy(cc,y1);
        strcpy(y1,y2);
        strcpy(y2,cc);               
}
#endif
已经是第二次写这个程序了,还是用了6个小时,我笨死了55555555555555555555555


页: [1]
查看完整版本: 这个程序对初学者很难么?