循环习题

判断101-200之间有多少个素数,并输出所有素数。

程序分析:什么叫素数呢?除了1和本身不能被任何数整除 的数叫素数

思路:

遍历101 到200之间的每个数

//用这个数 依次被2到i-1整除

//如果能除开说明不是素数

*/

public static void fun1()

{

//遍历 101到200之间的每个数

for(int i=101;i<=200;i++)

{

//让这个i依次被2到i-1的数除,如果除开就不是素数

//定义一个标志位

boolean  flag = true;//默认该数为素数

for(int j=2;j<=(i-1);j++)

{

if(i%j==0)

{

//i不是素数

flag= false;

break;

}

}

//根据flag值判断i是否为素数

if(flag)

{

System.out.println(i);

}

}

}

}



题目:“百钱买百鸡”是我国古代的著名数学题。

题目这样描述:3 文钱可以买1

只公鸡,2 文钱可以买一只母鸡,1 文钱可以买3 只小鸡。用100 文钱买100 只鸡,那么各

有公鸡、母鸡、小鸡多少只?

*/

public static void fun2()

{

//循环得出每种鸡的购买方案

for(int g=0;g<=33;g++)

{

for(int m=0;m<=50;m++)

{

for(int x=0;x<=99;x+=3)

{

//如果百钱买百鸡

if((g+m+x)==100 && (g*3+m*2+x/3)==100)

{

System.out.printf("公鸡:%d,母鸡:%d,小鸡:%d\n", g,m,x);

}

}

}

}

}



打印时钟

例如WINDOWS任务栏中的时钟

如:

23:59:57

23:59:58

23:59:59

00:00:00

00:00:01?

二、 思路提示:

一秒,一秒的走  用循环

秒大于或小于60两种情况用选择

分大于或小于60两种情况用选择

时大于或小于24(以一天24小时计算)两种情况用选择

三、 程序:

int shi=23;      //定义小时

int fen=58; //定义分钟

int miao=36; //定义秒

for(int i=1;i<=300;i++)

{

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

}

}

}

if(shi<10)

{

System.out.print("0"+shi+":");

}

else

{

System.out.print(shi+":");

}

if(fen<10)

{

System.out.print("0"+fen+":");

}

else

{

System.out.print(fen+":");

}

if(miao<10)

{

System.out.println("0"+miao);

}

else

{

System.out.println(miao);

}

}



有8个人在一起数数,从开始当数到8的时候向回数,当数到一得时候在向下数,反复循环问50次后数到几。

二、 思路提示:

数50次 一次又一次 有次数的循环;

是正数还是反数哪?  二选一;

数到8或数1了吗? 二选一。

三、 程序:

int shu=1;

boolean sj=true; //升序降序

for (int ci=1;ci<=50 ;ci++ )

{

if(sj==true)

{

if(shu==8)

{

shu=7;

sj=false;

}

else

{

shu++;

}

}

else

{

if(shu==1)

{

shu=2;

sj=true;

}

else

{

shu--;

}

}

System.out.println(ci+":"+shu);

}



题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项信息。

  程序分析:请抓住分子与分母的变化规律。

*/

public static void main(String[] args) {

int fm=1;

int fz=1,m=fm;

for(int i=1;i<=20;i++)

{

fz=m+fm;

fm=m;

m=fz;

System.out.println("第"+i+"项为:\t"+fz+"/"+fm);

}

}



圆周率问题:【2011全国编程大赛高中组初赛题】

中国古代数学家研究出了计算圆周率最简单的办法:

PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......

这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在多少

3.1415926 和3.1415927 之间,请编程计算,要想得到这样的结果,他要经过多少次加减法运

while(!(pai>=3.1415926 && pai<=3.1415927))

{

向PI上累计加减

//符号 取反

//分母 +2

}

*/

public static void fun2()

{

//定义一个变量表示圆周率

double pai =0;

//定义一个变量表示分母

double fm =1;

//定义一个变量表示符号

boolean flag = true;//true表示是正号

//定义一个计数器

int cs=0;

while(!(pai>=3.1415926 && pai<=3.1415927))

{

if(flag)//加号

{

pai+=4/fm;

}

else

{

pai-=4/fm;

}

//分母+2

fm+=2;

//符号取反

flag = !flag;

//次数++

cs++;

}

System.out.println("经过"+cs+"运算之后!");

}

}



* 年龄问题:

* 小兵13岁 大兵36 岁问多少年之后大兵的年龄恰恰是小兵年龄的2倍

* 分析:

* 很明显我不知道循环次数

* 这是循环

* while(大兵!=小兵*2)

* {

*

* }

*

*/

public static void fun1()

{

int daAge =36;

int xiaoAge =13;

//计数器

int year=0;

while(xiaoAge*2 != daAge)

{

//长年龄

xiaoAge++;

daAge++;

year++;

}

System.out.println(year+"年之后大兵年龄是小兵的2倍");

}



* 卖血问题:

* 假设你的女友跟说你有100000我就嫁给你

* 现在输入你的存款数 如果不够就去卖血卖一次赚 300元

* 问卖血多少才能抱得美人归

*/

public static void fun3()

{

//得到你的存款数

Scanner scann = new Scanner(System.in);

System.out.println("请输入你的存款数:");

int ck = scann.nextInt();

//声明一个计数器记录卖血的次数

int cs =0;

//只要你的存款不足100000就一直卖

while(ck<100000)

{

//卖血次数++

cs++;

//存款300

ck+=300;

}

System.out.printf("卖血%d次存款%d",cs,ck);

}

/**

* 卖血问题:

* 假设你的女友跟说你有100000我就嫁给你

* 现在输入你的存款数 如果不够就去卖血卖一次赚 253元

* 要求你至少为爱情卖血一次

* 问卖血多少才能抱得美人归

* do{}while();

*/

public static void fun4()

{

//得到你的存款数

Scanner scann = new Scanner(System.in);

System.out.println("请输入你的存款数:");

int ck = scann.nextInt();

//声明一个计数器记录卖血的次数

int cs =0;

//只要你的存款不足100000就一直卖

do

{

//卖血次数++

cs++;

//存款+253

ck+=253;

}

while(ck<100000);

System.out.printf("卖血%d次存款%d",cs,ck);

}



蛤蟆在井底,井深10米。白天蛤蟆向上爬5米,晚上蛤蟆下滑了4米。打印每天白晚蛤蟆的高度。

?

二、 思路提示:

一天一天的爬,循环。

不知道用几天,至少要1天。用什么循环语句?

白天爬,晚上滑,两种情况占一种。

?

三、 程序:

//变量初始值

int gao=0;  //蛤蟆的高度

boolean  bw=true;//白天:true  晚上:false

do

{

//白爬晚滑

if(bw)

{

gao=gao+5;

bw=false;

}

Else

{

gao=gao-4;

bw=true;

}

//打印高度

System.out.println(gao);

}

while(gao<10);//每当 (满足条件 高度不到10米);



求21的平方根;?

二、 思路提示:

对开方进行正向理解可以得

//总有一个整数最接近要开方的数;

1,2,3,4,5,6,7…..

//假设最接近要开方的数是2,总有一个小数接近开方的数。

2.1,2.2,2.3,2.4----2.9 

//依次找下去总一个精度是我们需要的。

2.21,2.22,2.23,2.24---2.29

…………………………………………..

如分析可以一层又一层布知道多少层 但至少要一次用什么循环。?

三、 程序:

double jie=0.0;

do

{

jie=jie+0.0001;

}

while (jie*jie<21);

System.out.println(jie);

你可能感兴趣的:(循环习题)