当前位置:   article > 正文

hnu计算机与人工智能概论答案3.15_用while语句完成程序逻辑,求如下算法可以求根号x的近似值。(例如,x为3时,算法输出

用while语句完成程序逻辑,求如下算法可以求根号x的近似值。(例如,x为3时,算法输出

 终于肝完了!有一说一,这一次难度肉眼可见的提升,终于明白程序员为什么会秃顶了(头发真的禁不住薅啊),祝大家好运!

第1关:循环结构-while与for循环

第1题 编程计算如下公式的值1^2+3^2+5^2+...+995^2+997^2+999^2并输出结果

第2题 用while语句完成程序逻辑,求如下算法可以求根号x的近似值。(例如,x3时,算法输出约为1.7320508)。

算法如下:

  1. 输入x,若x为负数,则输出“无实数解”,算法结束;

  2. g=x/2

  3. 通过如下公式计算误差值,如果 ∣x−g∗g∣<10−6,输出g,算法结束;

  4. 否则,将(g+x/g)/2作为新的猜测值,仍记为g

  5. 重复步骤3和4

第3题:

用for循环完成下列程序,计算3位数的水仙花数 水仙花数是三位整数,且各位数字的立方之和等于该数,比如,因为

所以153是水仙花数。

 第一关还是简单的热热身,熟悉for与while的基本用法,下一关!

  1. from math import *
  2. ########## 第1题 ##############
  3. i = 1 # 当前计算的值
  4. s = 0 # 计算出来的和
  5. # 第1题
  6. ########### begin ##########
  7. while i<1000:
  8. s += i**2
  9. i=i+2
  10. ######### end ####
  11. print(s)
  12. ########## 第2题 ##############
  13. x = int(input())
  14. if x<0:
  15. print('无实数解')
  16. else:
  17. g = x/2
  18. #######begin##############
  19. # 请输入while循环控制语句
  20. while abs(x-g*g)>pow(10,-6):
  21. g=(g+x/g)/2
  22. #######end#################
  23. print("%.4f" %g)
  24. ########## 第3题 ##############
  25. #计算并输出三位数内的水仙花数
  26. #判断一个三位数是否是水仙花数,如果是输出1,否则输出0
  27. def isflower(x):
  28. # 函数说明:
  29. #参数 x为一个3位数
  30. #返回值为1或0
  31. ####### Begin #########
  32. a,b,c=x//100,x//10%10,x%10
  33. t=(a**3)+(b**3)+(c**3)
  34. if t==x:
  35. return 1
  36. else:
  37. return 0
  38. ####### End ########
  39. #函数调用求三位数内的水仙花数并输出
  40. ####### Begin #########
  41. # 请在此输入for循环表达式
  42. for i in range(100,1000):
  43. if isflower(i)==1:
  44. print(i)
  45. ####### End ########

第2关:循环嵌套-特殊图形的输出

第1题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案 例如输入6,7 输出为:

第2题:从键盘输入m行,在屏幕上输出m行的直角图案

例如输入:8 输出为:

第3题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案

例如输入9 输出为:

第二关已经稍微有一点难度了,常规做法是从头到尾双重循环,当然,也可逃课:

例如,第一题也可以这么写:

  1. m,n = eval(input())
  2. print(('*'*n+'\n')*m)

第二题也可以这么写:

  1. n = eval(input())
  2. for i in range(n):
  3. print('*'*(2*i-1))

接下来是双重循环的所有代码:

  1. #第一题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案
  2. m,n= eval(input())
  3. #请在下面编写代码
  4. # ********** Begin ********** #
  5. for i in range (0,m):
  6. for j in range (0,n):
  7. print('*',end='')
  8. print('',end="\n")
  9. # ********** End ********** #
  10. #第二题:从键盘输入m行,在屏幕上输出m行的直角图案
  11. m=eval(input())
  12. #请在下面编写代码
  13. # ********** Begin ********** #
  14. for i in range (0,m):
  15. for j in range (0,2*i+1):
  16. print('*',end='')
  17. print('',end="\n")
  18. # ********** End ********** #
  19. #第三题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案,试着用函数的方式来实现图形的绘制
  20. def drawPic(n):
  21. #函数说明
  22. #参数n代表图案的行数
  23. #函数无返回值
  24. #请在下面编写代码完成
  25. # ********** Begin ********** #
  26. for i in range (0,m):
  27. for j in range (0,m-i-1):
  28. print(' ',end='')
  29. for j in range (0,2*i+1):
  30. print('*',end='')
  31. print('',end="\n")
  32. # ********** End *********** #
  33. m=eval(input())
  34. drawPic(m)

第3关:循环综合-特殊数问题

第1题-斐波那契数列

在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)斐波那契 请完成求第n项斐波那契数的程序并输出结果 输入输出格式如下: 输入:5 输出:5

第2题-条件数的显示

while语句完成程序,输出0N之间的所有同时为235的倍数的数。 输入输出格式如下:用空格作为分隔符 输入:100 输出:0 30 60 90

第3题-素数问题

完成程序,输出输出0N之间的素数。 输入输出格式如下:用空格作为分隔符

输入:10 输出:2 3 5 7

第4题-最大公约数与最小公倍数

完成程序,求最大公约数计算。从键盘接收两个整数,编写程序求出这两个整数的最大公约数和最小公倍数。(最大公约数可用辗转相除法求,最小公倍数则用两数的乘积除以最大公约数) 输入输出格式如下: 输入:12,18 输出: 最大公约数:6 最小公倍数:36

第三关对我们的数学提出了要求。第一题斐波那契数列,如果用F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)来直观表达,我们可以用列表递归的方式表达:

  1. #用递归的方法,加上for循环,把每次循环产生的新项增加到数列最后,最后一次性输出list
  2. def fubonacci3(n):
  3. list = []
  4. for i in range(n):
  5. if i == 0 or i == 1:
  6. list.append(1)
  7. else:
  8. list.append(list[i-2] + list[i-1])
  9. return list

