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,也无法深入与使用,只能通过百度去查看最基础的使用.