C语言问题 改错

来源:百度知道 编辑:UC知道 时间:2024/06/19 13:05:02
本程序计算并输出二维数组a的每一列最小元素的值及其行号、列号,整个数组a中最小元素的值及其行号、列号。
含有错误的源程序为:
#include"stdio.h"
#define n 4 #define m 3
int a[n][m],s[m];

p(int j)
{int k,i,x;
x=a[0][j];i=0;
for(k=1;k<n;k++)
if(a[k][j]<x)
{i=k;s[j]=x=a[k][j];}
return i;
}

main()
{int index[m],i,j,k;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",a[i][j]);
for(j=0,j<m;j++)
{index[j]=p[j];
printf("a[%d,%d]=%d\n",index[j],j,s[j]);
}
i=s[1];k=0;
for(j=1;j<m;j++)
if(s[j]<i)
{i=s[j];k=j;}
printf("min=a[%d,%d]=%d",index[k],k,i);
}
注:调试程序时,可以随意输入测试数据,最后运行本程序时,必须从键盘输入下列数据:
6 4 16 9 7 13 8 18 15 5 12 19
【要求】:
1.将上述程序录入到文件 myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。
2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理语句,但不能增加其他语句,也不能删去整条语句。
3.将改正后的源程序(文件名myf1.c)放在考试盘的根目

#include"stdio.h"
#define n 4 //不同的宏定义要放到不同的行中
#define m 3
int a[n][m],s[m];

p(int j)
{int k,i,x;
x=a[0][j];i=0;
for(k=0;k<n;k++)
if(a[k][j]<=x)//应为"<="
{i=k;s[j]=x=a[k][j];}
return i;
}

main()
{int index[m],i,j,k;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]); //输入应为"&a[i][j]"
for(j=0;j<m;j++)//","应为";"
{index[j]=p(j);//这里的[]应为"()";
printf("a[%d,%d]=%d\n",index[j],j,s[j]);
}
i=s[0];k=0;//s[0]
for(j=1;j<m;j++)
if(s[j]<i)
{i=s[j];k=j;}
printf("min=a[%d,%d]=%d",index[k],k,i);
}

#include"stdio.h"
#define n 4
#define m 3
int a[n][m],s[m];

int p(int j)//最好加上返回值类型
{
int k,i,x;
x=a[0][j];
i=0;
for(k=1;k<n;k++)
if(a[k][j]<