编写一个对序列求和的程序 整数以及最小的整数 序列。假设第一个 用scanf读取整数指定 剩余的数量 进入。例如序列 输入:
输入:5 100 350 400 550 678
输出:序列的总和 整数是:2078
输入:5 40 67 9 13 98
输出:最小的整数 输入的是:9
这是我正在研究的日常问题,但通过观察,Isnt 5是最小的整数?我不知道如何编写这个程序。感谢任何帮助
答案 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", ¤tNum);
// 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)
你有没有停下来把它写在纸上并弄清楚它应该如何工作?写一些伪代码,然后转录为真实代码。我想:
如果您在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);
}