C语言I博客作业08

这个作业属于那个课程
这个作业要求在哪里
我在这个课程的目标是
这个作业在那个具体方面帮助我实现目标
参考文献

1.PTA实验作业

jmu-c-二进制转10进制

输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!

输入样例

11111111

输出样例

255

输入样例

34

输出样例

error input!

1.1.1数据处理

数据表达:

我用了整形变量sum,flag,字符型变量number,sum为转换之后的和,flag用于判断输入的是不是1或0,number为输入的字符型1或0,来储存二进制

数据处理:

定义变量sum来放转化后的值,flag来判断是不是二进制的数1或0,number用来放每个字符
while  (number!='
')
{
    输入number对应的字符
    if   number=='
'   then  end    while
    if   number!='0'或者'1'  then   flag=0   end  while
    else   sum=sum*2+number-'0'
end while
}
if   flag=0   then   输出error input!
else   输出sum

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
11111 31 二进制11111转换成十进制为31
1010101 85 二进制1010101转换成十进制为85
3355 error input! 3355不是二进制

1.1.4 PTA提交列表及说明

提交列表说明
在dev c++上我出现过一下错误

答案错误:将输出error input!写在了循环内并且直接return结束了,使得每次输出都是error input!,后来将其移到循环外才得以正确

1.2爬动的蠕虫

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式

输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例

12 3 1

输出样例

11

1.2.1 数据处理

数据表达:

我定义了整形变量n,u,d,time,sum,n为井的深度,u为蠕虫一分钟爬的距离,d为休息时下滑的距离,time为爬出井的总时间,sum为蠕虫爬行的距离。

数据处理:

定义n,u,d,来分别代表井深,蠕虫每分钟爬行的距离和休息时下滑的距离,time用来统计时间,sum用来判断蠕虫爬行距离的变化
分别输入井深,蠕虫每分钟爬行的距离和休息时下滑的距离
while(1)
{
    sum+=u
    time++
    if    sum>n-1  then  end while
    sum-=d
    time++
}
end while
输出时间time

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
15 4 3 23 如果井深为15寸,蠕虫每分钟爬行4寸,休息时下降3寸,则需要23分钟才能爬上去
10 5 2 5 如果井深为10寸,蠕虫每分钟爬行5寸,休息时下降2寸,则需要5分钟才能爬上去
9 5 4 9 如果井深为9寸,蠕虫每分钟爬行5寸,休息时下降4寸,则需要9分钟才能爬上去

1.2.4 PTA提交列表及说明


提交列表说明

部分正确:在while的后面写了一个终止条件,导致和循环体有矛盾,导致一部分错了,后来将其改为1才正确

1.3 整除光棍

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。
提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式

输入在一行中给出一个不以5结尾的正奇数x(<1000)。

输出格式

在一行中输出相应的最小的sn,其间以1个空格分隔。

输入样例

31

输出样例

3584229390681 15

1.3.1数据处理

数据表达:

我用了整形变量x,d,i,n,字符型数组s[100],x为输入的数字,d为光棍数,i累计光棍的个数,n为数组的下标,s[1000]用于累计d/x的每一个位

数据处理:

定义x为输入的值,d为光棍数,i为光棍的个数,n为数组的下标,数组s[1000]用于收集光棍数除以x的值
输入x的值
while(1)
{
    i++
    if  n!=0或者d/x!=0  then  s[n++]='0'+d/x
    d=d%x
    if  d=0  then   s[n]=''    输出字符串s和i   end  while
    d=d*10+1
}
end  while

1.3.2实验代码截图

1.3.3 造测试数据

输入数据 输出数据 说明
43 2583979328165374677 21 所得的光棍数除以43为2583979328165374677且光棍的个数为21
21 5291 6 所得的光棍数除以21为5291且光棍的个数为6

1.3.4 PTA提交列表及说明

提交列表说明

部分正确:前面想着先将光棍数计算出来在来计算除后的数和光棍的个数,发现循环的次数太多了,使得运行超时,后来逆向思维从前面除起,一边除一遍记录,才得以解决

2.代码互评

(彭杰)同学的代码

我的代码

1.他的代码是先判断距井口的距离是否大于零来判断循环是否结束,在后面判断距离井口的距离和一分钟内爬的距离的大小,如果能爬上去则只加一分钟,不能则再加上休息的时间,后面来判断是否需要加上休息的距离,最后输出时间
2.我的代码是用一个sum变量来记录爬行的距离,如果sum加一分钟爬行的距离大于井口到其头部的距离则跳出循环,否则爬行的距离减去休息下降的距离,时间再加一分钟
3.相比之下,他的代码比我跟通俗易懂一些,他是整体思想,而我是一步一步来写的,下次写代码可以利用他的这种想法

(孙梦姣)同学的代码

我的代码

1.她的代码是按从左到右开始计算的,每次输出一个位的商,每次除完就将s赋值s/x的余数再将其乘十加1,相对于我们算除法的时候调下一位下来,直到s/x等于0为止,如果s%x=0了说明除尽了,再将光棍的个数输出出来,刚开始我是看不懂她i的作用是干嘛的,但是我认为没有必要用变量i,后来将她的代码敲出来再将i去除掉,发现是一样的,证明我的想法是正确的。
2.我的代码是按照平时计算除法的那种方式来计算的,i是每次循环调用的1的个数,每次除出一个数就记录一个数放在s数组内,随后将d赋值d/x的余数再将其乘十加1,相对于我们算除法的时候调下一位下来最后当d=0的时候就将数组最后一个数赋值字符串的终止符号,再输出字符串便是所要的商,和光棍的个数i。
3.总的来说他的代码和我的代码思路是相同的,但是她的数据无法储存起来,只能依次输出,但是我的可以,相比之下我的代码更好一些,

3.学习总结

3.1学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第六周 25小时 434行 常用的数学函数,if-else语句,for语句,自定义函数 自定义函数不会用一个算法来运算多个式子
第七周 8小时 142行 二分支结构和用char输入字符 对于字符型的代码有点看不懂,getchar与putchar还不明白怎么运用
第八周 12小时 343行 多分支结构,switch语句 switch语句用得有点混乱,搞不清什么时候该结束
第九周 14个半小时 503行 自定义函数的用法,怎样用一个算法来运算多个式子 if语句的嵌套不明白是怎样分支的
第十周 8个半小时 181 do-while,while循环语句和continue语句 continue不知道怎么去运
第十一周 28个小时 1246 一维数组和二维数组的基本运用 数组用的不够熟练,老是犯错
第十二周 10个小时 391 学会了整形数组字,浮点型数组和符型数组,学会了结构体struct的运用 struct的嵌套容易搞混变量

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第四周 645 0
第五周 645 0
第六周 1275 434
第七周 2523 576
第八周 3371 938
第九周 5414 1441
第十周 6930 1622
第十一周 9584 2868
第十二周 13222 3259

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会

1.这周自己学习了数组和结构体,数组是基本会用了,但是结构体还只是会最基本的而已,敲书上的结构体嵌套的时候不明白代码的意思,看的不是很懂,不过在刷题的过程中将结构体数组和混合结构体学会了。
2.越到后面问问题的人就几乎没有了,我不知道是我的原因还是他们已经会了,我也不知道这是好事还是坏事,我有点困扰,因为我觉得可能是我自己的问题,可能是我自己哪里出了问题。
3.我觉得重点要转移到掌握编程的思路和基本算法上来,我发现在刷题的时候有好多题目都是看懂了之后没有思路,想不到要我怎样去写这个题目,我觉得现在我应该去找一些经典例子,想到一个思路,就要按自己思路把它写完,让自己了解为什么我要这样写。

原文地址:https://www.cnblogs.com/b1356436060/p/11852924.html