第三次随笔作业
作业要求:https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2359
一.对pta作业的总结
第11周:这周作业我花时间比较长的是第六次作业的第四题
7-4 输出华氏-摄氏温度转换表 (15 分)
输入2个正整数lower
和upper
(lower
≤upper
≤100),请输出一张取值范围为[lower
,upper
]、且每次增加2华氏度的华氏-摄氏温度转换表。
温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int lower,upper,f; 5 double c;//定义所需的最高、低的温度,摄氏度、华氏度变量 6 scanf("%d %d",&lower,&upper);//输入最低、高华氏度温度 7 if(lower<=upper)//判断输入温度是否合理 8 { 9 10 f = lower;//将最低温赋予华氏度 11 printf("fahr celsius"); 12 for (;f <= upper;f = f + 2)//按题要求没次差两华氏度,进行循环 13 { 14 c = (f-32)*5/9.0;//计算摄氏度的值 15 printf("\n%d%6.1f",f,c); //输出华氏度及其对应摄氏度 16 } 17 } 18 else 19 { 20 printf("Invalid.");//当输入温度不合理时输出错误 21 } 22 }
流程图:
调试过程:
输入合理数:
______________________________________________________________________________________________
输入不合理数:
错误调试和解决办法:
这次在输出格式上错了几次,主要是没看懂题什么意思,但我觉得用\t进行对齐更加好看合理些。
第十二周:这周作业我错的次数比较多的是输出闰年
7-2 输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int year,i; 5 scanf("%d",&year); 6 if(year > 2100 || year <= 2000)//判断输入年份是否在21世纪 7 { 8 printf("Invalid year!"); 9 } 10 else 11 { 12 if(year <= 2003)//判断年份之前是否有闰年 13 { 14 printf("None"); 15 } 16 for(i = 2004;i <= year;i += 4)//判断循环是否到输入年份 17 { 18 if(i % 4 == 0 && i % 100 != 0||i % 400 == 0) 19 printf("%d\n",i); 20 } 21 } 22 return 0; 23 }
流程图:
调试过程:
输入合理年份:
———————————————————————————————————————————————————————————————————————————————————————————————
输入21世纪年份但之前没有闰年
———————————————————————————————————————————————————————————————————————————————————————————————
输入不是21世纪年份
错误调试和解决办法:
这次多数错误是没弄清闰年的定义,和对21世纪年份的理解,其实代码还可以再试着节俭;
第十三周:这周作业我感觉有点意思的是掉入陷阱的数字
7-3 掉入陷阱的数字 (15 分)
对任意一个自然数N0,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1;然后对N1重复这种操作,可以产生新自然数N2;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk,就像掉入一个数字“陷阱”。
本题要求对输入的自然数,给出其掉入“陷阱”的过程。
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int num,n1 = 0,n2 = 0,i,j = 1; 5 scanf("%d",&num); 6 while(num != n1)//查看是否与前一个数相等 7 { 8 n1 = num;//将上次计算的数记录下来 9 for(i = 0,n2 = 0; i < 5; i++)//求每位数和 10 { 11 n2 += num % 10; 12 num /= 10; 13 } 14 num = n2 * 3 + 1; //将数和乘三加一 15 printf("%d:%d\n",j,num);//输出第几个数与计算结果 16 j++; 17 } 18 return 0; 19 }
流程图:
调试过程:
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
输入只用循环一次的数
错误调试和解决办法:
这题主要让我学到了当循环是以重复为退出条件时的简便方法,最早之前我是计算了两次再判断的,但那样会导致判断计算重复。
二、总结和学习进度条
这几周没有做太多十分让我烧脑的题,目前在涉及些存储方面的知识,同时深化对c语言基础语句的理解,比如优先级等方面的问题。
点评同学博客链接
https://www.cnblogs.com/wangxiangbo/p/9948484.html#4123168