C语言I博客作业08
问题 | 答案 |
---|---|
这个作业属于哪个课程 | c语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9978 |
我在这个课程的目标是 | 熟练使用C语言 |
这个作业在那个具体方面帮助我实现目标 | pta习题 |
参考文献 | https://www.icourse163.org/course/ZJU-199001#/info |
1.PTA实验作业
1.1
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
1.1.1数据处理
- 数据表达:x,ten,flag;分别为:字符型变量,表示输入的每一个字符;整型,转化后的十进制数字;整型,判断是否输入非法字符的标志。
- 数据处理:
scanf x;
while x不为\n;
switch x;
if flag为0;
printf error input!。
1.1.2实验代码截图
1.1.3数据测试
输入数据 | 输出数据 | 说明 |
---|---|---|
11111111 | 255 | 题目要求 |
0 | 0 | 零 |
123456 | error input! | 非二进制 |
-111111 | error input! | 非二进制 |
1.1.4提交列表及说明
部分正确:一开始用的定义一个整型变量且逐一取位数来判断和转化十进制,因为int最大位数为15位所以无法计算15位数以上的二进制转化,并且由于longlong也无法完美包含一个高位二进制,于是我想到用字符来逐个接收并且用ten=ten*2+x-‘0’来逐位计算十进制数字。
部分正确:忘记设置非二进制时输出的error input!。
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。
1.2.1数据处理
- 数据表达x,s,n,o,digit;全都为整型变量;分别为输入的数字,可与输入数字相乘的出光棍的最小数,算出光棍的位数,代替光棍进行运算的数字,计算位数的变量。
- 数据处理:运用了printf o/x;
scanf x;
do while x不为0;
if o大于等于x;
1.2.2实验代码截图
1.2.3数据测试
输入数据 | 输出数据 | 说明 |
---|---|---|
31 | 3584229390681 15 | 题目要求 |
999 | 111222333444555666777889 27 | 最大整数 |
467 | 23792529145848203664049488460623364263621222935998096597668332143706876040923150130858910302165120152272186533428503449916726147989531287175826790387818225077325719724006661908160837497025933856768974541993813942422079467047347133 233 | 调试中已知最大结果 |
1.2.4 提交列表及说明
- 多种错误:一开始用int变量逐位递增来算,结果数据溢出,无法保留高位数变量。
- 运行超时:将int改为longlong后,虽然例子对了,但是PTA显示超时,,并且依旧无法计算高位数,在询问学长后得知除法会对于计算机会比较难算,于是经过长时间思考后运用了小学学的除法竖式来逐位计算并且逐位输出。
2.代码互评
-
同学代码
-
我的代码
-
我在循环结构中的if后未加else,我认为我的更加简洁,因为if中的语句是break,只执行一次。
3.学习阶段
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
| - | - | - |
| 10/7-10/14 | 7个小时 | 130 | 选择结构的使用,变量类型的区别及使用 | 为啥老师要让我们看看不懂的代码 |
| 10/15-10月17 | 6小时 | 75 | dev c++的调试,各种运算符的起源及优先级,for循环语句的使用 | <=符号的类别及优先级;前++和后++的区别 |
| 10/18-10月26日 | 12小时 | 90 | 自定义函数的声明和调用 | for循环和while循环各自的利弊 |
| 10月27-11月1日 | 8小时 | 150 | ascll码的作用,switch case简单用法, 数组元素的简单使用,字符的输出与输入 |
| 11月2-11月8日 | 9小时 | 117 | 数组元素的进一步了解 |
| 11月9日-11月15日 | 10小时 | 110 | 伪代码是什么 |
3.2累计代码行的博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
*思维导图
3.3.2 学习体会
- 这周题目较难,主要体现在数学运算方面,一些数学计算要一步一步分解到最简来让计算机执行,让我对编程思路又有了新的了解。