C语言I博客作业08
||
-|-|
这个作业属于那个课程|C语言程序设计II
这个作业要求在哪里|作业要求
我在这个课程的目标是|会使用c语言进行编程序
这个作业在那个具体方面帮助我实现目标|写PTA作业,帮助自己进行总结
参考文献|【PTA 天梯赛】L1-046 整除光棍(除法模拟)
1.PTA实验作业
1.1jmu-c-二进制转10进制
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
输入样例1:
11111111
输出样例1:
255
输入样例2:
34
输出样例2:
error input!
1.1.1数据处理
数据表达:定义整型变量n, i, sum, b, c,定义数组a,n用于输入数组a的下标,i用于for循环,sum算十进制的数,b用于判断输不输出十进制数,c为计算十进制数数组a的下标。
数据处理:
定义整型变量n, i, sum, b, c,定义数组a,n用于输入数组a的下标,i用于for循环,sum算十进制的数,b用于判断输不输出十进制数,c为计算十进制数数组a的下标。
do
{
n累加1;
输入个字符赋值给数组a[n];
} while (a[n] != '\n');
end while;
n赋值给c;
for i = 0 to n
c累减1;
if a[c] == '1'
sum累加求十进制数;
else if a[c] == '0'
跳到下次循环;
else
输出error input!;
把0赋值给b;
跳出循环;
end for
if b == 1
输出sum十进制数;
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
11111111 | 255 | 二进制11111111转换成十进制为255 |
34 | error input! | 34不是二进制 |
101010 | 42 | 101010转成十进制为42 |
1.1.4 PTA提交列表及说明
提交列表说明:
部分正确1:我定义输入的二进制为整数型,然后数据爆了,后面改用字符型输入。
部分正确2:for循环结束条件错了,多了个等于,把等于去了就对了。
1.2 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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)。
输出格式:
在一行中输出相应的最小的s和n,其间以1个空格分隔。
输入样例:
31
输出样例:
3584229390681 15
1.2.1数据处理
数据表达:定义整型变量x,s,n,x为输入的数,s用于算光棍数除以x的,n用于计算光棍的位数。
数据处理:
定义整型变量x,s,n,x为输入的数,s用于算光棍数除以x的值,n用于计算光棍的位数。
输入x;
while (s < x)
在s后面加1;
n累加1;
end while
while (1)
输出s除以x的整型数; //这使用的笔算的方式,输出除以x得的整数,然后在余数后面加1在进行计算
把s除以x的余数赋值给s;
if s == 0
{
跳出循环;
}
在s后面加1;
n累加;
end while
输出n,光棍的位数;
1.2.2实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
31 | 3584229390681 15 | 所得的光棍数除以31为3584229390681且光棍的个数为15 |
9 | 12345679 9 | 所得的光棍数除以9为12345679且光棍的个数为9 |
1.2.4 PTA提交列表及说明
提交列表说明:
部分正确:我用的长整型后面加1,算到后面数据就爆了,后面百度,发现他们写这题是靠笔算的方法写出来的,取余数后在后面加1。
1.3爬动的蠕虫
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:
12 3 1
输出样例:
11
1.3.1数据处理
数据表达:定义整型变量N, U, D, minute, sum,N为井深,U为向上爬1分钟的长度,D为休息1分钟下滑的长度,minute为蠕虫爬出来的时间,sum为蠕虫爬的长度。
数据处理:
定义整型变量N, U, D, minute, sum,N为井深,U为向上爬1分钟的长度,D为休息1分钟下滑的长度,minute为蠕虫爬出来的时间,sum为蠕虫爬的长度。
输入井深,向上爬1分钟的长度,休息1分钟下滑的长度;
do
{
sum累加U;
minute累加1;
if sum < N
{
sum累减D;
minute累加1;
}
} while (sum < N);
输出爬出洞所用的时间;
1.3.2实验代码截图
1.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
12 3 1 | 11 | 爬出12寸深的洞要11分钟 |
2 5 2 | 1 | 爬出2寸深的洞要1分钟 |
1.3.4 PTA提交列表及说明
提交列表说明:
部分正确:while的结束条件多了个等于,把等于去掉就行了。
2.代码互评
同学代码截图
自己代码截图
1.他的代码跟我的代码计算二进制转十进制的算法不一样,他是累成2再加1或0,我是用下标算法。
2.他是每输入一个字符处理一个字符,我是把字符都存下来了。
3.他的代码应该报错的,sum没有赋值,不知道为啥对了,pta这个运行环境还是有点不好啊,这串代码有问题都对了。
同学代码截图
自己代码截图
1.我们代码计算s的方法都一样的,用光棍数除以输入的数取整输出,再余数加1,继续除以输入的数取整输出。
2.我是先用一个while把光棍数加到大于输入的数,再进行取整输出,他的代码是一个while里面用if进行判断。
同学代码截图
自己代码截图
1.我们代码算时间的方法都是一样的
2.不同之处在于,我用的是do-while,他用的是while,我有结束条件,他是通过if判断然后跳出循环。
3.学习总结
3.1 学习进度条
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
这周学习了while,do-while语句,是循环的一种语句,主要用于没有给定循环次数的循环。
现在做题目都需要逻辑思维,我看了别的刷题网站,入门题目就要用到冒泡排序,能够想到到后面会有多难,我发现到后面就真的是在做数学题,有思路,会怎么去解决这个问题就能写出来。
while语句的一般形式为:
while(表达式) 语句
其中表达式是循环条件,语句为循环体。
do-while语句的一般形式为:
do
语句
while(表达式);