我是 C 编程的新手,我有 2 个关于我上交的家庭作业的问题。我不是在问怎么做,我是在问我做错了什么(我的助教说我做错了两件事)。我不得不使用这两个功能。 (抱歉问了这么长的问题。我也是这个网站的新手,所以我不知道这是否也是一个合适的问题)。
这些是我作业中给出的数字,这里是我的插入和第二个代码。
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
void insert(int a[], int size, int key, int k){
a[k] = key;
}
我的助教说我没有检查 k 是否在索引内,我对如何检查 k 有点困惑。我想知道如何做,因为我知道这对我专业的 future 项目很重要。
对于第二个函数,我必须获取数组中最大的第二大元素并将其放入第零个元素。唯一的问题是它已经将 12 放入第零个元素而不是 11。我从来不明白如何做到这一点。
void second(int a[], int size){
int j = 0;
int b, c, i = 0;
int temp = 0;
int pos,pos1;
for ( b = 0; b<(size-1); b++){
if(a[b] < a[b+1]){
pos = b+1;
}
}
for (b = 0; b<(size-1); b++){
if ( a[i] < a[b+1] && pos != b-1){
pos1 = b+1;
i++;
}
temp = a[0];
a[0] = a[pos1];
a[pos1] = temp;
}
感谢您的帮助! (任何其他评论都是可以接受的,例如如果我的编码不好,我认为是)。
最佳答案
是的,你的助教是对的,你应该检查索引是否在数组的范围内。
void insert(int a[], int size, int key, int k) {
if (k < 0 || k >= size) {
// error: k out of bound!
return;
}
a[k] = key;
}
要找到数组中的第二大元素,并将其放入 a[0],您可以在一次循环中执行此操作:
void second(int a[], int size) {
int first, second;
int i;
first = 0;
second = 0;
for (i = 0; i < size; i++) {
if (a[i] > a[first]) {
second = first;
first = i;
} else if (a[i] > a[second] && a[i] != a[first])
second = i;
}
int temp = a[0];
arr[0] = a[second];
a[second] = a[0];
}
关于c - 数组越界检查(带函数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36684424/