Everybody大家好,今天咋们来一起探讨一下关于流程控制语
首先,我们知道他有三种结构,分别是顺序,选择,循环
顺序结构
关于顺序结构咋们就不在多多讲解了,顺序结构就是代码从主函数开始逐行向下运行,简单的来说就是按顺序运行。顺序结构是一种宏观的代码运行结构。
选择结构
选择结构他顾名思义就是,给出条件,你进行选择,选择适合你,在进行程序的执行
他有两种格式,分别是if-else语句 和 switch语句
if-else语句
他的基本结构是这样的,基本格式
if(条件表达式){
满足条件表达式时,执行的代码;
}else{
不满足条件表达式时,执行的代码;
}
单if语句
if(条件表达式){
当满足条件表达式时,执行的代码;
}
嵌套if-else形式
if(条件1){
当满足条件表达式时,执行的代码;
if(条件2){
当满足条件表达式二时,执行的代码;
}else{
当不满足条件表达式二时,执行的代码;
}
}else{
当不满足条件表达式一时,执行的代码;
}
if-else if
if(条件1){满足条件表达式一执行的代码;
}else if(条件2){满足条件表达式二执行的代码;
}else if(条件3){满足条件表达式三执行的代码;
}else{以上条件均不满足时,执行此代码;
}
switch语句
咋们来看一看他们的基本格式
switch(变量){
case 值1:
执行语句1;
break;
case 值2:
执行语句2;
break;
case 值3:
执行语句3;
break;
........
deafult:
执行语句n;
break;
}
咋们来举一个简单的例子
switch (h){
case 2:dayOfweek = "Monday";
break;
case 3:dayOfweek = "Tuesday";
break;
case 4:dayOfweek = "Wednesday";
break;
case 5:dayOfweek = "Thursday";
break;
case 6:dayOfweek = "Friday";
break;
case 0:dayOfweek = "Saturday";
break;
case 1:dayOfweek = "Sunday";
break;
}
当h为的2时候,执行case2,为3的时候,执行case3,以此类推;当都不满足的时候,执行deafult语句
循环结构
循环结构主要是解决重复性执行的代码,有for语句和While语句
循环有四要素:
1.循环初始化:指的就是循环从什么时候开始执行
2.循环继续条件:什么情况循环继续执行/反过来说,循环何时结束
3.循环体:就是我们需要多次循环执行的代码块
4.循环的步长
for语句(已知循环的次数)
for(循环初始化;循环继续条件;循环的步长){
循环体
}
咋们举个例子
*
**
***
****
for(int line=1;line<=4;line++){
for(int i = 1;i<=line;i++){
System.out.println("*");
}
}
第一个for里面,line表示行数,第二个for里面,是需要执行的语句,输出*,在for循环里面,个人认为line++和++line是一个意思,别搞混了,都是先+1在执行;
*
**
***
**6-|6-i|
*
for(int i= 1;i<=11;i++){
for(int j = 1;j<=i&&j<=12-i;j++);{
System.out.print("*");
}
System.out.println();
}
while循环(不知循环次数但是已知结束条件)
while 循环的语法如下 :
while( 循环继续条件){
// 循环体
语句;
}While(true){
}
死循环:循环一直不出来,CPU在一直执行循环体
for(;;){
System.out.println("for死循环")
}
While(true){
System.out.println("While死循环")
}
实战演练
3.1(代数:解一元二次方程)可以使用下面的公式求一元二次方程ax^2+bx+c=0的两个根
/*
数据:a b c delt r1 r2
步骤:
1.提示用户输入abc三个参数
2.计算delt=b*b-4*a*c
3.判断delt的值
3.1 delt>0
输出两个解
3.2 delt==0
输出一个解
3.3 delt<0
无实数解
*/
import java.util.Scanner;
class Demo03_01{
public static void main(String[] args){
//1.提示用户输入abc三个参数
Scanner scanner=new Scanner(System.in);
System.out.print("请输入a,b,c:");
double a=scanner.nextDouble();
double b=scanner.nextDouble();
double c=scanner.nextDouble();
//2.计算delt=b*b-4*a*c
double delt=b*b-4*a*c;
//3.判断delt的值
if(delt>0){
double r1=(-b+Math.sqrt(delt))/(2*a);
double r2=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r1=%.2f,r2=%.2f",r1,r2);
}else if(delt==0){
double r=(-b-Math.sqrt(delt))/(2*a);
System.out.printf("r=%.2f",r);
}else{
System.out.println("无实数解!");
}
}
}
3.2
可以使用编程练习题1.13中给出的Crammer规则解线性方程组
/*
数据:a b c d e f
步骤:
1.输入数值
2.判断k的值
3.计算x y
*/
import java.util.Scanner;
public class Text02 {
public static void main(String [] args) {
//1.输入数值
Scanner input = new Scanner(System.in);
System.out.print("请输入a、b、c、d、e、f的值:");
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble();
double d = input.nextDouble();
double e = input.nextDouble();
double f = input.nextDouble();
//2.判断k的值
double k = a * d - b * c ;
if(k == 0)
System.out.println("无结果 ");
else {
//3.计算x y
double x = (e * d - b * f)/(a * d - b * c);
double y = (a * f - e* c)/(a * d - b * c);
System.out.println("x的值:" + x +"y的值:" + y);
}
}
}
3.3编写一个程序,提示用户输入代表今天日期的数字(周日为0)
数据:今天的周几 未来的天数 未来的周几
(今天的周几+未来的天数)%7=未来的周几
步骤:
1.输入今天是周几
2.输入未来的几天
3.打印未来的几天是周几
import java.util.Scanner;
public Class Test3{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("今天是周几:");
int today = in.nextInt();
System.out.println("未来的几天:";)
int future = in.nextInt();
int futureDay = (today + future)%7;
String todayStr="";
String futureDayStr="";
if(today==0){
todayStr="周日";
}else if(today==1){
todayStr="周一";
}else if(today==2){
todayStr="周二";
}else if(today==3){
todayStr="周三";
}else if(today==4){
todayStr="周四";
}else if(today==5){
todayStr="周五";
}else if(today==6){
todayStr="周六";
}
if(futureDay==0){
futureDayStr="周日";
}else if(futureDay==1){
futureDayStr="周一";
}else if(futureDay==2){
futureDayStr="周二";
}else if(futureDay==3){
futureDayStr="周三";
}else if(futureDay==4){
futureDayStr="周四";
}else if(futureDay==5){
futureDayStr="周五";
}else if(futureDay==6){
futureDayStr="周六";
}
System.out.println("今天是"+todayStr+",未来的日子是"+futureDayStr);
}
}
}
}
3.4
编写一个程序,提示用户输入一个三位的整数,然后确定它是否是回文数字,从左到右,以及从右到左都是一样的话,这个数字称为回文数字。
步骤:1.先输入一个Sum=0
2.sum=sum*10+num%10
num/=10
3.几位数字就上面的的循环语句就循环几次
import java.util.Scanner;
pubilc class Test4{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
int temp = num;
int sum = 0;
sum = sum*10+num%10;
num/=10;
sum = sum*10+num%10;
num/=10;
sum = sum*10+num%10;
num/=10;
if(sum==temp){
System.out.println("是回文");
}
else{
System.out.println("不是回文");
}
}
3.5 假设你想开发一个玩彩票的游戏,程序随机产生一个两位数的彩票
数据:电脑随机产生一个两位数字 用户输入一个两个数字
要是用户输入的数字与电脑的数字完全匹配,奖金10000
用户的输入与电脑的数字,顺序不匹配,数字一样 奖金3000
用户输入与电脑之匹配一个数字 奖金1000
步骤:
1.提示用户输入一个两位数字
2.计算机随机产生一个两位数字
3.将两者进行对比 评选奖金
10000 com == usr
3000 com/10 == usr%10 && com%10 == usr/10
1000 com/10 == usr/10 || com/10 ==usr%10 || com%10 == usr/10 || com%10 == usr%10
import java.util.*;
public class Test5{
pubilc static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入你得彩票码:");
int usr = in.nextInt();
Random sc = new Random();
int com = sc.Random(100);
if(usr>=10 && usr<=99){
if(usr==com){
System.out.println("恭喜你获得奖金10000美元");
}
else if(com/10 == usr%10 && com%10 == usr/10)
{
System.out.println("恭喜你获得奖金3000美元");
}
else if(com/10 == usr/10 || com/10 ==usr%10 || com%10 == usr/10 || com%10 == usr%10)
{
System.out.println("恭喜你获得奖金1000美元");
}
else{
System.out.println("很遗憾你没有获奖");
}
}else{
System.out.println("您输入的数字有误,请重新输入");
}
}
}
3.6剪刀,石头,布的游戏,编写可以玩流行的剪刀,石头,布游戏的程序
数据:电脑随机产生的一个数字 用户输入一个数字
步骤:
1.提示用户输入一个数字
2.计算机随机产生一个数字
3.将两个数字进行对比,分输赢
平局 com==usr
用户赢 usr=0 com=2 || usr=1 com=0 || usr=2 com=1
用户输 剩下的都是用户输
import java.util.Scanner;
pubilc class Test6{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入 剪刀0 石头1 布2:");
int usr = scanner.nextInt();
Random random = new Random();
int com = random.nextInt(3);/*Random随机函数*/
String usrStr="";
String comStr="";
switch(usr){
case 0:
usrStr = "剪刀";
break;
case1:
usrStr = "石头";
break;
case 2:
usrStr = "布";
break;
}
swith(com){
case 0:
comStr = "剪刀";
break;
case 1:
comStr = "石头";
break;
case 2:
comStr = "布";
break;
}
if(usr==com){
System.out.printf("用户是%s,电脑是%s,平局",usrStr,comStr);
}else if(usr==0&&com==2 || usr==1&&com==0 || usr==2&&com==1){
System.out.printf("用户是%s,电脑是%s,用户赢",usrStr,comStr);
}else{
System.out.printf("用户是%s,电脑是%s,用户输",usrStr,comStr);
}
}
}
3.7泽勒一致性是由克里斯汀.泽勒开发的用于计算某天星期几的算法
步骤:1.你需要对1月和2月进行改变,因为他说的是上一年的13和14
2.输入年,月,日
import java.util.*;
pubilc class Test7{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入年份:");
int year = in.nextInt();
System.out.println("请输入月份:");
int month = in.nextInt();
System.out.println("请输入几号:");
int day = in.nextInt();
switch (month){
case 1:month = 13;
year--;
break;
case 2:month = 14;
year--;
break;
}
int j = Math.abs (year/100),k = year%100;
int h = (day+(int)(26*(month+1)/10)+k+(int)(k/4)+(int)(j/4)+5*j)%7;
String dayOfweek = null;
switch (h){
case 2:dayOfweek = "Monday";
break;
case 3:dayOfweek = "Tuesday";
break;
case 4:dayOfweek = "Wednesday";
break;
case 5:dayOfweek = "Thursday";
break;
case 6:dayOfweek = "Friday";
break;
case 0:dayOfweek = "Saturday";
break;
case 1:dayOfweek = "Sunday";
break;
}
System.out.println ("Day of the week is "+dayOfweek);
}
}
3.8几何,判断点是否在圆内?
.
public class Test8{
pubilc static void mian(String[] args){
Scanner in =new Scanner(System.in);
System.out.println("请输入点的座标:");
Double x = in.nextDouble();
Double y = in.nextDouble();
Double x0 = 0;
Double y0 = 0;
Double r = 10;
Double dis = Math.sqrt(Math.pow(x-x0,2)+Math.pow(y-y0,2));
if(dis > r){
System.out.println("点在圆外");
}
else if(dis = r){
System.out.println("点在圆上"):
}
else{
System.out.println("点在圆内");
}
}
}
3.9几何:点是否在三角形内,假设一个直角三角形在一平面上
用到高中的知识点,那条直线的座标,Y=-1/2x+200
1.提示用户输入一个点的座标
2.先大致判断一下座标的范围
3.在精确的判断座标的范围
import java.util.Scanner;
public class Demo15 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter x,y:");
double x=scanner.nextDouble();
double y=scanner.nextDouble();
if(x>=0&&x<=200){
if((200-x)/y>=2){
System.out.println("in");
}
}
System.out.println("out");
}
}
3.10几何:两个矩形
/*
数据:大矩形的中点座标、宽、高;小矩形的宽、高、中点座标
步骤:
1.先输入大矩形的中心,宽和高
2.再输入小矩形的中心,宽和高
3.找小矩形在大矩形中极限
4.找小矩形与大矩形重叠的极限
*/
import java.util.Scanner;
class Demo03_10{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.先输入大矩形的中心,宽和高
System.out.print("请输入第1个矩形的信息:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double w1=scanner.nextDouble();
double h1=scanner.nextDouble();
//2.再输入小矩形的中心,宽和高
System.out.print("请输入第2个矩形的信息:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double w2=scanner.nextDouble();
double h2=scanner.nextDouble();
//3.找小矩形在大矩形中极限
double inXMin=x1-(w1-w2)/2;
double inXMax=x1+(w1-w2)/2;
double inYMin=y1-(h1-h2)/2;
double inYMax=y1+(h1-h2)/2;
//4.找小矩形与大矩形重叠的极限
double outXMin=x1-(w1+w2)/2;
double outXMax=x1+(w1+w2)/2;
double outYMin=y1-(h1+h2)/2;
double outYMax=y1+(h1+h2)/2;
if(x2>=inXMin&&x2<=inXMax&&y2>=inYMin&&y2<=inYMax){
System.out.println("小矩形在大矩形里面!");
}else if(x2<=outXMin||x2>=outXMax||y2<=outYMin||y2>=outYMax){
System.out.println("小矩形在大矩形外面!");
}else{
System.out.println("小矩形和大矩形相交!");
}
}
}
3.11统计正数和负数的个数,然后计算这些数字的平均值
步骤:1.输入一个数字
2.判断他的正负
3.进行相加
4.输出
Class Test11{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int sum=0;//总和
int positives=0;//正数的个数
int negatives=0;//负数的个数
System.out.println("请输入若干个个数字:");
While(true){
int num=in.nextInt();
if(num!=0){
sum+=num;
if(num>0){
positives++;
}else{
negatives++;
}
}else{
break; //跳出循环
}
}
if(positives+negatives==0){
System.out.println("没有其他数字的输入,除了0");
} else{
System.out.println("正数的个数"+postives);
System.out.println("负数的个数"+negatives);
System.out.println("输入的总数"+positives+negatives);
System.out.println("平均值"+sum/(positives+negatives));
}
}
}
3.12设输入的两个整数位n1和n2.已知1是一个公约数,但是它
步骤:1.输入两个整数
2.判断最大公约数,较方便的,需要以小的那个数为基准
3.从小的数反着除,两者同时取余为0,证明为他们的最大公约数
4.输出
Class Test12
{
public static void main (String[] args){
Scanner in =new Scanner(System.in)
System.out.println("请输入两个数字:");
int n1=in.nextInt();
int n2=in.nextInt();
int gcd=1;
for(int i=n1<n2?n1:n2;i>=1;i--){
if(n1%i==0&&n2%i==0){
gcd=i;
break;
}
}
System.out.println(gcd);
}
}
3.13
编写一个程序,读入一个整数,然后以升序现实它的所有最小因子,例如,输入的整数是120,那么输出的就应是2,2,2,3,5
步骤:1.输入一个整数
2.从2开始除,如果,为0,就继续除2,当除2有余数之时,进行下一位的除,直到为1
3.输出
Class Test13{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = in.nextInt();
while(true){
for(int i=2;i<=unm;i++){
if(num%i==0){
System.out.println(i+"");
num=num/i;
break;
}
}
if(num==1){
break;
}
}
}
}