-1

我必须编写一个程序,让用户输入任意数量的数字,并确定哪个是最大的,最小的,总和是多少,以及输入的所有数字的平均值。我是被迫使用数组来做到这一点还是有其他方法?如果我必须使用数组,有人可以帮我举个例子来说明我应该如何解决这个问题吗?谢谢

4

2 回答 2

0

您不需要数组。只保留迄今为止最大和最小的数字,数字的计数和总和。平均值简直了sum/count

要读取输入,您可以readwhile循环中使用。

于 2013-04-29T22:05:37.847 回答
0

简单直接的尝试,有一些问题:

#!/bin/bash

echo "Enter some numbers separated by spaces"
read numbers

# Initialise min and max with first number in sequence
for i in $numbers; do
    min=$i
    max=$i
    break
done

total=0
count=0
for i in $numbers; do
    total=$((total+i))
    count=$((count+1))
    if test $i -lt $min; then min=$i; fi
    if test $i -gt $max; then max=$i; fi
done
echo "Total: $total"
echo "Avg:   $((total/count))"
echo "Min:   $min"
echo "Max:   $max"

还使用 /bin/sh 进行了测试,因此您实际上不需要 bash,它是一个更大的 shell。另请注意,这仅适用于整数,并且平均值被截断(不四舍五入)。

对于浮点,您可以使用 bc。但是与其多次放入不同的解释器,不如直接用更适合问题的东西来编写它,例如 python 或 perl,例如在 python 中:

import sys
from functools import partial

sum = partial(reduce, lambda x, y: x+y)
avg = lambda l: sum(l)/len(l)

numbers = sys.stdin.readline()
numbers = [float(x) for x in numbers.split()]

print "Sum: " + str(sum(numbers))
print "Avg: " + str(avg(numbers))
print "Min: " + str(min(numbers))
print "Max: " + str(max(numbers))

您可以使用此处的文档将其嵌入 bash,请参阅此问题:如何通过命令通过管道传输此处的文档并将结果捕获到变量中?

于 2013-04-29T22:37:18.367 回答