#include
#define m 3
#define n 4
void zdx(int ar[m][n]){
int i,j,cr[n][2],a,b,t;
for(i=0;i0][i];b=ar[2][i];
for(j=0;ja && ar[j][i]>b){
a=ar[j][i];
}
else if(ar[j][i]0]=a;cr[i][1]=b;
printf("%d %d ",cr[i][0],cr[i][1]);
}
}
int main(){
int i,j,zr[m][n]={0};
for(i=0;i0;j"%d",&zr[i][j]);
}
}
zdx(zr);
return 0;
}
输入一个3行4列的数组,输出每列的最大最小值,为什么我的程序只有部分可以找出列的最大和最小值,有的找的是中间值,谢谢
你的程序在寻找列的最大和最小值时存在一些问题。具体来说,当第一个元素比第二个元素小的时候,你使用了一个变量 t 来交换它们的值。然而,这个变量只是临时存储了第一个元素的值,而没有存储第二个元素的值。因此,当你交换它们的值时,实际上只是把第一个元素的值复制到了第二个元素的位置,而第一个元素的值仍然是原来的值。
为了解决这个问题,你可以使用一个临时数组来存储每列的最大和最小值,然后在循环结束后输出它们。以下是修改后的代码:
#include <stdio.h>
#define m 3
#define n 4
void zdx(int ar[m][n]) {
int i,j,cr[n][2],a,b;
for(i = 0; i < n; i++) {
a = ar[0][i];
b = ar[0][i];
for(j = 0; j < m; j++) {
if(ar[j][i] > a) {
b = a;
a = ar[j][i];
}
else if(ar[j][i] > b) {
b = ar[j][i];
}
}
cr[i][0] = a;
cr[i][1] = b;
}
for(i = 0; i < n; i++) {
printf("%d %d ", cr[i][0], cr[i][1]);
}
}
int main() {
int i, j, zr[m][n] = {0};
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
scanf("%d", &zr[i][j]);
}
}
zdx(zr);
return 0;
}
在修改后的代码中,我们使用了两个变量 a 和 b 来存储每列的最大和次大值。在循环结束后,我们把它们存储到临时数组 cr 中,然后输出它们。通过这种方式,我们可以正确地找到每列的最大和最小值,而不是中间值。
参考GPT和自己的思路:你的代码中,第三个if语句中的逻辑条件应该是a<b,而你写成了a>b,导致当a<b时,b的值被赋给了a,a的值被赋给了b,输出结果就错了。
修改第三个if语句即可:
else if(a<b) {
t=a; a=b; b=t;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:注:本文以一个例子来演示广义表的基本操作,含有一个头文件《GList.h》和一个测试源文件《main.cpp》