结构化编程
结构化程序设计(Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程序码区块、for循环以及while循环等结构来取代传统的goto。
指导思想
自顶向下、逐步求精、模块化
结构化编程的推论
任何复杂的问题都可以三种基本算法结构来描述:顺序、选择、循环。因此用计算机语句描述的程序也包含三种基本结构。
条件分支语句
Java
语言提供了两种判断语句: if 语句和 switch 语句。这两种语句用于实现判断,当符合某些条件时执行某段代码,否则将不执行
语法
1、if(条件判断语句){代码A;} 当条件成立时执行代码A,如果条件不成立则不执行代码A,而是直接执行if的下一句
2、if(条件){代码块1;}else{代码块2;} 当条件成立时执行代码块1,如果条件不成立则执行代码块2。没有一种情况是同时执行代码块1和2
3、if(条件1){代码块1;}else if(条件2) {代码块2;}... else{代码块n;} 当条件1成立时执行代码块1,如果条件1不成立继续判断条件2,如果条件2成立则执行代码块2,依次类推。没有一种情况是同时执行代码块1和2
4、说明:允许多个if之间进行相互嵌套
需求:要求输入学生性别,如果false则显示女的
package com.yan2;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
// 要求输入学生性别,如果false则显示女的
Scanner sc = new Scanner(System.in);
boolean sex = sc.nextBoolean();
if (sex == false) {
System.out.println("性别为女");
} else {
System.out.println("性别为男");
}
}
}
需求:输入学生成绩,并进行评级
package com.yan2;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
// 要求输入学生成绩(假设成绩都是整数),
// 如果>=60显示及格,否则显示不及格
// int score = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生成绩:整数");
// score = sc.nextInt();
int score = sc.nextInt();
// if (score >= 0 && score <= 100) {
// if (score >= 60) {
// System.out.println("及格");
// } else {
// System.out.println("不及格");
// }
// } else {
// System.out.println("您输入的成绩不合法!");
// }
// if (score < 0 || score > 100) {
// System.out.println("您输入的成绩不合法!");
// } else {
// if (score >= 60) {
// System.out.println("合格");
// } else {
// System.out.println("不及格");
// }
// }
if (score < 0 || score > 100) {
System.out.println("您输入的成绩不合法");
} else {
if (score >= 95) {
System.out.println("你是最棒的!!!");
} else if (score >= 85) {
System.out.println("优秀");
} else if (score >= 70) {
System.out.println("良好");
} else if (score >= 60) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
}
}
}
开关分支语言switch
语法:
switch( 表达式 ){
case 值 1 : 判断表达式的值是否在值 1 ,如果相等则执行代码块 1
代码块1; break; 执行完成后,如果没有 break ,则自动执行后续语句,但是不进行判定。如果有break 则立即中断 switch 的执行,跳到 switch 块的下一局继续执行
多个case 语句 :
... ...
default:如果所有的 case 都不能成立,则执行代码块 n
代码块n;
break;
}
需求:输入月份,显示对应的本月的天数
package com.yan2;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
// 需求:输入年月份,显示对应的本月的天数
System.out.println("请输入年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
// if (year <= 0 || year >= 10000) {
// System.out.println("您输入的年份错误");
// return;
// }
System.out.println("请输入月份:");
int month = sc.nextInt();
if (month > 12 || month < 1) {
System.out.println("您输入的月份错误!!!");
} else {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
System.out.println("天数为31");
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
System.out.println("天数为30");
} else {
// 判断闰年 可以被4整除但是不被100整除或者能被400整除
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("天数为29");
} else {
System.out.println("天数为28");
}
}
}
sc.close();
}
}
package com.yan2;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
// 需求:输入年月份,显示对应的本月的天数
System.out.println("请输入年份:");
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
System.out.println("请输入月份:");
int month = sc.nextInt();
int days = 0;
if (month > 12 || month < 1) {
System.out.println("您输入的月份错误!");
} else {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
default:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
} else {
days = 28;
}
break;
}
System.out.println(year + "年" + month + "月有" + days + "天");
}
}
}
循环结构
循环就是重复做某一件事情。在 Java 程序中,循环控制即在某一情况下,控制程序重复执行某一条或多条语句,直到遇到终止条件为止
循环语句也称迭代语句,在 Java 语言中存在的 while 、 for 和 do-while 循环语句
需求:计算 1+2+3+...+100=5050
while循环
while是Java中最基本的循环语句,满足条件才执行循环体,如果不满足条件则不执行。所以有可能循环体一次都不执行。
语法:while(条件){循环体;} 当条件成立时反复执行循环体,每执行一次判断一次条件。
package com.yan2;
public class Test7 {
public static void main(String[] args) {
// int k = 100;
// int m = 99;
// int res = k > 100 ? m++ : ++m;
// System.out.println(res);// 100 k>100不成立,则直接执行++m,而和表达式2:m++无关,不会执行
// System.out.println(m);// 100
// 计算1到100的和
// 第一种写法
// int k = 0;
// int res = 0;
// while (k++ < 100) {
// res += k;
// }
// System.out.println("1+2+3+..+100=" + res);
// 第二种写法
// int res = 0;// 累加器,用于存放每次循环体的执行结果
// int k = 1;// 控制循环次数
// while (k < 101) {
// /res=res+k;
// /k++;
// res += k++;
// }
// System.out.println("1+2+3+...+100=" + res);
// 第三种写法
int k = 1;
int res1 = 0;
while (true) {
// System.out.println(k);
res1 += k++;
if (k > 100)
break;
}
System.out.println("1+2+3+...+100=" + res1);
}
}
do/while循环
语法:
do{ 循环体 ; }while( 条件 ) ; 先执行循环体,然后进行条件判断,如果条件为 true ,则执行下次循环;如果条件为false 则终止循环。
不同于while 循环的点: do/while 循环至少执行循环体一次,而 while 循环有可能一次都不执行
package com.yan2;
public class Test9 {
public static void main(String[] args) {
int k = 1;
int res = 0;
do {
res += k++;
} while (k <= 100);
System.out.println(res);
}
}
for循环
语法: for( 表达式 1 ;表达式 2 ;表达式 3){ 循环体 ;}
执行表达式1
执行表达式2 ,一般表达式 2 是一个条件,如果条件为 true 则执行循环体;如果条件为 false 则终止循环
执行循环体
执行表达式3
执行第2 步骤
for 循环一般用于可以明确循环次数的场景中; while 循环一般用于不能预先确定循环执行次数的场景中;do/while 循环一般用于不能预先确定循环执行次数,同时要求循环体至少执行一次的场景中
package com.yan3;
public class Test1 {
public static void main(String[] args) {
int res = 0;
// 第一种写法
// for (int k = 1; k < 101; k++) {
// res += k;
// }
// 第二种写法
int k = 1;
for (;;) {
res += k++;
if (k > 100)
break;
}
System.out.println("1+2+3+..+100=" + res);
}
}