zoukankan      html  css  js  c++  java
  • C语言I博客作业11

    问题 回答
    这个作业属于哪个课程 C语言程序设计
    这个作业要求在哪里 C语言I作业11:第十五周作业
    我在这个课程的目标是 学会使用C语言
    这个作业在哪个具体方面帮助我实现目标 学会使用自定义函数,并消化老师上课讲的作用域和生存期以及存储类型
    参考文献 C语言程序设计(第三版);百度

    1.PTA实验作业

    1.1 统计某类完全平方数

    本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。

    裁判测试程序样例:

    #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
    ", 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<ab≤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.
    ", a);
      **if** (is(b)) printf("%d is counted.
    ", 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 学习体会

    不知道为什么,这次作业没有前面几次很激进了,可能是题目太难,可能是即将要考试,也可能是因为放松所以完全松懈了。老师讲的课虽然听了两次,但有些东西还是很混乱,感觉单讲一个知识点的时候听懂了,但混合起来拿出来用的时候又感觉自己什么都不知道。通过本学期的课程让我明白了①预习和复习很重要;②不要把很多课程全压在本学期的最后一月。

  • 相关阅读:
    清除浮动的三种方式
    js控制滚动条默认在底部
    npm 基础命令
    package.json中^,~的区别
    mac 使用iTerm2快捷登录远程服务器
    iterm 分屏切换快捷键与配色设置
    git tag — 标签相关操作
    gulp iconfont
    webpack 3 升级 webpack4 个人笔记
    import * as x from 'xx' 和 import x from 'xx'
  • 原文地址:https://www.cnblogs.com/coolyingying/p/11990763.html
Copyright © 2011-2022 走看看