问题 | 回答 |
---|---|
这个作业属于哪个课程 | C语言程序设计 |
这个作业要求在哪里 | C语言I作业11:第十五周作业 |
我在这个课程的目标是 | 学会使用C语言 |
这个作业在哪个具体方面帮助我实现目标 | 学会使用自定义函数,并消化老师上课讲的作用域和生存期以及存储类型 |
参考文献 | C语言程序设计(第三版);百度 |
1.PTA实验作业
1.1 统计某类完全平方数
本题要求实现一个函数,判断任一给定整数N
是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
裁判测试程序样例:
#include
#include int IsTheNumber ( const int N ); int main() { int n1, n2, i, cnt; scanf("%d %d", &n1, &n2); cnt = 0; for ( i=n1; i<=n2; i++ ) { if ( IsTheNumber(i) ) cnt++; } printf("cnt = %d\n", cnt); return 0; } /* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
1.1.1数据处理
数据表达:在函数int IsTheNumber ( const int N )内,定义了三个整型变量,x代表完全平方数开根号所得的数;m代表完全平方数;i代表控制循环变量数。
数据结构:
结构式:用了if语句和for以及while循环的嵌套结构,还使用了数组方便输出结果。
伪代码:
开始 ; 定义四个整型变量,n1和n2:完全平方数的范围,i:for循环内的控制循环变量,cnt:[n1,n2]范围内的完全平方数的数量; 输入:n1,n2; 令cut=0; for循环判断n1到n2内的数是否为完全平方数; 自定义函数:IsTheNumber 定义三个整型变量x、m、i,令m=x*x; 若m==N 则用数组num[10]={0} 外循环while:当m大于零时执行内循环 内循环for循环输入i=1-9,判断m%10是否等于i 若yes→num[i]=num[i]+1; 继续判断若num[i]==2 则返回1; 退出内循环 m=m/10; 结束 ;
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
105 500 | cnt = 6 | 105到500之间有6个满足题意的完全平方数 |
500 1000 | cnt=2 | 500到1000之间有2个满足题意的完全平方数 |
100 150 | cnt=3 | 100到150之间有3个满足题意的完全平方数 |
1.1.4 PTA提交列表及说明
提交列表说明:
答案错误:没有看懂题目,测试点都没有通过。
1.2 统计各位数字之和是5的数
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
函数接口定义:
**int** **is**( **int** number ); **void** **count_sum**( **int** a, **int** b );
函数is
判断number
的各位数字之和是否等于5,是则返回1,否则返回0。
函数count_sum
利用函数is
统计给定区间[a
, b
]内有多少个满足上述要求(即令is
返回1)的整数,并计算这些整数的和。最后按照格式count = 满足条件的整数个数, sum = 这些整数的和进行输出。题目保证0<a
≤b
≤10000。
裁判测试程序样例:
**#include
** **int** **is**( **int** number ); **void** **count_sum**( **int** a, **int** b ); **int** **main**() { **int** a, b; scanf("%d %d", &a, &b); **if** (is(a)) printf("%d is counted.\n", a); **if** (is(b)) printf("%d is counted.\n", b); count_sum(a, b); **return** 0; } */\* 你的代码将被嵌在这里 \*/*
输入样例:
104 999
输出样例:
104 is counted. count = 15, sum = 3720
1.2.1数据处理
数据表达:在int is(int number)函数内,定义了两个整型变量t和s分别代表输入的数的每一位数字和每一位数字加起来的和。在void count_sum( int a, int b )函数内,定义了三个整型变量n,count,sum分别代表[a,b]之间循环输入的数、满足is函数的数和满足is函数的数的个数。
数据结构:
结构式:函数int is(int number)使用了while循环结构和if语句;函数void count_sum( int a, int b )使用了for循环语句和if语句的嵌套结构。
伪代码:
开始 ; 定义a,b两个整型变量, 输入a,b; 若满足is函数则相应的输出数据; 自定义int is( int number )函数; 定义t和s分别代表输入的数的每一位数字和每一位数字的和; 若该数不等于零 则循环将该数的每一位数字拿出且求和; 若是所求的和等于五 则返回1; 否返回0; 自定义void count_sum( int a, int b )函数 定义三个整型变量n,count,sum 使用for循环输入[a,b]间的每一个数 如果输入的数满足is函数 则计数器+1; 且求满足is函数的数的和; 结束 ;
1.2.2实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
100 500 | [100,500]之间有15个满足is的数,它们的和为3720 | |
500 600 | [500,600]之间只有一个满足is的数,它是500 | |
50 100 | [50,100]之间只有一个满足is的数,它是50 |
1.2.4 PTA提交列表及说明
提交列表说明:
格式错误:有些空格没有打清楚。
多种错误:思路还是不太清晰。
2.代码互评
同学代码截图
自己代码截图
代码比较
1.同学代码将输入的数中的每一个数字都拿出来,判断是否等于1-9中的某个数,并用sum计数,如果sum>2,则用flag标记等于1,循环最后再将m和sum还原,且如果flag等于1则返回1;
2.我的代码同样是将输入的数中的每一个数字都拿出来并判断是否等于i,然后将数都放进num数组中,如果num里有两个相同的数,便返回1。
3.我的代码是当输入的数大于零才开始执行下面的程序,而该同学是用if语句,若输入的数小于零便返回零,否则执行下面的程序。相比之下,我的代码更清晰,而他的更简易。
同学代码截图
自己代码截图
代码比较
1.他的代码从number大于零开始将该数的每一个数子拿出来并求和,然后判断所求的和是否等于5,若是给sum赋值为1,若不是给sum赋值为0,最后返回sum;
2.我的代码从number不等于零开始将该数的每一个数子拿出来并求和,然后判断所求的和是否等于5,若是直接返回1,否直接返回0;
3.我的代码没有考虑该数会为负的情况,因此该同学的代码更为谨慎,只是结尾有点花里胡哨,但也能体现他对代码的熟练程度。
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 博客字数 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|---|
5周/10/23-29 | 3h | 32行 | 560字 | printf输出 | 无 |
6周/10/30-6 | 5h | 20行 | 1120字 | scanf输入 | 无 |
7周/10/7-13 | 5h | 200行 | 1152字 | 代码最简单的格式 | 无 |
8周/10/14-20 | 5h | 100行 | 918字 | for循环结构 | 不能够熟练for语句 |
9周/10/20-27 | 7h | 120行 | 1194字 | 自定义函数 | 对定义和调用函数知识点上还是很模糊 |
10周/10/28-3 | 8h | 380行 | 1290字 | char字符型 | 有些代码所用的格式 |
11周/11/4-10 | 8h | 150行 | 1309字 | switch语句 | 怎么寻找到解题的正确思路 |
12周/11/11-17 | 6h | 160行 | 1100字 | do-while语句和其他循环语句 | 怎么综合运用已学内容 |
13周/11/18-24 | 16h | 260行 | 2453字 | break、continue的用法以及它们之间的关系 | 使用很多个for循环和if语句时容易混乱 |
14周/11/25-01 | 8h | 240行 | 1831字 | 用for循环解题的思路 | 不会用自定义函数 |
15周/12/02-08 | 8h | 100行 | 2009字 | 自定义函数的参数和返回值、变量的作用域和生存期 | 还是不会自定义函数 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
不知道为什么,这次作业没有前面几次很激进了,可能是题目太难,可能是即将要考试,也可能是因为放松所以完全松懈了。老师讲的课虽然听了两次,但有些东西还是很混乱,感觉单讲一个知识点的时候听懂了,但混合起来拿出来用的时候又感觉自己什么都不知道。通过本学期的课程让我明白了①预习和复习很重要;②不要把很多课程全压在本学期的最后一月。