C语言I博客作业11
一、本周教学内容&目标
第5章 函数 要求学生掌握各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型。
二、本周作业头
| 这个作业属于那个课程 | C语言程序设计II |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10130 |
| 我在这个课程的目标是 | 很好的编写程序,提高自己的准确率和速度 |
| 这个作业在那个具体方面帮助我实现目标 | 通过PTA上的代码作业让我发现自己的错误并不断改正 |
| 参考文献 | 《C语言程序设计》,CSDN编程社区,《提问的智慧》 |
一、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;
}
/* 你的代码将被嵌在这里 */
输入样例:
105 500
输出样例:
cnt = 6
1.1.1数据处理
数据表达:变量“n,bp[b]”;变量值的来源“(n)赋值,(b,n,p[b])算术运算”;变量类型“都是整型变量int”
数据处理:流程结构:循环结构,分支机构
伪代码:
1.1.2实验代码截图

1.1.3造测试数据
| 输入 | 输出 | 说明 |
|---|---|---|
| 105 500 | ![]() |
输出了与题目所给的相同答案,证明该代码可运行出正确答案 |
| 1 99 | ![]() |
1到99之间没有完全平方数 |
| 100 999 | ![]() |
100到999之间有9个完全平方数 |
| 1000 9999 | ![]() |
1000到9999之间有32个完全平方数 |
1.1.4PTA提交及列表

- 1、运行超时:把return 0;写在了for循环里面;
- 改正方法:将return 0;放在if(m*m==n)括号的外面;
- 2、运行超时:for语句中的if(p[i]>=2)导致错误
- 改正方法:将for语句中的if(p[i]>=2)改为if(p[i]>1)
2.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 = 这些整数的和
进行输出。题目保证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;
}
/* 你的代码将被嵌在这里 */
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720
2.1.1数据处理
- 数据表达:变量“k,f,nsum,count,i”;变量值来源“(n)赋值 ,(k,f,n,sum,count,i)算数运算”;变量类型“都是整型变量int”
- 数据处理:流程结构:循环结构,分支机构,伪代码
![]()
2.1.2实验代码截图

2.1.3造测试数据
| 输入 | 输出 | 说明 |
|---|---|---|
| 104 999 | ![]() |
可以输出与题目所给的相对应的答案,所以代码正确 |
| 5 41 | ![]() |
5和41都是各位数字和等于5的数字,而5到41之间满足题目要求的数有5个,它们之间的和为115 |
| 1 500 | ![]() |
1不是各位数字和等于5的数字,500是各位数字和等于5的数字,而1到500之间满足题目要求的数有21个,它们之间的和为3885 |
| 23124 25346 | ![]() |
23124和25346都不是各位数字和等于5的数字,而23124到25346之间满足题目要求的数有60个,它们之间的和为825861 |
2.1.4PTA提交列表及说明

- 1.格式错误:count和sum的输出时等号两边都有空格
- 改正方法:printf("count=%d,sum=%d\n",count,sum)改为printf("count = %d,sum = %d\n",count,sum)
- 2.格式错误:count和sum的输出之间也有空格
- 改正方法:printf("count = %d,sum = %d\n",count,sum)改为printf("count = %d, sum = %d\n",count,sum)
二、代码互评
同学1代码

我的代码

- 1、这位同学的for循环中是每循环一个数便判断一次,而我是先将给定的数所有的数字都记下它的个数在用for循环找出是否这个数当中有的数字出现过两次以上,相比较而言,我觉得我的代码会更容易让人读懂,都是这位同学的代码运行时间会少一些,不用所有的数字都统计
- 2、这位同学有一个很值得学习的地方是会对一些语句进行解释从而让看的人更快速的读懂自己的代码
同学2代码

我的代码

- 1、我看这位同学在大部分的等号前后都有空格,但实际上一般在赋值运算及算术运算时等号前后并不需要空格,而输出时则需根据题目的输出要求有时必须加有时则一定不能加
- 2、相比较,这位同学的思路和我的没有什么区别,只是使用在字母不一样
三、学习总结
3.1学习进度条
|周/日期|这周所花时间|代码行|学到的知识点的简介|目前比较迷茫的问题|
|------|------|------|------|------|------|
|11/2-11/6|25小时|90行|学习了函数|对于自定义函数的一些规则还不是很了解,感觉还没有掌握|
|10/26-10/29|27小时|87行|复习了for语句的嵌套循环,同时学习如何读代码|一些学习过的语句有些特殊用法不太知道|
|9/19-9/22|23小时|90行|学习了break和continue语句及for语句的嵌套循环结构|不是很了解for语句的嵌套循环的运行步骤|
|8/12-8/16|22小时|126行|学习了do-while和while语句,并运用该循环语句进行代码的编写|不懂怎样表达“当输入回车键时,输入结束”这个语句|
|7/4-7/8|22小时|114行|运用switch语句对给定的题目要求进行计算|一些switch语句的用法不是很了解|
|6/27-6/31|24小时|120行|学习了if-else语句的嵌套|逻辑运算符的一些用法不是很懂|
|5/21-5/25|24小时|91行|自定义函数并调用该函数对数学函数进行运算|有点不太分的清楚实参和形参|
|4/15-4/18|17小时|82行|for语句,循环结构|有点不太会定义条件|
|3/9-3/15|15小时|78行|学会了if-else语句,学会了分支结构和双精度浮点型变量|对于函数的表达还不是很清楚|
3.2累积代码行和博客数

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

3.3.2学习体会
- 通过这个礼拜的学习,主要学习了函数和自定义函数的相关知识点,在这之前也已经上过自定义函数的课,但感觉这两次课的感觉却截然不同,之前只是对自定义函数有一个象,但这次的课则是深入的讲解,其运行规则和一些语法,然后还学习了不同类型的变量的区别,作用域及生存周期,突然就觉得自定义函数和函数的难度比之前要高很多,知识及要注意的东西也更多,因此在做选择题时一些东西都没有见过不知道它的规则和用法,所以我觉得要多看看书










浙公网安备 33010602011771号