• 【软件工程师从0到1】- 基本控制结构详解(含习题)


    文章目录

    一 - 前言

    二 - 条件转移指令实现

    1 - 抽象化条件转移指令

    2 - 条件转移实现选择结构

    3 - 条件转移实现循环结构

    三 - Java中的选择循环

    1 - 条件选择if-else

    2 - 条件选择switch

    3 - while循环

    4 - do...while循环

    5 - for循环

    6 - 循环控制语句

    四 - 练习题

    1 - 求20以内的阶乘之和

    2 - 打印九九乘法表

    3 - 求10!+9!+8!+…+1! = ?

    五 - 结尾


    一 - 前言

    介绍:大家好啊,我是不良战士。

    社区:(欢迎大家加入)日常打卡、学习交流、资源共享的知识星球。

    更新时间:每周两更。

    本文适合于刚入门的小伙伴,以及基础不是很扎实的小伙伴。

    我会很细致的对基本控制结构进行讲解,从指令实现出发、进一步理解选择循环结构后,再进行Java中的选择循环的讲解,欢迎小伙伴多多支持。

    开始正文吧

     


    二 - 条件转移指令实现

    基本控制结构有:顺序、选择、循环。

    我们编程时若是写成顺序结构往往会遇到很多问题。

    • 如进行一个变量的判断,进行不同的操作。
    • 某段代码需要重复执行,但是写太多又会冗余。

    1 - 抽象化条件转移指令

    在CPU运行程序时,往往是一条一条执行它的指令,而能实现它选择循环的就是:

    • 无条件转移指令JMP,当执行到这个指令时可以直接跳转到代码段的某一位置。
    • 条件转移指令JCC,条件成立才会转移,否则不做任何操作。

    根据以上特点,我们可以将这两条指令抽象成两个方法/函数。

    无条件转移JMP -> void 无条件(int x) //无条件转移到第x段代码。

    条件转移JCC -> void 条件(int x, boolean cond) //参数cond为true才会转移到x段。

    2 - 条件转移实现选择结构

    1、如果有这样一个需求:给定一个变量i,若它小于1则打印“hello”,否则打印“hi”。

    根据上面提供的两种方法,具体实现如下:

    1. int i = 某个值; //1
    2. 条件(5, i<1); //2
    3. System.out.print("hi"); //3
    4. 无条件(6) //4
    5. System.out.print("hello"); //5
    6. 其他代码; //6

    2、需求2:给定一个变量i,大于0则输出“yes”,否则不操作。

    1. int i = 某个值; //1
    2. 条件(4, i>0); //2
    3. 无条件(5) //3
    4. System.out.print("hello"); //4
    5. 其他代码; //5

    3 - 条件转移实现循环结构

    1、需求1:打印0到9。

    1. int i = 0; //1
    2. 条件(4, i<10); //2
    3. 无条件(6); //3
    4. System.out.println(i); //4
    5. i++; //5
    6. 无条件(2); //6
    7. 其他代码; //7


    三 - Java中的选择循环

    了解了这两个指令的大致用法,我们就能对接下来的学习有更深入的了解了。

    虽然在CPU执行时需要这样实现选择和循环,但是我们的高级语言可以使用简洁的语法直接实现。

    我们使用对应的语法编写的程序最终编译链接后也会形成对应的指令,但是我们已经无需关系了。

    1 - 条件选择if-else

    1、单条件选择语句

    1. 格式:if(){
    2. }
    3. 说明1:小括号里面放的是条件语句,必须值是一个boolean 类型,如果小括号里面为true
    4. 那么就执行大括号里面的执行语句,如果为false 就不执行。
    5. 说明2:小括号后面也可以不使用大括号,
    6. 这样只会执行小括号后面的一行代码,不建议这样使用,程序可读性差。

    2、双条件选择结构

    1. 格式:if(){
    2. }else{
    3. }
    4. 说明:同样小括号里面仍然是一个boolean 类型的表达式或者值,
    5. 如果为true 执行if 后面的那个大括号里面的执行语句,如果为false 执行else 后面的执行语句。

    3、多条件选择语句

    1. if 实现格式:
    2. if(){
    3. }else if(){
    4. }else if(){
    5. }else{
    6. }
    7. 说明:那个if 后面小括号的值为true 就执行那个后面的执行语句,程序只会找到一个true 就会结束,如果都为false 就执行else 后面的执行语句。

    2 - 条件选择switch

    switch 结构实现:

    1. 格式:switch(){
    2. case 值:
    3. 执行语句;
    4. break;
    5. case1:
    6. 执行语句;
    7. break;
    8. default:
    9. 执行语句;
    10. break;
    11. }
    12. 说明:只适用于固定的值,例如星期天,月份,等,switch 后面的小括号里面放变量名,
    13. 匹配后面case 的值,如果匹配上了,那么就执行后面的执行语句如果匹配上了,就执行
    14. 后面的执行语句,都不匹配就执行default 后面的执行语句,如果没有break,那么程序
    15. 运行到匹配的执行语句之后不会结束,之后不会再去匹配,直接去执行执行语句。
    16. 支持数据类型:
    17. byte,short,char,int,
    18. jdk 7之后支持String

    3 - while循环

    while结构实现:

    1. 语法:
    2. while(循环条件){
    3. 循环体;
    4. }
    5. while循环先判断循环条件,如果条件成立,则执行循环体,
    6. 循环完成后再判断一次循环条件,若成立,则继续执行循环体,直到循环条件不成立。

    4 - do...while循环

    do...while结构实现:

    1. 语法:
    2. do{
    3. 循环体;
    4. }while(循环条件);
    5. do...while循环先执行一次循环体,然后判断循环条件,如果条件成立,则继续执行循环体,
    6. 直到循环条件不成立;
    7. 注意:do...while循环,无论循环条件是什么(无论循环条件是否成立),都执行一次循环体。

    5 - for循环

    for结构实现:(还有一种增强for以后说)

    1. 语法:
    2. for(循环变量;循环条件;改变循环变量){
    3. 循环体
    4. }
    5. for循环是开发中使用最多的循环,在使用for循环时,小括号中必须包含两个分号,
    6. 如果循环条件成立,就执行循环体;循环体执行结束后改变循环变量,再判断循环条件,
    7. 若成立,则继续执行循环体,直到循环条件不成立退出循环。

    6 - 循环控制语句

    break;

    功能:结束本次循环,控制转到其所在循环的后面执行,对各种循环均直接退出,不在计算循环控制表达式。

    continue;

    功能:终止当前执行的迭代,导致控制权从下一次迭代开始。


    四 - 练习题

    1 - 求20以内的阶乘之和

    代码如下:(Scanner是用来从一个位置读取数据的,传入的System.in就是Java的标准输出流,与System.out相对,它是将读取的方向定向到了控制台)

    1. Scanner input=new Scanner(System.in);
    2. System.out.println("输入一个1-20以内的正整数");
    3. int num=input.nextInt();//输入一个数字
    4. int x=1;//乘积初值
    5. int i=1;
    6. if(num<=20 && num>=1){//判断数字范围
    7. for(;i<=num;i++){
    8. if(i<num){
    9. System.out.print(i+"*");
    10. x=x*i;
    11. }else{
    12. System.out.print(i);
    13. x=x*i;
    14. }
    15. }System.out.println("="+x);
    16. }else{
    17. System.out.println("数据无效");
    18. }

    2 - 打印九九乘法表

    代码如下:

    1. for (int i =1;i<10;i++){
    2. for (int j =1; j<=i;j++){
    3. System.out.print(i+" * "+j+" = "+ (i*j)+"\t");
    4. }
    5. System.out.println();
    6. }

    3 - 求10!+9!+8!+…+1! = ?

    代码如下:

    1. int sum = 0;
    2. for (int i = 0;i<=10;i++){
    3. int ji = 1;
    4. for (int j =1;j<=i;j++){
    5. ji *= i;
    6. }
    7. sum += ji;
    8. }
    9. System.out.println(sum);


    五 - 结尾

    感谢你看到这里,如果感觉内容不错的话请点赞支持一下!

    如果小伙伴对我的讲解有疑问,欢迎评论区讨论。

  • 相关阅读:
    利用 Pytorch 加载词向量库文件
    yuv420p转RGB
    C语言pow函数简单介绍
    数据库系列:MySQL不同操作分别用什么锁?
    程序员为什么要学习数据结构与算法?
    SpringBoot上传文件-本地存储
    概论_第2章随机变量及其概率分布__离散型随机变量之二项分布
    深入探讨Docker生态系统,Docker Compose vs. Docker Swarm vs. Kubernetes:深入比较
    spring framework spring-boot spring-cloud 官方文档入口
    模拟业务流程+构造各种测试数据,一文带你测试效率提升80%
  • 原文地址:https://blog.csdn.net/m0_56988741/article/details/124937430