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