C语言I博客作业11

问题 答案
这个作业属于那个课程 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)实验代码截图

C语言I博客作业11_第1张图片

(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)实验代码截图

C语言I博客作业11_第2张图片

(3)造测试数据

输入数据 输出数据 说明
104 104 C语言I博客作业11_第3张图片 a=b
105 200 a,b都不是
1 10000 最大区间
104 203 C语言I博客作业11_第4张图片 a,b都是

(4)PTA提交列表及说明

提交列表说明

 1.一次性正确:没有用其他编译器,直接在PTA上面一次性正确。

二.代码互评

同学(柏朝晖)代码 同学(杨宇)代码 自己代码
C语言I博客作业11_第5张图片 C语言I博客作业11_第6张图片 C语言I博客作业11_第7张图片

比较

 (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

C语言I博客作业11_第8张图片

3 .学习内容总结和感悟

(1)学习内容总结

C语言I博客作业11_第9张图片

(2) 学习体会

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

你可能感兴趣的:(C语言I博客作业11)