C语言I博客作业03
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-1 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11452 |
这个作业的目标 | 预习循环结构,找出问题,复习之前做过的题 |
学号 | <20208956> |
1.PTA实验作业(15分/题)
1.1求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
1.1.1实验代码截图
1.1.2数据处理
数据表达:使用a,b,sum,i四个变量;sum初始为0,a,b为用户输入的整数,i初始为1;四个变量都是int类型的。
数据处理:在循环体中用sum+=i;使用for循环结构,if语句的分支结构。
使用for循环,用(i-a+1)进行计数、并计算各个时期sum的值,因为题目要求*首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。*所以使用if语句,当一行输出的整数超过五个数是进行换行,以及最后一个整数B时换行。
1.1.3 PTA提交列表及说明
- Q1:一直运行超时很多次了(还有很多次提交),真的搞心态,不知道是什么原因导致超时。
- A1:用了很多种方法,还是没有解决,最终去求助了百度,发现我的if语句与他有较大差别。
- Q2:把if语句的条件改了,改成了i-a。
- A2:i-a是从0开始的,这样的话一行就会记录六个数,原来的是对的。
- Q3:如何做到一排只输出五个整数.
- A3: 一开始没想到,尝试好多种都不对,后来想到引入一个变量表示整数个数,再用他除以五取余,判断余数是否为零即可。
1.2 for循环练习:1到X的累加和,并按指定格式输出。
要求读入1个整数X,然后输出1+2+3+...X 的和。
1.2.1 实验代码截图
1.2.2 数据处理
数据表达:使用X,i,sum;三个变量;sum初始值为0;这三个变量都是整型。
数据处理:使用for语句循环结构和if-else语句。
1.2.3 PTA提交列表及说明
- Q1:这道题不难,但开始做的时候格式错误了。
- A1:我没有注意到当输入的值是2的时候输出的应该是1+2=3而不是1+...+2=3
- Q2:我在改进了if(X<=2)之后发现当输入值为1的时候输出的是1+2=1.
- A2:之后改为了if(X==1)和else if(X+1<=3)。
1.3 厘米换算英尺英寸
1.3.1 实验代码截图
1.3.2 数据处理
数据表达:根据题目要求将n,foot,inch;都定义为整型,输入n进行计算并输出foot和inch。
数据处理:根据题目已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048且foot=1/12*inch有:先将0.3048除到=右边得到foot+inch*1/12=n/30.48;由于题目要求整型而1/12=0,即得到foot=n/30.48;所以inch=n*12/30.4-12*foot;
1.3.3 PTA提交列表及说明
- Q1:刚开始的思路是:把厘米数值转换为米,以此来套用英寸转米的公式,走了弯路。
- A1:因为题目要求输出整数所以在foot+1/12inch=n/30.48可将foot看作整数部分,1/12inch为小数部分
2.阅读代码(-5——5分)
#include<stdio.h>
int fun(int m,int n) //m个苹果放在n个盘子***有几种方法
{
if(m==0||n==1) //因为我们总是让m>=n来求解的,所以m-n>=0,所以让m=0时候结束,如果改为m=1,
return 1; //则可能出现m-n=0的情况从而不能得到正确解
if(n>m)
return fun(m,m);
else
return fun(m,n-1)+fun(m-n,n);
}
int main()
{
int T,m,n;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&m,&n);
printf("%d\n",fun(m,n));
}
}
考虑问题全面:
1.当m<n时,至少有n-m个盘子空着,只考虑m个苹果放m个盘子
2.m>n时fun(m,n-1)和fun(m-n,n)分别代表了将m个苹果放入n-1个盘子,则剩下一个空盘子其余盘子至少有一个苹果和将每个盘子都减掉一个苹果,不会有空盘子。所以m>n的时候有fun(m,n-1)+fun(m-n,n)种.
3.当n=1时,苹果都放在同一个盘子里
4.当m=0时,没有苹果
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第八周 | 18 | 220 | printf,scanf的使用,以及int类型 | |
第九周 | 22 | 231 | if语句分支结构、调用数学函数 | |
第十周: | 25 | 255 | for语句、字符型数据的使用 | switch语句多分支结构、break语句和continue语句 |
3.2 累积代码行和博客字数(5分)
3.3 学习感悟(5分)
刚开始学的时候学“hello world”感觉好简单,可是当我在pta天体赛时,做到第二题就开始感到迷茫了,发现好难,什么都没学,到现在我也还没有做出打印沙漏,并且很多简单的题我都要一两天、两三天才能做对,甚至还做不出,不断的通过百度和csdn去找解决方法,现在发现前段时间并没通过做题学到多少,只是为了去得分,只是把代码记住了,并没有理解到位,做题只是为了把题做出来,不会去思考这个题有多少种解法,怎样让问题变简单。通过这段时间的学习,我开始感受到了逻辑的重要性,在写代码之前要把自己的思路,步骤列写清楚比做出题更重要。