zoukankan      html  css  js  c++  java
  • C语言I博客作业11

    这个作业属于哪个课程 C语言程序设计I
    这个作业要求在哪里 C语言I-2019秋作业11
    我在这个课程的目标是 熟练使用程序语言并且能够写一个小游戏的程序
    这个作业在那个具体方面帮助我实现目标 掌握各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型。
    参考文献 百度百科

    一、PTA实验作业

    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
    ", cnt);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    105 500
    

    输出样例:

    cnt = 6
    

    数据处理

    数据表达: 编写判断完全平方数的代码
    数据处理: 使用循环进行判断数是否包含相同的位数
    伪代码:

    • 获取 double 类型的根号数和 int 类型的根号数,进行判断,是否为平方数
    • 设置基数数组,作为桶模型,存放每一位的数据
    • 如果有相似,即基数数组的大小 num[i] >= 2 ,返回1
    • 运行完毕仍然未返回,则返回0

    源代码

    int IsTheNumber(const int N)
    {
    	int square = N;
    	int NumA = (int)sqrt(N);
    	double NumB = sqrt(N);
    
    	int num[10] = { 0 };
    	if (square == NumB * NumA)
    		while (square)
    		{
    			for (int i = 0; i <= 9; i++)
    			{
    				if (square % 10 == i)
    				{
    					num[i] += 1;
    					if (num[i] >= 2)
    						return 1;
    				}
    			}
    			square = square / 10;
    		}
    	return 0;
    }
    

    代码截图

    造测试数据

    输入数据 输出数据 说明
    105 500 cnt = 6

    PTA提交列表及说明

    在其他的编译软件上试过许多次了,然后运行成功后在Pta上面提交,一次就过了。
    出现的错误:
    之前的代码,并未进行 double 类型开方数判断,因而导致出现 if (square == NumB * NumA) 语句判断,必然为真的情况,之后经过调试,发现问题改正即可

    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.
    ", a);
        if (is(b)) printf("%d is counted.
    ", b);
        count_sum(a, b);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    104 999
    

    输出样例:

    104 is counted.
    count = 15, sum = 3720
    

    数据处理

    数据表达: 判断每位数的和是否为5
    数据处理: 位数加和即可
    伪代码:

    • 先编写函数用于每一位的加和
    • 函数的流程为:使用 % 取余最后一位的数,进行加和,然后除以该数,抛弃尾部
    • 随后使用 for ,然后在区间中符合情况的(即满足 if 函数的)进行个数的统计和值的加和
    • for 循环停止后,输出结果即可

    源代码

    int is(int number)
    {
    	int sum = 0;
    	while (number > 0)
    	{
    		sum += number % 10;
    		number /= 10;
    	}
    	return sum == 5 ? 1 : 0;
    }
    
    void count_sum(int a, int b)
    {
    	int count = 0, sum = 0;
    	for (int i = a; i <= b; i++)
    	{
    		if (is(i))
    		{
    			count++;
    			sum += i;
    		}
    	}
    	printf("count = %d, sum = %d", count, sum);
    }
    

    代码截图

    造测试数据

    输入数据 输出数据 说明
    104 999 如图所示

    PTA提交列表及说明

    在其他的编译软件上试过许多次了,然后运行成功后在Pta上面提交,一次就过了。
    出现的错误:
    int is(int number) 函数中,使用 flasetrue 关键字进行返回(因为使用的认为返回的类型为真假而理解错误)之后改成返回 10 即可

    二、代码互评

    同学代码

    我的代码

    int IsTheNumber(const int N)
    {
    	int square = N;
    	int NumA = (int)sqrt(N);
    	double NumB = sqrt(N);
    
    	int num[10] = { 0 };
    	if (square == NumB * NumA)
    		while (square)
    		{
    			for (int i = 0; i <= 9; i++)
    			{
    				if (square % 10 == i)
    				{
    					num[i] += 1;
    					if (num[i] >= 2)
    						return 1;
    				}
    			}
    			square = square / 10;
    		}
    	return 0;
    }
    

    评价:

    • 使用 int 类型的不取小数位的特点,来判断是否为平方数。
    • 但是随后的桶排序却用了两个循环来判断是否出现了两次数,实在有点影响效率。
    if (square % 10 == i)
    {
    	num[i] += 1;
    	if (num[i] >= 2)
    		return 1;
    }
    
    • 在判断中存入桶中,并存入时判断个数,超1返回。可以极大地提高效率。

    同学代码

    我的代码

    int is(int number)
    {
    	int sum = 0;
    	while (number > 0)
    	{
    		sum += number % 10;
    		number /= 10;
    	}
    	return sum == 5 ? 1 : 0;
    }
    
    void count_sum(int a, int b)
    {
    	int count = 0, sum = 0;
    	for (int i = a; i <= b; i++)
    	{
    		if (is(i))
    		{
    			count++;
    			sum += i;
    		}
    	}
    	printf("count = %d, sum = %d", count, sum);
    }
    

    评价:

    • is 函数结构繁琐,t = n % 10;s = s + t; 完全可以一条语句写完。

    3.学习总结

    3.1学习进度条

    周/日期 周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    第3周/10月6~16 3天 181行 if-else语句,递归,分段函数的计算 对这些还不是很熟练,对这些符号的使用跟空格的使用不是很清楚
    第4周/10月10~17 2天 181行 for循环语句与逻辑符 循环语句使用不够熟练,数学循环问题也有很多不明白的事情,不知道先后
    第5周/10月18~24 10h 148行 基本程序语言与生成乘方表与阶乘表 基本程序语言了解的都差不多了,有些不是特别熟练还是需要加强练习的,生成乘方表跟阶乘表这方面的内容还有很多不懂的,觉得完成作业很费力气,要查阅各种资料,可能跟我数学理解能力不强也有关系吧。
    第6周/10月25~31 22h 371行 多分支结构、字符型数据类型和逻辑运算符。顺便研究了几个心形的代码,觉得挺有趣。 就是有时候总是会丢三落四,然后也比较迷惑一些运算符使用方法,分之这一块还是不够熟练。
    第7周/11月1~7 25h 211行 熟悉多分支结构switch语句的使用、字符型数据类型和逻辑运算符。 迷惑的真的太多太多了,但是百度大法真不错,虽然没有白嫖别人的答案解释香,但是还是很有用,一学就让我停不下来的那种。对数学研究的还是不够好,所以做很多题目转不过弯来,要努力克服。
    第8周/11月8~14 22h 241行 熟悉使用while和do-while结构解决问题。 上课听的不太明白,课后也有查找资料,但是还是有很多不懂的,然后最近在做学习总结,想把自己不懂的都整理出来然后弄懂。
    第9周/11月15~21 26h 500行 熟悉break、continue的使用,熟悉使用循环的嵌套解决问题 想知道为什么会出现运行时错误
    第10周/11月22~28 33h 533行 能够根据实际情况,选择合适的算法、合理的循环结构,熟练的编写程序。 感谢每一个帮我解答问题的人,也很感谢听我抱怨的人,如果没有你们我估计都不能坚持这么久。
    第11周/11月29~12月6 34h 421行 掌握各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型 宏函数除了做单行函数处理,可不可以想正常函数一样做多行操作呢

    3.2累计代码行和博客字数

    3.3学习内容总结和感悟

    3.3.1 学习内容总结

    3.3.2 学习体会

    1,我又开始难过了啊这次题目真的不会写qaq,这也太难了吧。
    2,希望自己以后多几分耐心吧,不要再毛毛躁躁的了,细心一点有耐心一点。有疑问的时候虚心请教,比如问朋友问老师问同学。
    3,感觉自己的自学能力还是太弱了,然后对许多知识点的掌握也不够深,以后不能说感觉自己菜炸了,自己就是菜炸了。
    4,突然发现自己身边挺多人对自己挺好的,会耐心回答我的疑问,会认真评论我的作业,希望在未来的道路上他们能够一直都在,然后一起进步。也希望自己不要辜负这么多人的期望,加油。
    5,看了琛姐发的分享,我觉得我要好好学习c语言,也要好好练习一下自己的文笔,不能再像现在这样记流水账?
    6,难又能有什么办法呢,还是得去学习,就算是偷的别人代码,也要把它搞懂。然后接下来这段时间好好复习吧不能挂科,寻思自己平时表现好像还不是很差哈,百分之五十加上笔试的话我觉得吧还是可以的。但是还是要复习的,也要好好学习,我渴望力量。

  • 相关阅读:
    【win7】安装开发环境
    【php-fpm】启动PHP报错ERROR: [pool www] cannot get uid for user 'apache'
    【apache2】AH00543: httpd: bad user name apache
    【gedit】 显示行号
    关于golang.org/x包问题
    国内的go get问题的解决
    php7函数,声明,返回值等新特性介绍
    php5.6.x到php7.0.x特性
    PHP5.4.0新特性研究
    【git】如何去解决fatal: refusing to merge unrelated histories
  • 原文地址:https://www.cnblogs.com/wenwener/p/11979290.html
Copyright © 2011-2022 走看看