本题要求计算给定的一系列正整数中奇数的和。

输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:

在一行中输出正整数序列中奇数的和。

输入样例:

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会认为接下来我们还要继续输入数据(而此时我们已经输入完毕了),因此我们需要再人为地输入一个非空字符来结束它。这个后输入的值成了结束输入的标志。

更多数据的输入

Last modification:2021 年 03 月 27 日 15 : 57 : 26