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 学习体会

期末了,这次的函数试题感觉特别难,花了很长时间,可能是我没完全理解函数代码的意义吧,然后后面的题。。。。感觉脑子不够用了,感觉自己还是太水了,还得多花点时间搞学习,以后都是要成为程序员的人,现在偷懒,以后没技术,那学的就没什么意义了呀。这次老师在课堂上说全局变量和局部变量算是听懂了,但是那些动态静态局部变量,还是没听懂,感觉老师讲课语速有点快,可能是因为要下课了,课程内容没讲完吧,再加上本身课程有点枯燥,自己又没精神,脑袋嗡嗡的。

posted @ 2019-12-06 11:02  凉瑾年  阅读(413)  评论(2编辑  收藏  举报