C语言I博客作业10
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10095 |
我在这个课程的目标是 | 熟练地掌握运用C语言,锻炼思维逻辑能力,为以后其他语言的学习打好基础. |
这个作业在那个具体方面帮助我实现目标 | 学习循环结构程序设计与用穷举法解决问题 |
参考文献 | 《C语言程序设计》《C Primer Plus》百度百科 伪代码基本写法 |
1.PTA实验作业
1.1输出三角形字符阵列
本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列.
输入格式:输入在一行中给出一个正整数n(1≤n<7).
输出格式:输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格.
1.1.1数据处理
数据表达:用了变量letter,i,j,n.letter通过赋值得到,n通过直接输入得到,i,j作为循环控制变量.letter类型为字符型,i,j,n全为整型.
数据处理:letter表示大写字母,i,j作为循环控制变量,n表示输入的正整数.
所用表达式:letter='A';letter=letter+1;
流程结构:
Begin
输入一个正整数n
for i←1 to n
{
for j←i to n-i+1
{
printf("%c ",letter);
letter←letter+1
}
printf("\n");
}
End
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4 | 使用题目数据 | |
1 | A | 使用最小n |
6 | 使用最大n | |
2 | 随机n |
1.1.4 PTA提交列表及说明
1.编译错误:int main()写成了int mian()编译错误:定义的函数名在调用时,函数名拼写错误
2.格式错误:输出格式有误,应将printf("%c",letter);改为printf("%c ",letter);.
1.2梅森数
形如2n−1的素数称为梅森数(Mersenne Number)。例如22−1=3、23−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了231-1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。本题要求编写程序,对任一正整数n(n<20),输出所有不超过2n−1的梅森数。
输入格式:输入在一行中给出正整数n(n<20).
输出格式:按从小到大的顺序输出所有不超过2^n−1的梅森数,每行一个。如果完全没有,则输出“None”.
1.2.1数据处理
数据表达:用了变量i,j,n,item,count.n通过直接输入得到,item,count的通过赋值得到,类型全为整型.
数据处理:n表示输入的正整数,i,j表示循环控制变量,item表示for循环中每一项的值,count表示梅森数的个数.
所用表达式:count=0;item=pow(2,i)-1;item%j0;count++;count0;
流程结构:
Begin
输入正整数n
for i←2 to n
{
item←pow(2,i)-1
for j←2 to sqrt(item)
{
if(item%j==0)
break;
if(j>sqrt(item))
{
printf("%d\n",item);
count++;
}
}
if(count==0)
printf("None");
End
1.2.2试验代码截图
1.2.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 3 7 31 | 使用题目数据验证 |
1 | None | 使用最小n |
19 | 3 7 31 127 8191 131071 524287 | 使用最大n |
4 | 3 7 | 随机值n |
1.2.4PTA提交列表及说明
1.部分正确:没有考虑到完全没有梅森数的情况,少了if(count==0)printf("None");.
1.3同构数
一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数.
输入格式:在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符.
输出格式: 1 5 6 25 76 376 625
1.3.1数据处理
数据表达:用了变量i;类型为整型.
数据处理:i是循环控制变量.
所用表达式:ii*i%10||iii%100||i==ii%1000;i=1;i++;
流程结构:
Begin
for i←1 to 1000
{
if(i==i*i%10||i==i*i%100||i==i*i%1000)
printf("%6d",i);
}
End
1.3.2实验代码截图
1.3.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
无 | 1 5 6 25 76 376 625 | 使用题目数据 |
1.3.4PTA提交列表及说明
2.代码互评
我的代码:
同学(1)的代码:
代码差异:
1.在判定是否是素数的for语句的语句二不同,我的是for(j=2;j<=sqrt(item);j++);而同学(1)的是for(j=2;j<=number/2;j++);
2.在判定是否有梅森数时所用条件语句不同,我定义了flag=0;当没有一个梅森数时flag0,printf("None");而同学(2)定义了count=0;当有梅森数时就递增1;当count0时,printf("None");
我的代码:
同学(2)的代码:
代码差异:
1.由于我通过计算已知n=1时,没有梅森数,所以我没有表明n=1的情况,而同学(2)表明了n=1的情况,思路更加清晰.但n=2的情况与下面的for语句重复了,可以删去.
2.我运用了for循环的嵌套,而同学(2)是for循环中加入一个while语句,表达方式不同.
3.由于同学(2)先将n=1时列举出来了,可以不添加一个flag=0或者count=0去区别.
3.学习总结
3.1学习进度条
周数/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较疑惑的问题 |
---|---|---|---|---|
第三周(10/08--10/12) | 12个小时 | 300行左右 | 定义函数,if-else,for循环语句 | 输入与输出格式,空语句 |
第四周(10/14--10/18) | 15个小时 | 250行左右 | for循环语句,基础的循环程序设计,数据的输出宽度 | 数据的输出宽度概念不太清晰,表达式的定义,空语句的定义 |
第五周(10/23--10/26) | 12个小时 | 350行左右 | 自定义函数的声明与调用,break跳出循环,while()循环语句 | 自定义函数的应用 |
第六周(10/30--11/01) | 18个小时 | 500行左右 | if-else的嵌套,学习逻辑运算,条件语句,字符类型以及字符型数据的输入与输出 | 对字符型数据的输入与输出了解太少,缺乏练习,没有理解到getchar()字符输入函数与putchar()字符输出函数以及它们的运用 |
第七周(11/05--11/07) | 24个小时 | 720行左右 | 使用switch语句的三种情况,在switch语句中使用break语句,数组的定义与使用 | continue语句的使用,for语句的嵌套循环 |
第八周(11/12--11/15) | 19个小时 | 810行左右 | 学习使用while和do-while语句实现次数不确定的循环,使用break语句处理多循环条件,以及了解while,do-while,for三种语句的差异 | ASCII码和char类型和int类型的转换,进制数转化的多种方式 |
第九周(11/19--11/21) | 16个小时 | 600行左右 | 学习了for循环的嵌套以及了解break语句和continue语句的用法和区别 | 静态数组和动态数组的区别 |
第十周(11/26--11/28) | 17个小时 | 680行左右 | 使用穷举法解决问题 | 当存在数据溢出情况时,数据的定义与取值范围选取 |
3.2累积代码行和博客字数
3.3学习内容总结和感悟
3.3.1学习内容总结
3.3.2学习体会
在本次作业完成过程中,我产生了一个[errror]Id returned 1 exit status错误,这是我之前从来没有看见过的错误,经过代码分析,我发现是我的int main()错打成为int mian()而导致的错误,在网上百度这个错误点时,发现该错误可能有如下原因:
1.库函数拼写错误。如:printf,scanf,等
2.定义的函数名在调用时,函数名拼写错误
3.在执行函数时可能函数体本身的问题
4.可能有程序正在运行
此外,在pta刷题经常遇见数据溢出的情况,当发生整型数据溢出时就要考虑换整型变量符号.还有一个问题就是----就我而言,我对于ASCII码的运用与计算太过于生疏.