2010-11-17 回答
#!/bin/bashfunction fu(){f=$1i=2while (($i
j=2sum=0if [ -n "$(echo $1 | grep '^[1-9][0-9]*$')" ];thenN=$1echo -n "1到$1的质数有:"while (($j<=$N));do fu $jif (($?==0));thenecho -n "$j,"sum=$(($sum+$j))j=$(($j+1))elsej=$(($j+1))fidoneecho -e "\n1到$1的所有的质数的和是$sum"elseecho "必须要有一个正整数做参数"exit 0fi
包括了求质数和求和的功能,,自己把while改成untile的形式就好了,,,
可能显示不出换行所以不要复制粘贴。。
追问:
问题是一定for循环一定要做,while和untile其中选择一个,麻烦你再做一个for循环的给我看一下,拜托了。
追答:
for的话只能是遍历固定列表的,,for i in (1,2,3,4,5,6);do 使用函数来判断$i是否为素数done
具体的你按语法改吧,,,你是学的什么专业啊,,看着像是作业题,,不过貌似没有什么专业有Linux的课程啊,,任选课??
追问:
不好意思,我是初学者,不太懂。明天就要测试了,给了这个题目。我都不知道怎么做。拜托你列出来可以么?谢谢你了。
追答:
==、我也是初学者,接触linux才半年而已,,,你学了多久了??怎么还有测试呢,,是不是考证的啊。。
追问:
不是考证,考证怎么会知道题目。我今天开学刚学,老师说测试一下。我学的linux。C语言我不太懂,出了这题所以我就不知道了。
追答:
你们还真奇怪啊,竟然还学Linux,,,,那个for的还是需要用while来配合的,,先用一个while把1到N个数放到数组里面i=0 while (($j<=$N));do array[$i]=$j j=$(($j+1)) i=$(($i+1)) done
然后再用for来取数组的值判断,,,,for var in ${array[@]};do fu $var if (($?==0));then echo -n "$var," sum=$(($sum+$var)) fi done
你大几啊,,怎么可能刚学就来测试的呢,,,太不合常理了。。
追问:
大2。。学了一个多月吧,shell脚本还是刚接触的,之前都讲命令。我实在对c语言程序不怎么感冒。你写成那个我看不明白,小弟不才啊。能帮忙搞成正规一点吗?最好换行都搞清楚。谢谢你啦!
追答:
while (($j<=$N));do
array[$i]=$j
j=$(($j+1))
i=$(($i+1))
done
for var in ${array[@]};do
fu $var
if (($?==0));then
echo -n "$var,"
sum=$(($sum+$var))
fi
done
你还是自己看书学学语法吧,,
追问:
是啊 ,只怪当初没学好C语言。连PHP也要用到。我头晕,一定要去好好学一下。那个for循环的能帮我整理一下吗? 最后一次了。谢谢你啦大哥!
追答:
for就是那样用的啊,,for var in list;do
done这样,,list是一个固定的列表,var是list中的元素,,这里${array[@]}实际上就是取数组array的值并组成一个列表,,@和*也是bash里面很特别的两个位置参数。。。
追问:
我去琢磨琢磨 谢谢你了、麻烦了。