这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I博客作业08 |
我在这个课程的目标是 | 学会理解运用while语句以及深入了解do-while语句 |
这个作业在那个具体方面帮助我实现目标 | 通过PTA作业和阅读教材并练习 |
参考文献 | 《C语言教材》 |
一、PTA作业
1.1求整数的位数及各位数字之和
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过10^9的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
输出样例:
1.1.1数据处理
数据表达:定义了整型int变量i,n,数组长度为10的s[10],以及sum;
数据处理:运用for循环,将输入的数据通过数组s[10]收集余数,每循环一次,利用n/=10,对该数据的第下一位数取余,再循环时逐个加起来就等于sum的值。
伪代码:
#include<stdio.h>
int main()
{
定义整型变量int i,n,s[10]容量为10个数字的数组;
输入scanf("%d",&n);
定义整型int 让sum = 0;
for(i=0;n>0;i++i循环来记录n的位数)
{
s[i]收集n除以10的余数;
让n等于除以10的整数部分,即从右边减少一位数;
sum 收集 s[i]的余数;
}
printf("%d %d",i循环次数即为输入n的位数,sum);
return 0;结束
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
123 | 3 6 | 三位数 各位数之和为6 |
1433223 | 7 18 | 七位数 各位数之和为18 |
10086 | 5 15 | 五位数 各位数之和为15 |
1.1.4 PTA提交列表及说明
提交列表说明:
第二次答案正确:刚写完有点好奇正确了没,就没注意格式美观和对齐,所以稍微修改了一下,这个题没问题;
1.2爬动的蠕虫
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:
输出样例:
1.2.1数据处理
数据表达:定义整型int变量 N,U,D,t;
数据处理:通过while循环语句套用2个if-else反复判断语句N与U的大小运算出时间t;
伪代码:
#include <stdio.h>
int main()
{
int N,U,D,t=0;定义变量
scanf("%d %d %d",&N,&U,&D);输入数据
while(判断条件:当N大于0时)
{
如果if(N比U大)
{
t 变化情况1;
}
否则else
{
t 变化情况2;
}
如果if(N比U小或相等)
{
N距离井口剩余距离 = N-U上爬距离;
}
否则else
{
N距离井口剩余距离 = N-U上爬距离+D休息下滑;
}
}
printf("%d",t);输出时间t
return 0;结束
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
10 5 2 | 5 | 井深为10寸 每1分钟可以向上爬5寸 休息1分钟又下滑了2寸的条件蠕虫爬出井要2分钟 |
15 5 3 | 11 | 井深为15寸 每1分钟可以向上爬5寸 休息1分钟又下滑了3寸的条件蠕虫爬出井要11分钟 |
36 9 4 | 13 | 井深为36寸 每1分钟可以向上爬9寸 休息1分钟又下滑了4寸的条件蠕虫爬出井要13分钟 |
1.2.4 PTA提交列表及说明
提交列表说明:没什么问题,就是数学运算分类讨论;
二、代码互评
同学(陈泽宇)代码:
同学(孙梦娇)代码:
我的代码:
相同点:
结构大致相同,输入变量,一个循环语句框架就表达完了题目意思;
不同点:
1、我和陈同学代码用的是for循环语句,而孙同学用的是while循环语句;
2、陈同学的代码比我们的多一个#include<string.h>,由于我对字符型了解甚少,猜测是跟他表达式里的{0}或者'0'有些联系吧;
3、我的代码定义的是整型数组,而陈同学定义的是字符型数组,孙同学用比较普遍的方法,但我的代码和孙同学的代码每个符号意思都差不多,而和陈同学的就差异有点大,因为我不了解字符型,所以不是很理解陈同学代码的意思,但是既然他对了,就有他的道理,我会回去再研究研究的。
三、学习总结
3.1 学习进度条
|||||
-|-|-|-|-|
周/日期|这周所花的时间|代码行|学到的知识点简介|目前比较迷惑的问题|
第七周|10小时|132行|常用的数学函数,if-else语句|函数的运算问题|
第八周|13小时|156行|学会运用for循环语句和知晓DevcC++调试|对于DevcC++还是不大会用|
第九周|12小时|145行|学会了函数定义和调用函数|对于函数的返回,不是很理解|
第十周|12小时|150行|了解了逻辑运算符和ASCII代码|记不住逻辑运算符的意思以及ASCII代码|
第十一周|5小时|70行|理解并运用switch语句,对数组有些了解|对于数组的使用还是不熟练|
第十二周|8小时|121行|加深了while循环语句的理解,以及理解了数组的定义,还有对于do-while的使用|突然发现自己并不会使用函数写代码,有点迷|
3.2 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第五周 | 464 | 0 |
第六周 | 1017 | 50 |
第七周 | 1638 | 182 |
第八周 | 2533 | 288 |
第九周 | 3421 | 433 |
第十周 | 4399 | 583 |
第十一周 | 5051 | 653 |
第十二周 | 5789 | 774 |
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这周之前,我以外我已经掌握了循环语句,但是我上了课深入学习了while循环语句以及do-while循环语句之后,我发现我错了,不是什么循环结构都可以相互套用的,比如新学的do-while循环语句就是必须先循环一次,再进行条件对比,而其他两种循环语句都是先条件对比再判断是否循环,而且for循环语句的局限性就是循环次数确定,我从中也明白不要以偏概全,我还得加把劲努力学习才行。