第三次作业
作业要求https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2360
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<stdio.h> 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<stdio.h> 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 <stdio.h> 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/mayijing/p/10017399.html
https://www.cnblogs.com/chumengGTRlhz/p/9991154.html
https://www.cnblogs.com/abcdsjjs/p/10029383.html