|  | 
 
| 
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  复制代码/*****************************************************************
将一个 5*5 的矩阵中最大的元素放在中心,4个角分别放4个最小的元素
(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。
用 main函数调用。
*****************************************************************/
#if(1)
#include<stdio.h>
#include<string.h>
int main()
{
        void sx(char *y[]);
        char a[5][5][20],*p[25];
        int i,k,j=0,n=25;
    for(k=0;k<5;k++)
        {
                for(i=0;i<5;i++,j++)
                {
                                gets(a[k][i]);
                        p[j]=a[k][i];                        
                }
        }  
        
        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[5]={0};
        char temp[30]={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[20];
        strcpy(cc,y1);
        strcpy(y1,y2);
        strcpy(y2,cc);                
}
#endif
已经是第二次写这个程序了,还是用了6个小时,我笨死了55555555555555555555555
 
 
 
 | 
 |