c语言 输入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― ―;
}
}
谢谢解答,
采纳标准,在正确答案里采纳回答的最快的,谢谢
或者引用文本文档的数据最好~ 展开
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;
}
就是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
然后拷贝使用附件中代码(都是指针实现的),运行(附件是从大到小排序。如果要从小到大,只要修改小于号为大于号,程序中有注释说明)。
#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 这样之类的排序的话怎么做比较好呢?
老师还说了句,可以直接读取文本文档的数据,这样的话好实现吗?
排序的没太明白,要是从文本读取的话,文本格式要求啥样?