马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 我是个汉子 于 2019-2-21 20:58 编辑 好像移动有问题,但我没有找出来
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:找出二维整型数组a[4][4]中每行元素的最大值,并将该元
素移动至该行首列。
编写程序:
1、编写void findmax(int a[][N], int n[])函数:找出
二维数组a中每行元素的最大值,并将该元素的列下标
存入数组n中,即第0行元素最大值的列下标存入n[0],
...,第3行元素最大值的列下标存入n[3]。
2、编写void move(int a[][N],int n[])函数:根据数组
n中保存的数据,将a数组中每行最大值元素移动到该
行首列,要求移动后该元素与该行其他元素的相对位
置不变。
例如:
a数组的初始数据为:
-2 13 6 9
25 4 0 11
-8 3 10 16
4 7 5 20
经过处理后a数组中数据为:
13 6 9 -2
25 4 0 11
16 -8 3 10
20 4 7 5
---------------------------------------------------------
注意:请勿改动主函数main()中的任何语句。
-------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#define N 4
void findmax(int a[][N], int n[]){
/**********Program**********/
int i,j,k,max;
for(i=0; i<N; i++)
{
max=0;
for(j=0; j<N; j++)
{
if(max<a[i][j])
{
max=a[i][j];
n[i]=j;
}
}
}
/********** End **********/
}
void move(int a[][N],int n[]){ // 0 1 2 3
/**********Program**********/ // -2 13 6 9
int i,j,k;
for(i=0; i<N; i++)
{
while(a[i][0] != a[i][n[i]])
{
k=a[i][0];
for(j=0; j<N-1; j++)
a[i][j]=a[i][j+1];
a[i][N-1]=k;
}
}
/********** End **********/
}
int main(){
int i,j;
int a[N][N]={{-2,13,6,9},{25,4,0,11},{-8,3,10,16},{4,7,5,20}},n[4];
FILE *fp;
findmax(a,n);
move(a,n);
if((fp=fopen("data.txt","w"))==NULL){
printf("open file error\n");
exit(0);
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
fprintf(fp,"%d\t",a[i][j]);
printf("%d\t",a[i][j]);
}
fprintf(fp,"\n");
printf("\n");
}
fclose(fp);
}
63行 while(a[i][0] != a[i][n[i]])
对于一个确定的i而言,n[i]是一个定值,n[i]=2(以数组第一行为例)
只要a[i][0]和a[i][2]的值不相等,那么进入死循环(因为退出循环条件a[i][0] == a[i][n[i]]恒不成立)
可以先定义一个中间量g将最大值赋给中间量g,然后用while循环这样写: while(a[i][0] != g)
找最大值的函数没问题,两个函数我都看了,就移动的这有一点小问题
如有疑问,请跟帖
|