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― ―;
}
}
谢谢解答,
采纳标准,在正确答案里采纳回答的最快的,谢谢
或者引用文本文档的数据最好~
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;
}
刚才测试了下 这一行提示错误 FILE *p;
还有……老师的意思我也没太明白,如果是
就是比如输入之后的矩阵是这样
1 2 3
4 5 6
7 8 9
然后取对角要素的1 5 9 单独显示出来,顺序最好是按顺序,最好是从大到小排序 效果就是
逆续排列:9 5 1
比如新建一个文本文档
里面输入
1 2 3
4 5 6
7 8 9
然后在编程里直接读取文档里的数据,再把对角的数据单独排个序
这样有办法实现吗
我在VC6.0里调试运行正确呀,,,
你在源文件的文件夹里建一个“duijiao.txt”文本文档
这样写
1 2 3
4 5 6
7 8 9
保存 运行程序就好
#include
#include
#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;ib[j]){ m=b[i];b[i]=b[j];b[j]=m;}}
}
for(i=0;i<k;i++) printf("%-4d",b[i]);
return 0;
}
这是用vc6.0编译显示的东西,麻烦看下吧
#include
#include
#define N 50
int main()
{ int a[N][N],b[N],c[N],m,i,j,k=0,l=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) { b[k++]=a[i][i];c[l++]=a[i][j];}}
puts("对角线上的数为:");
for(i=0;i<k;i++) printf("%-4d",b[i]);puts("");
for(i=0;i<l;i++) printf("%-4d",c[i]);puts("");
puts("排序后:");//选择法排序 larger to small
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<l;i++)
{ for(j=i;j<k;j++){if(c[i]<c[j]){ m=c[i];c[i]=c[j];c[j]=m;}}}
for(i=0;i<k;i++) printf("%-4d",b[i]);puts("");
for(i=0;i<l;i++) printf("%-4d",c[i]);puts("");
puts("按任意键继续。。。");
fflush(stdin);
getchar();
return 0;
}
谢谢 还是那个错误 解决不能…………
总之非常感谢
请去这里随便回答点什么
http://zhidao.baidu.com/question/361101080475123492.html
同样是100分 回答之后我去采纳 谢谢
就是n*n矩阵输入,然后互换对角的数据输出?下面就是这样的程序,可拷贝:
#include <stdio.h>不好意思,貌似我理解错了,老师说的太不清楚了。要求是输入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
然后拷贝使用附件中代码(都是指针实现的),运行(附件是从大到小排序。如果要从小到大,只要修改小于号为大于号,程序中有注释说明)。
这个运行没有问题
我新建了一个文本文档 里面输入了
1 2 3
4 5 6
7 8 9
然后保存之后放到了编译完生成的exe文件的文件夹里,
文本文档的名字有要求嘛,直接运行exe说
open file error
ret !=0
新建的文件名必须是mm.txt
内容第一行是n的值,后面才是数据:
3
1 2 3
4 5 6
7 8 9
如果是直接双击运行exe文件,那么会很快运行完(快到一闪而过)。可以在程序main函数return 0;这句前加上system("pause");后重新编译,就行。
谢谢,可以完美运行,非常感谢。
不过还想学习下这样显示出来的做法,自己做了总是有问题
Inputed array
1 2 3
4 5 6
7 8 9
The results are
9 5 1
替换到行列显示
9 2 3
4 5 6
7 8 1
就是如果想替换到行列里再显示出来,怎么改动下比较好呢?
写的这么详细非常感谢,之后再追加100分送上
放到后面,然后再复制那个输出循环就行。也就是:
for (i = 0; i < n; i++)不好意思,貌似我理解错了,老师说的太不清楚了。要求是输入n*n的数据,然后改变对角要素顺序排序,还要求要使用pointer,如果是下面这样的话,怎么做比较好?
如果是输入之后,
1 2 3
4 5 6
7 8 9
然后把对角要素提取 排序 应该就是1 3 7 9 或者9 7 3 1 这样之类的排序的话怎么做比较好呢?
老师还说了句,可以直接读取文本文档的数据,这样的话好实现吗?
排序的没太明白,要是从文本读取的话,文本格式要求啥样?
追问就是比如输入之后的矩阵是这样
1 2 3
4 5 6
7 8 9
然后取对角要素的1 5 9 单独显示出来,顺序最好是按顺序,最好是从大到小排序 效果就是
逆续排列:9 5 1
文本他就提了一句
比如新建一个文本文档
里面输入
1 2 3
4 5 6
7 8 9
然后在编程里直接读取文档里的数据,再把对角的数据单独排个序
看看这个是不是你说的那种。
这次题目说的太含糊了 所以根本不知道他让做的是什么……
总之谢谢解答
请去
http://zhidao.baidu.com/question/982546822161807579.html
随便回答点什么 之后我去采纳 非常谢谢