notas de estudio de desarrollo básico Go (nueve) - Control de la secuencia, el control de la rama

Programa de control de flujo de
decidir cómo poner en práctica el programa, las tres sentencias de control de flujo común

  1. Control de la secuencia
  2. control de la rama: if-else
  3. control de bucle: para el cumplimiento de las condiciones antes de que el control de bucle, control de lazo (nota 10 al registro) después de la calificación

Control de la secuencia

  1. De arriba a abajo de ejecución, cada programa sigue este principio, de acuerdo con la ejecución de un tramo de la línea, ni juicio, hasta que el programa está terminado o error a mitad de camino.

  2. Acerca de las variables, hay que seguir el principio de referencias hacia delante legales {}, que es declarar su reutilización, a no utilizar, reexpresión

     package main
     
     import "fmt"
     
     func main() {
     
     //正确
     var a int = 100
     a += 100
     fmt.Println(a)
     
     //错误
     b += 100
     var b int = 200
     fmt.Println(b)
     }
    

if-else if-else control de la rama

  1. if-else: sola rama, rama doble, múltiples tres ramas
  • ramas individuales : el establecimiento del bloque de código se ejecuta cuando se determina la condición, el bloque omitido no se cumple, no hay salida. Si <expresión condicional> {<contenidos códigos>}
  • rama Dual : se ejecuta el establecimiento de un bloque de código, el bloque de código no se satisface 2, viene bajo el control de condición sigue determinación orden de ejecución. Si <expresión condicional> {<Código Contenido 1>} else {<Código Descripción 2>}
  • Multiramificados : 1 bloque de código está configurado, no se sostiene el bloque de código se ejecuta no se sostiene 2 ... n del bloque, de lo contrario no haya configurado en el bloque de código se ejecuta cuando se determina la condición.
    Si <expresión condicional> {<Código Contenido 1>} else if <expresión condicional> {<Código Descripción 2>} else if ... <expresión condicional> <code {Contenido n>} else {<contenidos de código finales>}
  1. Sobre si el formato, el funcionario sugirió expresiones sin paréntesis, y todo el código de desarrollo no añade la expresión entre paréntesis, pero los paréntesis añadir nada malo

     if a>10 {
     	fmt.Println("a大于10")      //a>10执行打印,a<=10
     }         
    
  2. Acerca de si-else formato, disposiciones Golang única manera de escribir:

     if a>10 {
     	fmt.Println("a大于10")
     } else {
     	fmt.Println("a小于10")
     }
    
  3. Sobre si: else if - otra cosa, de lo contrario no se requiere, una vez configurado, a continuación, pasar a la parte inferior de la secuencia de código de control

     if a>10 {
     	fmt.Println("a大于10")
     } else if a==10 {
    	 fmt.Println("a等于10")
     } else {
    	 fmt.Println("a小于10")
     }
    
  4. Usar la fosa debe ser añadido posterior si la expresión condicional, puede ser un == 10, pero no puede ser a = 10 esta asignación, el compilador es, sin duda no pasa

Ejemplo multiramificados:
Escuelas Secundarias través ax ^ 2 + bx + c = 0 son variables de entrada a, b, c de tres parámetros, hay varios raíz de la ecuación es determinado
b ^ 2 - 4ac> 0: Hay dos distintos bienes raíces
b ^ 2 - 4ac = 0: hay una verdadera
b ^ 2 - 4ac <0: no hay raíces reales

package main
import (
	"fmt"
	"math"
)

func main() {
	/*
	需求分析:
	中学数学学过 ax^2+bx+c=0 分别输入变量a,b,c三个参数,判断方程有几个根
	b^2 - 4ac > 0:有两个不同实根
	b^2 - 4ac = 0:有一个实根
	b^2 - 4ac < 0:无实根
	
	引入x1和x2两个变量接收 b^2 - 4ac > 0:有两个不同实根情况
	x1= (-b + math.Sqrt(b^2 - 4ac))/2a
	x2= (-b - math.Sqrt(b^2 - 4ac))/2a
	
	引入变量x一个变量接收 b^2 - 4ac = 0:有一个实根情况
	x = -b / 2a
	
	如果无实根则打印,没有实根
	*/
	var (
		a float64
		b float64
		c float64
		drt float64
	)
	fmt.Printf("请分别按顺序输入方程中a,b,c三个参数数值,用空格间隔开:\n")
	fmt.Scanf("%f %f %f",&a,&b,&c)
	drt = float64(b*b - 4 * a * c)

	if drt > 0 {
		x1 := (-b + math.Sqrt(drt)) / 2 * a
		x2 := (-b - math.Sqrt(drt)) / 2 * a
		fmt.Printf("\n该方程有两个实根,分别是\nx1=%v, x2=%v",x1,x2)
	} else if drt == 0 {
		x := -b / 2 * a
		fmt.Printf("该方程有一个实根,分别是 x=%v",x)
	} else if drt < 0 {
		fmt.Printf("该方程没有实根")
	}
}

ramas anidadas: nueva rama rama anidados, es decir, si anidado si iteración,

Múltiples sucursales presentaciones de casos anidada:

package main

import "fmt"

func main() {
	/*
	需求:圣斗士可进入竞技场的条件,
	战斗力大于等于1000的为黄金圣斗士;
	战斗力大于等于500小于1000的为白银圣斗士;
	战斗力大于等于200小于500的为青铜圣斗士;
	战斗力小于200的为战五渣,直接出局,不可进入竞技场

	需求分析:
	进入竞技场和进不了竞技场为两类人,需要用if-else判断;
	if条件成立则
	进入竞技场的又可以继续划分圣斗士等级,使用if-else if - else结构
	if条件不成立则直接让战五渣out
	 */
	var name string
	var power int

	fmt.Println("请输入圣斗士姓名: ")
	fmt.Scanf("%s",&name)
	fmt.Printf("请输入圣斗士%s的战斗力:",name)
	fmt.Scanf("%d",&power)
	if power > 200 {
		fmt.Printf("圣斗士%s允许进入竞技场参加角逐",name)
		if power >= 1000 {
			fmt.Printf("圣斗士%s经过战力评定判定为黄金圣斗士",name)
		} else if power >= 500 {
			fmt.Printf("\n圣斗士%s经过战力评定判定为白银圣斗士",name)
		} else if power > 200 {
			fmt.Printf("\n圣斗士%s经过战力评定判定为青铜圣斗士",name)
		}
		} else if power <= 200 && power >5 {
		fmt.Printf("圣斗士%s战斗力不足,不允许进入竞技场",name)
		} else {
		fmt.Printf("圣斗士%s是战斗力不足5的渣,不允许进入竞技场",name)
	}
}

interruptor de control de la rama

  1. sentencia switch basado en diferentes condiciones para llevar a cabo diferentes acciones, cada rama caso es único, prueba individualmente de arriba a abajo hasta que un partido.

  2. Volver partidos ★★★ lenguaje Golang no necesita añadir descanso! ! ! !

  3. interruptor de selección múltiple manera particularmente adecuada para obtener los resultados correspondientes

  4. Después ★★★ contacto de conmutación y el caso es una expresión puede ser constantes, variables, operadores, hay un valor de retorno de la función , se puede utilizar.

  5. ★★★ caso de que el valor de la expresión para ser coherente con el valor del tipo de datos de la expresión switch!

  6. Detrás del caso puede tener múltiples expresiones, pero todas las expresiones deben coincidir con el tipo de datos del interruptor!

  7. Todas las expresiones en caso si se trata de un valor constante, no se puede repetir, deben ser mutuamente excluyentes!

  8. declaración por defecto no es necesario, si no hay un interruptor de fósforo directamente a su fin.

  9. interruptor de nuevo no puede añadir expresión, directamente debajo del caso como si-else if la rama de uso

     switch {
     case <分支表达式1>,<分支表达式2>: 
     语句块1
     }
    
  10. detrás del interruptor puede ser una variable de expresiones de asignación, el interruptor num: = xxx {...}

  11. Interruptor de penetrar: fallthrough, a saber case1 partidos, lógicamente hablando al final del bloque de interruptores, pero no quiero para cambiar, a continuación, utilizar el fallthrough, el siguiente caso continúa a la altura, por defecto fallthrough sólo puede penetrar en una capa, si la siguiente case2 también coinciden con los criterios, case1, salida case2 voluntad

Si la comparación y el interruptor

  1. Si se juzga valores no más específicas, de acuerdo con el número entero, punto flotante, carácter, tipos de cadenas de caracteres que utilizan interruptor eficiente.
  2. Y la sección de juicio los jueces del tipo de bool, si un mejor uso

Ejemplo de código:

switch <表达式>(多用来传入变量,不然没有意义) {
	case <分支表达式1>,<分支表达式2>: 
		语句块1	                                    //没有break,默认有符合的case执行完了默认就break了,结束switch块
	case <分支表达式3>,<分支表达式4>...<分支表达式n>: 
		语句块2
		  .
		  .
		  .
	default:
		<上面都不匹配>语句块d     //类似异常执行后的finally
}                               //待完成之后结束switch块继续执行顺序控制

caso:

package main

import "fmt"

func main() {
	/*
	需求:冰封王座英雄技能表,首先输入一个英雄名称,然后查看英雄相应技能及说明
	英雄名称:恶魔猎手,死亡骑士
	恶魔猎手技能:法力燃烧,献祭,闪避,恶魔化身
	死亡骑士技能:死亡缠绕,吃尸,邪恶光环,黑暗奴仆
	 */
	var heroName string
	fmt.Println("请输入要查询的英雄的名字:")
	fmt.Scanf("%v",&heroName)
	switch heroName {
		case "恶魔猎手":
			var skill string
			fmt.Println("请输入要查询的技能名字:")
			fmt.Scanf("%v",&skill)
			switch skill {
				case "法力燃烧":
					fmt.Printf("%s真的很牛逼啊~", skill)
				case "献祭":
					fmt.Printf("%s真的很牛逼啊~", skill)
				case "闪避":
					fmt.Printf("%s真的很牛逼啊~", skill)
				case "恶魔化身":
					fmt.Printf("%s真的很牛逼啊~", skill)
			}
		case "死亡骑士":
			var skill string
			fmt.Println("请输入要查询的技能名字:")
			fmt.Scanf("%v",&skill)
			switch skill {
				case "死亡缠绕":
					fmt.Printf("%s真的很牛逼啊~",skill)
				case "吃尸":
					fmt.Printf("%s真的很牛逼啊~",skill)
				case "邪恶光环":
					fmt.Printf("%s真的很牛逼啊~",skill)
				case "黑暗奴仆":
					fmt.Printf("%s真的很牛逼啊~",skill)
			}
		default:
			fmt.Printf("没有查询到该英雄名称,请重新输入")
	}
}
Publicado 50 artículos originales · alabanza ganado 18 · vistas 4020

Supongo que te gusta

Origin blog.csdn.net/weixin_41047549/article/details/89609030
Recomendado
Clasificación