C语言I博客作业11

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 C语言I作业11
我在这个课程的目标是 将本学期所学好好复习汇总,期末考试争取不挂科
这个作业在那个具体方面帮助我实现目标 理解老师上课讲的变量的作用域和生存期,弄懂存储类型
参考文献 C语言

1.PTA实验作业

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

1.1 题目名1:6-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.1.1数据处理

  • 数据表达:定义变量N,其中N是用户传入的参数。如果N满足条件,则该函数必须返回1,否则返回0。定义变量i,k,m,temp用于辅助判断累加。
  • 数据处理:伪代码
开始
调用数学函数

int 定义变量IsTheNumber,N 
{
    int 定义变量n1, n2, i, cnt;
    
    scanf(输入显示 n1,n2);
    将cnt赋值为0;
    for循环语句( i累加条件,i累加 ) {
        if条件语句( IsTheNumber(i) )
            cnt累加;
    }
    输出显示;

    结束
}
题目要求函数接口定义
{
   int定义变量i,k,m,temp
   int 定义一个有100个元素的数组a并将其所有值初始化为0
   int 定义一个有10个元素的数组b并将其所有值初始化为0
   令temp=N
 while条件语句(当temp/10>0) {
      将k赋值;
      temp = temp除以10;
   }
if语句(N==(int)sqrt(N)*(int)sqrt(N))
{
    for语句(将i赋值0;当i小于k;i累加)
      {
     数组a的第i+1个元素=N/m%10;
     m*=10
     if(数组b的第a数组的第i+1个元素个元素+1等于1)   返回1;
        如果不等于1              数组b的第a数组的第i+1个元素个元素+1赋值为1;
        }
     返回0;
     }
  如果不是   返回0;
}

1.1.2实验代码截图

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

1.1.3 造测试数据

输入数据 输出数据 说明
105 500 cnt = 6 有六个完全平方数
100 400 cnt = 4 有四个完全平方数
50 100 cnt = 1 有一个完全平方数

1.1.4 PTA提交列表及说明

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

  • 编译错误:第四行,第五行后面没有打{}
  • 编译错误:第七行while语句后条件判断错误,写成了temp/100>0
  • 编译错误:第十八行将b[a[i]]=1打成了b[i]=1

1.2 题目2:6-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 = 这些整数的和

裁判测试程序样例:

#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数据处理

  • 数据表达:①定义变量x,y,并将y初赋值为0,当y除以5等于0时,返回1,反之返回0②定义变量a,b,sum,count,a,b用于for语句辅助判断,sum,count用于累加,最后输出sum,count。
  • 数据处理:伪代码
开始

int 定义is函数( int 定义变量number );
void count_sum( int 定义变量a,b );

int main()
{
    int 定义变量a,b

    scanf(显示输入两个数a,b);
    if语句 is函数 printf(输出a);
    if语句 is函数 printf(输出 b);
    范围由a到b

   返回 0;
}
int 定义is函数( int 定义变量number )
{
    int 定义变量x,y并将y初赋值0;
    do
    {
       x为number除以10的余数;
       number为number/10所得结果;
       y最后为x加y;
    }
    while(number不等于0);
    如果(y等于5)
    返回 1;
    否则
    返回 0;
}
void count_sum(  定义变量a,b )
{
   int 依题意定义变量count,sum0并初赋值为0
   int 定义变量i;
   for玄幻语句(i等于a;i小于等于b;i累加)
   {
       if条件语句(is函数))
       {
           count累加;
           sum等于sum+i;
       }
   }
   printf(显示输出count和sum);
}


1.2.2实验代码截图

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

1.2.3 造测试数据

输入数据 输出数据 说明
1 2 count=0,sum=0 满足条件的整数个数为0,这些整数的和为0
5 10 5 is counted.count=1,sum=5 5的各个位数之和等于5,满足条件的整数个数为1,这些整数的和为5
10 20 count=1,sum=14 满足条件的整数个数为1,这些整数的和为14

