代码改变世界

C语言I博客作业11

2019-12-06 18:26  李茹萱  阅读(221)  评论(0编辑  收藏  举报

一、本周教学内容&目标

  • 第5章 函数 要求学生掌握各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型。

二、本周作业头

问题 答案
这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10130
我在这个课程的目标是 熟练地运用C语言进行编程
这个作业在那个具体方面帮助我实现目标 多写代码
参考文献 《PTA常见问题解答》伪代码的写法:https://www.cnblogs.com/huipengkankan/archive/2011/07/28/2120416.html,《c语言程序设计》

三、本周作业

1.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数据处理

数据表达:先在主函数中定义了两个整型变量m和n,并将n转换成int后赋值给sqrt(N),m赋值为n*n
数据处理:
伪代码:
int m,n;
n←(int)sqrt(N);
m←n*n;
if(m=n)
{
   int num[10]←{0};
   int i;
   while(m>0)
   do
      for(i←0 to 9)
         if(m mod 10=1)
         {
            num[i]←num[i]+1;
            if(num[i]=2)
               返回 1 ;
         }
         repeat

         m←m/10;
         end
  }
  end

1.1.2实验代码截图

1.1.3造测试数据

输入 输出 说明
105 500 cnt=6 满足条件的数有6个
400 800 cnt=4 满足条件的数有4个
250 600 cnt=3 满足条件的数有3个

1.1.4PTA提交列表及说明

开始的时候把前面的那段主函数也复制上去了,导致一直编译错误,后面就返回去看了之前的函数题,把前面那段主函数删除了就对了。

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数据处理

数据表达:在主函数里面定义了两个整型变量m和i,并将其赋值为0,在被调函数里定义了sum和count两个整型变量,都赋值为0;
数据处理:
伪代码:
int m←0, i←0;
while (number ≠ 0)
do
    sum ←number Mod 10;
    number ←number/10;
    m ←m+i;
repeat

if (sum = 5)
返回 1
else
返回 0
end

int sum ←0, count ←0, c;
for(c ←a to b)
{
	if(is(c))
	{
		count ←count+1;
		sum ←sum+c;
	}
}
输出 count, sum
    end

1.2.2实验代码截图

1.2.3造测试数据

输入 输出 说明
104 999 104 is counted.count = 15, sum = 3720 在104和999之间有15个满足条件的数,他们的和为3720
560 745 count = 0, sum = 0 在560和745之间没有满足条件的数
123 888 count = 12, sum = 3381 在123和888之间有12个满足条件的数,他们的和为3381

1.2.4PTA提交列表及说明

 编译错误:在写代码的时候不小心删除了一个花括号,后来根据PTA的错误提示找到了问题所在。
 部分正确:卡在部分正确,我也找不出哪里有问题,后面我就换了一条思路写。

四、代码互评

  • 同学代码

  • 我的代码

    1、我只定义了两个变量,同学定义了三个,他的整体看起来更好理解一些;
    2、我们都运用了数组的知识,思路大致的差不多的,但是他的代码整体比我的更好理解一些。

  • 同学代码

  • 我的代码

    1、同学的代码开始的while条件句为number>0,我的是number!=0;
    2、我还用了if-else语句对其进行判别,我感觉我的代码比同学的更好理解一些,但是他的代码更为简洁。

五、学习总结

学习进度条

周/日期 这周所花时间 博客字数 代码行 学到的知识点 此前比较迷茫的问题
第一周 两天 619 32 学会简单地编写代码 什么时候该空格或者打分号
第二周 三天 828 18 学会计算摄氏温度与华氏温度的转化 不太会转化的表达式
第三周 三天 1128 90 学习scanf语句,if-else语句 不是很清楚输入符号标点所表示的意思
第四周 四天 1425 75 初步了解for循环语句 对其运用的条件还不是很清楚
第五周 三天 1408 83 对自定义函数的定义和调用有初步的认识和了解 不是很明白如何调用以及形参和实参的定义
第六周 四天 1523 144 对分支结构有进一步的了解,学习了运算符号的输入输出 字符型的输入输出
第七周 两天 1688 133 对switch语句有了一定的了解 switch语句使用的具体条件还不是很清楚
第八周 一天半 1438 84 do while循环结构和while循环结构 对循环结构的使用还不是很熟练
第九周 一天半 1729 82 break和continue语句的使用方法 对continue的使用条件和作用还不是很清楚
第十周 一天 1588 79 对for循环嵌套语句有了更进一步的了解 对嵌套的关系还不是很理解
第十一周 一天 1756 93 各种类型函数的定义、调用和申明,熟悉变量的作用域、生存周期和存储类型 对函数的变量的生存周期和存储类型都不太熟悉

3.2累积代码行和博客字数

3.3学习内容总结和感悟

3.3.1 学习内容总结

3.3.2 学习体会
  • 这周的课我是真的没怎么听懂,太难了,还得去靠课后自学,感觉老师讲的我似懂非懂,做题目一塌糊涂,而且这次的题目我觉得是真的难,
    反正我是没有做完,后面的挑战题能看懂,就是不会写,我已经放弃治疗了,代码使我头秃,我太难了。