C语言I作业08
| |
---|:--😐---:
|这个作业属于那个课程| C语言程序设计II
|这个作业要求在哪里| http://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/9977
|我在这个课程的目标是| 精通c语言
|这个作业在那个具体方面帮助我实现目标| 学会了用函数结构简化数学问题,优化程序运行
|参考文献 |c语言程序设计
1.PTA实验作业(20分/题)
从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:
1.1 题目名1
7-3 jmu-c-二进制转10进制 (20 分)
输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!
输入样例1:
11111111
输出样例1:
255
输入样例2:
34
输出样例2:
error input!
1.1.1数据处理
#include<stdio.h>
int main(){
声明变量用于计算进制 s = 0;
声明字符 n;
死循环while(1){
输入字符 n;
if(按下回车)
跳出循环;
else
if( 输入字符为'1'、 '0')
s = s*2 + (n - '0');//计算二进制到十进制的公式
else
跳出循环;
}
if(按下回车)
输出结果 s;
else
输出"error input!";
return 0;
}
1.1.2实验代码截图
1.1.3 造测试数据
|输入数据 |输出数据 |说明
|:--|:--😐:--😐--:
| -1 | error input! |负值
| 1 | 1 |1
| 11111111 | 255 |题目所给
1.1.4 PTA提交列表及说明
部分正确:由于我一开始的解题方向就错了,用的是没有字符的方法,所以总有一个测试点没过(但是代码可以解决问题)
解决方法:改用字符
如果不用字符的解法如下(但题目要求字符,所以测试点有字符存在,因此会有一给测试点报错):
1.2 题目2
7-6 整除光棍 (20 分)
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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 数据处理
#include<stdio.h>
int main()
{
声明变量 x, s = 1, n = 1;
给x赋值
while (s < x)//为了使下面不在答案前输出0
{
s = s * 10 + 1;
n++;
}
while(1)
{
if (s % x 整除了)
{
printf("%d", s / x);
break;
}
else
{
输出s / x; //没有上面的while (s < x)部分会出现因s < x而打印出0
s = s % x或s - x; //加不加while (s < x)部分虽然答案数值大小没影响
s = s * 10 + 1; //但题目要求数值前面没有0
n++(计数有几根光棍);
}
}
输出光棍个数 n;
return 0;
}
ps:送大家一张能豁然开朗的图= ̄ω ̄=
1.2.2实验代码截图
1.2.3 造测试数据
|输入数据 |输出数据 |说明
|:--|:--😐:--😐--:
| 31 | 3584229390681 15 |题目所给
| 1 | 1 1 |x=1
| 111 | 1 3 | x为光棍
1.2.4 PTA提交列表及说明
部分正确:就如我上面数据处理说的一样,我的答案前多输出了0
编译错误:改代码时少打了个“;”
解决方法:加上我在数据处理中的while (s < x)部分即可
2.代码互评(5分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码截图
同学1
同学2
自己代码截图
1.第一位同学用的是while循环加if else结构,并且设置了数组,但其实可以不用数组
2.第二位同学有两个return 0;可以将两种情况分开结束
3.我的代码运用while(1)死循环,并将按回车作为跳出循环的条件
3.学习总结(15分)
3.1 学习进度条(5分)
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 2h | 72 | 输出 | 对于输出的符号还不熟 |
第二周 | 3.5h | 57 | 计算 | 算法陌生 |
第三周 | 3.5h | 81 | 分支结构 | 分支的逻辑理不清 |
第四周 | 1.5h | 180 | for循环,+= | 终止条件理不清 |
第五周 | 2h | 600 | 函数结构 | 对于算法的处理比较迷惑 |
第六周 | 2h | 1000 | 嵌套 | 对于嵌套的结构过多会解读的很吃力 |
第七周 | 2h | 1246 | switch结构 | switch结构里的case最后若是不加break会怎么样 |
第八周 | 3h | 1102 | while结构 | 字符的运用不熟 |
3.2 累积代码行和博客字数(5分)
3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结
3.3.2 学习体会
这周我在写pta上的感觉就是吃力,真的非常吃力,但也痛并快乐着吧,那种将一道道难题搞懂的感觉真的很不错
但同时我也发现自己的思维不够灵活,并且对于字符的运用还十分陌生,之后还需多加练习,不过我感觉我的伪代码
写的比之前好些了,我还会继续加油的!(。・∀・)ノ