博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三次作业
阅读量:6677 次
发布时间:2019-06-25

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

作业要求

PTA作业

第十一周 第六次作业 7-4 输出华氏-摄氏温度转换表

题目:输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。 温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:第一行输出:"fahr celsius" 接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。 若输入的范围不合法,则输出"Invalid." 

1.实验代码

#include
int main(){int lower,fahr,upper;double celsius;scanf("%d %d",&lower,&upper);if(lower<=upper&&upper<=100){printf("fahr celsius\n");for(fahr=lower;fahr<=upper;fahr=fahr+2){celsius=5*(fahr*1.0-32)/9;printf("%d %5.1f\n",fahr,celsius);}}else{printf("Invalid.");}return 0;}

 2 解题思路

(1)算法: **利用if语句判断数据。利用for语句实现循环,对华氏温度在[lower,upper]内的每个值,使用温度转换公式计算得出的摄氏温度。         

        *用if语句判断输入数据的合法性,即lower是否小于upper

     *lower小于upper时,进行温度转换

        *lower大于upper时,输出错误提示。         

      *温度转换:用for语句进行重复转换,从lower开始,到upper结束,步长为1。         

(2)流程图:

 

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

(1)错误:for语句后加了“;”

(2)有错误提示的截图

   没有输出温度转换表,而是只输出一次结果

(3)编译器设置断点、单步调试的界面截图

(4)解决办法:";"代表空语句,这时循环体为空语句,应删去“;”,循环体语句才能被正常循环。

 

第十二周 第九次作业 7-2 输出闰年

题目:输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:输入在一行中给出21世纪的某个截止年份。

输出格式:逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。

1.实验代码

#include
int main(){ int i,x,n; scanf("%d",&n); if(n<=2000){ printf("Invalid year!"); } else if(n<2004){ printf("None"); } else if(n<=2100){ for(i = 2004;i<=n;i+=4){ if(i%100!=0||i%400==0){ printf("%d\n",i); } } } else{ printf("Invalid year!"); } return 0;}

2解题思路

(1)算法: **利用else if语句和for语句嵌套实现多分支结构和循环结构        

      *利用else if语句,实现n小于2000,n大于2000小于2004,n大于2004三种情况。

         *n小于2000时,打印“Invalid year!”      

         *n大于2000小于2004时,打印“None”

      *n大于2004时,利用for循环中嵌套if语句的结构判断n是否是闰年,如果是闰年,就输出。

(2)流程图

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

(1)错误:if和else配对错误。

(2)有错误提示的截图

(3)编译器设置断点、单步调试的界面截图

 

(4)解决办法:count, sum写程序时要注意缩进,这样可以一目了然,避免了不必要的错误。

 

第十三周 第十次作业 7-1 统计素数并求和

题目:本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

1.实验代码

#include 
int main(){ int M,N,sum,count,i,o; scanf("%d %d",&M,&N); sum=0; count=0; for(i=M;i<=N;i++){ for(o=2;o<=i/2;o++){ if(i%o==0){ break; } } if(o > i/2 && i != 1){ sum=sum+i; count++; } } printf("%d %d", count, sum); return 0; }

2 解题思路

(1)算法: **利用if语句和for语句嵌套实现分支结构和循环结构           

      *利用for语句实现[n,m]区间内每个数字的循环。         

      *第一个for语句中嵌套第二个for语句

     *第二个for语句中嵌套一个if语句,以实现是否为素数的判断

     *如果不是,跳出循环;如果是,进行下一步。         

      *利用if语句,满足条件则sum(素数和)加一,count(素数个数)加一。         

(2)流程图

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

(1)错误:将“printf("%d %d", count, sum);”语句错放在了for语句中,导致每次循环都打印一次count和sum的值。 (2)有错误提示的截图

(3)编译器设置断点、单步调试的界面截图

(4)解决办法:将“printf("%d %d", count, sum);”语句放在了for语句外面,只打印一次。

 

个人总结

1.本周我学习了的内容:for语句,while语句,do while语句,以及它们和if语句,if else语句,else if语句的相互嵌套    我的收获:for语句,while语句,do while语句虽然都是用来实现循环的语句,它们有相似的地方,但也有很大区别。循环次数确定时,宜用for语句;循环体至少执行一次时,用do while语句

2.难点: *三种语句形式的区别和正确选择最合适最简便的语句         

      *嵌套时语句之间的逻辑关系

     *调试的过程始终不太清楚,操作生疏   

  措施: *多加练习,熟悉三种语句  

      *勤于思考,多动脑  

       *写程序时要做好缩进,使代码一目了然,便于检查

     *求助于身边的同学,从她们身上我学习到了许多有用的东西

 

累积代码行数和时间:

时间 11.21 11.22 11.23 11.24 11.25 11.26 11.27
代码行数 30 25 22 18 20 15 33

 

累积博客字数和时间:

时间 11.21 11.22 11.23 11.24 11.25 11.26 11.27
博客字数 0 0 0 0 500 700 1100

 

点评:

 

 

 

 

转载于:https://www.cnblogs.com/DX552ZYM557/p/10028972.html

你可能感兴趣的文章
phalcon的url大小写的问题
查看>>
Tair ldb(leveldb存储引擎)实现介绍
查看>>
【Swift 2.1】为 UIView 添加点击事件和点击效果
查看>>
Js~(function(){})匿名自执行方法的作用
查看>>
android的快速开发框架集合
查看>>
Spring入门导读——IoC和AOP
查看>>
iSCSI存储系统知识
查看>>
一步一步学ROP之linux_x64篇
查看>>
Kali linux 2016.2(Rolling)里的应用更新和配置额外安全工具
查看>>
Java 8 Optional类深度解析
查看>>
联想还是那个联想吗?
查看>>
com.panie 项目开发随笔_前后端框架考虑(2016.12.8)
查看>>
BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
查看>>
ubuntu12.04中shell脚本无法使用source的原因及解决方法
查看>>
备忘录模式
查看>>
git 如何更改某个提交内容/如何把当前改动追加到某次commit上? git rebase
查看>>
eclipse里将java工程改web工程
查看>>
amazon redshift 分析型数据库特点——本质还是列存储
查看>>
[内核]procfs和sysfs
查看>>
R语言中的数据处理包dplyr、tidyr笔记
查看>>