【发布时间】:2020-10-19 00:04:01
【问题描述】:
我正在学习通过引用传递的函数。
我的问题是如何编写一个函数来找到从输入文本文件中获取的最低值的索引。
文本文件包含创建范围的最小和最大索引。该函数应返回存储在该范围内的最低值的索引。然后函数还应该检查范围内具有相同值的索引,然后返回这些索引中的第一个。
例子
index 0 1 2 3 4 5 6 7 8 9 10 11
value 8 3 6 7 9 5 3 8 6 7 4 5
如果从输入文本文件读取的最小索引为 0,从文本文件读取的最大索引为 11,则返回应该是索引 1。
使用的函数原型int findMinIndex(int data[], int low, int high);
完整程序
#include <stdio.h>
#define MAX 100
int findMinIndex(int data[], int low, int high);
int main() {
int i, loop, n, queries, data[MAX];
// Read in the schedule data.
FILE* ifp = fopen("schedule.in", "r");
fscanf(ifp, "%d", &n);
for (i=0; i<n; i++)
fscanf(ifp, "%d", &data[i]);
// Process each query.
fscanf(ifp, "%d", &queries);
for (loop=0; loop<queries; loop++) {
int low, high;
fscanf(ifp, "%d%d", &low, &high);
printf("%d\n", findMinIndex(data, low, high));
}
return 0;
}
// Pre-condition: low <= high and are both valid indexes to data.
// Post-condition: Returns the lowest index in [low, high] storing
// the minimum of array[low]�array[high].
int findMinIndex(int data[], int low, int high){
//Function needed
}
预期输出link
更新:我已经实现了 Ibram Reda 的功能,并且程序正在打印与预期输出相似的索引,但由于某种原因并不完全相同。
这是更新后的代码,我还附上了输出文件的链接。
#定义最大 100 int findMinIndex(int data[], int low, int high); int main() { int i,循环,n,查询,数据[MAX]; // 读入调度数据。 文件* ifp = fopen("schedule.in", "r"); fscanf(ifp, "%d", &n); 对于 (i=0; i【问题讨论】:
-
“通过引用传递”是什么意思?
-
C 是按值传递。您可以通过传递地址来模拟按引用传递,但您不应将其视为“按引用传递”。
-
@RetiredNinja 我相信 OP 不需要数组长度,因为他采用“有效的低/高数据索引”。 @Kakarotto 如果您设置了
low = 0,您将丢失从呼叫者那里获得的信息。要么使用不同的迭代变量,要么像现在一样增加low,但不提前将其归零。 -
@Al.G.Ah,我读错了。我认为最小值/最大值是数组中的值,他们正在寻找它们之间最小值的索引。
-
@WilliamPursell:按地址传递就是按引用传递。地址是参考。这个词在历史上就是这样使用的。 C++ 后来采用了“引用”一词来指代该语言中的特定功能,但它并没有改变 C++ 上下文之外的词的含义。无论是手动传递地址(使用
&或指针计算)还是自动传递(依赖于数组的自动转换),传递的都是确实引用了预期对象的东西,所以它是英语意义上的引用和技术上的非 C++ 意义。
标签: c function pass-by-reference