我刚开始学习C编程,我的作业有两个问题,我想问一下我做错了什么(我的助教说我做错了两件事)。我必须使用这两个函数。(抱歉问题有点长,我也是第一次使用这个网站,不知道这是否合适)。
以下是我的作业中给出的数字以及我的插入和第二个代码。
谢谢你的帮助!(其他评论也可以,例如如果我的编码不好,我认为是这样的)。
以下是我的作业中给出的数字以及我的插入和第二个代码。
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;
}
我的TA说我没有检查k是否在索引范围内,我对如何检查有些困惑。我想知道如何检查,因为我知道这对于我的专业未来项目很重要。
对于第二个函数,我需要获取数组中最大的第二个元素并将其放入第零个元素。唯一的问题是它将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;
}
谢谢你的帮助!(其他评论也可以,例如如果我的编码不好,我认为是这样的)。
second()
函数中,我不确定你的算法是什么。它不太清楚,但假设数组中的数据没有排序。如果不幸的是,数据按相反的顺序排列,因此a[0] >= a[1] && a[1] >= a[2] && … && a[size-2] >= a[size-1]
,那么pos
将不会被设置。如果它被设置了,它将是一个早期元素比其隔壁后续元素大的最后位置。这显然没有用处。如果您不先对数组进行排序,则需要进行某种诡计,例如int min1 = a[0]; int min2 = a[0]; for (int b = 1; b < size; b++) { if (a[b] > min2) { … } }
。 - Jonathan Leffler