| 这个作业属于那个课程 | C语言程序设计II |
|---|---|
| 这个作业要求在哪里 | C语言I作业11 |
| 我在这个课程的目标是 | 学会使用函数,熟练函数类型 |
| 这个作业在那个具体方面帮助我实现目标 | 在PTA的练习中逐渐熟练语句用法,和对知识的自我总结上 |
| 参考文献 | 集美大学林丽老师、百度文库、C语言程序设计 |
1.PTA实验作业

1.1 题目名1
统计某类完全平方数
本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
输入样例:105 500
输出样例:cnt = 6
1.1.1数据处理
数据表达:b代表余数;i,j用于循环;a用于判断i是否满足条件,它们都是整型变量;
数据处理:
{
int n1, n2, i, cnt; 定义变量n1,n2,i,cnt的类型
scanf("%d %d", &n1, &n2); 输入n1,n2
cnt = 0; 对cnt对进行赋值
for ( i=n1; i<=n2; i++ ) 进行循环直到n1等于n2为止
{
if ( IsTheNumber(i) ) 当满足函数条件
cnt++; cnt累计
}
printf("cnt = %d\n", cnt); 输出cnt
return 0; 结束
}
int IsTheNumber ( const int N ) 函数头
{
int i,s[10],a,b=0,j; 定义变量i,a,b,i,j,数组s
i=N; 将i赋值给N
a=sqrt(i); a等于根号i
if(a*a==i) 当i等于a的平方
{
while(i>0) 当i>0时
{
s[b]=i%10; 用s[b]来存放i除以10的余数
i=i/10; i等于i除以10
for(j=0;j<b;j++) 进行循环
{
if(s[b]==s[j]) 当s[b]等于s[j]时
return 1; 返回1
}
b++; 累加b
}
}
return 0; 返回0
}
1.1.2实验代码截图

1.1.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 46 572 | 7 | 46和572之间满足条件的数有7个 |
| 400 900 | 5 | 400和900之间满足条件的数有5个 |
| 10 700 | 8 | 10和700之间满足条件的数有10个 |
1.1.4 PTA提交列表及说明

* 编译错误:忘记打分号,通过看错误提示发现错误并改正的;
* 编译错误:忘记打分号,通过看错误提示发现错误并改正的;
1.2题目名2
统计各位数字之和是5的数
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。
函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式
输入样例:104 999
输出样例:104 is counted.count = 15, sum = 3720
1.2.1数据处理
*数据表达*:
s用来计算各数字之和是否等于5;t代表余数;n为输入数;count为满足条件的整数个数, sum为这些整数的和;
*数据处理*:
int is( int number );
void count_sum( int a, int b ); 自定义函数
int main()
{
int a, b; 定义a,b变量
scanf("%d %d", &a, &b); 输入a,b
if (is(a)) printf("%d is counted.\n", a); 如果返回值不为0,则输出a is counted.
if (is(b)) printf("%d is counted.\n", b); 如果返回值不为0,则输出b is counted.
count_sum(a, b); 自定义函数
return 0; 结束
}
int is( int n)
{
int s=0,t=0; 定义s,t并对其赋值为0
while(n!=0) 当n不等于0时一直循环
{
t=n%10; t等于n除以10的余数
n/=10; n等于n除以10
s+=t; s等于s加t
}
if(s==5) 如果s等于5
return 1; 返回1
else 否则
return 0; 返回0
}
void count_sum( int a, int b )
{
int sum=0,count=0,i; 定义sum,count,i变量
for(i=a;i<=b;i++) 进行循环,直到i等于b为止
{
if(is(i)) 如果满足函数is(i)
{
count++; count进行累加
sum+=i; sum等于sum加i
}
}
printf("count = %d, sum = %d\n",count,sum); 输出count,sum
}
1.2.2实验代码截图

1.2.3 造测试数据
| 输入数据 | 输出数据 | 说明 |
|---|---|---|
| 66 222 | count=8 sum=1246 | 在66到222之中count为8,sum为1246 |
| 77 999 | count=15 sum=3720 | 在77到999之中count为15,sum为3720 |
| 221 776 | 221 is counted count=8 sum=2695 | 在221到776之中count为8,sum为2695,221 is counted |
1.2.4 PTA提交列表及说明

*编译错误:把双引号打成中文版,通过调试发现的,并改正;
2.代码互评
自己代码:

同学代码:

* 该同学定义的变量与我的不同;
* 该同学先用i计算余数,再存放到数组中;而我直接用数组存放余数;
* 我在取余后再次使用for循环来判断是否满足条件,该同学用s[i]=2来判断;
自己代码:

同学代码

* 该同学定义的变量与我的不同;
* 该同学用了do-while语句来循环语句,而我用的是while循环语句和for循环语句;
3.学习总结
3.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
|---|---|---|---|---|
| 第六周 | 4天 | 20 | 用 MinGW-w64 来编译C程序,学习编程计算温度的转化 | 无 |
| 第七周 | 3天 | 99 | 学习用if,else等语句编译程序 | 无 |
| 第八周 | 2天 | 75 | 学习使用循环语句,用for来编译程序 | 无 |
| 第九周 | 3天 | 94 | 学习各种使用函数eg:fact(i) | for循环与while循环的区别 |
| 第十周 | 2天 | 213 | 学习使用多种分支结构 | 对分支结构中for循环有点迷糊不太能理解 |
| 第十一周 | 1天 | 135 | 学习使用switch语句 | 无 |
| 第十二周 | 1天 | 96 | 学习使用while语句 | 无 |
| 第十三周 | 1天 | 83 | 学习使用循环嵌套,continue语句 | 循环嵌套的顺序 |
| 第十四周 | 1天 | 115 | 练习循环嵌套与if-else语句的结合 | 循环嵌套的顺序 |
| 第十五周 | 2天 | 48 | 学习使用不同类型的函数 | 不知道函数应该怎么衔接 |
3.2 累积代码行和博客字数
| 时间 | 博客字数 | 代码行数 |
|---|---|---|
| 第四周 | 651 | 28 |
| 第六周 | 2041 | 48 |
| 第七周 | 4337 | 147 |
| 第八周 | 7005 | 222 |
| 第九周 | 9723 | 316 |
| 第十周 | 11911 | 529 |
| 第十一周 | 13872 | 664 |
| 第十二周 | 15759 | 760 |
| 第十三周 | 18111 | 843 |
| 第十四周 | 20009 | 958 |
| 第十五周 | 22007 | 1006 |

3.3 学习内容总结和感悟
3.3.1 学习内容总结

3.3.2 学习体会
本周学习了函数的用法,类型,变量的用法及类型。虽然以前就已经学了一次函数,但是这次的学习是更加的深入。可以从PTA的难度中看出,这次的题目好像是突然上了一个档次,让人应接不暇。第一道题目已经让我力不从心,因为它用了数组,然而我并没有学习过,于是代码看的有点懵逼。从此次难度可以得出,在计算机这条路上我们还是太单纯。以后要更努力学习了,不然快跟不上了。

