C语言I博客作业09
这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | C语言I博客作业09 |
我在这个课程的目标是 | 熟悉代码的编程,设计出一个小程序,能够正常运行并且能够拥有一定用户 |
这个作业在哪个地方具体方面帮助我实现目标 | 熟悉了break、continue的使用 , 熟悉使用循环的嵌套解决问题 |
参考文献 | C语言课本 百度百科 |
1.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,输出从11到NN的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
输入样例:
4
输出样例:
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.1.1数据处理
数据表达:用了整型变量i表示行,j表示列,N表示数字
数据处理:用到了for循环的嵌套,主要循环体结构是 (i=1;i<=N;i++) (j=1;j<=i;j++),%-4d表示等号右边数字占4位
伪代码:
#include<stdio.h>
int main()
{
int i, j, N = 1; //定义三个整型变量
scanf ("%d",&N);
for(i=1;i<=N;i++) //行累加
{
for(j=1;j<=i;j++) //列累加
{
printf ("%d*%d=%-4d",j,i,j*i); //此处注意%-4d表示的是等号右边数字占4位
}
printf ("\n"); //换行
}
return 0;
}
1.1.2实验截图代码
1.1.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4 | 1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 | 此处用符号x代替了符号*,真实输出时是符号星字符 |
1 | 1x1 | 此处用符号x代替了符号*,真实输出时是符号星字符 |
2 | 1x1=1 1x2=2 | 此处用符号x代替了符号*,真实输出时是符号星字符 |
1.1.4 PTA提交列表及说明
说明:关于这道题目,我做了很长时间,一直在做这道题,直到把这道题目做出来。我主要出现的错误就是格式错误,第一次,我发现我的行(i)和列(j)的输出搞反了;更正之后发现,依旧是格式错误,然后我找了大概一个小时没找出来下一个问题在哪里,然后,我询问了大佬,知道了终极错误是printf那里的空格原因,然后我增增减减的尝试了很多地方的空格,还是格式错误,我又尝试了新的方法写,再for里面镶嵌if,但是还是错误,最终,我询问了另外一位大佬,发现她的代码和我的只有一个地方不同,在空格的处理方面,她用的是 (%-4d)来表示四个空格,而我当初是直接在%d的后面打了四个空格,发现这一点后,我上网查询了相关资料,弄懂了此空格的表达方式。
1.2题目名 (换硬币)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
输入格式:
输入在一行中给出待换的零钱数额x∈(8,100)。
输出格式:
要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。
输入样例:
13
输出样例:
fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4
1.2.1数据处理
数据表达:使用了六个整型变量,其中有不同数额硬币的表示,总钱数的表示,总换法的表示
数据处理:进行了for循环的嵌套,使用了if语句
伪代码:
#include<stdio.h>
int main()
{
int fen5, fen2, fen1, x, total, count=0; //定义六个整型变量
scanf("%d", &x);
for(fen5=x/5; fen5>0; fen5--) //五分硬币的个数进行循环计数
{
for(fen2=x/2; fen2>0; fen2--) //两分硬币的个数进行循环计数
{
for(fen1=x; fen1>0; fen1--) //一分硬币的个数进行循环计数
{
if(fen5*5+fen2*2+fen1==x) //当硬币总钱数等于输入值时输出下列数据
{
total=fen5+fen2+fen1; //表示硬币的总个数
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", fen5, fen2, fen1, total); //按照题目规定形式输出
count++; //不同硬币的组成方法的换法个数
}
}
}
}
printf("count = %d", count); //输出个数
return 0;
}
1.2.2实验截图代码
1.2.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
8 | fen5:1, fen2:1, fen1:1, total:3 count =1 | 1个五分的硬币,1个两分的硬币,1个一分的硬币,总共1个硬币,一种换法 |
12 | fen5:1, fen2:3, fen1:1, total:5 fen5:1, fen2:2, fen1:3, total:6 fen5:1, fen2:1, fen1:5, total:7 count = 3 | 1个五分的硬币3个两分的硬币1个一分的硬币总共5个硬币,1个五分的硬币2个两分的硬币3个一分的硬币总共6个硬币,1个五分的硬币1个两分的硬币5个一分的硬币总共7个硬币,三种换法 |
1.1.4 PTA提交列表及说明
说明:Q1:运行超时
A1:循环次数太多,陷入了死循环,代码书写不正确
Q2:答案错误
A2:重写代码时写漏了total,多次检查才发现
1.3题目名 (跟奥巴马一起画方块)
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
1.3.1数据处理
数据表达:用到了三个整型变量N表示正方形边长,i表示行,j表示列,用到了字符型变量a
数据处理:用到了for循环的嵌套,用到了if-else语句
伪代码:
#include<stdio.h>
int main ()
{
int N,i,j; //定义三个整型变量
char a; //定义字符型变量a
scanf ("%d %c",&N,&a);
if (N%2==0) //条件语句,当N可以整除2时进行下面的循环
for(i=1;i<=N/2;i++) //执行for循环i表示行
{
for (j=1;j<=N;j++) //执行for循环j表示列
{
printf ("%c",a); //输出a的相关矩形
}
printf ("\n"); //表示换行
}
else //当N不能整除2时执行下列循环
for(i=1;i<=(N+1)/2;i++) //此处要注意是i<=(N+1)/2 余数四舍五入
{
for (j=1;j<=N;j++)
{
printf ("%c",a);
}
printf ("\n");
}
return 0;
}
1.3.2实验截图代码
1.3.3造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4 a | aaaa aaaa | 这其实是一个边长为4a宽为2a的矩形 |
6 a | aaaaaa aaaaaa aaaaaa | 这其实是一个边长为6a宽为3a的矩形 |
1.3.4PTA提交列表及说明
说明:Q1:编译错误 输出超时
A1:把行和列的输出方式弄反了
Q2:答案错误
A2:没有处理好有余数和能整除时的表达式
2代码互评
1.同学代码截图 (吴佳柳)
2.自己代码截图
说明:该同学的代码的关键时判断两数的乘积是否大于等于10,然后再考虑空格的位置;而我的代码是从整体出发,在最后整体输出时直接输出四个空格位置;我的代码更加简洁。
3.同学代码截图 (吴佳柳)
4.自己代码截图
说明:我是分了两种情况进行循环,当能整除和有余数时;而该同学是从整体出发,直接考虑了有无余数时四舍五入的情况,用到了计数,很显然该同学的代码更加简洁更加优秀,该同学的逻辑思维很强,我还需要这位同学多多学习。
3.学习总结
3.1学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
4/2019.9.21 | 7个小时 | 50 | 编程“hello word” | 初次接触对代码很迷惘,不知道表示的是什么意思 |
5/2019.10.2 | 8个小时 | 100 | 安装gcc编译器,将代码建在自己的文件里 | 如何安装的程序不明白 |
7/2019.10.11 | 10个小时 | 200 | 三种表达式,printf流程和scanf流程,if-else语句 | scanf流程还是不太明白 |
8/2019.10.17 | 20个小时 | 350 | 使用for循环语句数的循环程序设计 | for循环语句的结构还是有点困惑 |
9/2019.10.25 | 25个小时 | 550 | 使用while语句循环,自定义函数,参数 | 自定义函数还是·不太明白 |
10/2019.11.1 | 20个小时 | 700 | 熟悉多分支结构、字符型数据类型和逻辑运算符 | 关于字符型的代码还是不太明白 |
11/2019.11.7 | 15个小时 | 1000 | 熟悉多分支结构switch语句的使用 | 对swith语句的使用还有一定的困惑 |
12/2019.11.15 | 14个小时 | 1200 | 熟悉使用while和do-while结构解决问题 | 对while语句的使用还有一定的疑惑 |
13/2019.11.21 | 15个小时 | 1450 | 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 | 对continue的使用不够熟练,还有很大疑惑 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
请用思维导图的形式将到目前为止所学的内容进行整理
3.3.2学习体会
1.这周主要学习了break语句和continue语句,但是我对这两个语句还存在一定疑惑,(什么时候使用break语句还是continue语句,还不是很会灵活使用这两个语句)(之前上课听的时候感觉听懂了,但过后感觉迷糊了,现在通过查询资料,我已经弄懂了两者的区别//continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环//)还需要对其多加练习
2.代码难度越来越大了,学习到的知识点也越来越多了,每写完一个代码,弄懂一个知识点,都会感到很开心,即使熬夜到很晚,感觉自己越来越充实了
3.要向各位大佬们多多学习,我写作业的速度还需要加快,自己还需要更加努力,加油加油加油,冲冲冲