1、循环结构分为几种?
分为三种:for循环;while循环;do...while循环;
1.1for循环:适合次数比较固定的情况
for(初始化变量;条件语句;变量的变化)
{ 代码 }
1.2while循环:
while(条件语句) //条件语句的结果为true的时候才会运行
{
代码;
变量值的改变;//也可以改变条件
}
1.3 do...while循环:先执行,在判断,所以do...while至少执行一次
do{
代码;
变量值的改变;//也可以改变条件
}while(条件 );(分号要记住)
2下面就用这三种循环处理一些简单的循环
2.1 从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
public class dom1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入一个数字:");
int Num=input.nextInt();
for(int i=Num;i>1;i--)
{
System.out.print(Num+"*");
Num--;
if(Num==1)
{
System.out.print(Num);
}
}
}
}
比如输入一个7,运行结果如下:
总结:这题主要考你原样输出递减数字相乘,一开始我一直在计算值,怎么都算不对,后面想了好久,才发现只是要输出公式,有的时候不要把问题考虑的复杂。
2.2 从第一个月开始只有两只兔子两个月长大第三个月生了两只兔子, 生的小兔子两个月长大后每个月又生一对以此类推12个月后一共有多少只兔子
我用了两种算法,第一种:
public class dom3 {
public static void main(String[] args) {
int arr[] = new int[12];
arr[0] = arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
System.out.println("斐波那契数列的前12项如下所示:");
for (int i = 0; i < arr.length; i++) {
if (i % 5 == 0)
System.out.println();
System.out.print(arr[i] + "\t");
}
}
}
找出规律,前两个数相加等于第三个数,只需要在数组里面输入要输出的月份,那个月份的兔子对数就自动输出了
第二种方法:
public class dom6 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
int a=1,b=1;
System.out.println("请输入月份");
int Yo=input.nextInt();
for (int i=3;i<=Yo;i++)
{
int tep=a+b;
a=b;
b=tep;
}
System.out.println("兔子是"+b+"对");
}
}
两种方法运行的结果一样的,输入12,运行时144,
2.3 任意输入一个整数(小于10位),输出它一共有多少位
public class dom1 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("请输入一个10位数以内的数:");
int Num=input.nextInt();
int i=1;
for (i=1;i<10;)
{
if(Num/10>0) {
Num=Num/10;
i++;
}else
{
break;
}
}
System.out.println("这个数是"+i+"位数");
}
}
这里我们注意,首先考虑的是,怎么才能输出一个未知的数的位数,我用到了%10,每运行一步,就少一位的方法,想到这,其他的代码就简单了,运行结果如下
2.4 本金10000元存入银行,年利率是千分之三,每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金
public class dom2 {
public static void main(String[] args) {
double Money=10000;
double YL=0.003;
int Year=5;
for (int i=1;i<=5;i++)
{
Money=Money*(1+0.003);
}
System.out.println("五年后获得的本金是:"+Money+"元");
}
}
这题简单,算好利率,加上本金就可以了。
2.5 计算 1+2-3+4-5+6-7....+100的结果
public class dom3 {
public static void main(String[] args) {
int sum=1;
for(int i=2;i<=100;i++)
{
if(i%2==0){
sum=sum+i;
}
else
{
sum=sum-i;
}
}
System.out.println("结果为:"+sum);
}
}
这里对于奇偶的区分用到了%2,切记是从2开始的;运行结果
2.6 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
System.out.println("输入多少个正整数");
int Num=input.nextInt();
int x=0,y=0;
for(int i=1;i<=Num;i++)
{
System.out.println("输入"+i+"个数");
int a=input.nextInt();
if (a%2==0){
x++;
}if (a%2>0){
y++;
}if(a==-1){
System.exit(-1);
}
}
System.out.println("奇数的个数为:"+y+"\t"+"偶数的个数为:"+x);
}
这里一样用到了%2的方法,如果输入错误,强制中断程序,跳到最外层,用的是System.exit(int ),如果你用break,只是跳出当层代码,外面的仍然执行,结果是错的。
2.7 一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)
public class dom8 {
public static void main(String[] args) {
double x=0.00008;
int i=0;
while(x<=8848.13){
x=2*x;
i++;
}
System.out.println("对折第"+i+"次");
}
}
这题也比较简单,抓住两点,1单位换算要对,初始值是0,好多同学定义初始值为1,多算了一次
2.8 计算1000以内所有不能被7整除的整数之和
public class dom6 {
public static void main(String[] args) {
int sum=0;
for(int i=0;i<=1000;i++)
{
if(i%7!=0)
{
sum=sum+i;
}
}System.out.println("1000以内所有不能被7整除的整数之和为:"+sum);
}
}
运行结果:
2.9 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个, 第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
public class dom4
{
public static void main(String[] args) {
int d=10;
int x=1;
for(d=10;d>1;d--)
{
x=(x+1)*2;
}
System.out.println("第一天摘了:"+x);
}
}
这道题虽然字数挺多的,但是分析起来挺简单的,x=(x+1)*2,前一天和当天的数的关系式,记住只有九天,不然就多算了一次
2.10 求水仙花的值,比如153=1^3+5^3+3^3
public class dom8 {
public static void main(String[] args) {
int a=0,b=0,c=0,i;
for (i=100;i<=999;i++){
a=i/100;
b=i/10%10;
c=i%10;
if(i==(a*a*a+b*b*b+c*c*c)){
System.out.println("输出水仙花为:"+i);
}
}
}
运行结果:
总结:基本上各个类型的题目我差不多都梳理一遍了,有补充的欢迎和我说,主要是分析完题目中的要点,转换好就简单多了,灵活运用这三种循环结构