而最简单的方式就是不断的两个变量同时赋值,形成斐波那契数列。

第五题就是从小到大不断的寻找公约数,然后不断的赋值给它,当它不再被赋值时就是最大公约数

  1. #第一题
  2. #定义一个求第n项斐波那契数的函数
  3. def fibNumber(n) :
  4. #函数说明
  5. #参数n为第n项斐波那契数,第1,2项为1,1
  6. #返回第n项值
  7. #********** Begin ********** #
  8. a,b = 0,1
  9. for i in range (n):
  10. a,b = b,a+b
  11. return a
  12. #********** End ********** #
  13. #请不要修改下面的代码
  14. m = int(input())
  15. print(fibNumber(m))
  16. print(20*'*'+'\n',end='')
  17. #第二题:可试着用非函数的方式写程序,注意输出数据格式
  18. n =eval(input())
  19. # 请在下面编写代码
  20. # ********** Begin ********** #
  21. i=0
  22. while i<=n:
  23. if i%5==0 and i%3==0 and i%2==0:
  24. print (i,end=' ')
  25. i=i+10
  26. # ********** End ********** #
  27. print('\n'+20*'*'+'\n',end='')
  28. #第三题
  29. #定义一个判断x是否是素数的程序
  30. def isPrime(x):
  31. #函数说明:
  32. #参数x为>=2的整数
  33. #返回值为1或0
  34. # ********** Begin ********** #
  35. for i in range(2,x):
  36. if x%i ==0:
  37. return 0
  38. return 1
  39. # ********** End ********** #
  40. # 请不要修改下面的代码
  41. N = int(input())
  42. #求0-N之间的素数并输出,注意数据的输出格式
  43. # ********** Begin ********** #
  44. for i in range (2,N+1):
  45. if isPrime(i)==1:
  46. print(i,end=' ')
  47. # ********** End ********** #
  48. print('\n'+20*'*'+'\n',end ='')
  49. #第四题
  50. #定义一个求两个数的最大公约数的函数
  51. def gcd(a,b):
  52. #函数说明
  53. #参数a,b为两个整数,并且a>b
  54. #返回两个数的最大公约数
  55. # ********** Begin ********** #
  56. for i in range(1,max(a,b)+1):
  57. if a%i==0 and b%i==0:
  58. j = i
  59. return j
  60. # ********** End ********** #
  61. # 请不要修改下面的代码
  62. m,n = eval(input())
  63. #函数调用求最大公约数保存在gcdnum中
  64. # ********** Begin ********** #
  65. gcdnum = gcd (m,n)
  66. # ********** End ********** #
  67. print("最大公约数:%d"% gcdnum)
  68. print("最小公倍数:%d"%((m*n)/gcdnum))
  69. print(20*'*',end='')

第4关:循环综合-数列问题

第1题----求π/4

用循环的方式求π/4≈ 1-1/3+1/5-1/7+......直到最后一项绝对值小于le−6(即10−6)为止,结果保留小数点后10位

第2题----数列和

完成程序,求:1-3!+5!-7!......(-1)n-1(2n-1)!,求前n的项的和。 输出格式如下: 输入:4 输出:数列前4项的和为-4925

第3题----求sin(X)

完成程序,从键盘输入x的值,求

