C语言I博客作业09
这个作业属于哪个课程 | C语言程序设计I |
---|---|
这个作业要求在哪里 | C语言I-2019秋作业09 |
我在这个课程的目标是 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 |
这个作业在那个具体方面帮助我实现目标 | 帮助我认识到自己的不足,熟悉循环语句的使用 |
参考文献 | 百度百科 |
一、PTA实验作业
1、打印九九口诀表
题目
下面是一个完整的下三角九九口诀表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本题要求对任意给定的一位正整数N,输出从 1*1
到 N*N
的部分口诀表。
数据处理
数据表达: 获取乘法表需要创建的阶数
数据处理: 使用双for
循环进行输出
伪代码:
- 获取循环截至条件
- 使用
for (int i = 1; i <= (长度); i++)
的形式进行双for
遍历 - 其中值得注意的是第二次
for
循环的停止的条件是第一次for
循环的遍历量 - 使用
%-4d
进行占位输出,达到排版的效果
#include<stdio.h>
int main()
{
int N;
scanf("%d", &N);
for (int i = 1; i <= N; i++) // 确定乘法表的行数
{
for (int j = 1; j <= i; j++) // 确定乘法表每行的个数
printf("%d*%d=%-4d", j, i, j*i);
printf("\n");
}
return 0;
}
代码截图
造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
5 | 如图所示 | 无 |
PTA提交列表及说明
格式错误
在我刚开始写这题代码时,并没有注意到格式问题,总是会有这样一个错误,但是当我尝试很多次之后空格排版之后,我在想是不是有一种类似于%.2f
的东西(用于输出自定义小数位的double
类型),于是在我查阅文档之后,我找到了解决的方法——%-4d
。这个东西可以进行格式排版,可以让不超过千位的数字占用四个格子,这与题目的要求十分符合,于是我就使用了这个方法,然后成功解决了此问题。
答案正确
2、跟奥巴马一起画方块
题目
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
数据处理
数据表达: 获取正方形的边长
数据处理: 使用双for
循环进行输出
伪代码:
- 获取边长
- 选用
ceil
函数来进行向上取整(指在数轴上向正数的一方进行取整数操作,如:1.5 -> 2) - 将向上取整的数定为第一个
for
循环截至条件 - 输出即可
#include <stdio.h>
#include <math.h>
int main()
{
double num = 0;
char character;
scanf("%lf %c", &num, &character);
for (int i = 0; i < ceil(num / 2); i++)
{
for (int j = 0; j < num; j++)
{
printf("%c", character);
}
printf("\n");
}
return 0;
}
代码截图
造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
10 a | 如图所示 | 无 |
PTA提交列表及说明
运行时错误
第一次提交的时候,我使用的是int
型变量储存数据,但是我忘记了ceil()
只能用double
型变量储存数据,所以说就出现了这个运行时错误的错误。并且,在我翻阅了常见问题文档之后并没有发现这一类问题,这可能是我以后需要深究的点。
答案正确
在我仔细调试后发现,是ceil()
这个函数的问题,改正后发现可以正常使用并通过了评测。
二、代码互评
同学代码
#include<stdio.h>
int main()
{
int n, i, j, num;
char c;
scanf("%d %c", &n, &c);
num = n / 2.0 + 0.5;
for (i = 0; i < num; i++)
{
for (j = 0; j < n; j++)
{
printf("%c", c);
}
printf("\n");
}
}
我的代码
#include <stdio.h>
#include <math.h>
int main()
{
double num = 0;
char character;
scanf("%lf %c", &num, &character);
for (int i = 0; i < ceil(num / 2); i++)
{
for (int j = 0; j < num; j++)
{
printf("%c", character);
}
printf("\n");
}
return 0;
}
这位同学的代码在for
循环结构上,并没有太大的区别,都还是比较浅显的东西。但是在for
循环的停止条件上,和我不一样了。
我采用的方法是:使用ceil
函数向上取整,以实现11 / 2 = 6
的目的,而同学的代码却是使用int
类型不会保留小数的特点,进行0.5的加和,来达到目的。
两种方法都能实现,我使用新型的函数来达到目的,同学使用的是数据类型的特点来实现,各有千秋,也学习到了新的知识
3.学习总结
3.1学习进度条
周/日期 | 周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第3周/10月6~16 | 3天 | 181行 | if-else语句,递归,分段函数的计算 | 对这些还不是很熟练,对这些符号的使用跟空格的使用不是很清楚 |
第4周/10月10~17 | 2天 | 181行 | for循环语句与逻辑符 | 循环语句使用不够熟练,数学循环问题也有很多不明白的事情,不知道先后 |
第5周/10月18~24 | 10h | 148行 | 基本程序语言与生成乘方表与阶乘表 | 基本程序语言了解的都差不多了,有些不是特别熟练还是需要加强练习的,生成乘方表跟阶乘表这方面的内容还有很多不懂的,觉得完成作业很费力气,要查阅各种资料,可能跟我数学理解能力不强也有关系吧。 |
第6周/10月25~31 | 22h | 371行 | 多分支结构、字符型数据类型和逻辑运算符。顺便研究了几个心形的代码,觉得挺有趣。 | 就是有时候总是会丢三落四,然后也比较迷惑一些运算符使用方法,分之这一块还是不够熟练。 |
第7周/11月1~7 | 25h | 211行 | 熟悉多分支结构switch语句的使用、字符型数据类型和逻辑运算符。 | 迷惑的真的太多太多了,但是百度大法真不错,虽然没有白嫖别人的答案解释香,但是还是很有用,一学就让我停不下来的那种。对数学研究的还是不够好,所以做很多题目转不过弯来,要努力克服。 |
第8周/11月8~14 | 22h | 241行 | 熟悉使用while和do-while结构解决问题。 | 上课听的不太明白,课后也有查找资料,但是还是有很多不懂的,然后最近在做学习总结,想把自己不懂的都整理出来然后弄懂。 |
第9周/11月15~21 | 26h | 500行 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 | 想知道为什么会出现运行时错误 |
3.2累计代码行和博客字数
3.3学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
1,丢三落四的习惯还是很难改的,不过尽力在改正了。这周花在码代码的时间多了一些,然后可能因为一些事情吧然后对这门课程的兴趣有所提高。这周学了循环语句中容易混淆的两个语句,然后自己又百度百科了一些其他的知识。觉得还是挺充实的,还需要继续努力继续提高,要变得更优秀。
2,我觉得课前预习真的管用,因为课前预习了上课就不会迷糊然后不会的没解决的还能听老师讲还可以跟老师讨论,也可以在遇到问题的时候就及时百度,然后要是看不懂解释再去询问其他的同学。
3,感觉自己的自学能力还是太弱了,然后对许多知识点的掌握也不够深,感觉自己菜炸了。