C语言每日练习题——No.25,矩阵交换

题目链接:

矩阵交换_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/ec44d4ff8c794b2f9205bdddbde96817?tpId=107&difficulty=&judgeStatus=&tags=&title=108&gioEnter=menu

解题思路及示例代码:

#include <stdio.h>
int main ()
{
    int row = 0,line = 0;
    scanf("%d %d\n",&row,&line); //输入二维数组的行数和列数
    int arr[10][10] = {0};
    int i = 0;
    for (i = 0;i < row;i++)
    {
        int j = 0;
        for (j = 0;j < line;j++)
        {
            scanf("%d ",&arr[i][j]); //输入二维数组中的数据
        }
    }
    int perform = 0;
    scanf("%d\n",&perform); //输入执行次数
                           /*因为这里有多个scanf函数,当第一个scanf函数读
                           *取输入的值时,它会将\n也读取了进去,而这第一个scanf
                           *函数并不会将\n也读取进去,所以\n会一直留在缓冲区中
                           *而下一个scanf函数在读取属于%c内容时,会连带的将\n也一起
                           *接收,
                           *所以这会造成程序错误
                           *其解决办法是:
                           *在%c之前加上一个空格从而将缓冲区中的\n吸收掉 
                           */
    char type = '0';
    int perform1 = 0,perform2 = 0;
    int y = 0;
    for (y = 0;y < perform;y++)
 {                            //只有读取%c时才会有上述的要求,如果是%d则没有,
                              //由《现代方法》里的scanf读取原理可以知道
    scanf("%c %d %d\n",&type,&perform1,&perform2);//输入字符与行或列

      if (type == 'r') //交换行
    {
     /*   int m = 0;
      * for (m = 0;m < line;m++)
      * {
      *     printf("%d ",arr[perform2-1][m]);
      * }
      * printf("\n");   //这样交换的算法只是在执行一次操作
      *                  时才有用,而当执行次数大于一次时,其它操作在执行时就需要
      *                  用到未被操作的数据
      *    int n = 0;                    
      *    for (n = 0;n < line;n++)
      *    {
      *        printf("%d ",arr[perform1-1][n]);
      *    }
      *   */

          int m = 0;
          for (m = 0;m < line;m++)//注意这里的判定条件
          {
              int change = 0;
              change = arr[perform1-1][m];
              arr[perform1-1][m] = arr[perform2-1][m];
              arr[perform2-1][m] = change;
          }
    }
    
    else if (type == 'c')
    {
          /*  int m = 0;
           * for (m = 0;m < row;m++)
           * {
           *    printf("%d \n",arr[m][perform2-1]);
           * }                 //这样交换的算法只是在执行一次操作
           *             时才有用,而当执行次数大于一次时,其它操作在执行时就需要
           *              用到未被操作的数据
           * int n = 0;
           *for (n = 0;n < row;n++)
           *{
           *  printf("%d \n,",arr[n][perform1-1]);
          * }
          */

        int m = 0;  //交换列
        for (m = 0;m < row;m++)
          {
              int change = 0;
              change = arr[m][perform1-1];
              arr[m][perform1-1] = arr[m][perform2-1];
              arr[m][perform2-1] = change;
          }
    }
    
   /* else
    *{          因为当输入非法字符时,题目要求程序不会执行此操作
    *           而没有说终止程序
    *           所以就不需要这一行代码
    *    return 0;
    *  }
    *    */
 }      
    
     for (i = 0;i < row;i++)  //打印二维数组中的数据
    {
        int j = 0;
        for (j = 0;j < line;j++)
        {
            printf("%d ",arr[i][j]);
        }
         printf("\n"); //不要忘了printf函数不会在每一行
                      //结束时自动添加换行符
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值