|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 是一个定值,n=2(以数组第一行为例)
只要a[0]和a[2]的值不相等,那么进入死循环(因为退出循环条件a[0] == a[n]恒不成立)
可以先定义一个中间量g将最大值赋给中间量g,然后用while循环这样写: while(a[0] != g)
找最大值的函数没问题,两个函数我都看了,就移动的这有一点小问题
如有疑问,请跟帖
|
|