程序要求:读入10个整数,输出所有正数之和,负数之和与所有整数之和。用户可一次性输入这10个整数,而且可以采用任何的顺序。程序不应该要求用户单独输入正数和负数。
分析:根据上面的题目得知了以下信息
1用户输入了十个正负整数,可一次性输出。
2输出正数之和
3输出负数之和
4输出整数之和
所以可以从第一个信息中得知要用到一个参数来记录他输出的多少次值,来进行判断用户输出的值是否为10个。这里可以使用do…while()循环来做这个题。
代码如下:
int a, b = 0, c = 0, d = 0, e = 0 ,k=0;//a为用户输入值,b为正数之和,c为负数之和,d为整数之和,e为执行的整数次数,k为提示错误信息。
do
{
e++;//整数执行次数
cin >> a;
if (cin.fail()) {//判断是否不为整数,如果不为整数,执行次数代码
cin.clear();//重置cin状态;
cin.sync();//同步
cin.ignore();//忽略掉缓存中的内容
e--;//减去刚刚加了的整数执行次数
k++;//记录不为整数的次数
}
if (a >= 0) {
b += a;//判断a大于等于0时,把a加给b作为正数之和
}
else if (a < 0) {
c += a;//判断a小于0的时候,把a加给c作为负数之和
}
//d += a;//所有整数之和(不执行此处代码原因是执行次数过多,不如直接拿正数之和与负数之和的最终结果相加得到结果更加快)
} while (e < 10);
d = b + c;//此处计算整数之和减少了9次计算。更为优化。
cout << "有" << k << "个字符不为整型" << endl;
cout << "正数之和:" << b << endl;
cout << "负数之和:" << c << endl;
cout << "所有整数之和:" << d << endl;
效果如下: