第三次随笔作业

要求一

这是我的第三次随笔作业,以下连接是作业要求。https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2359

要求二

这道题是第六次作业中的第三题

本题要求对两个正整数m和n(mn)编写程序,计算序列和m2​​+1/m+(m+1)2​​+1/(m+1)++n2​​+1/n。

解题思路:刚开始学for循环,我认为循环实质上是重复执行一段代码,减少了我们的代码量同时达到重复书写循环体内代码的效果,对于现在我们做的习题,会常常以(1,2,3,4...,n)作为运算参数,如100以内数字求和,或是以(m,m+1,m+2...,n)为数据进行运算,本题就是一个经典的例子,而这些可以通过定义初值,末值和步长来完成,同理,如果我们要使用(m,m+2,m+4....,n)为数据进行相同的运算,只需改变步长为2即可。

以下是该题代码:

#include<stdio.h>
int main()
{
  double m,n;
  double i,sum=0;
  scanf("%lf %lf",&m,&n);
  for(i=m;i<=n;i++)
  {
    sum=sum+i*i+1/i;
  }
  printf("sum = %f",sum);
  return 0;
}

以下是程序流程图:

 

这道题错误上并没有什么大问题。。。

以下是调试截图:

以下是结果截图:

这道题是第八次作业的第二题,输入一串数字,找出250是第几个数字。

解法:使用累加器,每当输出一个数,就让计数器加一,找到250后,即跳出循环,输出累加器中的数字。

虽然这道题十分简单,但是这道题在每次数据输入后就对数据进行一次处理,这种方法就叫做在线处理,本题的处理就是判读数据是否是250和使累加器加1。虽然本题似乎只有这样是最优处理,但是在以后面对略为复杂一些的代码题时这种处理方法往往是最佳的算法,大大提高了运行速度。

代码如下

#include<stdio.h>
int main()
{
  int a=0,n=0;
  while(a!=250){
    scanf("%d",&a);
    n++;
  }
  printf("%d",n);
  return 0;
}

 以下是流程图:

 以下是调试和结果截图:

 

 

这道题是第10次作业的第三题,对任意一个自然数N0​​,先将其各位数字相加求和,再将其和乘以3后加上1,变成一个新自然数N1​​;然后对N1​​重复这种操作,可以产生新自然数N2​​;……多次重复这种操作,运算结果最终会得到一个固定不变的数Nk​​,输出得到Nk的过程。

解题思路:使用a=n记录n未变换之前的值,让n变换后判段n与a是否相等,得出固定不变的数字Nk。此题活用判断条件和代码的顺序解题。

代码如下:

#include<stdio.h>
int main()
{
  int i,n,a=0;
  scanf("%d",&n);
  for(i=1;a!=n;i++)
  {
   a=n;
   n=n/10000+n/1000%10+n/100%10+n/10%10+n%10;
   n=n*3+1;
   printf("%d:%d
",i,n);
  }
  return 0;
}

流程图如下:

 

以下是调试截图和结果截图:

要求三

 本周看了一些关于数据结构的知识,了解到我们的代码要简洁明了,并以时间空间的复杂度为优先进行设计。还看了一部分关于JAVA的知识。

要求四

原文地址:https://www.cnblogs.com/wozb/p/10056304.html