C语言I博客作业09

一、本周教学内容&目标

第4章 循环结构 4.1-4.2 熟悉使用while和do-while结构解决问题。

二、本周作业头

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 <C语言I作业09>
我在这个课程的目标是 <学会循环结构,了解并熟悉continue和break语句解决问题>
这个作业在那个具体方面帮助我实现目标 <在PTA中多次使用嵌套循环,熟练运用>
参考文献 <<集美大学林丽老师>>

三、本周作业

1.PTA实验作业
2.代码互评
3.学习总结

四、作业格式

1.PTA实验作业(20分/题)

请再此处列出自己的排名图片

从PTA题目集中选出2个你最满意的题目完成以下内容,选择题目难度越大,分值越高,每题20分(每项5分),内容要求如下:

1.1 题目名1 (7-2 换硬币 (20 分))

题目内容描述:

将一笔零钱换成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.1.1数据处理

介绍实现本题过程中,你的数据表达、数据处理是怎么做的。注意:请务必按照以下方式书写。

数据表达:定义了整型变量fen5,fen2,fen1,money,total,count,分别表示money零钱数额,在循环中fen5用五分硬币的数量,fen2表示二分硬币的数量,fen1表示一份硬币的数量,total表示硬币总数量, count表示换法的总个数。
数据处理:
表达式:fen55+fen22+fen1==money
结构式:用了for循环语句以及使用嵌套内循环

伪代码:

#include<stdio.h>  开始
int main()
{
	int fen5, fen2, fen1, money, total, count=0;  //给出几个变量:fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数,money:输入的钱数”。
	scanf("%d", &money);
	for(fen5=money/5; fen5>0; fen5--)             //(嵌套for循环语句) 循环找出能够用五分硬币的换法
    {
        for(fen2=money/2; fen2>0; fen2--)            //(嵌套for循环语句) 循环找出能够用二分硬币的换法
        {  
	        for(fen1=money; fen1>0; fen1--)      //(嵌套for循环语句) 循环找出能够用一分硬币的换法
            {   
            if(fen5*5+fen2*2+fen1==money)            //(嵌套if语句) ;判断 五分数的换法数量乘上5加上二分数的换法数量乘上2再加上一分硬币是否等于输入的钱数 ;
               {
                   printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", fen5, fen2, fen1, fen5+fen2+fen1);   //打印输出一分硬币,二分硬币,五分硬币的换法,以及换法的总数
                    count++;                       // 所有换法进行累加
               }
            }
        }

    }
	printf("count = %d", count);               //输出换法总数
	
	return 0;                                  //结束
}

1.1.2实验代码截图

贴图展示代码,不要复制。请给出名字标识。

1.1.3 造测试数据

输出你的程序面向各种测试数据结果,除了题目给出的测试数据,可以自己再造其他临界数据,越多越好,并加上必要说明

输入数据 输出数据 说明
20 有13种不同的换法
30 有34种不同的换法
40 有65种不同的换法
50 有106种不同的换法

1.1.4 PTA提交列表及说明

根据PTA提交列表,简要描述调试程序碰到的问题及解决办法

答案错误:在for(fen5=money/5; fen5>0; fen5--) )加fen5--写成了fen5--
本题的难点就在于"fen5:%d, fen2:%d, fen1:%d, total:%d\n", fen5, fen2, fen1, fen5+fen2+fen1 这个条件,在这上面多花一点功夫就好。

