Vea las técnicas de terminación de bucle while en C++ a partir de ejemplos de estadísticas de datos

Vea las técnicas de terminación de bucle while en C++ a partir de ejemplos de estadísticas de datos

Lee una secuencia de números enteros de la entrada estándar (generalmente el teclado), calcula los valores promedio, mínimo y máximo de estos números y envía estos valores a la salida estándar (generalmente la pantalla). Implementado de varias maneras usando C++.

Método 1. Implementación de entrada y salida estilo C:

#include<cstdio> 

int main(){
	int x, n = 0, min, max, s = 0;
	printf("请输入整数,以非数字字符结束输入:\n");
	while(scanf("%d", &x) == 1){ //每次循环都会从标准输入读取一个整数。 
		s += x;
		min = x < min ? x : min;
		max = x > max ? x : max;
		++n;
	}
	printf("%d %d %.3f\n", min, max, (double)s/n); //(double)s/n 是将值转换为双精度浮点数。
	
	return 0;
}

resultado de ejecución:

El operador ternario (?:) se utiliza en este código fuente de implementación estilo C.

Consejo : Puede finalizar el bucle while(scanf("%d", &x) == 1) mediante:

Si queremos terminar este bucle,

Introduce datos no válidos. Para esta frase, introduce un valor que no sea un número entero. En este caso, scanf devolverá 0 y el bucle finalizará.

Después de ingresar un número entero, presione la combinación de teclas Ctrl+D (sistema Unix/Linux) o Ctrl+Z (sistema Windows), de modo que scanf devolverá EOF y el ciclo finalizará.

Explicación del programa :

1. Se declaran cuatro variables enteras: x, n, min y max. La variable x es el número leído actualmente, n registra el número de números que se han leído, min y max registran los valores mínimo y máximo de los números leídos actualmente respectivamente.

2. while(scanf("%d", &x) == 1) es un bucle y la función scanf se usa para leer el número entero de entrada. Cuando se llama correctamente a scanf("%d", &x) (es decir, se lee correctamente un número entero), se ejecuta el cuerpo del bucle. De lo contrario, el ciclo termina. La función scanf devuelve el número de parámetros leídos y asignados correctamente (1 indica que se leyó correctamente un número entero).

En el bucle, cada vez que se lee un número entero, se realizan las siguientes operaciones:

Suma este número entero a s para encontrar la suma de todos los números.

Si este número entero es menor que el valor mínimo actualmente conocido min, entonces min se actualiza.

Si este número entero es mayor que el valor máximo actualmente conocido max, actualice max.

Incrementa n en 1 y registra el número de números que se han leído.

3. Una vez finalizado el ciclo, utilice la función printf para generar tres valores: valor mínimo mínimo, valor máximo máximo y valor promedio (doble) s/n. donde (doble)s/n es un promedio entero convertido a un número de coma flotante de doble precisión para mantener la precisión en la salida.

Método 2. El código fuente de estilo C++ se proporciona a continuación:

#include <iostream>
using namespace std;
# define INF 100000000
int main()
{
    int n=0, x, s = 0;
    int min_x = INF;
    int max_x = -INF;

    cout << "请输入整数,以非数字字符结束输入:" << endl;

     while (cin >> x) {
        // 只要读取到整数就执行下列循环体
        n++;
        s += x;
        min_x = x < min_x ? x : min_x;        
        max_x = x > max_x ? x : max_x;        
    }

    cout <<  min_x << " " << max_x << " " << (double) s / n << endl;

    return 0;
}

Consejo : en el programa se utiliza una definición de macro INF, que representa infinito positivo, y se utiliza para inicializar las variables min y max. El operador ternario se utiliza en el código fuente.

El valor de retorno del operador de entrada ">>" del objeto de flujo de entrada de C++ (istream) es su operando izquierdo, que es la variable u objeto de entrada. Por ejemplo, cuando ingresa la variable n usando cin, la línea de código "cin >> n" devolverá el objeto cin y almacenará el valor ingresado en n. Si la entrada no es válida, se devuelve un indicador de error y se establece el estado de la secuencia, lo que provoca que las operaciones posteriores fallen. Por lo tanto, puede usar el valor de retorno de cin para verificar si la operación de entrada fue exitosa, por ejemplo:
int n;
if (cin >> n) {     // Entrada exitosa, continuar } else {     // Entrada fallida, manejo de errores }




Mientras que (cin >> x) { } en el ejemplo ingresa un valor ilegal; en este caso, un carácter no numérico, o encuentra EOF (fin de archivo) para finalizar el ciclo while. EOF (End of File) Indica el final del flujo de entrada. En sistemas Unix y Linux, puede enviar explícitamente EOF al flujo de entrada estándar escribiendo Ctrl + D. En sistemas Windows, se puede lograr el mismo efecto presionando Ctrl + Z (más nueva línea). Cuando el objeto cin encuentra EOF, establece el estado de la secuencia en el estado final.


El código fuente de estilo C++ anterior se puede reescribir como:

#include <iostream>
using namespace std;
# define INF 100000000
int main()
{
    int n=0, x;
    int sum = 0;
    int min = INF;
    int max = -INF;

    cout << "请输入整数,以非数字字符结束输入:" << endl;

     while (cin >> x) {
        // 只要读取到整数就执行下列循环体
        n++;
        sum += x;
        if (x < min) {
            min = x;  // 找到最小值,将其赋值给变量 min
        }
        if (x > max) {
            max = x;  // 找到最大值,将其赋值给变量 max
        }   	
    }

    cout <<  min << " " << max << " " << (double) sum / n << endl;

    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/132627180
Recomendado
Clasificación