C语言I博客作业11
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I博客作业11 |
我在这个课程的目标是 | 学会运用函数 |
这个作业在那个具体方面帮助我实现目标 | 通过PTA作业和阅读教材并练习 |
参考文献 | C语言程序设计 |
一、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数据处理
数据表达:函数声明后主函数定义整型变量n1,n2,i,cnt;函数调用中定义整型变量m,n以及容量为10个数的数组s[10]。
数据处理:主函数通过返回值计数,而调用函数那边则是运输主函数中N的平方根,m判断N有多少位,i记录编号N的位数,整形数组s用于储存N每一个位的值。
伪代码:
int IsTheNumber ( const int N );函数声明
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);输入的表示n1-n2的范围;
cnt = 0;初始cnt的值;
for ( i=n1; i<=n2; i++ ) (n1到n2的数字差为循环次数){
如果 ( IsTheNumber(i) 自定义函数不为0)
cnt++;cnt用以计数
}
printf("cnt = %d\n", cnt);输出cnt;
return 0;
}
int IsTheNumber ( const int N )函数调用
{
int m,n;定义整型变量
int s[10]={0};初始长度为10的数组里的数
m = sqrt(N);
n = m * m;
如果(判断n是否等于N)
{
while (n 大于 0)
{
int i = n % 10;i取余n来编号;
s[i]++;数组开始收集数;
如果 (当数组里出现2时)
{
return 1;返回1
}
n /=10;n除以10后的商部分
}
}
return 0;
}
1.1.2实验代码截图
1.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
0 100 | cnt = 1 | 0~100内有1个类完全平方数 |
100 500 | cnt = 7 | 100~500内有7个类完全平方数 |
66 666 | cnt = 7 | 66~666内有7个类完全平方数 |
1.1.4 PTA提交列表及说明
提交列表说明:在Code::black上编译有少许错误;
答案错误:不小心将m,与n的表达式调换了位置,结果输出cnt=0。
1.2统计各位数字之和是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
1.2.1数据处理
数据表达:自定义函数is定义整型变量i,sum;自定义函数count_sum定义整型变量count,sum,i;
数据处理:函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0;函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。
伪代码:
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的值;
如果 (is返回的值不为0(a)) 则printf("%d is counted.\n", a);
如果 (is返回的值不为0(b)) 则printf("%d is counted.\n", b);
count_sum(a, b);自定义函数;
return 0;
}
int is( int number )函数调用number;
{
int m=0,i;
for(通过循环用m记录各位数之和)
{
m += number%10;m取number余数并累加;
number /= 10;number除以10后的商为了降位数;
}
如果(各位数字之和是否等于5)
{
return 1;返回1;
}
else
{
return 0;返回0;
}
}
void count_sum( int a, int b )函数调用a,b;
{
int count=0,sum=0,i;定义整型变量
for(从a一直循环到b)
{
如果(is返回值不为0(i))
{
count++;(count为计数器)
sum+=i;计算满足如果条件的整数的和;
}
}
printf("count = %d, sum = %d",count ,sum);输出结果;
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
50 100 | 50 is counted count = 1, sum = 50 | 50~100内有1个各位数字之和是5的数,且他们的和为50 |
100 200 | count = 5, sum = 610 | 100~200内有五个各位数字之和是5的数,且他们的和为610 |
300 500 | 500 is counted count = 6, sum = 2244 | 300~500内有6个各位数字之和是5的数,且他们的和为2244 |
1.2.4 PTA提交列表及说明
提交列表说明:在Code::black上编译有少许错误;
编译错误:没看清题目,没看到函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式,导致写完函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。就直接构建运行了
答案错误:将问题复杂化,用错了数组,发现根本没有数据生成。
二、代码互评
同学(柏朝晖)代码
我的代码
不同点:
1.我的数组用来计编号数,相应的数字编号加一,然后判断数组里数字是否有2的来看是否相同数字;他则是用数组用来直接收集数据,然后通过不断和前面数据对比,寻找相同的;
2.大致思路差不多,但是我的稍微简洁一些,收集编号计数,直接判断计数是否2就行了,不用像他再定义新变量利用for循环比较前面的;
3.我的代码为了编号,先让数组里的数对应数字编号为0;他就不用做这一步,因为他收集数字比较的,我的数组是计数器。
同学(徐旖)代码
我的代码
不同点:
1.我的代码自定义is函数定义是用的for循环,她的是用while循环;
2.而且我循环的表达式简洁一些,直接累加计算余数,她分开来的;
3.总体来说,我的代码规范一些,她的自定义函数is部分不是很规范,思路大致差不多。
三、学习总结
3.1 学习进度条
|||||
-|-|-|-|-|
周/日期|这周所花的时间|代码行|学到的知识点简介|目前比较迷惑的问题|
第七周|10小时|132行|常用的数学函数,if-else语句|函数的运算问题|
第八周|13小时|156行|学会运用for循环语句和知晓DevcC++调试|对于DevcC++还是不大会用|
第九周|12小时|145行|学会了函数定义和调用函数|对于函数的返回,不是很理解|
第十周|12小时|150行|了解了逻辑运算符和ASCII代码|记不住逻辑运算符的意思以及ASCII代码|
第十一周|5小时|70行|理解并运用switch语句,对数组有些了解|对于数组的使用还是不熟练|
第十二周|8小时|121行|加深了while循环语句的理解,以及理解了数组的定义,还有对于do-while的使用|突然发现自己并不会使用函数写代码,有点迷|
第十三周|10小时|145行|严谨了对于break的运用,以及初步了解了continue的使用|continue的使用不熟练,也不会灵活使用,容易被绕晕|
第十四周|12小时|163行|开始慢慢挖掘字符型代码写法了,之前对字符型数据一无所知|对于字符型的运用不是很灵活,比较呆滞和僵硬|
第十五周|15小时|233行|从课堂上学习到了全局变量和局部变量的定义,以及一些特殊变量生存周期和静态动态局部变量和函数的几种用法|对于新学的知识还不能好好的运用,理解甚至还有些不到位|
3.2 累积代码行和博客字数
时间 | 博客字数 | 代码行数 |
---|---|---|
第五周 | 464 | 0 |
第六周 | 1017 | 50 |
第七周 | 1638 | 182 |
第八周 | 2533 | 288 |
第九周 | 3421 | 433 |
第十周 | 4399 | 583 |
第十一周 | 5051 | 653 |
第十二周 | 5789 | 774 |
第十三周 | 6686 | 919 |
第十四周 | 7985 | 1082 |
第十五周 | 9488 | 1315 |
3.3 学习内容总结和感悟
3.3.1 学习内容总结
3.3.2 学习体会
期末了,这次的函数试题感觉特别难,花了很长时间,可能是我没完全理解函数代码的意义吧,然后后面的题。。。。感觉脑子不够用了,感觉自己还是太水了,还得多花点时间搞学习,以后都是要成为程序员的人,现在偷懒,以后没技术,那学的就没什么意义了呀。这次老师在课堂上说全局变量和局部变量算是听懂了,但是那些动态静态局部变量,还是没听懂,感觉老师讲课语速有点快,可能是因为要下课了,课程内容没讲完吧,再加上本身课程有点枯燥,自己又没精神,脑袋嗡嗡的。