Bash脚本求助:按an²+bn+c公式生成数列后计算项的总和
问题求助:Bash脚本计算数列总和
我是Bash脚本编程新手,被一项作业任务难住。任务要求实现一个程序,根据公式Term = a×n² + b×n + c生成数列(a、b、c由用户输入,n为正整数),程序包含两个选项:
- 选项1:生成指定数量的数列项并打印,同时输出这些项的总和;
- 选项2:定位指定位置的项,并判断其是否为某数的倍数。
我已完成部分代码,能实现用户输入参数、选择选项1并生成数列项,但不知道如何计算这些项的总和,尝试10小时仍未解决,附上现有代码:
#!/bin/bash #user selects values for a, b, c read -p "Please provide value to a:" a read -p "Please provide value to b:" b read -p "Please provide value to c:" c #menu begins echo "SELECT ONE OPTION"; echo "1. Option1- Find Limited Number of terms of the sequence" echo "2. Option2- Find a term in a position" echo -n "Enter your menu choice [1-2]:" #menu ends read choice case $choice in 1) read -p "please provide number of terms to print:" num n=1 arr=() while [ $n -le $num ] do echo term=$(($a*$n^2+$b*$n+$c)) n=$(( n + 1)) arr+("$term") done ;;
解决方案
你的代码有两处关键问题需要修正,同时补充总和计算逻辑:
1. 修正平方运算错误
Bash中^是按位异或运算符,不是幂运算。计算n的平方需要用$n*$n(兼容所有Bash版本),或者用$n**2(仅Bash 4.0及以上版本支持),优先推荐乘法写法。
2. 实现总和累加逻辑
- 初始化
sum变量为0,用于存储总和; - 先计算出当前项的数值并存入变量,再输出,同时将当前项的值累加到
sum中; - 循环结束后直接打印
sum即可。
修改后的完整代码
#!/bin/bash # 用户输入a、b、c的值 read -p "请输入a的值: " a read -p "请输入b的值: " b read -p "请输入c的值: " c # 菜单选择 echo "请选择操作选项:" echo "1. 生成指定数量的数列项并计算总和" echo "2. 定位指定位置的项并判断是否为某数的倍数" echo -n "输入你的选择 [1-2]: " read choice case $choice in 1) read -p "请输入要生成的数列项数量: " num n=1 arr=() sum=0 # 初始化总和为0 while [ $n -le $num ] do # 正确计算当前项:a*n² + b*n + c term=$((a * n * n + b * n + c)) echo "第$n项: $term" arr+=("$term") sum=$((sum + term)) # 累加总和 n=$((n + 1)) done echo "------------------------" echo "生成的数列项: ${arr[*]}" echo "数列项总和: $sum" ;; 2) read -p "请输入要查询的项的位置n: " pos # 计算指定位置的项 term=$((a * pos * pos + b * pos + c)) echo "第$pos项的值为: $term" read -p "请输入要判断的倍数: " k # 判断是否为k的倍数 if ((term % k == 0)); then echo "$term 是 $k 的倍数" else echo "$term 不是 $k 的倍数" fi ;; *) echo "无效选择,请输入1或2" ;; esac
关键说明
- 选项1中,每次循环都会计算当前项,将其加入数组并累加到总和变量,循环结束后直接输出总和;
- 选项2补充了完整逻辑:先计算指定位置的项,再读取要判断的倍数,用
((term % k == 0))判断整除性; - 代码中把提示文本改成了中文,你可以根据需求改回英文。
内容的提问来源于stack exchange,提问作者kalilinuxus
相关产品推荐
相关产品推荐

