2009-02-02 13 views
7

Escribir un programa que resume la secuencia de números enteros así como el más pequeño de la secuencia. Supongamos que el primer entero leído con scanf especifica el número de valores restantes que serán ingresados. Por ejemplo la secuencia entró:Escribir un programa que resume la secuencia de números enteros, así como el más pequeño de la secuencia

de entrada: 5 100 350 400 550 678

de salida: La suma de la secuencia de enteros es: 2078

de entrada: 5 40 67 9 13 98

salida: El más pequeño de los números enteros introducidos es: 9

Este es un problema diario que estoy trabajando, pero al observar esto, ¿no es 5 el número entero más pequeño? No tengo idea de cómo escribir este programa. Apreciar cualquier ayuda

+0

¿Es este el lenguaje de programación C? –

+0

La pregunta dice 'leer con scanf'. Es seguro suponer que es C. – Abbas

+0

No creo que esta pregunta deba ser downvoted ... no nos está pidiendo que la escribamos para él, simplemente está teniendo problemas para entender el problema. –

Respuesta

19

En primer lugar, el 5 no se considera parte de la lista, es el recuento de la lista. Por lo tanto, no debería incluirse en los cálculos.

Dado que esto es tarea, aquí está el pseudo-código. Su trabajo es comprender primero el pseudo código (ejecútelo a través de su cabeza con entradas de muestra) y luego conviértalo en código C e intente que compile y se ejecute correctamente (con esas mismas entradas de muestra).

que sugeriría la entrada de la muestra de "2 7 3" (dos artículos, los que están siendo 7 y 3) como un buen punto de partida, ya que es pequeña y la suma será de 10, más pequeño 3.

Si Hemos intentado hacer eso por más de un día, luego publicamos su código en esta pregunta como una edición y veremos qué podemos hacer para ayudarlo.

get a number into quantity 
set sum to zero 
loop varying index from 1 to quantity 
    get a number into value 
    add value to sum 
    if index is 1 
     set smallest to value 
    else 
     if value is less than smallest 
      set smallest to value 
     endif 
    endif 
endloop 
output "The sum of the sequence of integers is: ", sum 
output "The smallest of the integers entered is: ", smallest 

desbordamiento de pila parece estar dividida en tres campos, los que sólo le dará el código, los que le dirá a empujar y hacer su propia tarea y los que, como yo, que más bien se podría ver educado: para cuando llegue a la fuerza laboral, espero que me retiren para no estar compitiendo con :-).

Y antes de que alguien haga huecos en mi algoritmo, esto es para educación. He dejado al menos una gotcha para ayudar a entrenar al tipo - puede haber otros y yo afirmo que los puse allí intencionalmente para ponerlo a prueba :-).


Actualización:

Robert, después de su (muy bien) intento que ya he comentado, esto es cómo me modificar el código para hacer la tarea (el suyo mano en la de Por supuesto, no mío). Se espera que puedan ver cómo mis comentarios modificar el código para llegar a esta solución:

#include <stdio.h> 
int main (int argCount, char *argVal[]) { 
    int i;    // General purpose counter. 
    int smallNum;  // Holds the smallest number. 
    int numSum;   // Holds the sum of all numbers. 
    int currentNum;  // Holds the current number. 
    int numCount;  // Holds the count of numbers. 

    // Get count of numbers and make sure it's in range 1 through 50. 

    printf ("How many numbers will be entered (max 50)? "); 
    scanf ("%d", &numCount); 
    if ((numCount < 1) || (numCount > 50)) { 
     printf ("Invalid count of %d.\n", numCount); 
     return 1; 
    } 
    printf("\nEnter %d numbers then press enter after each entry:\n", 
     numCount); 

    // Set initial sum to zero, numbers will be added to this. 

    numSum = 0; 

    // Loop, getting and processing all numbers. 

    for (i = 0; i < numCount; i++) { 

     // Get the number. 

     printf("%2d> ", i+1); 
     scanf("%d", &currentNum); 

     // Add the number to sum. 

     numSum += currentNum; 

     // First number entered is always lowest. 

     if (i == 0) { 
      smallNum = currentNum; 
     } else { 
      // Replace if current is smaller. 

      if (currentNum < smallNum) { 
       smallNum = currentNum; 
      } 
     } 
    } 

    // Output results. 

    printf ("The sum of the numbers is: %d\n", numSum); 
    printf ("The smallest number is: %d\n", smallNum); 

    return 0; 
} 

Y aquí es la salida de los datos de la muestra:

pax> ./qq 
How many numbers will be entered (max 50)? 5 

Enter 5 numbers then press enter after each entry: 
1> 100 
2> 350 
3> 400 
4> 550 
5> 678 
The sum of the numbers is: 2078 
The smallest number is: 100 

pax> ./qq 
How many numbers will be entered (max 50)? 5 

Enter 5 numbers then press enter after each entry: 
1> 40 
2> 67 
3> 9 
4> 13 
5> 98 
The sum of the numbers is: 227 
The smallest number is: 9 

pax> ./qq 
How many numbers will be entered (max 50)? 0 
Invalid count of 0. 

