所以我特別想要的是找出陣列的哪些元素在兩個不同的值之間,而不是兩個不同的索引之間。到目前為止的代碼如下所示:
#include <stdio.h>
#define SIZE 5
int main(void){
float grades[SIZE];
float g;
int i;
for (i=0;i<SIZE;i ){
printf("Enter a grade: ");
scanf("%f", &g);
grades[i]= g;
}
float a,b;
printf("Enter a grade range: \n");
scanf("%f %f", &a,&b);
return 0;
}
我想要告訴程式,在最后一個 scanf 之后,搜索用戶輸入的數字之間的陣列值,然后列印所述值的數量。
uj5u.com熱心網友回復:
你能試試這個嗎?這樣它不會排序,但它會顯示值,即在用戶輸入的數字之間
#include <stdio.h>
#define SIZE 5
int main(void){
float grades[SIZE];
float g;
int i;
for (i=0;i<SIZE;i ){
printf("Enter a grade: ");
scanf("%f", &g);
grades[i]= g;
}
float a,b;
printf("Enter a grade range: \n");
scanf("%f %f", &a,&b);
for (i=0;i<SIZE;i ){
if(a>b){
if(grades[i]>=b && grades[i]<=a){
printf("%f ", grades[i]);
}
}else{
if(grades[i]>=a && grades[i]<=b){
printf("%f ", grades[i]);
}
}
}
return 0;
}
uj5u.com熱心網友回復:
這應該有效:
#include <stdio.h>
#define ARRAY_LEN(x) (sizeof(x) / sizeof(*(x)))
size_t count_elems(const float * const arr, size_t arr_size, float min, float max)
{
size_t count = 0;
for (size_t i = 0; i < arr_size; i = 1)
{
if ((arr[i] >= min) && (arr[i] <= max))
{
count = 1;
}
}
return count;
}
int main()
{
float a[5] = {1.0, 0.5, 2, 3, 4};
printf("%lu\n", count_elems(a, ARRAY_LEN(a), 0.5, 3));
return 0;
}
該函式的作業方式是接收指向浮點陣列的指標,并逐個元素地迭代以查看它是否在正確的范圍內。它需要的原因arr_size是因為它不能自己告訴陣列長度。
值得注意的是,它ARRAY_LEN()只能用于靜態分配的陣列。
uj5u.com熱心網友回復:
首先,您需要對陣列進行排序:
#include <stdio.h>
#define SIZE 5
//We need a utility function for our integrated qsort algorithm:
int cmpfunc (const void * a, const void * b) {
return ( *(int*)a - *(int*)b );
}
int main(void){
float grades[SIZE];
float g;
int i;
for (i=0;i<SIZE;i ){
printf("Enter a grade: ");
scanf("%f", &g);
grades[i]= g;
}
float a,b;
printf("Enter a grade range: \n");
scanf("%f %f", &a,&b);
//Call qsort() function
qsort(grades, SIZE, sizeof(float), cmpfunc);
//Now array grades[] is sorted
int j = 0;
for(j; grades[j] <= a && (j < SIZE); j ){
}
//grades[j] >= a
for(j;grades[j] <= b && (j < SIZE); j ){
printf("%f ", grades[j]);
}
printf("\n");
return 0;
}
通過對陣列進行排序,您可以創建順序搜索第一個元素的機會,即>= a,這意味著您的任務將在 O(n) 復雜度、最壞的情況下完成。
對于更優化的解決方案,您還可以使用二進制搜索。
在找到需要列印的第一個元素后,您可以簡單地遍歷其余元素,如果它們是則列印它們<= b,直到您到達b或end of the array(這就是為什么(j < SIZE)也需要這些東西的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/477477.html
