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学习清单的主要内容,如果未能解决你的问题,请参考以下文章