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(表达式);
posted @ 2019-11-14 23:17  ahhhhhhhhhhhhhh  阅读(396)  评论(2编辑  收藏  举报