C语言I博客作业11

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132
我在这个课程的目标是 熟练地掌握运用C语言,锻炼思维逻辑能力,为以后其他语言的学习打好基础.
这个作业在那个具体方面帮助我实现目标 学会定义函数,调用函数,区分定义函数和声明函数的区别,掌握全局变量和局部变量的定义,作用域,
参考文献 《C语言程序设计》《C Primer Plus》百度百科 伪代码基本写法 C语言实数的负零问题和误差问题

1.PTA实验作业

1.1统计某类完全平方数

本题要求实现一个函数,判断任一给定整数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数据处理

数据表达:用了变量a,b,n,c[10];数据全为整型,通过赋值得到.
数据处理:a表示N的平方根,b表示余数,n替代N,因为N定义时是const int N,是恒定不变的.const与int可以互换位置,二者等价.
所用表达式:a=sqrt(N);n=N;a*a==N;b=n%10;c[b]++;n/=10;.
流程结构:

Begin
int IsTheNumber ( const int N )
定义变量与数组
n←N
if(a*a==N)
{
   while n!=0
   do b←n%10
      c[b]←c[b]+1
      if(c[b]==2)
      {
         return 1
         break
      }
      n/=10
}

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
105 500 cnt = 6 使用题目数据,全是三位数
1000 2500 cnt = 10 全是四位数
-100 -50 cnt = 0 全是负数
-100 100 cnt = 1 一正一负

1.1.4 PTA提交列表及说明


1.编译错误:题目N的定义为const int N,表示恒定不变,而我有N去取余.编译错误,定义一个n,令n=N,解决问题.

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)的整数,并计算这些整数的和。最后按照格式进行输出。题目保证0<a≤b≤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.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);

    return 0;
}

1.2.1数据处理

数据表达:自定义函数(1)定义了变量sum,item,类型全为整型,通过赋值得到.自定义函数(2)定义了变量i,sum,count,t.类型全为整型,通过赋值得到.
数据处理:(1)中sum表示各位数字之和,item表示各位数字的大小.(2)中sum表示满足条件的整数和,i是循环控制变量,t是转化系数,count表示满足条件的整数的个数.
所用表达式:(1):sum=0;item=number%10;number=number/10;sum=sum+item;(2):sum=0;count=0;t=a;a=b;b=t;count++;sum=sum+i;
流程结构:

Begin
int is( int number )
{
    定义变量
    sum←0;
    while number!=0 do
    item←number%10;number←number/10;sum←sum+item;
    if sum==5  then return 1;
    else return 0;
}
void count_sum( int a, int b )
{
    定义变量与赋值
    if a>b then t=a;a=b;b=t;
    else for i←a to b
         if is(i) then count←count+1;sum←sum+i;
    输出count和sum
}

1.2.2试验代码截图

1.2.3造测试数据

输入数据 输出数据 说明
104 999 104 is counted. count = 15, sum = 3720 使用题目数据
5 14 5 is counted. 14 is counted. count = 2, sum = 19 a和b都是,但之间没有
6 13 count = 0, sum = 0 区间内完全没有
1 1 count = 0, sum = 0 最小区间
1 10000 count = 56, sum = 77770 最大区间

1.2.4PTA提交列表及说明

2.代码互评

我的代码:

同学(1)的代码:

代码差异:
1.变量命名不同,而且都没有做到"见名知义",同学(1)的变量都是单独分开定义的,比较杂乱.
2.在判定数组中的值是否为2时,同学(1)用了for语句去判定,而我用的if语句.
我的代码:

同学(2)的代码:

代码差异:
1.在求每个数的各位数时,我用的while语句,而同学(2)用的for语句.
2.我的代码表示出现重复数据的语句是if(c[b]==2);而同学(2)是if(temp[i%10]!=0).

3.学习总结

3.1学习进度条

周数/日期 这周所花的时间 代码行 学到的知识点简介 目前比较疑惑的问题
第三周(10/08--10/12) 12个小时 300行左右 定义函数,if-else,for循环语句 输入与输出格式,空语句
第四周(10/14--10/18) 15个小时 250行左右 for循环语句,基础的循环程序设计,数据的输出宽度 数据的输出宽度概念不太清晰,表达式的定义,空语句的定义
第五周(10/23--10/26) 12个小时 350行左右 自定义函数的声明与调用,break跳出循环,while()循环语句 自定义函数的应用
第六周(10/30--11/01) 18个小时 500行左右 if-else的嵌套,学习逻辑运算,条件语句,字符类型以及字符型数据的输入与输出 对字符型数据的输入与输出了解太少,缺乏练习,没有理解到getchar()字符输入函数与putchar()字符输出函数以及它们的运用
第七周(11/05--11/07) 24个小时 720行左右 使用switch语句的三种情况,在switch语句中使用break语句,数组的定义与使用 continue语句的使用,for语句的嵌套循环
第八周(11/12--11/15) 19个小时 810行左右 学习使用while和do-while语句实现次数不确定的循环,使用break语句处理多循环条件,以及了解while,do-while,for三种语句的差异 ASCII码和char类型和int类型的转换,进制数转化的多种方式
第九周(11/19--11/21) 16个小时 600行左右 学习了for循环的嵌套以及了解break语句和continue语句的用法和区别 静态数组和动态数组的区别
第十周(11/26--11/28) 17个小时 680行左右 使用穷举法解决问题 当存在数据溢出情况时,数据的定义与取值范围选取
第十一周(12/3--12/5) 12个小时 800行左右 函数的定义与调用,局部变量和全局变量的区别 实数的负零问题和误差问题

3.2累积代码行和博客字数

3.3学习内容总结和感悟

3.3.1学习内容总结

3.3.2学习体会

在本次学习中,上课有点吃力,对于自定义函数没有足够深入地了解,存在着许多问题,需要不断改进与努力.在作业中也遇见了一些之前没见过的问题,例如const int N,我并不知道const是什么意思,经过百度之后才明白const的基本意义, const 定义的变量的值是不允许改变的,即不允许给它重新赋值,用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程。也初步了解到了实数的负零问题和误差问题,实数不能直接与0区比较,会存在一定误差,第一次使用了宏定义#define EPS 0.000001,也无法深入与使用,只能通过百度去查看最基础的使用.

posted @ 2019-12-04 21:34  wllrky  阅读(601)  评论(0编辑  收藏  举报