打印数组的最大元素
Printing the largest element of an array
所以这个标题很垃圾,我真的不知道该怎么解释。不过,当您看到代码时就会明白,它是这样的:
#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 循环而改变,所以我尝试了我展示的第一种方法。解决方案可以是这两种方法中的任何一种,我不介意。或者我想这可能是一种完全不同的方法,不是完全垃圾,就像我怀疑我的两个可能是这样。
How do I tell it to print out the last element of the array, when I don't know its size
你做知道它的大小,实际上它被传递到函数中。
数组的大小是prod_num
,所以最后一个元素是values[prod_num-1]
。
在侧节点上,不需要对列表进行排序以找到最大和最小。使用变量来跟踪当前的最小值和最大值,将两者初始化为数组的第一个元素。然后遍历数组,检查当前元素是否小于最小值或大于最大值,如果更新 min/max.
的值
你知道数组的大小。它被指定为第二个函数参数
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." );
}
}
为了在你的产品中找到最小值和最大值,你不需要对数组进行排序(尽管即使这样你也会找到正确的解决方案)因为它会影响你的程序在运行时的性能。
不管怎样,如果你还想排序,
使用值[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];
}
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);
}
所以这个标题很垃圾,我真的不知道该怎么解释。不过,当您看到代码时就会明白,它是这样的:
#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 循环而改变,所以我尝试了我展示的第一种方法。解决方案可以是这两种方法中的任何一种,我不介意。或者我想这可能是一种完全不同的方法,不是完全垃圾,就像我怀疑我的两个可能是这样。
How do I tell it to print out the last element of the array, when I don't know its size
你做知道它的大小,实际上它被传递到函数中。
数组的大小是prod_num
,所以最后一个元素是values[prod_num-1]
。
在侧节点上,不需要对列表进行排序以找到最大和最小。使用变量来跟踪当前的最小值和最大值,将两者初始化为数组的第一个元素。然后遍历数组,检查当前元素是否小于最小值或大于最大值,如果更新 min/max.
的值你知道数组的大小。它被指定为第二个函数参数
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." );
}
}
为了在你的产品中找到最小值和最大值,你不需要对数组进行排序(尽管即使这样你也会找到正确的解决方案)因为它会影响你的程序在运行时的性能。 不管怎样,如果你还想排序, 使用值[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];
}
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);
}