1.4.4书上例题
用if语句写一个程序,来统计在输入中每个值连续出现了多少次。
#include <iostream>
int main()
{
int currval = 0, val = 0;//currval是我们正在统计的数,我们将读入的新值存入val
if (std::cin >> currval)//读取第一个数,并确保有数据可以处理
{
int cnt = 1;//保存我们正在处理的当前值个数
while (std::cin >> val)//读取剩余的数
{
if (val == currval)
++cnt;//如果值相同,cnt加1
else//否则,打印前一个值的个数
{
std::cout << currval << "occurs" << cnt << "times" << std::endl;
currval = val;//记住新值
cnt = 1;//重置计数器
}
}
//记住打印文件中最后一个值的个数
std::cout << currval << "occurs" << cnt << "times" << std::endl;
}
return 0;
}
程序存在缺陷
1.前面已有的更小的数字重复出现时,不累计到已知次数,从当前数开始重新计数。只能统计出排列有序的情况,乱序排列重新计数。(其实也没有错,题目说连续出现)
2.最后一个相同连续数要ctrl+c结束程序时才能统计出来。(解决方法,以非int型数据结尾,如字母a)
if else的就近原则,else与离得最近的if匹配。如果有花括号,如:第二个if属于第一个if,else与第一个if配对。
if { if语句 }
else
练习1.17
如果输入的所有值都是相等的,本节程序会出现什么?如果没有重复值,输出又会是怎样的?
答:正常运行。正常运行。
答案解释:
1.如果输入所有值相等,则while循环中else语句永远不执行,直到输入结束,while循环退出后,循环后的输出语句打印这个唯一的值和它出现的次数。
2.若没有重复值,则while循环中if语句的真值永远不会执行,每读入一个值,都会进入else分支,打印它的值和出现次数1。输入结束后,while循环退出,循环后的输出语句打印最后一个值和出现的次数一。(最后一句不用管,因为我们输入了非int型数据)
练习1.18
编译并运行本节程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。
答:同1.18
练习1.19
修改为1.4.1节练习1.10所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
答:
#include <iostream>
int main()
{
int a = 10,b=1;
std::cout << "0 到10之间的数为 " << std::endl;
if(a>=b)
while (a >= b)
{
--a;
std::cout << a << std::endl;
}
else
return 0;
}
修改。原来1.10已包含此功能,添加显得累赘