c语言 输入n行n列的数据 然后实现互换对角的数据的程序怎么写比较好

c语言输入n行n列的数据不知到需要不需要先制作一个让用户输入要输入n*n的假设大概就是请输入X*Y的值假设输入的是2*3下面就让显示请输入2*3的数据然后实现互换对角要素... c语言 输入n行n列的数据 不知到需要不需要先制作一个让用户输入要输入n*n的假设
大概就是 请输入X*Y的值
假设输入的是2*3
下面就让显示 请输入 2*3的数据
然后实现互换对角要素的程序怎么写比较好?
大概给的模板是这个样子,完全没有讲过这个东西……
#include<stdio.h>
#include<string.h>
void rev(char *w);
int main(void)

char a[50];
printf(“输入小写英文和数字。¥n”);
gets(a);
rev(a);
printf(“倒序表示。¥n”);
puts(a);
return 0;

void rev(char *w){
int n,i,j;
char t;
n=strlen(w);
if (n<=1) return;
i=0; j=n-1;
while (i<j){ t=w[i]; w[i]=w[j]; w[j]=t;
i++; j― ―;



谢谢解答,
采纳标准,在正确答案里采纳回答的最快的,谢谢
或者引用文本文档的数据最好~
展开
 我来答
修魔go
2014-06-30 · TA获得超过119个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:111万
展开全部

2行3列怎么互换对角   2 3 3

                                    1 0 1

我觉得是不是  m行m列   互换对角  

比如:    1     2      3

               4     5      6

               7     8      9

互换后:

               3     2      1

               4     5      6

               9     8      7

是这样吗????

 

 

这是我写的代码:

#include <stdio.h>
#define  N  50
int main()
{
    int a[N][N],m,i,j,k;
   puts("请输入多少行列  最大50:");
   scanf("%d",&m);
   printf("请输入%d*%d个数据\n",m,m);
    for(i=0;i<m;i++)
          for(j=0;j<m;j++)  
                scanf("%d",&a[i][j]);
     puts("互换前:");
     for(i=0;i<m;i++)
       {   for(j=0;j<m;j++)  
              { printf("%-4d",a[i][j]);}
           puts("");
       }
   puts("互换后:");
 for(i=0;i<m;i++)
          for(j=0;j<m;j++)  
{
          if(i+j==m-1)  { k=a[i][i];a[i][i]=a[i][j];a[i][j]=k;}
}
 for(i=0;i<m;i++)
       {   for(j=0;j<m;j++)  
              { printf("%-4d",a[i][j]);}
           puts("");
       }
return 0;
}

这是运算结果:

更多追问追答
追问
不好意思,貌似我理解错了,老师说的太不清楚了。要求是输入n*n的数据,然后改变对角要素顺序排序,还要求要使用pointer,如果是下面这样的话,怎么做比较好?
如果是输入之后,
1 2 3
4 5 6
7 8 9
然后把对角要素提取 排序 应该就是1 3 7 9 或者9 7 3 1 这样之类的排序的话怎么做比较好呢?
老师还说了句,可以直接读取文本文档的数据,这样的话好实现吗?
追答

我修改后的代码:

#include <stdio.h>
#include <stdlib.h>
#define  N  50
int main()
{
    int a[N][N],b[2*N],m,i,j,k=0;
   puts("请输入多少行列  最大50:");
   scanf("%d",&m);
   FILE *p;
  if((p=fopen("duijiao.txt","r"))==NULL){puts("erro!");exit(1);}
    for(i=0;i<m;i++)
{         for(j=0;j<m;j++)  
               { fscanf(p,"%d",&a[i][j]);}           

fclose(p)  ;
     puts("你输入的数据是:");
     for(i=0;i<m;i++)
       {   for(j=0;j<m;j++)  
              { printf("%-4d",a[i][j]);}
           puts("");
       }
 for(i=0;i<m;i++)
          for(j=0;j<m;j++)  
{
          if(i+j==m-1&&i!=j)  { b[k++]=a[i][i];b[k++]=a[i][j];}
}
puts("对角线上的数为:");
for(i=0;i<k;i++)    
     printf("%-4d",b[i]);
puts("");
puts("排序后:");//选择法排序  small to larger
for(i=0;i<k;i++)
 {    
      for(j=i;j<k;j++){if(b[i]>b[j]){  m=b[i];b[i]=b[j];b[j]=m;}}
}
for(i=0;i<k;i++) printf("%-4d",b[i]);
return 0;
}

 

Arthurzss
推荐于2016-09-15 · TA获得超过1661个赞
知道小有建树答主
回答量:496
采纳率:100%
帮助的人:236万
展开全部

就是n*n矩阵输入,然后互换对角的数据输出?下面就是这样的程序,可拷贝:

#include  <stdio.h>

#define N 10

int n = 0;

void rev(int w[N][N])
{
  int i, j, t;

  for (i = 0; i < n; i++)
  {
    for (j = 0; j < i; j++)
    {
      t = w[i][j];
      w[i][j] = w[j][i];
      w[j][i] = t;
    }
  }
}

int main()
{
  int  i, j;
  int  a[N][N] = {0};

  printf("Input n:");
  scanf("%d", &n);//输入n值
  printf("Input array:\n");
  for (i = 0; i < n; i++)//下面3句相当于gets(a),即输入矩阵a 
    for (j = 0; j < n; j++)
      scanf("%d", &a[i][j]);

  rev(a); //转换

  printf("converted array:\n");
  for (i = 0; i < n; i++)//下面几句相当于puts(a),即输出矩阵a
  {
    for (j = 0; j < n; j++)
      printf("%d\t", a[i][j]);
    printf("\n");
  }
}
更多追问追答
追问
不好意思,貌似我理解错了,老师说的太不清楚了。要求是输入n*n的数据,然后改变对角要素顺序排序,还要求要使用pointer,如果是下面这样的话,怎么做比较好?
如果是输入之后,
1 2 3
4 5 6
7 8 9
然后把对角要素提取 排序 应该就是1 3 7 9 或者9 7 3 1 这样之类的排序的话怎么做比较好呢?
老师还说了句,可以直接读取文本文档的数据,这样的话好实现吗?
追答

是对角线元素的提取和排序?

建立一个文本文件mm.txt到程序运行的目录,并输入如下内容后保存:

3

1 2 3
4 5 6 
7 8 9


然后拷贝使用附件中代码(都是指针实现的),运行(附件是从大到小排序。如果要从小到大,只要修改小于号为大于号,程序中有注释说明)。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qizhi0119
2014-06-30 · TA获得超过356个赞
知道小有建树答主
回答量:510
采纳率:0%
帮助的人:235万
展开全部
#include <stdio.h>

//支持的最大的数组维数
#define MAX_X   50
#define MAX_Y   50


int getData(int *x, int *y, char data[MAX_X][MAX_Y])
{
        int i = 0, j = 0;
        printf("请输入数组的行数:");
        scanf("%d",x);
        printf("请输入数据的列数:");
        scanf("%d", y);

        //如果要判断x!=y也进行处理可以去掉下面if
        if (*x != *y) {
                printf("数组行数和列数不相等\n");
                return 1;
        }

        for (i = 0; i < *x; ++i) {
                for (j = 0; j < *y; ++j) {
                        printf("请输入第%d行,第%d列的数据:", (i + 1), (j + 1));
                        getchar();
                        scanf("%c", &data[i][j]);
                }
        }


        return 0;
}

void showData(int x, int y, char data[MAX_X][MAX_Y])
{
        int i = 0, j = 0;
        printf("array[%d][%d]\n", x, y);
        for (i = 0; i < x; ++i) {
                for (j = 0; j < y; ++j) {
                        printf(" %c ", data[i][j]);
                }
                printf("\n");
        }
}

void rev(int x, int y, char data[MAX_X][MAX_Y])
{
        char tmp[MAX_X][MAX_Y] = {0};
        int i = 0, j = 0;

        for (i = 0; i < x; ++i) {
                for (j = 0; j < y; ++j) {
                        tmp[i][j] = data[i][j];
                        data[i][j] = '\0';
                }
        }

        for (i = 0; i < x; ++i) {
                for (j = 0; j < y; ++j) {
                        data[j][i] = tmp[i][j];
                }
        }

}

int main()
{
        char data[MAX_X][MAX_Y] = {0};
        int x = 0, y = 0;
        int ret = 0;
        ret = getData(&x, &y, data);
        if (ret != 0) {
                return 0;
        }
        showData(x, y, data);
        rev(x, y, data);
        showData(x, y, data);

        return 0;


}
更多追问追答
追问
不好意思,貌似我理解错了,老师说的太不清楚了。要求是输入n*n的数据,然后改变对角要素顺序排序,还要求要使用pointer,如果是下面这样的话,怎么做比较好?
如果是输入之后,
1 2 3
4 5 6
7 8 9
然后把对角要素提取 排序 应该就是1 3 7 9 或者9 7 3 1 这样之类的排序的话怎么做比较好呢?
老师还说了句,可以直接读取文本文档的数据,这样的话好实现吗?
追答
排序的没太明白,要是从文本读取的话,文本格式要求啥样?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
八条aaaa
2014-06-30 · 超过14用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:41万
展开全部
什么意思?交换数组a【i】【j】和a【j】【i】的值?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式