WhlieDo-WhileFor循环(计算1+1/2!+1/3!+1/4!+...的前20项之和;用for循环计算8+88+888+8888+...前10项之和)2021.5.4学习清单

Posted 倾卿亲君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WhlieDo-WhileFor循环(计算1+1/2!+1/3!+1/4!+...的前20项之和;用for循环计算8+88+888+8888+...前10项之和)2021.5.4学习清单相关的知识,希望对你有一定的参考价值。

Whlie、Do-While、For循环

学了C语言之后跳转Java,发现其实很多地方都很相似,虽然普通的Java的开头要比C语言多

C语言的传统开头

#include<stdio.h>

int main

{

若干语句;

}

而Java的传统开头

public class QinQinQingJun{

       pulic static void main(String[] args){

                        若干语句;

               }

}

接触C语言的时候,最难的时候就是指针,元素指来指去的。接触Java之后,感觉方便太多了,所谓C语言面向过程,C++半面向过程半面向对象,Java是面向对象的。就犹如做菜,C语言要求全部自己做,食材准备好后,切块、倒油、开火、翻炒、装配;而Java就像点外卖,坐等别人做好送到main函数。在学习语法过程中,我个人感觉有两个语法让我比较头疼,其中一个就是循环,自从学了for循环,while和do-while循环语句就没用过了,应该是我接触的太少了,我认为while和do-while循环绝大多可以被for所替代。现在让我温习一下即将忘记的两个在我这里存在感最低的循环。

While循环语句

语法形式:while(表达式){//在括号中是一个求值为boolean类型数据的表达式

                         若干语句;//循环体,当循环体只有一条的时候,大括号可以省略

                   }

下面是while循环的流程图:

                                                                                         

while循环只要不false就可以一直循环,我把它称为“不错不si(结束),一错就si”.,刚刚谈到有些时候大括号可以省略,对于我这个强迫症来说,都加上大括号好看,整齐,所以我一般不省略。这个While循环像极了小时候的我,小时候的我比较顽皮,妈妈不在家我就疯狂的玩,一直玩,什么时候结束玩耍呢,就是我妈妈回来的时候发出的动静,所谓“妈在外,玩不断;妈一回,玩就断”。

//例子计算1+2+3+...+10的值
public class Txt01{
    public static void main(String[] args){
        int n = 10;
        int sum = 0;//初始化sum
		int i = 0;
        while(i <= n){//当i加到11的时候循环结束
           sum += i;
           i += 1;
      }
      System.out.println(sum);
   }
}

 

Do-While循环语句

语法形式:do{

                        若干语句;//循环体

                      }while(表达式);

While和Do-While的区别是Do-While循环语句的循环体在判断对错之前会先执行循环体,也就是说While循环语句的判断是否结束的表达式和循环体交换一下位置就是Do-While循环语句。Do-While流程图如下:

                                                                                                     

我对Do-While的理解就像王者荣耀里的名刀,在结束之前还要皮一下,也就是说先执行再决定结不结束,也像极了现在的闪婚族和随便恋爱的一族,第一眼看起来不错,先得到了,先处一处,感觉不行就结束。这就是Do-While,先执行再决定结不结束。Do-While的例子和For一起给出来,就不单独给出了。

 

For循环语句

语法形式:for(表达式1;表达式2;表达式3){

                        若干语句;

                   }

我所遇见的for循环,表达式1一般都是初始化变量,表达式2就是决定是否结束的条件,表达式3一般都是让前面的初始化变量发生变化制造结束的条件。For循环流程图如下:

                                                                                                        

例如:for(int i ; i < 10;i++){}i++就是导致循环结束的结果,当i加到了10循环结束。当然这时候就会有爪洼迷们就会问,语句1、2、3可不可以都没有,这个当然是可以的,for循环括号里的语句有决定循环结束的成分,若是都没有的话就是一个死循环,例如如下代码:

public class Txt01{
    public static void main(String[] args){
       for(; ; ){
		    System.out.println("倾卿亲君最帅!!!!");
      }
   }
}

这个代码的结果会一直说我好帅,说的我都不好意思了,哈哈哈哈。

