c++primer学习 1.4.4 if 语句

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已包含此功能,添加显得累赘

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值