第三次随笔作业

作业要求:https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2359

一.对pta作业的总结

  第11周:这周作业我花时间比较长的是第六次作业的第四题


7-4 输出华氏-摄氏温度转换表 (15 分)

输入2个正整数lowerupperlowerupper≤100),请输出一张取值范围为[lowerupper]、且每次增加2华氏度的华氏-摄氏温度转换表。


温度转换的计算公式:C=5×(F32)/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("
%d%6.1f",f,c); //输出华氏度及其对应摄氏度
16         }
17     }
18     else
19     {
20         printf("Invalid.");//当输入温度不合理时输出错误
21     }
22 }


 

流程图:

调试过程:

输入合理数:

 ______________________________________________________________________________________________

输入不合理数:

错误调试和解决办法:

  这次在输出格式上错了几次,主要是没看懂题什么意思,但我觉得用 进行对齐更加好看合理些。

 第十二周:这周作业我错的次数比较多的是输出闰年

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
",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
",j,num);//输出第几个数与计算结果
16         j++;
17     }
18     return 0;
19 }

 流程图:


调试过程:













————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


输入只用循环一次的数






错误调试和解决办法:
这题主要让我学到了当循环是以重复为退出条件时的简便方法,最早之前我是计算了两次再判断的,但那样会导致判断计算重复。

 二、总结和学习进度条

    这几周没有做太多十分让我烧脑的题,目前在涉及些存储方面的知识,同时深化对c语言基础语句的理解,比如优先级等方面的问题。

  

点评同学博客链接

https://www.cnblogs.com/wangxiangbo/p/9948484.html#4123168

https://www.cnblogs.com/error203/p/9945496.html#4123195

https://www.cnblogs.com/104gyy/p/9918091.html

原文地址:https://www.cnblogs.com/moyoujiang/p/9939932.html