| 问题 | 答案 |
|---|---|
| 这个作业属于那个课程 | C语言程序设计II |
| 这个作业要求在哪里 | C语言I博客作业11 |
| 我在这个课程的目标是 | 熟练掌握C语言 |
| 这个作业在哪个具体方面帮助我实现目标 | 进一步了解了自定义函数 |
| 参考文献 | Markdown基本语法 |
一.PTA实验作业

1. 统计某类完全平方数
题目内容描述:本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:int IsTheNumber ( const int N );
其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
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)数据处理
数据表达:
用了整形变量result,sum=0,i,m,flag=0,N
N来放找完全平方数的范围内的每一个整数
result来存放N的二分之一次方
sum用来判断是否至少有两位数字相同
m用来区分开N的每一位数
i用来控制循环次数
flag用来判断是否符合完全平方数的条件
数据处理:伪代码
定义变量n1来,n2来存放找完全平方数的范围,i来放找完全平方数的范围内的每一个整数,cnt来放范围内完全平方数的个数
输入范围
对cnt初始化为0
for n1 to n2
if IsTheNumber(i) then
cnt累加
end for
输出cnt
定义函数int IsTheNumber ( const 定义变量N来放找完全平方数的范围内的每一个整数 )
定义变量result来存放N的二分之一次方,sum用来放数N中相同数字的个数,i用来放1~9的每一个数,m用来存放N的每一位数,flag用来存放1和0
将N赋值给m
if N<0 then
返回0
else
将N的二分之一次方赋值给result
if pow(result,2)==N then
for 0 to 9
while(!(m==0))
if m%10==i then
sum累加
将m除以10并赋值给m
end while
if sum>=2 then
将1赋值给flag
将m初始化为result的平方
将sum初始化为0
end for
if flag==1 then
返回1
返回0
(2)实验代码截图

(3)造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 144 144 | cnt = 1 | 存在一个完全平方数 |
| 144 225 | cnt = 2 | 存在两个完全平方数 |
| 100 200 | cnt = 3 | 存在三个完全平方数 |
| 1469 4638 | cnt = 15 | 输入的都是四位数 |
| -120 -1 | cnt = 0 | 输入的都是负数 |
(4)PTA提交列表及说明

提交列表说明
1.部分正确:忘记考虑两位以上数字相同的也是完全平方数,将24行的if(sum==2)改为if(sum>=2)后答案正确。
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 <stdio.h>
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)数据处理
数据表达:
用了整形变量i,sum,cnt,n,m,s,i;
i用来控制循环
sum用来保存要输出的和值
cnt用来保存要求输出的数的个数
n用来保存n/10后的每一位数
m用来存放你的每一个位数
s用来判断数是否是各位数字之和是5的数
数据处理:伪代码
(2)实验代码截图

(3)造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 104 104 | ![]() |
a=b |
| 105 200 | ![]() |
a,b都不是 |
| 1 10000 | ![]() |
最大区间 |
| 104 203 | ![]() |
a,b都是 |
(4)PTA提交列表及说明

提交列表说明
1.一次性正确:没有用其他编译器,直接在PTA上面一次性正确。
二.代码互评
| 同学(柏朝晖)代码 | 同学(杨宇)代码 | 自己代码 |
|---|---|---|
![]() |
![]() |
![]() |
比较
(1)从占用的空间上来说,第一份代码定义了7个变量,第二份定义了4个变量,而我定义了5个变量,第二份开辟的空间更少,从这个层面来说第二份的代码更好 (2)从代码占用的内存来说,第一二份只用了28行,而我用了38行,从这个层面来说第一二份的代码更好 (3)第一份在判断至少有两位数字相同这一点用的是先将数N的位数算出来储存在i,然后再按这个位数的范围进行循环;而第二份和我的一样,拿数N的每一位数按1~9数字的个数一个个进行统计,当存在1~9内的一个数有至少两个时返回1
三.学习总结
1.学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
|---|---|---|---|---|
| 第四周 | 7小时 | 100行 | 在屏幕上显示Hello World! | 暂无 |
| 第五周 | 8小时 | 100行 | 求华氏温度对应的摄氏温度 | 暂无 |
| 第六周 | 30小时 | 200行 | 如何用 MinGW-w64 来编译C程序 | 暂无 |
| 第七周 | 24小时 | 300行 | 运用if语句完成各种数学程序 | 对于&&的用法不了解 |
| 第八周 | 24小时 | 300行 | 学会了for循环语句 | 暂无 |
| 第九周 | 24小时 | 300行 | 学会了如何去自定义一个函数 | 暂无 |
| 第十周 | 30小时 | 400行 | 学会了if-else语句的嵌入 | 对“(Y%100)这个表达式意味着当Y不能整除4时(Y%100的余数不等于0时)表达式为真”这句话不是很懂 |
| 第十一周 | 24小时 | 450行 | 学会了如何去使用switch语句来做编程题 | 暂无 |
| 第十二周 | 24小时 | 450行 | 学会了如何去使用while循环来做编程题 | 对字符型的输入不太了解 |
| 第十三周 | 26小时 | 372行 | 学会了如何去使用for嵌套来做编程题,学会了continue的使用方法 | 对字符型的输入和输出不太了解,对数组完全不了解 |
| 第十四周 | 28小时 | 634行 | 学会了字符型的输入和输出 | 对数组完全不了解,对指针完全不了解 |
| 第十五周 | 28小时 | 782行 | 进一步了解了如何去自定义一个函数 | 对数组完全不了解,对指针完全不了解,对于函数题不太熟练 |
2. 累积代码行和博客字数
| 时间 | 博客字数 | 代码行数 |
|---|---|---|
| 第四周 | 510 | 100 |
| 第五周 | 510 | 200 |
| 第六周 | 1149 | 400 |
| 第七周 | 2027 | 700 |
| 第八周 | 3791 | 1000 |
| 第九周 | 5294 | 1300 |
| 第十周 | 6900 | 1700 |
| 第十一周 | 8614 | 2150 |
| 第十二周 | 10495 | 2600 |
| 第十三周 | 13019 | 2972 |
| 第十四周 | 15893 | 3606 |
| 第十五周 | 00000 | 4388 |

3 .学习内容总结和感悟
(1)学习内容总结

(2) 学习体会
感觉最近心理出现了一些问题,而且感觉这一次的作业很难,有一种不想做作业的感觉。对于C语言的这个博客园作业,从第一次的随便应付到后面的努力去做好,为了提前交加分每次都会熬夜来做这个作业,每次做完都要重新看无数遍找出不够好的地方重新写,一次一次改,努力去做的更完美,但是我感觉无论怎么努力就是比不上别人。每次作业分数出来后我都会看那些分数高的作业,一个个反复看我哪里不足,可是有的时候我真的觉得别人写的也没有什么地方可以让我学的,有时候真的觉得我的作业也差不多,但是我扣的分就是比别人多。一次次的努力,每一次作业都想着每个小细节做的更好一点,扣的分却一次比一次多,真的让我有一种无力感。产生了一种以后这个作业不要浪费那么多时间去做的想法,这些时间用在这里毫无意义,那些修改细节的时间还不如多刷一些题目,甚至都产生了一种不想做这个作业了的想法。每次都想着要自学一下后面的内容,却总是没有时间,总是把时间用在不该用的地方。突然觉得自己好没用啊,真的不喜欢这样的自己呢·····






