一、PTA实验作业

题目1:梅森数

1. 本题PTA提交列表

2. 设计思路

  • 1.定义i j n mer 三个整数变量
  • 2.输入n的值
  • 3.判断n<20是否为真,若是判断n的值是否为1,是的话输出None
  • 4.进入循环for (i=1;i<=n;i++),
  • 5.mer=pow(2,i)-1;
  • 6.进入嵌套循环for(j=2;j<=mer/2;j++)
  • 7.判断mer%j==0,若是结束嵌套循环,否则继续循环,直到j<=mer/2跳出循环
  • 8.判断j>mer/2&&mer!=1若为真输出mer的值
  • 9.直到i<=n跳出循环否则执行4

3.本题调试过程碰到问题及解决办法

第一次写时我直接忽略了n=1的情况,因为n=1时,没有素数但是如果没有拿出来单独分析就会错误。
还有就是判断数是否为素数,当mer%j==0时可以说明数可以被整除,所以直接break 跳出循环,这个在第一次时没有输入。
最麻烦的是当证明是素数时,怎么输出,因为当跳出循环时也是到了输出语句 所以j>mer/2&&mer!=1要同时满足,j>mer/2是
说已经循环一遍自然跳出循环所以是素数。mer!=1是除掉n=1的情况,两者缺一不可,我坐的时候总是不知道怎么判断循环
自然结束的情况,后来百度后才理解。

题目2:猜算式?2*7?=3848中的数字

1. 本题PTA提交列表

2. 设计思路

  • 1.定义i j 2个整数变量
  • 2.进入循环for (i=1;i<=n;i++)
  • 3.进入嵌套循环for(j=1;j<=9;j++)
  • 4.判断i10+2)(70+j)==3848若为真输出i,j的值,否则继续嵌套循环
  • 5.直到j<=9,跳出循环,进入for (i=1;i<=n;i++),再次循环,直到i<=n跳出循环程序结束。

3.本题调试过程碰到问题及解决办法

这道题看似程序比较比较简短,但是却有许多小问题,如首先我把printf语句放在for外面,然后直接在if后break,原先觉得没问题,但是输出时是错的。后来把printf
移进去才成功。还有就是i的值可以写成限制在5,因为50*80==4000>3848。大大减小了运算的量。

题目3:歌唱比赛评分系统(10 分)

1. 本题PTA提交列表

2. 设计思路

  • 1.定义repeat, n ,max,min,i,sum,s为整数变量ave为浮点型变量
  • 2.max=-1;min=101;sum=0;
  • 3.输入reprat的值
  • 4.进入循环while(repeat!=0)
  • 5.输入n的值
  • 6.进入for嵌套循环 for(i=1;i<=n;i++)
  • 7.输入s的值 sum=sum+s;
  • 8.判断max与s的大小及min的大小若max大于s则max=s若min小于s则min=s;
  • 9.判断i<=n是否为真若真执行6否则退出循环
  • 10.ave=(sum-max-min)*1.0/(n-2);
  • 11.ave=(sum-max-min)*1.0/(n-2);输出ave的值
  • 12.sum=0; max=-1;min=101;
  • 13.判断repeat!=0是否为真若真执行4否则退出循环

3.本题调试过程碰到问题及解决办法 for(i=1;i<=n;i++)

做这道题时 我不知道如何去比较大小,后来想到先定义最大值最小值来做参考值
,且数值最大值应为-1最小值为101,因为这样可以使输入数值时,把第一个值赋
值进去,这样可以一个一个比较直到结束,这是我认为很巧妙的一个方法。还有就
是第一个while循环后面要加repeat--是循环能结束。最后一个问题是在外循环末尾
记得再次赋值,因为这些循环后,变量会发生变化是下次循环出错。

二、同学代码结对互评

1.互评同学名称

徐宏伟

2.我的代码、互评同学代码截图

1.梅森数
我的:

徐宏伟:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

这题我和他不同的地方在于对于跳出出循环的处理,宏伟的是使用一个flag来对比,当循环没有结束时flag=0结束时等于1
来判断梅森数,而我是用j>mer/2&&mer!=1这个条件来判断。在这一点我觉得两种处理反法都可行,没有较大优劣。还有就是
我是把n1的情况是单独拿出来分析的,而宏伟是直接用count0来区分,这一点想对我的方法简洁了很多。

1.互评同学名称

徐宏伟

2.我的代码、互评同学代码截图

2.歌唱比赛评分系统

我的:

徐宏伟:

3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

不同之处在于我实在开头就定义了一个最大值最小值,然后在给他赋值max=-1;min=101;,而宏伟是用第一个值做为为最大值最小值
,这样的话等于多写了一个输入语句,较为繁琐。还有就是他是用for语句我是用while语句,相比之下我更喜欢用while,因为这样少写了
一个变量。

三、截图本周题目集的PTA最后排名。

四、本周学习总结

1.你学会了什么?

1.我学会了控制输出时字符的宽度
2.学会了输出有规律的字符图形的方法
3.加深了对嵌套循环的理解,对于题目的分析能力也加强了
4.学会了在循环中的分支,进行判断,以及break的使用,和continue的区别
5.对循环语句的条件判断也更加熟练了。

2.本周的内容,你还不会什么?

1.经过两次循环作业的洗礼,对于循环这一语法已经越来越熟练,但是但遇到一些奇怪的题时,总是无从下手,
如空心菱形这题根本不会理解。还是要加强对于题目及循环的加深了解。还有就是在嵌套循环中,我总是对于赋值
这一方面失误颇多。当循环结束是要再次赋值的情况总是忽略。以及对于while do while 的区别与使用,在老师讲解
后初步认识当还是要多加练习。

 posted on 2017-11-10 13:32  陈张鑫  阅读(343)  评论(4编辑  收藏  举报