我的目标是创建一个C函数,找到数组的最小值并将其设置为零。到目前为止,我的函数确实如此,但我希望它忽略/跳过已经为零的索引。
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="jarProjName">
<wb-resource deploy-path="/" source-path="/src/main/java"/>
</wb-module>
</project-modules>
我也尝试使用这样的void find_minimum(double a[], int n) {
int i, index;
double low;
index = 0;
low = a[0];
for (i = 1; i < n; i++) {
if ( a[i] < low && a[i] != 0.0) {
low = a[i];
index = i;
}
}
a[index] = 0.0;
}
语句:
continue
我错过了什么或搞砸了什么?
答案 0 :(得分:1)
问题是,当a[0]
为零时,您的代码会忽略大小写。尝试将DOUBLE_MAX分配给低常量并迭代整个数组(i = 0
初始化语句中的for
而不是i = 1
)。
void find_minimum(double a[], int n) {
int i, index;
double low;
index = 0;
low = DOUBLE_MAX;
for (i = 0; i < n; i++) {
if ( a[i] < low && a[i] != 0.0) {
low = a[i];
index = i;
}
}
a[index] = 0.0;
}
答案 1 :(得分:0)
您需要将最小查找器与更改数据的代码分开。您可能还需要在其他地方找到最小值以用于不同目的。此外,您找到low
,但是,您将索引处的元素设置为0。
void find_minimum(double a[], int n) {
int i, index;
double low;
index;
low = DOUBLE_MAX;
for (i = 0; i < n; i++) {
if ((a[i]) && (a[i] < low)) {
low = a[i];
index = i;
}
}
return low;
}
//...
int main() {
//...
a[find_minimum(a, n)] = 0;
//...
return 0;
}
答案 2 :(得分:0)
如果您按照其他帖子的建议使用DOUBLE_MAX
,则需要在输入数组中包含一些最大可能值的先验信息。
但是使用下面的代码,您可以在没有任何此类先验信息的情况下解决此问题。
阅读内联评论:
#include<stdio.h>
#define SIZE 5 // change the array size as per your requirement
void find_minimum_set_zero(double a[]) {
int i, index;
double low;
index = 0;
low = a[index];
while(low == 0.0 && index < SIZE){ // This will make sure "low" is non-zero
index++;
low = a[index];
}
for (i = index+1; i < SIZE; i++) { // This loop starts with "index+1"
if ( (a[i] < low) && a[i] ) {
low = a[i];
index = i;
}
}
a[index] = 0.0;
}
int main(){
double a[SIZE];
int i;
for(i=0;i < SIZE; i++){
scanf("%lf", &a[i]);
}
find_minimum_set_zero(a);
for(i=0;i < SIZE; i++){
printf("%lf ", a[i]);
}
return 0;
}
样本输入(第一行)和输出(第二行):
99 98 95 96 97
99.000000 98.000000 0.000000 96.000000 97.000000
0 99 98 96 95
0.000000 99.000000 98.000000 96.000000 0.000000
99 0 98 0 97
99.000000 0.000000 98.000000 0.000000 0.000000
91 99 0 97 0
0.000000 99.000000 0.000000 97.000000 0.000000
PS:我将您的功能名称从find_minimum
更改为find_minimum_set_zero
,以提高可读性。