一、本周作业头
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132 |
我在这个课程的目标是 | 熟练掌握好C语言,培养自己的思维能力,同时加快敲代码速度。 |
这个作业在那个具体方面帮助我实现目标 | 可以帮助进行的字符编程的运用 |
参考文献 | 百度百科、CSDN博客、C语言程序设计、浮点数的精度问题 |
二、本周作业
1.PTA实验作业
1.1统计各位数字之和是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 = 这些整数的和
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720
裁判测试程序样例:
#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;
}
/* 你的代码将被嵌在这里 */
1.1.1数据处理
数据表达:第一个函数int s=0,t=0,int n;s表示各位数字之和,t表示该数的各位数。n表示输入的整数。第二个函数
用了 sum=0,count=0,i,int a, int b;sum表示满足上述要求整数的和,count表示满足上述要求整数的个数,i示循环起点,a,b表示区间。
数据处理:
int is( int n)
{
int s←0,t←0;
while n!←0
t←n%10;
n/←10;
s+=t;
}
if(s←5)
return 1;
else
return 0;
}
void count_sum( int a, int b )
{
int sum←0,count←0,i;
for i←a to b
if(is(i)){
count++;
sum+=i;
}
}
printf("count = %d, sum = %d",count,sum);
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
a=1,b=1 | count = 0, sum = 0 | 当a,b=1时为最小区间 |
a=104,b=999 | 104 is counted.count = 15, sum = 3720 | 104属于各位数字之和是否等于5 |
a=1,b=10000 | count = 56, sum = 77770 | 当a=1,b=10000时为最大区间 |
1.1.4 PTA提交列表及说明
编译错误:忘记定义s,t。
编译错误:if(s==5)写成if(s=5).
编译错误:没有编写return 0;
答案错误:少写了一句n=n/10;
编译错误:忘了定义count,sum;
编译错误:忘了定义i.
1.2统计某类完全平方数
本题要求实现一个函数,判断任一给定整数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.2.1数据处理
数据表达:使用了int n,a,i;double m;int num[10]={0};n表示整型N的开根号,m表示浮点型N的开根号;a就是N,i表示循环起点
num[10]={0}表示数组长度为10底数为0.
数据处理:
int IsTheNumber ( const int N )
{
int n,a,i;
double m;
int num[10]←{0};
n←sqrt(N);
m←sqrt(N);
a←N;
ifa==m*n
while a!=0
for i←0 to 9
if a%10==i
num[i]+=1;
if num[i]==2
return 1;
a←a/10;
return 0;
1.2.2实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
n1=105,n2=500 | cnt = 6 | 在105 500这个区间之中有6个完全平方数 |
n1=1,n2=500 | cnt = 7 | 在1 500这个区间之中有7个完全平方数 |
n1=1,n2=1000 | cnt = 9 | 在1 1000这个区间之中有9个完全平方数 |
1.2.4 PTA提交列表及说明
编译错误:if(a%10==i)写成了if(a%10=i)
部分正确:a=a/10;放入了for循环内部。
2.代码互评
自己代码 | 同学代码 |
---|---|
不同点:
1.我是通过m,n一个整型一个浮点型来表示N。而该同学直接开根号没分整型和浮点型。
1.在判定数组中的值是否为2时,我用了for语句去判定,而该同学用的if语句
自己代码 | 同学代码 |
---|---|
不同点:
1.同样使用的是for循环,但他使用的是通过N=N/10的方式来进行判断。
2.该同学使用的判断的条件为temp[i%10]!=0而我使用的是num[i]==2.
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
10/8-10/12 | 5h | 224 | if-else语句和输入输出格式 | 变量的处理 |
10/13-10/18 | 12h | 263 | for循环语句,如何计算累加题 | 不知道什么时候用include |
10/19-10/26 | 15h | 334 | 如何编写自定义函数及更加熟练掌握for循环 | 自定义函数的使用 |
10/26-11/2 | 14h | 355 | 如何使用逻辑表达式及else-if语句 | 如何去寻找else-if之间的关系 |
11/2-11/8 | 13h | 284 | 如何使用switch语句 | switch语句与for循环同用时的关系 |
11/9-11/15 | 16h | 231 | 使用while语句以及字符型变量的输入输出,#include |
数组的使用 |
11/16-11/22 | 10h | 203 | 使用循环的嵌套解决问题,以及break,continue语句 | 在多个循环中如何输出换行 |
11/23-11/29 | 12h | 326 | 通过使用字符型变量进行解题 | 字符的输入与输出 |
11/30-12/6 | 15h | 412 | 学习了如何使用全局变量和局部变量 | 实数的负零问题和误差问题 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.2 学习体会
这周的作业相对而言有点难度,特别是那个一元二次方程的题;不断的提交修改,提交修改;写的人心态都快要崩了。其中牵扯到了一个没有学习的
知识点,那就是误差问题;浮点数的精度问题;通过百度最终找到了如何解决的方法。历尽千辛万苦终于写了出来。除此之外,也学习到了全局变量,
局部变量,静态变量,动态变量;而且又提到了自定义函数,通过两个题又重新的将自定义函数复习了一遍;发现之前还是有很多没有弄懂的问题,除
了自定义函数,这次还使用到了while语句以及for循环以及if语句。很好地帮助我复习了一遍之前所学习的知识点。