C语言I博客作业10
这个作业属于哪个课程 | C语言程序设计I |
---|---|
这个作业要求在哪里 | 作业链接 |
我在这个课程的目标是 | 熟练掌握C语言,能独立完成简单项目,毕业前想做出一个简单的游戏 |
这个作业在那个具体方面帮助我实现目标 | 熟练掌握for语句的嵌套使用 |
参考文献 | 作业评价标准 |
1、PTA实验作业
1.1编程打印空心字符菱形
问题描述:本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。
1.1.1 数据处理
- 数据表达:定义了4个整型变量和一个字符型变量,h表示输入的菱形的高,i,j,k都是for语句中用来计算的变量,无特殊含义;op表示输入的字母。
- 数据处理:
伪代码如下
定义整型变量h,i,j,k;
定义字符型变量op;
输入h,op;
for(i=1;i<=(h/2)+1;i++)//(h/2)+1表示菱形上半部分行数,要一行一行输出,且知道具体有多少行,所以用for循环
{
for(j=1;j<=(h/2)+1-i;j++)//确定每一行开头要输出几个空格
输出空格;
printf("%c",op); //输出每行第一个字母
for(k=1;k<2(i-1);k++)//输出一个字母后,计算要打多少个空格
输出空格;
if(i!=1)//如果不是开头字母,就在结尾补一个相同字母,构成菱形
输出字母;
换行;
op++;//换下一个字母继续循环
}
op--;//抵消上个循环的op++
for(i=1;i<=(h/2);i++)//开始下半部分的计算
{
op--;//把op换成上一个字母
for(j=1;j<=i;j++)//接下来的流程与上半部分差不多,只是循环终止条件稍有改动
输出空格;
printf("%c",op);
for(k=1;k<=h-2(i+1);k++)
输出空格;
if(i!=h/2)
输出字母;
换行;
}
}
1.1.2 实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
B 5 | 运行图 | 样例,正确 |
A 7 | 运行图 | 随机数,正确 |
1.1.4 PTA提交列表及说明
- 1、答案错误:开始没思路,走一步提交一次,都是逻辑错误或者代码不完整。
- 2、编译错误:编译错误出现了十来次,各种英文大小写和拼音英文字符错误。
- 3、部分正确:菱形的下半部分计算所用的for语句的表达式有问题,不适用于所有情况,改进后正确。
1.2梅森数
问题描述:本题要求编写程序,对任一正整数n(n<20),输出所有不超过2的n次方−1的梅森数。
1.2.1 数据处理
- 数据表达:定义了7个整型变量,n表示输入的正整数,i表示能表示为2的n次方-1的数,j和k是for语句中用来计算的中间变量,无特殊含义,Q用来判断i是否为素数,flag作为是素数的标志,g为计数器。
- 数据处理:
伪代码如下
定义整型变量n,i,j,k,Q,flag,g;
输入数据n;
for(k=1;k<=n;k++)
{
i=pow(2,k)-1;//找出范围内所有能表示为2的n次方-1的数
for(j=2;j<=i-1;j++)
{
Q=i%j;//判断i是否为素数
flag = 0;
break;
}
else
flag = 1;//素数标记
}
if(flag1 )
{
输出i;计数器++;
}
}
if(g0)
输出None;
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 3 7 31 | 样例,正确 |
8 | 3 7 31 127 | 随机数,正确 |
1.2.4 PTA提交列表及说明
- 1、部分正确:这个题纠结了蛮长时间,一直提示测试点0运行超时,在VS2019上调试了半个小时也没发现哪里不对,然后觉得可能是算法有问题,开始我是用for从一开始往下算,一直算到2的n次方-1,猜可能是数据过大而导致的运行超时,仔细审查题目发现所求的数满足“能表示为2的n次方-1形式”这个要求,改进后减少了很大的计算量,再次提交就无运行超时现象了。
- 2、编译错误:出现编译错误纯属手残,printf里忘了加双引号。。。。。。
2、代码互评
同学代码
我的代码
- 1、该同学没有采用定义字符型变量的方法进行计算,而是用代数计算的方法算出字母的ASCII码值,方法很新颖,答案也正确,有自己的风格。
- 2、我的代码较为平凡,就是中规中矩的思维,定义字符型变量来计算,把逻辑过程程序化,过程较清晰,比较好理解,虽然不如该同学的新颖,但答案正确且代码规范。
3、学习总结
3.1 学习进度条
日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
10/7--10/13 | 9+个小时 | 100+ | 编写if-else语句,算术运算与赋值运算规则等 | while语句的使用以及适用范围 |
10/14--10/20 | 8+个小时 | 190+ | for的使用,if-else与for的组合使用 | while与for的区别 |
10/21--10/27 | 6+个小时 | 340+ | 定义函数与调用 | 对函数的定义与调用不熟悉 |
10/28--11/3 | 6+个小时 | 260+ | if-else的镶嵌结构 | 用太多if-else会比较混乱 |
11/4--11/10 | 6+个小时 | 170+ | switch语句的基本运用 | switch与if-else的区别 |
11/11--11/17 | 6+个小时 | 120+ | while语句的使用 | 什么是指针 |
11/18--11/24 | 6+个小时 | 90+ | continue的使用以及其与break的区别 | 什么是指针,长度可变数组与长度固定数组的区别和适用情况 |
11/25--12/01 | 7+个小时 | 160+ | for语句的嵌套 | 函数的分类 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
- 答:1、本周学习的内容不多,因为for语句已经学过了,for的嵌套只能当作进一步提高for语句的掌握程度,以及锻炼逻辑思维。
- 2、这周的PTA作业题目难度中等,个人感觉挑战题比基本题简单,第一题更应该作为挑战题,虽然不容易,花了很多时间,但做出来了还是很有成就感,题目永远做不完,题型却可以总结,老师上课也说了要善于总结相同题型,我十分认同这点,未来的路还很长,还需努力前进。
4、PTA挑战题————同构数
问题描述:一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。
数据处理
- 数据表达:定义了i和Q两个整型变量,分别表示1-1000中任意数及其平方。
- 数据处理:
伪代码如下:
定义Q,i;
for(i=1;i<=1000;i++)//依次计算1001个数
Q=i*i;
if(Q%10i或Q%100i或Q%1000==i)
输出i;//注意此处输出要占六位所以应该写"%6d"
实验代码截图
造测试数据
PTA提交列表及说明
- 1、输出时未注意到每个答案要占六列,所以出现了格式错误。
- 感想:相比其他题目,其实这次的挑战题真的算很简单了,但我却没能一次答对,还是出现了错误,这让我明白了一个道理,每个题目都有他的价值,不能因为它简单而不做,这只是你逃避的借口,是不负责的表现,作为学生应该积极进取,认真对待每次作业。