芒果味的

导航

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.要向各位大佬们多多学习,我写作业的速度还需要加快,自己还需要更加努力,加油加油加油,冲冲冲

posted on 2019-11-21 19:33  芒果味的  阅读(493)  评论(13编辑  收藏  举报