[fury]$ ./qq 
How many numbers will be entered (max 50)? 51 
Invalid count of 51. 

Por cierto, asegúrese de que siempre añadir comentarios a tu codigo. A los educadores les encantan ese tipo de cosas. También lo hacen los desarrolladores que deben intentar comprender su código dentro de 10 años.

+0

Gracias Pax, hay mucho aquí para masticar un poco. Saludos a su enfoque, deseo mi instructor tenía el mismo valor en el conocimiento. No me preocupa competir con nadie, soy un chico multimedia de gráficos en la escuela tratando de obtener mi título. Créalo o no, quiero enseñar programación de HSNot por supuesto. – Robert

+0

@Pax, +1 para n ot directamente dándole código de trabajo. – mmcdole

+0

Mejor que un +1 !!!!, publiqué el código que se me ocurrió. Creo que también pude haber aprendido algo (maldición ... j/k) De todos modos, realmente aprecio la ayuda y la guía y prometo hacer las preguntas correctas y hacer mi propio trabajo. – Robert

4

Nº 5 es el número de enteros que debe leer en la lista.

3

Jeebus, no lo estoy haciendo su tarea para usted, pero ...

¿Ha dejado de arañar esto en el papel y averiguar cómo debería funcionar? Escribe un pseudo-código y luego transcribe al código real. Tendría pensamiento:

  • Leer entero
  • bucle que muchas veces ** Leer más enteros ** ** Añadir Encuentra más pequeño

si estás en mirada C a INT_MAX: eso ayudará a encontrar el entero más pequeño.

11

Leer:

Supongamos que el primer entero leer con scanf especifica el número de valores restantes que se introduzca

así que no es parte de la secuencia ...

para el resto, es su tarea (y C ...)

1

Dado que la lista de números enteros s es variable, me sentiría tentado de usar strtok para dividir la cadena en cadenas individuales (separadas por espacio) y luego atoi para convertir cada número y sumar o encontrar el mínimo sobre la marcha.

-Adán

+0

No creo que los enteros se presenten en una sola cadena. Creo que se enviarán a la entrada uno a la vez, de modo que cada llamada scanf devolverá un entero – nezroy

+0

scanf ("% d") maneja múltiples valores en una sola línea, IIRC (puedo estar recordando cin :-). – paxdiablo

+0

@Pax: sí lo hace. Para scanf, el espacio en blanco es el espacio en blanco. No importa si es un espacio o una línea nueva –

1

Primero se lee el número de valores (es decir. 5), a continuación, crear una matriz de int de 5 elementos, lee el resto de la entrada, ellos dividido y las puso en la matriz (después de convirtiéndolos en enteros).

Luego haga un ciclo en la matriz para obtener la suma de para encontrar el valor más pequeño.

Espero que ayude

+1

Sólo por interés, ¿por qué una matriz? Puede sumar los números y mantener el más pequeño simplemente procesando uno a la vez. – paxdiablo

1

wasn [ '] s en busca de chicos para hacer el trabajo

fresca. Las personas tienden a ofenderse cuando les arrojas el texto problemático y el texto problemático se redacta de forma imperativa ("¡haz esto! ¡Escribe eso!").

Es posible que desee decir algo como "Estoy atascado con un problema de tarea. Este es el problema: escriba un [...]. No entiendo por qué [...]".

1
#include <stdio.h> 

main() 
{ 
    int num1, num2, num3, num4, num5, num6, i; 
    int smallestnumber=0; 
    int sum=0; 
    int numbers[50]; 
    int count; 
    num1 = 0; 
    num2 = 0; 
    num3 = 0; 
    num4 = 0; 
    num5 = 0; 
    num6 = 0; 

    printf("How many numbers will be entered (max 50)? "); 
    scanf("%d", &count); 

    printf("\nEnter %d numbers then press enter after each entry: \n", count); 

    for (i=0; i < count; i++) { 
     printf("%2d> ", i+1); 
     scanf("%d", &numbers[i]); 
     sum += numbers[i]; 
    } 

    smallestnumber = numbers[0]; 
    for (i=0; i < count; i++) { 
     if (numbers[i] < smallestnumber) 
     { 
      smallestnumber = numbers[i]; 
     } 
    } 

    printf("the sum of the numbers is: %d\n", sum); 
    printf("The smallest number is: %d", smallestnumber); 
} 
+0

PAX, ¿qué piensas de la programación? Gracias por la ayuda. Creo que los números no importan, es para el usuario elegir ¿no? La bombilla se apagó después de su publicación. Me encantaría recibir una respuesta y agradecerle por su ayuda. – Robert

+0

Puede editar su publicación y poner 4 espacios en frente de las líneas con código y lo formateará por usted. – lillq

+1

¡Buen esfuerzo! Puntos, algunos a la vez. (1) num1 a num6 no se utilizan para nada, sospecho que son una resaca de su versión anterior. Deshazte de ellos. (2) Es posible que desee asegurarse de que el conteo esté configurado de 1 a 50 antes de usarlo (imprimir error y salir si no) ... – paxdiablo

Cuestiones relacionadas