好了目前为止三个经典的循环就介绍完了,让我们回忆一下这三个循环,首先是While循环它的特点我把它比作了我在家偷偷玩,麻麻不回来我就一直玩,麻麻一回来我就停止玩耍乖乖写作业,就是所谓的“不false不die”;其次就是Do-While循环了,他与While的循环的区别就是在循环体和结束条件表达式的位置,先条件再循环体的循环是While,先循环再条件的循环时Do-While,我把它比作王者荣耀里的名刀装备哈,结束前还要皮一下;最后就是传说中的for循环,for循环就比较简明,它把条件都摆在括号里,要是把While、Do-While、for循环比作的妹子的话我觉得for的身材时最好的,最性感的。

下面是我学习循环所遇到的两个实验:

实验一:分别用do-while和for循环计算1+1/2!+1/3!+1/4!+...的前20项之和

public class Experiment02{
	public static void main(String[] args){
		double sum=0.0;
		double a=1.0;
		double i=1.0;
		do{ 
		  sum=sum+a;
		  i++;
		  a=(1.0/i)*a;
		  }while(i<=20);
		  System.out.println("使用do-while循环计算1+1/2!+1/3!+1/4!+...的前20项之和为:");
		  System.out.println(sum);
		  int n = 20;
		  double z = 0.0;
		  for(i = 1 ; i <= 20; i++){
			int num = 1;
			for(int j = 1;j <= i; j++){
				num *= j;
			}
				z += 1.0 / num;
		}
		System.out.println("使用for循环计算1+1/2!+1/3!+1/4!+...的前20项之和为:");
		System.out.println(z);
	}
}

我对这个实验的思路是先求出1!、2!、3!....然后再用1除以刚刚所得出来的阶乘,最后依次相加,这个例子就当作Do-While的例子啦。

实验结果:

实验二:用for循环计算8+88+888+8888+...前10项之和

这个实验我稍微家里一点难度,并同时用两种方法做出来,一种是普通方法,一种是导包方法。同时为了提升用户服务,让程序不只是计算前十项,前多少项由用户自己输入,也不只是8+88+888+8888...可以n+nn+nnn+nnnn.....

import java.util.Scanner;
import java.lang.Math;//导入Math包
public class Experiment03{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入整数n,计算n+nn+nnn+nnnn+nnnnn....(导包方法)");
		int t = sc.nextInt();//接收计算什么样式的数
		Scanner ab = new Scanner(System.in);
		System.out.println("请输入计算前多少个数(导包方法):");
		int q = ab.nextInt();//接收需要多少位数
		int a;
		a = 10;
		long m = 0;
		long SUM = 0;
		for(int i = 0;i < q;i++){
			long n = (long)Math.pow(a,i);//计算a的i次方
			m += n*t;
			SUM += m;
		}
		System.out.println("计算结果为(用导包方法):" + SUM);


		Scanner bc = new Scanner(System.in);//普通方法
		System.out.println("请输入整数n,计算n+nn+nnn+nnnn+nnnnn....(普通方法)");
		long n = bc.nextLong();//接收一个需要计算的数
		Scanner cd = new Scanner(System.in);
		System.out.println("请输入计算前多少个数(普通方法):");
		int p = cd.nextInt();//接收需要多少位数
		long sum = 0;
		long num = 0;
		for(int i = 0;i < p;i++){
			long z = n;//每次初始化a的值
			for(int j = 0;j < i;j++){//让a成为最高位80、800、8000...
				z *= 10;
			}
			num += z;//形成88、888、8888、88888...
			sum += num;
		}
		System.out.println("计算结果为(用普通方法):" + sum);
	}
}

我的代码对这个实验的思路是先得到80、800、8000...然后让8+80得到88,800+88得到888依次类推,最后一个一个加起来。普通方法是通过多次乘10的办法得到80、800、8000...而导包的办法是利用了Java的API文档中的数学包也就是Math包,import java.lang.Math;利用了其中的幂函数pow,pow(a,i)的意思就是a的次方,让8依次乘10的1次方,2次方,3次方达到一样的效果。

实验结果:

由于实验结果太大已经超过了int的范围所以我用到了long。

至此我的讲解和举例就结束了,在讲解的过程中有出现的问题欢迎大佬们在评论区指出,我会好好吸取错误经验,好好学习。最后祝大家五四青年节快乐啦!!

以上是关于WhlieDo-WhileFor循环(计算1+1/2!+1/3!+1/4!+...的前20项之和;用for循环计算8+88+888+8888+...前10项之和)2021.5.4学习清单的主要内容,如果未能解决你的问题,请参考以下文章

用循环结构编写计算1~10的累加和

用for循环计算100以内的奇数之和

while循环计算1到100之和

while循环计算1到100之和

while循环计算1到100之和

51单片机for循环(计算1加到10)问题?