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实验作业

C语言I博客作业08_第1张图片

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实验代码截图

C语言I博客作业08_第2张图片
C语言I博客作业08_第3张图片

1.1.3数据测试

输入数据 输出数据 说明
11111111 255 题目要求
0 0
123456 error input! 非二进制
-111111 error input! 非二进制

1.1.4提交列表及说明

C语言I博客作业08_第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实验代码截图

C语言I博客作业08_第5张图片

C语言I博客作业08_第6张图片

1.2.3数据测试

输入数据 输出数据 说明
31 3584229390681 15 题目要求
999 111222333444555666777889 27 最大整数
467 23792529145848203664049488460623364263621222935998096597668332143706876040923150130858910302165120152272186533428503449916726147989531287175826790387818225077325719724006661908160837497025933856768974541993813942422079467047347133 233 调试中已知最大结果

1.2.4 提交列表及说明

C语言I博客作业08_第7张图片

  • 多种错误:一开始用int变量逐位递增来算,结果数据溢出,无法保留高位数变量。
  • 运行超时:将int改为longlong后,虽然例子对了,但是PTA显示超时,,并且依旧无法计算高位数,在询问学长后得知除法会对于计算机会比较难算,于是经过长时间思考后运用了小学学的除法竖式来逐位计算并且逐位输出。

    2.代码互评

  • 同学代码
    C语言I博客作业08_第8张图片

  • 我的代码
    C语言I博客作业08_第9张图片
    C语言I博客作业08_第10张图片
  • 我在循环结构中的if后未加else,我认为我的更加简洁,因为if中的语句是break,只执行一次。

    3.学习阶段

    周/日期 这周所花的时间 代码行
    10/7-10/14 7个小时 130
    10/15-10月17 6小时 75
    10/18-10月26日 12小时 90
    10月27-11月1日 8小时 150
    11月2-11月8日 9小时 117
    11月9日-11月15日 10小时 110

    3.2累计代码行的博客字数

    C语言I博客作业08_第11张图片

3.3学习内容总结和感悟

3.3.1学习内容总结

*思维导图
C语言I博客作业08_第12张图片

3.3.2 学习体会

  • 这周题目较难,主要体现在数学运算方面,一些数学计算要一步一步分解到最简来让计算机执行,让我对编程思路又有了新的了解。

你可能感兴趣的:(C语言I博客作业08)