第一行包含两个整数n和m,表示一个矩阵包含n行m列。 (1≤n≤10,1≤m≤10),共输入n*m个数,表示第一个矩阵中的元素。接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。当t为别的字符时不需要处理
主要的思路是:先定义一个二位数组,存放他要输入的数据,在定义一个字符变量储存下一步操作所对应的字符,后面在定义两个整型变量是什么就行,其实你运用while循环中的EOF判断条件就不需要管他要循环几次了,eof是会根据系统只要有数据的输入他就会继续循环,一直读到没有数据的输入。
代码如下:
#include<stdio.h>
int main()
{
int n , m;
scanf("%d%d",&n,&m);
int a[n][m];
for( int i = 0 ; i < n ; i++)
{
for( int j = 0 ; j < m ; j++)
{
scanf("%d",&a[i][j]);
}
}
char op ;//定义op,根据op的值进行判断所要进行的操作
int h , l;
while(scanf("%c%d%d",&op,&h,&l) != EOF)
{
if( op == 'r')
{
int t;
for( int j = 0 ; j < m; j++)//进行指定行与行之间的转换
{
t = a[h-1][j];
a[h-1][j] = a[l-1][j];
a[l-1][j] = t;
}
}
else
if( op == 'c')
{
int t ;
for( int i = 0 ; i < n ;i++)//进行列与列之间的转换
{
t = a[i][h-1];
a[i][h-1] = a[i][l-1];
a[i][l-1] = t;
}
}
}
for( int i = 0 ; i < n ; i++)
{
for( int j = 0 ; j < m ; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
eof的补充:在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。