C语言I博客作业09

|这个作业属于哪个课程 |https://edu.cnblogs.com/campus/zswxy/CST2020-1/ |
| ---- | ---- | ---- |
|这个作业要求在哪里 |https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11634 |
|这个作业的目标 | 学会使用函数 |
|学号 | 20208936 |
1.PTA实验作业

1.1 题目名1
6-1 统计某类完全平方数 (20分)
本题要求实现一个函数,判断任一给定整数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;

}

/* 你的代码将被嵌在这里 */
1.1.1数据处理

数据表达:使用变量M,N,i,j,x,将N赋值给M,定义了x,将N开根号后面又平方回来,判断其是否是完全平方。
伪代码如下: int M=N;
    int i,j=0,a[10];//定义i,j
    int x=sqrt(N);//取根号
    int m,n;
数据处理:使用while结构,for循环和if语句,先计算位数而后判断其中相同的数。
伪代码如下: while(M>=10)
    {
        a[j++]=M%10;
        M=M/10;//分别取余取整,判断位数
    }
        a[j]=M;
    for(m=0; m<=j; m++)
    {
        for(n=m+1; n<=j; n++)
        {
            if(a[m]==a[n])
            {
                if(x*x==N)//判断是否为完全平方
                    return 1;
            }
        }
    }
    return 0;
}

1.1.2实验代码截图


.1.3 造测试数据

输入数据 输出数据 说明
105 500 cnt=6 两数间有6个数符合条件
456 900 cnt=3 两数间有3个数符合条件
1.1.4 PTA提交列表及说明
编译错误:比较有两个数相同时搞错。
部分正确:没有考虑到a[j]=M;

1.2 题目2
6-2 统计各位数字之和是5的数 (20分)
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于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。
1.2.1 数据处理

数据表达:定义了n=number,s,a,c,都为整型,判断各位数字是否为5.
伪代码如下:while (n != 0)
    {
        a = n % 10;
        n = n / 10;//取余取整判断位数
        s = s + a;
    }
    if (s == 5)
    {
        return 1;
    }
    else
    {
        return 0;//判断是否和为5
    }
数据处理:运用while语句,if语句,if-else语句和for循环,
统计给定区间[a, b]内有多少个满足要求。
伪代码如下:void count_sum(int a, int b)
{
    int c = 0;
    int sum = 0;
    for (int i = a; i <= b; i++)
    {
        if (is(i))
        {
            c++;
            sum =sum+i;//计算位数之和
        }
    }
    printf("count = %d, sum = %d\n", c, sum);
}

1.2.2 实验代码截图


1.2.3 造测试数据

输入数据 输出数据 说明
104 999 104 is counted. count = 15, sum = 3720 有15个这样的数,它们的和是3720
420 888 count = 1, sum = 500 有1个这样的数,它们的和是500
1.2.4 PTA提交列表及说明
编译错误:没有将sum初始化。
部分正确:将i=0,没有注意边界问题。

2.代码互评
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。
同学代码:


自己截图:

对比:解题方法都差不多,运用的while语句if语句和for循环,只是用的变量符号不同。

3.学习总结

3.1 学习进度条

日期/周 这周所花时间 代码行 学到的知识点简介 目前比较迷惑的问题
第八周 10 60 程序设计语言功能与语法 没有理解其中意义和用法
第九周 15 100 编写简单程序,学会数据类型 字符宽度的运用
第十周 23 200 for语句,if-else语句 格式问题,边界范围
第十一周 15 210 乘法和阶乘 被调函数的使用
第十二周 20 240 分支结构和逻辑运算符 分支时有些情况考虑不到
第十三周 20 230 学会了switch结构,与if-else语句镶嵌使用 使用的差别
第十四周 15 300 学了while和do-while结构 条件与循环体的顺序
第十五周 22 400 学习break与continue的用法 多层循环
第十六周 27 520 学习函数 好多解题方式想不到,要与一些语句相镶嵌
3.2 累积代码行和博客字数

3.3 学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会
这周学习了函数,学习了各种函数的用法,题目的难度也有逐级递增了。
快要考试了,希望自己这周能好好复习,多写点以前的习题,巩固一下。

posted @ 2020-12-20 23:41  [彳亍]  阅读(88)  评论(9编辑  收藏  举报