用二维数组 c 找到最小数
find minimum number with 2d array c
我想在每一行中找到最小的数字..但是这里有什么问题...
#define NUM_EXAM 3
#define NUM_STUDENT 5
求最小函数:
int find_min(int score[NUM_EXAM][NUM_STUDENT]) {
int exam;
int least;
int k, i, j;
for (i = 0; i <= NUM_EXAM; i++)
for (j = 0; j <= NUM_STUDENT; j++)
least = j;
函数:
for (k = j + 1; k < NUM_STUDENT; k++)
{
if (score[j] < score[k])
{
k = j;
}
exam = score[j];
score[j] = least;
score[least] = exam;
}
printf("%d", exam);
}
主要功能:
int main(void) {
int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } };
find_min(score[NUM_EXAM][NUM_STUDENT]);
return 0;
}
我注意到一些小事:
- 已经提到,你需要将循环条件改为<而不是<=,否则你访问的是数组大小之外的元素
- 调用函数时,只传数组名,不传数组大小。检查例如this
因为我认为你的实现有一些开销,我试图减少它,如果我没有误解分配,下面的代码将为你提供所需的解决方案:
#include <stdio.h>
#define NUM_EXAM 3
#define NUM_STUDENT 5
void find_min(int score[NUM_EXAM][NUM_STUDENT]) {
int exam;
int least;
int i, j;
for (i = 0; i < NUM_EXAM; i++)
{
least = 0;
for (j = least; j < NUM_STUDENT; j++)
{
if (score[i][j] < score[i][least])
{
least = j;
}
}
printf("%d\n", score[i][least]);
}
}
int main(void) {
int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } };
find_min(score);
return 0;
}
我想在每一行中找到最小的数字..但是这里有什么问题...
#define NUM_EXAM 3
#define NUM_STUDENT 5
求最小函数:
int find_min(int score[NUM_EXAM][NUM_STUDENT]) {
int exam;
int least;
int k, i, j;
for (i = 0; i <= NUM_EXAM; i++)
for (j = 0; j <= NUM_STUDENT; j++)
least = j;
函数:
for (k = j + 1; k < NUM_STUDENT; k++)
{
if (score[j] < score[k])
{
k = j;
}
exam = score[j];
score[j] = least;
score[least] = exam;
}
printf("%d", exam);
}
主要功能:
int main(void) {
int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } };
find_min(score[NUM_EXAM][NUM_STUDENT]);
return 0;
}
我注意到一些小事:
- 已经提到,你需要将循环条件改为<而不是<=,否则你访问的是数组大小之外的元素
- 调用函数时,只传数组名,不传数组大小。检查例如this
因为我认为你的实现有一些开销,我试图减少它,如果我没有误解分配,下面的代码将为你提供所需的解决方案:
#include <stdio.h> #define NUM_EXAM 3 #define NUM_STUDENT 5 void find_min(int score[NUM_EXAM][NUM_STUDENT]) { int exam; int least; int i, j; for (i = 0; i < NUM_EXAM; i++) { least = 0; for (j = least; j < NUM_STUDENT; j++) { if (score[i][j] < score[i][least]) { least = j; } } printf("%d\n", score[i][least]); } } int main(void) { int score[NUM_EXAM][NUM_STUDENT] = { { 60, 80 ,43, 78, 93 } ,{ 75,59,81,77,81 } ,{ 83,74,97,73,81 } }; find_min(score); return 0; }