问题 | 回答 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | 作业要求 |
我在这个课程的目标是 | 快速的敲代码,制作出能使用的小软件 |
这个作业在那个具体方面帮助我实现目标 | 学习各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型 |
参考文献 | 百度,《C语言程序设计》 |
1.PTA实验作业
1.1题目1
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于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。
裁判测试程序样例:
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.
", a);
if (is(b)) printf("%d is counted.
", b);
count_sum(a, b);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720
1.1.1数据处理
数据表达:用int定义了整形变量x,y,i,sum,count,其中x,y用来在is函数内判断给定正整数的各位数字之和是否等于5,i用来在count_sum函数内进行循环结构的运算,sum,count,分别用来统计的满足题目条件的数的数量与这些数量的和
数据处理:
while(number!=0)
{
用式子x=number%10求出个位的数值
y=y+x对每次求出的x值进行累加
每循环一次number去掉最后一位数
}
if(y==5)判断number各位数字之和是否等于5
若是则返回1
不是则返回0
for(i=a;i<=b;i++)
{
if(is(i))对输入范围内的每个整数进行is函数内的运算
{
如果返回值为1则
count=count+1
用式子sum=sum+i对满足条件的值进行累加
}
输出count与sum的值
}
1.1.2实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
1 999 | count = 21,sum = 3885 | 1到999之间有21个各位数字之和是否等于5的数,且这些数的和为3885 |
325 818 | count = 3,sum = 1311 | 325到818之间有3个各位数字之和是否等于5的数,且这些数的和为1311 |
100 10000 | count = 50,sum = 77605 | 100到10000之间有50个各位数字之和是否等于5的数,且这些数的和为77605 |
1.1.4 PTA提交列表及说明
说明
我是在Dev-c++上完成的这道题,这道题目相对来说比较简单,我只出现了一个错误,就是在第二个函数中嵌套is函数时,括号内应用i,而我用的是number,后来发现在第二个函数内是要循环对i进行判断,而number是第一个函数内的
1.2 题目2:
本题要求实现一个函数,判断任一给定整数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
", cnt);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
1.2.1 数据处理
数据表达:用int定义了整型变量n,m,i,其中n代表根号N,m代表n的平方,i用来进行数组的运算
数据处理:
n=sqrt(N*1.0)
m=n*n
if(N==m)判断N是否为完全平方数
{
使数组a[10]起始为0个
while(m>0)
{
i=m%10用i代表m的个位数
每循环一次数组a[i]内的数量加1
if(a[i]==2)判断数组内数的数量
若为两个则返回值1
每次循环后的m值去掉最后一位
}
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
1 500 | cnt = 7 | 1到500之间满足题目条件的数有7个 |
325 818 | cnt = 4 | 325到818之间满足题目条件的数有4个 |
100 10000 | cnt = 42 | 100到10000之间满足题目条件的数有42个 |
1.2.4 PTA提交列表及说明
说明:
编译错误:刚开始做这道题时我没有想到要用数组去做,因为数组我们还没学,我用的是逻辑运算符对有两位数字相同这一条件进行判断,然后出现了编译错误,在机课上纠结了很久也做不出,后来问了助教才知道需要用到数组,我就去看了一下书上关于数组的内容,感觉现在也还是似懂非懂,我还是参考了同学的代码才能做出来,但还是读懂了这个代码
2.代码互评
同学代码截图
自己代码截图
该同学多次运用了for的循环结构,定义了i与j进行辅助判断和输出,他的for循环的作用我还是有几处不明白,而我的代码看起来就比较简便,而且容易读懂
同学代码截图
自己代码截图
该同学代码与我的比较类似,只是他用的是do-while语句,而我用的是while语句
3.1 学习进度条
周/日期 | 这周所花时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第一周 | 5h | 20 | 学会了怎样用PTA进行写代码作业,了解了一些关于软件工程专业的知识 | 不知道代码有什么用,对markdowm语法不怎么了解 |
第二周 | 5h | 20 | 基本学会了markdowm语法,知道以后要怎样向别提问 | 对许多学过了的代码还是不知道怎么用 |
第三周 | 10h | 60 | 学会了编写复杂一点的代码,开始懂得去阅读别人的代码 | 写代码时总是会出现编译错误,而且自己找不到错在哪里 |
第四周 | 6h | 68 | 学会了怎样使用for语句进行代码的循环运算 | 不能快速的想出表达式子的代码 |
第五周 | 20h | 178 | 学会了如何使用调用函数,如何制作思维导图 | 不能使用代码做比较困难的作业, 比如此次的哥德巴赫题目 |
第六周 | 20h | 187 | 初步了解字符型变量,学习了镶嵌结构 | 字符型变量的运算不是很会 |
第七周 | 15h | 148 | 多分支结构switch语句的使用 | 对switch语句的用法还是不熟悉 |
第八周 | 15h | 143 | 学会了如何使用while和do-while结构解决问题 | for语句和while语句区别和使用范围 |
第九周 | 10h | 128 | 学会了break、continue的使用和使用循环的嵌套解决问题 | 使用循环的嵌套时还是不熟悉循环截止的条件和执行语句的输出 |
第十周 | 10h | 94 | 怎样判断素数,熟悉循环的嵌套 | 无 |
第十一周 | 15h | 88 | 学习了各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型 | 怎样进行数组的使用 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
1.这周的pta练习比较难,题目量也比较多,导致我这周的作业完成的很慢,本来有时间可以做的,但是看到这些难题目瞬间就不行动脑了,主要还是由于自己不够用心
2.理论课上学习了新的知识,但这次作业好像又和那些知识没太大关系,反倒让我运用到了数组的知识,虽然有点难,但至少让我在考试之前略微了解了数组的用法