求助 C语言 关于数组的移动
本帖最后由 我是个汉子 于 2019-2-21 20:58 编辑好像移动有问题,但我没有找出来
/*-------------------------------------------------------
【程序设计】
---------------------------------------------------------
题目:找出二维整型数组a中每行元素的最大值,并将该元
素移动至该行首列。
编写程序:
1、编写void findmax(int a[], int n[])函数:找出
二维数组a中每行元素的最大值,并将该元素的列下标
存入数组n中,即第0行元素最大值的列下标存入n,
...,第3行元素最大值的列下标存入n。
2、编写void move(int a[],int n[])函数:根据数组
n中保存的数据,将a数组中每行最大值元素移动到该
行首列,要求移动后该元素与该行其他元素的相对位
置不变。
例如:
a数组的初始数据为:
-213 6 9
25 4 0 11
-8 310 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[], 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)
{
max=a;
n=j;
}
}
}
/**********End**********/
}
void move(int a[],int n[]){//0 1 2 3
/**********Program**********/ // -213 6 9
int i,j,k;
for(i=0; i<N; i++)
{
while(a != a])
{
k=a;
for(j=0; j<N-1; j++)
a=a;
a=k;
}
}
/**********End**********/
}
int main(){
int i,j;
int a={{-2,13,6,9},{25,4,0,11},{-8,3,10,16},{4,7,5,20}},n;
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);
printf("%d\t",a);
}
fprintf(fp,"\n");
printf("\n");
}
fclose(fp);
}
63行 while(a != a])
对于一个确定的i而言,n是一个定值,n=2(以数组第一行为例)
只要a和a的值不相等,那么进入死循环(因为退出循环条件a == a]恒不成立)
可以先定义一个中间量g将最大值赋给中间量g,然后用while循环这样写: while(a != g)
找最大值的函数没问题,两个函数我都看了,就移动的这有一点小问题
如有疑问,请跟帖 910201513 发表于 2019-2-22 00:17
63行
对于一个确定的i而言,n是一个定值,n=2(以数组第一行为例)
只要a和a的值不相等,那么进入 ...
可以,很详细。
页:
[1]