本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
输入样例:
8 7 4 3 70 5 6 101 -1
输出样例:
116
#include <stdio.h>
int main(int argc, const char *argv[])
{
int num = 0,sum = 0;
do
{
scanf("%d",&num);
//scanf("%d ",&num); 此处错误,需要遇到2个0结束输入
if(num%2 != 0 && num >0)
sum += num;
}while(num>0);
printf("%d\n",sum);
return 0;
}
总结
1、题目要求“当读到零或负整数时,结束输入”,那么意味着我需要在终端连续输入一连串的正整型数据并以0或负整型结尾。那么输入可以用scanf函数,因为scanf函数可以读取若干个任意类型的数据。
2、scanf函数功能:按指定数据类型从缓冲区中读取数据,按回车键结束。
3、此题涉及到连续输入,那么存在如何去分隔连续输入值的问题。
4、输入分隔符的指定:一般以空格、Tab键、回车键作为分隔符。因此程序第7行中scanf函数只吸收“%d”所代表的数据值,当遇到空格或Tab键或回车键时默认不吸收(此时回车键不结束输入,说明我们还要继续输入数据,这一点scanf非常”懂“我们),等待键盘再次输入有效数据值并吸收。
5、程序第8行注释中%d后跟了一个空格导致当scanf吸收了%d的数据后非人为地遇到一个空格,那么scanf会认为接下来我们还要继续输入数据(而此时我们已经输入完毕了),因此我们需要再人为地输入一个非空字符来结束它。这个后输入的值成了结束输入的标志。
更多数据的输入
本文链接:https://shengto.top/c/pat_5.html
转载时须注明出处及本声明