1.2 题目2(7-3 找完数 (20 分)

题目内容描述

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

1.2.1 数据处理

介绍实现本题过程中,你的数据表达、数据处理是怎么做的。注意:请务必按照以下方式书写。

数据表达:使用了n,m,i,j,sum,flag=0。m,n表示两个实验数据,i,j用于程序中的两个循环,sum表示因子之和,flag来判断是否有因子
数据处理:
数据类型:for循环和if-else循环以及嵌套的内循环
表达式:if(i==1) continue; //1不是完数
for(j=2;j<i;j++)
流程结构:if-else结构。

伪代码

#include<stdio.h>
int main()
{
	int n,m,i,j,sum,flag=0;                            //定义7个变量和函数
	scanf("%d %d",&n,&m);
	for(i=n;i<=m;i++)                                  //循环输入可能为完数的值
	{
		sum=1;                                     //要注意因数为1的情况
		if(i==1) continue;	                   //判断1是否是完数  
		for(j=2;j<i;j++)                           //(嵌套for循环语句)
		{
			if(i%j==0)                         //(再嵌套if语句)判断该数是否为完数的因子 ;
			{
				 sum=sum+j;                 //若yse → 放入sum中 ;
			} 
		}
		if(sum==i)                                  //(嵌套if语句) ;判断 所有因子之和是否等于完数 ;
		{
			printf("%d = 1",sum);               //若yse → 暂时输出完数 = 1 (方便后面输出,1是任何完数的因子) ;
			for(j=2;j<i;j++)                    //(再嵌入for循环和if语句) ;判断后面的数是否是该完数的因子 ;
			{
				if(i%j==0)                  // 再嵌套if语句)判断该数是否为完数的因子 ;
				{
					printf(" + %d",j);  //若yes → 输出 + 该因子 
				}
			}
			printf("\n");                        //换行 ;
			flag=1;                              
		}
	}
	if(flag==0)                                          //判断循环次数是否为0 ;
	printf("None");                                      //若yes → 输出None ;
	return 0;                                            //结束,讲数值返回为0
} 

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
2 30 [2,30]里有两个完数分别是6和28
8 1000 [8,100]里有两个完数分别是496和28
6 2000 [2,30]里有三个完数分别是6和28和496
8 1000 [2,30]里有两个完数分别是28和496

1.2.4 PTA提交列表及说明

根据PTA提交列表,简要描述调试程序碰到的问题及解决办法

1.编译错误:在第8行少了sum=1;,导致没有1的因数
2.答案错误:在第九行没有continue语句

2.代码互评(5分)

找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。

第一张 (7-2 换硬币 )

同学代码截图 |<C语言I作业09 窦淇>|

自己代码截图

答:我和同学的代码有很大的不同
1.我用的代码是传统方式先定义变量和函数,在利用变量解决问题
2.同学用代码的方式很不同,值得我学习

第二张 (7-3 找完数)

同学代码截图 |<C语言I作业09 我叫心机男>|

自己代码截图

答:第二个同学
1.同学的代码的思路是先解决输出None的文体,而我的代码是先从1开始的因数问题,最后才解决输出NONE的情况。

3.学习总结(15分)

$3.1 学习进度条(5分)

|周/日期 |这周所花的时间| |代码行 |学到的知识点简介 |目前比较迷惑的问题|
|-|-|-|-|-|
|第六周| 8小时 |300行 |常用的数学函数,if-else语句,for语句,自定义函数 |不会用自定义函数|
|第七周 |7小时 |400行 |二分支结构和用char输入字符 |对于字符型的代码有点看不懂|
|第八周| 10小时 |420行 |多分支结构,switch语句 |switch语句用得有点混乱|
|第九周 |13小时 |450行 |自定义函数的用法,怎样用一个算法来运算多个式子 |if语句的嵌套不明白是怎样分支的|
|第十周| 18小时 |500行 |多分支结构、字符型数据类型和逻辑运算符 |目前不太熟练并且字符型还没熟悉|
|第十一周|12小时|600行|熟悉多分支结构switch语句的使用|switch后的表达式是否有要求|
|第十二周|8小时 |620 |do-while语句和while,for语句的区别 |continue不知道怎么去用|
|第十三周|10小时|650|break、continue的用法以及它们之间的关系|为什么在for循环前都要m=1;|

3.2 累积代码行和博客字数(5分)

时间 博客字数 代码行数
第六周 585 300
第七周 1366 400
第八周 2209 420
第九周 4100 400
第九周 6212 500
第十周 8133 550
第十一周 10510 600
第十二周 13031 620
第十三周 15899 630

3.3 学习内容总结和感悟(5分)

3.3.1 学习内容总结

3.3.2 学习体会

请回顾自己的本周的学习过程,描述学习感受,也可以提出你不理解的地方、对教师教学建议等。如果你有新的想法或者新的方法,请及时记录下来。

1.本周我们学习了continue语句,并且把break语句,continue语句的区别弄清楚了。
2.continue语句和break语句有很大的区别,continue语句是跳过continue后面的语句
3.do-while语句是不管怎样都会先执行一次循环体,再判断是否符合条件,再执行循环体
4.百度是个好东西,尤其是对于初学者来说!
5.希望自己多学一点,走在老师前面

posted @ 2019-11-22 18:45  曦澄  阅读(282)  评论(10编辑  收藏  举报
回顶部