直到最后一项绝对值小于le−7(即10−7)为止(注:x为弧度值),结果保留小数点后10位。 说明:输入角度值,再转换成弧度值 输出格式如下: 输入:30 输出:output=0.4999999919

 第四关 个人感觉第四关的难点在于初值的赋值以及while语句中的前后顺序,弄清楚了就如同砍瓜切菜。

  1. #第1题:用循环的方式求π/4≈ 1-1/3+1/5-1/7+......直到最后一项绝对值小于1e−6(即10−6)为止,保留小数点后10位
  2. import math
  3. # ********** Begin ********** #
  4. S=0
  5. i=1
  6. t=1
  7. flag=1
  8. while abs(i)>pow(10,-6):
  9. S+=i
  10. t+=2
  11. flag=-flag
  12. i=(1/t)*(flag)
  13. # ********** End ********** #
  14. # 请不要修改下面的代码
  15. print("数列和为:%.10f" % S )
  16. #0.7853986634
  17. #第2题求:1-3!+5!-7!......(-1)n-1(2n-1)!,求前n的项的和
  18. #函数定义求前n项数列和
  19. def sumSequ(n):
  20. #函数说明
  21. #参数n为数列前n项
  22. #返回前n项的和
  23. # 请在下面编写代码
  24. # ********** Begin ********** #
  25. i=1;
  26. t=1;
  27. Sum=0;
  28. flag=1;
  29. while i<=n :
  30. Sum=Sum+t*flag
  31. i+=1
  32. t=t*(2*i-2)*(2*i-1)
  33. flag=-flag
  34. return Sum
  35. # ********** End ********** #
  36. # 请不要修改下面的代码
  37. m =int(input()) #从键盘输入 m值
  38. s = sumSequ(m) #函数调用求数列和
  39. print("数列前%d项的和为%d"%(m,s))
  40. #第3题
  41. from math import *
  42. def calSinx(x):
  43. #函数说明:
  44. #参数x为弧度值
  45. #返回数列和的结果,保留小数点后10位
  46. #请在下面编写代码
  47. # ********** Begin ********** #
  48. S=0
  49. i=x
  50. t=1
  51. while abs(i)>pow(10,-7):
  52. S += i
  53. t+=2
  54. i=-(i*x*x)/((t-1)*t)
  55. return S
  56. # ********** End ********** #
  57. # 请不要修改下面的代码
  58. theta= eval(input()) #输入角度值
  59. x =radians(theta)
  60. Sx = calSinx(x)
  61. print("output=%.10f"%(Sx))

第5关:循环综合-天天向上的力量

任务一:俗语“三天打鱼两天晒网”,一年下来能力值又会是多少呢?请补全代码完成程序编写 #三天打鱼两天晒网 dayup, dayfactor = 1.0, 0.01

任务二:如果按工作日5天学习,周末2天休息每天相比前一天下降1%,工作日要努力到什么程度,一年后的水平才能与每天努力1%取得的效果一样呢?请补全代码完成程序编写。以0.001为dayfactor的增量值。

任务三:尽管每天坚持,但人的能力发展并不是无限的,它符合特定模型,假设能力增长符合以下模型:以7天为一周期,连续学习3天能力值不变,但从第4天开始至第7天每天能力增长为前一天的1%,如果7天中有一天间断学习,则周期从头计算,请编写程序,如果初始能力为1,固定每10天休息一天, 365天后能力值是多少,请补全代码完成程序编写。

第五关 终于来到了最后一关,这一关绝对是我目前遇到的最难一关。先不说绕来绕去的逻辑,光是这大段的文字已经能让人头痛一会了,这题光是题干我都读了半个小时。我来帮大家梳理一下:

任务一:做三休二,效率固定,较为简单

任务二:做五休二,这里注意工作日的工作效率为变量,而休息日的遗忘效率为不变量,注意区别。变量范围记得一定是小于等于而非直接等于,可能有微小误差导致循环停不下来。

 上面是错误示范!!!双重循环+等于才停止的双重buff直接给CPU干烧了!

任务三:做九休一,又遇到每七天一个轮回,通俗的来说遇到七的倍数与十的倍数都要避让,虽然这题这样做做对了,但是我还是有一个疑问,休息的时候不会遗忘吗?

  1. from math import *
  2. #任务一:三天打鱼两天晒网
  3. dayup, dayfactor = 1.0, 0.01
  4. #请在下面编写代码
  5. # ********** begin ********** #
  6. i=0
  7. while i<365:
  8. dayup = dayup*pow((1+dayfactor),3)*pow((1-dayfactor),2)
  9. i+=5
  10. # ********** End ********** #
  11. # 请不要修改下面的代码
  12. print("{:.2f}.".format(dayup))
  13. #任务二:天天向上的力量
  14. import math
  15. dayup, dayfactor = 1.0, 0.01
  16. ddup= math.pow((dayup+dayfactor),365)
  17. #print("天天向上的力量: {:.2f}.".format(ddup))
  18. #请在下面编写代码
  19. # ********** Begin ********** #
  20. def dayup(df):
  21. dayup = 1
  22. for i in range(365):
  23. if i % 7 in [6, 0]:
  24. dayup = dayup * (1 - 0.01)
  25. else:
  26. dayup = dayup * (1 + df)
  27. return dayup
  28. dayfactor = 0.01
  29. while dayup(dayfactor) <= ddup:
  30. dayfactor += 0.001
  31. # ********** End ********** #
  32. # 请不要修改下面的代码
  33. print("{:.4f}.".format(dayfactor))
  34. #任务三:天天向上续
  35. from math import *
  36. Restday = 10 #休息10天,
  37. dayup, dayfactor = 1.0, 0.01 #初始值
  38. #请在下面编写代码
  39. # ********** Begin ********** #
  40. for i in range(365):
  41. if 0<i%10<=3 or 0<i%7<=3:
  42. dayup=dayup
  43. else:
  44. dayup=1.01*dayup
  45. # ********** End ********** #
  46. # 请不要修改下面的代码
  47. print("{:.2f}".format(dayup))#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/324519?site
推荐阅读
相关标签
  

闽ICP备14008679号