1.2.4 PTA提交列表及说明

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

  • 编译错误:第七行将 number=number/10打成了 number=number%10;
  • 编译错误:第11行中将if(y==5)打成了number(y==5)
  • 编译错误:第16行一开始没有按题目要求写上函数接口定义void count_sum( int a, int b ),而是按我自己平常的定义打的。
  • 编译错误:第18行没有将count,sum,初赋值
  • 编译错误:将22行if(is(i))打成if(is)
  • 编译错误:将25行sum=sum+i;打成了sum++

2.代码互评

  • 同学代码(彭杰)

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

  • 自己代码

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

比较

  • 1.他的代码比我要简洁很多,而且变量定义的更少,占的空间也小,显然思路比我清晰很多。
  • 2.在判断N是否满足条件上,我的判断语句是(b[a[i]]==1),而他的判断语句是满足s[i]==2,返回1,满足n/=10,返回0。
  • 3.相比两份代码,毫无疑问他的代码更好,更简洁,思路更清晰,我的代码很混乱,定义的变量也多,判断语句也不简洁,我要向他学习的地方很多。

同学代码(袁思凡)

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

自己代码

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

比较

  • 1.他的代码也比我的简洁很多,我定义的变量很多,而且用了两组数组,他不但变量定义的少,而且只用了一组数组
  • 2.在if语句输出判定条件上,他的语句为如果p[i]>1,返回1,否则返回0。
  • 3.我的格式很乱,语句很复杂,他直接用一个for循环语句和一个if条件语句判断输出,而我用了两个if条件语句,一个for循环语句判断输出,把思路理很乱。
  • 4.相比之下,我认为他的思路非常值得我学习,还有他处理问题的语句和方法,我还要在格式上加以改进,以后把思路理清楚在打代码。

3.学习总结

3.1 学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第四周 8小时 50行 简单输出
第五周 10小时 70行 学习输入
第六周 20小时 150行 用WinGW-w64来编译C程序
第七周 24小时 150行 运用if,else语句 对符号的意思不太理解
第八周 18小时 200行 运用for循环语句
第九周/10.25 8小时 200行 学习了自定义函数 符号容易弄混
第十周/11.1 26小时 250行 熟悉并掌握了多分支结构 各个运算符的意思还不太理解
第十一周/11.8 24小时 300行 熟悉唱我多分支结构switch语句 对空格的使用还比较疑惑
第十二周/11.15 20小时 300行 熟悉whlie和do-whlie结构
第十三周/11.21 16小时 280行 学会了break、continue的使用和循环的嵌套解决问题 对循环的嵌套还不怎么懂
第十四周/11.28 24小时 350行 对pow函数有了更深的理解,对循环嵌套语句的不懂得地方都弄懂了 不会将自己的语句用C语言表达出来
第十五周/12.4 24小时 300行 自学了一点数组的知识 对数组不完全了解,对自定义函数也不太懂

3.2 累积代码行和博客字数

时间 博客字数 代码行数
第四周 450 70
第五周 450 140
第六周 1200 290
第七周 2400 490
第八周 3600 740
第九周 4800 990
第十周 6000 1240
第十一周 7300 1740
第十二周 8700 2120
第十三周 10800 2800
第十四周 12500 3200
第十五周 14000 3500

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

3.3 学习内容总结和感悟

3.3.1 学习内容总结

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

3.3.2 学习体会

  • 本周题目很难,难到自己有些题目已经无法解决,然后写多了难题会慢慢发现以前的难题根本不算什么,我认为这应该也算是一种进步吧
  • 对于自定义函数还不太熟练,还有很多不懂的地方,马上就要考试了,得赶紧补知识漏洞了
  • 刚认识数组,还没完全懂,现在老师也没教,走在老师教学进度前面的感觉很棒,可是又没有完全弄懂又觉得有点遗憾,不管怎么说,感觉进步已经很大了,继续加油吧!

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