所以這個標題很垃圾,我真的不知道如何解釋它。但是,當您看到代碼時,您會得到它,即:
#include <stdio.h>
void products(float values[], int prod_num);
int main(void) {
int prod_num;
printf("Enter the number of products: ");
scanf("%d", &prod_num);
float values[prod_num];
for (int i = 0; i < prod_num; i ) {
printf("Enter the value of the product: ");
scanf("%f", &values[i]);
}
products(values, prod_num);
return 0;
}
void products(float values[], int prod_num) {
int i, j, t;
float sum = 0, avg;
for (i = 0; i < prod_num; i ) {
sum = sum values[i];
avg = sum / prod_num;
}
printf("The average is: %f\n", avg);
for (i = 0; i < prod_num; i ) {
for (j = i 1; j < prod_num; j ) {
if (values[i] > values[j]) {
t = values[i];
values[i] = values[j];
values[j] = t;
}
}
}
printf("Largest value: %f\n", values[]);
printf("Smallest value: %f", values[0]);
}
因此,如您所知,此代碼正在使用該函式來查找某些產品的值的平均值,這可以正常作業,并且還可以從陣列中products找到最大值和最小值。values我認為最好的方法是按升序排列陣列,然后列印values[0],因為這將是最小值,然后列印最后一個元素。那是我的問題。當我不知道它的大小時,我如何告訴它列印出陣列的最后一個元素,因為它是由用戶輸入的?我實際上有一種不同的方式來完成這部分(我只展示了這個功能):
void products(float values[], int prod_num) {
int i;
float sum = 0, avg;
for (i = 0; i < prod_num; i ) {
sum = sum values[i];
avg= sum / prod_num;
}
printf("The average is: %f\n", avg);
for (i = 1; i < prod_num; i ) {
if (values[0] < values[i]) {
values[0] = values[i];
}
}
printf("Largest value: %f\n", values[0]);
for (i = 1; i < prod_num; i ) {
if (values[0] > values[i]) {
values[0] = values[i];
}
}
printf("Smallest value: %f\n", values[0]);
}
問題是它會列印出第二個最小值,因為由于 for 回圈的任務是查找最大值,這些值會發生變化,所以我嘗試了我展示的第一種方法。解決方案可以是這兩種方法中的任何一種,我不介意。或者我想這可能是一種完全不同的方法,它不是完全垃圾,就像我懷疑我的兩個可能一樣。
uj5u.com熱心網友回復:
為了在您的產品中找到最小值和最大值,您不需要對陣列進行排序(盡管即使這樣您也會找到正確的解決方案),因為它會影響您的程式在運行時的性能。無論如何,如果您仍想排序,請 使用 values[prod_num-1]查找最大元素。要查找最小值和最大值而不對陣列進行排序,您可以使用以下示例:
float maxi = values[0];
float mini = values[0];
for (i=1;i<prod_num;i )
{
if(maxi<values[i])
maxi=values[i];
if(mini>values[i])
mini = values[i];
}
uj5u.com熱心網友回復:
當我不知道它的大小時,如何告訴它列印出陣列的最后一個元素
您確實知道它的大小,實際上它已被傳遞到函式中。
陣列的大小是prod_num,所以最后一個元素是values[prod_num-1]。
在側節點上,不必對串列進行排序以找到最大和最小的。使用變數來跟蹤當前的最小值和最大值,并將它們初始化為陣列的第一個元素。然后遍歷陣列,檢查當前元素是小于最小值還是大于最大值,是否更新最小值/最大值。
uj5u.com熱心網友回復:
你知道陣列的大小。它被指定為第二個函式引數
void products (float values[], int prod_num){
所以你可以寫
printf("Largest value: %f\n", values[prod_num-1]);
也不需要在 for 回圈中計算平均值。
for (i = 0; i < prod_num; i ) {
sum = sum values[i];
avg= sum / prod_num;
}
您只能在 for 回圈之后計算一次。
通常,更改源陣列時是一個壞主意。
要找到您可以撰寫的最小和最大元素
void products( const float values[], size_t prod_num )
{
if ( prod_num != 0 )
{
float min = values[0];
float max = values[0];
float sum = values[0];
for ( size_t i = 1; i < prod_num; i )
{
sum = values[i];
if ( max < values[i] )
{
max = values[i];
}
else if ( values[i] < min )
{
min = values[i];
}
}
printf( "The average is: %f\n", sum / prof_num );
printf( "Largest value: %f\n", max );
printf( "Smallest value: %f\n", min );
}
else
{
puts( "The array is empty." );
}
}
uj5u.com熱心網友回復:
void products(float values[], int prod_num) {
float sum = 0, avg, least = values[0], largest = values[0];
for (int i = 0; i < prod_num; i ) {
sum = sum values[i];
largest = largest < values[i] ? values[i] : largest;
least = least > values[i] ? values[i] : least;
}
avg = sum / prod_num;
printf("The average is: %f\n", avg);
printf("Largest value: %f\n", largest);
printf("Smallest value: %f", least);
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/482809.html
上一篇:如何使用for回圈將我的二維陣列值顯示到php中的表中
下一篇:數字顯示不正確
