正如其他人在评论中所说,不需要第二个循环。由于您只关心未成年人喝的咖啡数量,因此您只需将这些索引处的咖啡数量与您的minCoffee变量进行比较。这样做,你的循环可能看起来像这样:
for(i=0; i<nbElements; i++) {
if (tabAges[i]<18) {
if (tabCoffee[i]<minCoffee) {
minCoffee = tabCoffee[i];
}
}
}
(顺便说一句,虽然单行控制语句可以在没有花括号的情况下工作,但如果您稍后返回并添加一行,它们有时会导致意外行为。始终包含它们更安全(并且可以说更具可读性)。
如果您愿意,可以将上述if语句压缩为一个语句:if (tabAges[i] < 18 && tabCoffee[i] < minCoffee.
现在我们仍然需要弄清楚如何初始化minCoffee变量,因为我们不知道里面可能有什么。
一种选择是 import limits.h,并将其设置为INT_MAX(或者UINT_MAX如果您决定使用无符号整数)。
#include <limits.h>
// declare variables etc...
minCoffee = INT_MAX;
如果由于某种原因你不能/不想这样做,另一种方法是初始化minCoffee一些无意义的东西,然后在你的循环中有一个特殊情况将它设置为它检测到的未成年人的第一个值。
minCoffee = -1 //This doesn't make sense, you can't drink less than 0 coffees!
for(i=0; i<nbElements; i++) {
if (tabAges[i]<18) {
if (minCoffee == -1) {
minCoffee = tabCoffee[i]
} else if (tabCoffee[i]<minCoffee) {
minCoffee = tabCoffee[i];
}
}
}
在实践中,这实现了与之前的解决方案完全相同的结果,但是它需要额外的测试并且阅读起来不那么直观,所以我不推荐这种方法。
现在,如果您将所有这些放在一起,您最终可能会得到一个看起来像这样的解决方案:
#include <stdio.h>
#include <limits.h>
int main() {
int tabAges[] = {25, 22, 14, 19, 36, 17};
int tabCoffee[] = {0, 4, 1, 3, 5, 2};
int nbElements = sizeof(tabAges) / sizeof(int);
int i, j, minCoffee;
minCoffee = INT_MAX;
for(i=0; i<nbElements; i++){
if (tabAges[i]<18)
if (tabCoffee[i]<minCoffee)
minCoffee = tabCoffee[i];
}
printf("the minimum of coffee drunk by minor is %d", minCoffee);
return 0;
}