编写一个程序,对整数序列以及序列中的最小值进行求和

时间:2009-02-02 23:14:22

标签: c

  

编写一个对序列求和的程序   整数以及最小的整数   序列。假设第一个   用scanf读取整数指定   剩余的数量   进入。例如序列   输入:

     

输入:5 100 350 400 550 678

     

输出:序列的总和   整数是:2078

     

输入:5 40 67 9 13 98

     

输出:最小的整数   输入的是:9

这是我正在研究的日常问题,但通过观察,Isnt 5是最小的整数?我不知道如何编写这个程序。感谢任何帮助

8 个答案:

答案 0 :(得分:19)

首先,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
堆栈溢出似乎分为三个阵营,那些只会给你代码,那些会告诉你推卸并做自己的功课,以及那些像我一样,宁愿看到你受过教育的人 - 当你打到工作岗位的时候,我希望你能退休,这样你就不会与竞争: - )。

在我的算法中选择漏洞之前,这是 education 。我已经留下了至少一个问题来帮助训练那个人 - 可能还有其他人,我声称我故意将他们放在那里测试他: - )。


更新

罗伯特,在你已经评论过的(非常好的)尝试之后,这就是我修改你的代码来完成任务的方法(当然,不是我的)。您可以希望看到我的评论如何修改代码以达到此解决方案:

#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年内尝试理解您的代码。

答案 1 :(得分:11)

阅读:

  

假设读取第一个整数   with scanf指定的数量   剩余要输入的值

所以它不是序列的一部分......

其余的,这是你的作业(和C ......)

答案 2 :(得分:4)

没有。 5是你必须读入列表的整数数。

答案 3 :(得分:3)

Jeebus,我不是在为你做功课,但是......

你有没有停下来把它写在纸上并弄清楚它应该如何工作?写一些伪代码,然后转录为真实代码。我想:

  • 读取整数
  • 多次循环 **阅读更多整数 **添加 **找到最小的

如果您在C中查看INT_MAX - 这将有助于找到最小的整数。

答案 4 :(得分:1)

由于整数列表是可变的,因此我很想使用strtok将字符串拆分为单独的字符串(按空格分隔),然后使用atoi转换每个数字和总和或在运行中找到最小值。

- 亚当

答案 5 :(得分:1)

首先读取值的数量(即5),然后创建一个包含5个元素的int数组,读取其余的输入,拆分它们并将它们放入数组中(将它们转换为整数后)。 / p>

然后对数组进行循环以获得找到最小值的总和。

希望有所帮助

答案 6 :(得分:1)

  

没有找你们做这项工作

冷却。当你将问题文本转储给他们时,人们往往会冒犯,问题文本是以命令式形式表达的(“做这个!写出来等等。”)。

你可能想说“我遇到了一个家庭作业问题。这就是问题:写一个[...]。我不明白为什么[...]。”

答案 7 :(得分: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);
}