博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言博客作业--嵌套循环
阅读量:6900 次
发布时间:2019-06-27

本文共 2469 字,大约阅读时间需要 8 分钟。

一、PTA实验作业

题目1:梅森数

1. 本题PTA提交列表

1233924-20171107222208372-811160462.png

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.本题调试过程碰到问题及解决办法

1233924-20171108114336138-540120623.png

1233924-20171108114342356-470350135.png

第一次写时我直接忽略了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提交列表

1233924-20171108114725606-1866611557.png

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.本题调试过程碰到问题及解决办法

1233924-20171108121136888-1923867003.png

这道题看似程序比较比较简短,但是却有许多小问题,如首先我把printf语句放在for外面,然后直接在if后break,原先觉得没问题,但是输出时是错的。后来把printf

移进去才成功。还有就是i的值可以写成限制在5,因为50*80==4000>3848。大大减小了运算的量。

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

1. 本题PTA提交列表

1233924-20171109200028952-712117016.png

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++)

1233924-20171110121900747-776786478.png

做这道题时 我不知道如何去比较大小,后来想到先定义最大值最小值来做参考值

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

二、同学代码结对互评

1.互评同学名称

徐宏伟

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

1.梅森数

我的:
1233924-20171110124044169-1094959415.png

徐宏伟:

1233924-20171110124234169-312514484.png

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

这题我和他不同的地方在于对于跳出出循环的处理,宏伟的是使用一个flag来对比,当循环没有结束时flag=0结束时等于1

来判断梅森数,而我是用j>mer/2&&mer!=1这个条件来判断。在这一点我觉得两种处理反法都可行,没有较大优劣。还有就是
我是把n==1的情况是单独拿出来分析的,而宏伟是直接用count==0来区分,这一点想对我的方法简洁了很多。

1.互评同学名称

徐宏伟

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

2.歌唱比赛评分系统

我的:

1233924-20171110125355184-1467567978.png

徐宏伟:

1233924-20171110125429263-719160702.png

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

不同之处在于我实在开头就定义了一个最大值最小值,然后在给他赋值max=-1;min=101;,而宏伟是用第一个值做为为最大值最小值

,这样的话等于多写了一个输入语句,较为繁琐。还有就是他是用for语句我是用while语句,相比之下我更喜欢用while,因为这样少写了
一个变量。

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

1233924-20171110131109591-542096501.png

四、本周学习总结

1.你学会了什么?

1.我学会了控制输出时字符的宽度

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

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

1.经过两次循环作业的洗礼,对于循环这一语法已经越来越熟练,但是但遇到一些奇怪的题时,总是无从下手,

如空心菱形这题根本不会理解。还是要加强对于题目及循环的加深了解。还有就是在嵌套循环中,我总是对于赋值
这一方面失误颇多。当循环结束是要再次赋值的情况总是忽略。以及对于while do while 的区别与使用,在老师讲解
后初步认识当还是要多加练习。

转载于:https://www.cnblogs.com/czx153/p/7801831.html

你可能感兴趣的文章
浏览器内核
查看>>
zabbix-server安装部署配置
查看>>
终于解决 xUnit.net 测试中无法输出到控制台的问题
查看>>
【素数筛】分解质因数
查看>>
【ADT】队列的基本C语言实现
查看>>
NYOJ-1057 寻找最大数(三)(贪心)
查看>>
qt信号和槽
查看>>
第二章
查看>>
【Beta阶段】第六次Scrum Meeting
查看>>
nginx.conf配置文件详解
查看>>
maven使用问题汇总
查看>>
JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】
查看>>
beautifulsoup 的children和descandants
查看>>
容器化微服务
查看>>
windows下redis 开机自启动
查看>>
python+selenium自动化测试-定位方式
查看>>
一致性Hash(Consistent Hashing)原理剖析
查看>>
Go并发编程实战 (郝林 著)
查看>>
android handler msg的使用 实现进度条
查看>>
485. 最大连续1的个数
查看>>