Напишите программу, которая суммирует последовательность целых чисел, а также самую маленькую в последовательности - PullRequest
7 голосов
/ 03 февраля 2009

Напишите программу, которая суммирует последовательность целых чисел, а также самые маленькие в последовательность. Предположим, что первый целое число, прочитанное с помощью scanf, указывает количество значений осталось поступил. Например, последовательность вошли:

Ввод: 5 100 350 400 550 678

Вывод: сумма последовательности целые числа: 2078

Ввод: 5 40 67 9 13 98

Вывод: наименьшее из целых чисел введено: 9

Это ежедневная проблема, над которой я работаю, но, глядя на это, разве 5 не наименьшее целое число? Я понятия не имею, как написать эту программу. Цени любую помощь

Ответы [ 8 ]

19 голосов
/ 03 февраля 2009

Во-первых, 5 не считается частью списка, это количество для списка. Следовательно, это не должно быть включено в расчеты.

Так как это домашняя работа, вот псевдокод. Ваша задача - сначала понять псевдокод (пропустить его через голову с примерами ввода), затем превратить его в код C и попытаться заставить его скомпилироваться и успешно работать (с теми же примерами ввода).

Я бы предложил пример ввода «2 7 3» (два элемента, те, которые 7 и 3) в качестве хорошей начальной точки, так как он маленький, и сумма будет 10, наименьший 3.

Если вы пытались делать это более одного дня, опубликуйте свой код в этом вопросе в качестве редактирования, и мы посмотрим, что мы можем сделать, чтобы помочь вам.

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

Переполнение стека, по-видимому, разделено на три лагеря: те, которые просто дадут вам код, те, которые скажут вам оттолкнуться и делать свою домашнюю работу, и те, как я, которые предпочли бы, чтобы вы получили образование - Я надеюсь, что когда ты найдешь рабочую силу, я уйду на пенсию, и ты не будешь конкурировать с me : -).

И прежде чем кто-нибудь обнаружит дыры в моем алгоритме, это для образования . Я оставил в нем хотя бы одну гочу, чтобы помочь обучить этого парня - могут быть и другие, и я буду утверждать, что я специально положил их туда, чтобы проверить его: -).


Обновление:

Роберт, после вашей (очень хорошей) попытки, которую я уже прокомментировал, именно так я бы изменил ваш код для выполнения задачи (передайте, конечно, ваш, а не мой). Вы можете надеяться увидеть, как мои комментарии изменяют код для достижения этого решения:

#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;
}

А вот вывод данных вашего образца:

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.

Кстати, всегда добавляйте комментарии к своему коду. Педагоги любят такие вещи. Так и разработчикам, которые должны постараться понять ваш код через 10 лет.

11 голосов
/ 03 февраля 2009

Чтение:

Предположим, что первое целое число прочитано с помощью scanf указывает количество значения, оставшиеся для ввода

так что это не часть последовательности ...

В остальном, это ваша домашняя работа (и C ...)

4 голосов
/ 03 февраля 2009

Нет. 5 - это число целых чисел, которое вы должны прочитать в списке.

3 голосов
/ 03 февраля 2009

Jeebus, я не делаю твою домашнюю работу за тебя, но ...

Вы остановились, чтобы поцарапать это на бумаге и понять, как это должно работать? Напишите некоторый псевдокод, а затем расшифруйте его до реального кода. Я бы подумал:

  • Считать целое число
  • Цикл, который много раз ** Читайте больше целых чисел ** Добавлять ** Найти самый маленький

Если вы находитесь в C, посмотрите на INT_MAX - это поможет найти наименьшее целое число.

1 голос
/ 03 февраля 2009
#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);
}
1 голос
/ 03 февраля 2009

не искал вас, ребята, чтобы сделать работу

Cool. Люди склонны обижаться, когда вы бросаете на них проблемный текст, и текст проблемы формулируется в императивной форме («сделай это! Напиши это! И т. Д.»).

Вы можете сказать что-то вроде: «Я застрял с проблемой домашнего задания. Вот проблема: напишите [...]. Я не понимаю, почему [...].» *

1 голос
/ 03 февраля 2009

Сначала вы читаете количество значений (т. Е. 5), затем создаете массив из 5 элементов типа int, читаете оставшиеся входные данные, разделяете их и помещаете в массив (после преобразования их в целые числа).

Затем выполните цикл в массиве, чтобы получить сумму, чтобы найти наименьшее значение.

Надеюсь, что поможет

1 голос
/ 03 февраля 2009

Поскольку список целых чисел является переменным, я хотел бы использовать strtok для разбиения строки на отдельные строки (разделенные пробелом), а затем atoi для преобразования каждого числа и суммы или нахождения минимума на лету.

-Adam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...