这个作业属于那个课程 |
C语言程序设计II |
这个作业要求在哪里 |
C语言I博客作业11 |
我在这个课程的目标是 |
熟练掌握C语言 |
这个作业在哪个具体方面帮助我实现目标 |
进一步了解了自定义函数 |
参考文献 |
Markdown基本语法 |
一.PTA实验作业
1. 统计某类完全平方数
题目内容描述:本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
函数接口定义:
int IsTheNumber ( const int N );
其中N
是用户传入的参数。如果N
满足条件,则该函数必须返回1
,否则返回0
。
裁判测试程序样例:
#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)数据处理
数据表达:
用了整形变量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)返回的值为1 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.开始时在Dve-c++上输入题目的输入题目的输入样例后发现输出来的cnt为12不符合输出样例,然后不断讲输入的范围减小发现一个不符合条件的数169让cnt增加了一,然后进行调试,在自定义函数那里设置断点输入169 169,添加查看变量flag,i,cnt,不断点击下一步,发现当i=9的时候flag还是等于0,继续点击下一步发现在经过if(flag=1)后flag突然等于1然后进入了if语句内返回了1,然后发现if(flag=1)应改为if(flag==1),然后运行发现答案符合输出样例将代码复制在PTA上面
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。
裁判测试程序样例:
#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)数据处理
数据表达:
用了整形变量i,sum,cnt,n,m,s,i;
i用来控制循环
sum用来保存要输出的和值
cnt用来保存要求输出的数的个数
n用来保存n/10后的每一位数
m用来存放你的每一个位数
s用来判断数是否是各位数字之和是5的数
数据处理:伪代码
主函数:
定义整形变量a,b来放输入的范围
输入范围
if 自定义函数is(a)返回来的值不为0 then 输出b is counted
自定义函数void count_sum(定义整形变量a,b来接收主函数传入的值)
定义整形变量i来存放[a,b]内的每一个整数,sum来放要求输出的所有符合条件的数的和值,cnt来放符合条件的数的个数
for a to b
if is(i)返回来的值为1 then cnt累加;将sum加i的值赋值给sum
end for
输出cnt和sum
自定义函数is(定义整形变量numbe来接收主函数传入的值)
定义整形变量n来存放number的值,m来存放n的每一个数字,s来存放每一个数字的和
将number赋值给n
while(n不等于0)
将n除以10的余数赋值给m
将n除以10后赋值给n
将s加上m后赋值给s
end for
if s等于5 then 返回1
else 返回0
(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 |
第十五周 |
18992 |
4388 |
3 .学习内容总结和感悟
(1)学习内容总结
(2) 学习体会
感觉最近心理出现了一些问题,而且感觉这一次的作业很难,有一种不想做作业的感觉。对于C语言的这个博客园作业,从第一次的随便应付到后面的努力去做好,为了提前交加分每次都会熬夜来做这个作业,每次做完都要重新看无数遍找出不够好的地方重新写,一次一次改,努力去做的更完美,但是我感觉无论怎么努力就是比不上别人。每次作业分数出来后我都会看那些分数高的作业,一个个反复看我哪里不足,可是有的时候我真的觉得别人写的也没有什么地方可以让我学的,有时候真的觉得我的作业也差不多,但是我扣的分就是比别人多。一次次的努力,每一次作业都想着每个小细节做的更好一点,扣的分却一次比一次多,真的让我有一种无力感。产生了一种以后这个作业不要浪费那么多时间去做的想法,这些时间用在这里毫无意义,那些修改细节的时间还不如多刷一些题目,甚至都产生了一种不想做这个作业了的想法。每次都想着要自学一下后面的内容,却总是没有时间,总是把时间用在不该用的地方。突然觉得自己好没用啊,真的不喜欢这样的自己呢·····