《C++ Primer》学习笔记1.4

例题

#include <iostream>
int main()
{
	int sum = 0, val = 1;
	// 只要val的值小于等于10,while循环就会持续执行
	while (val <= 10)
	{
		sum += val;		//将sum+val赋予sum
		++val;			// 将val加1
	}
	std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
	return 0;
}
#include <iostream>
int main()
{
	int sum = 0;
	// 从1加到10
	for (int val = 1; val <= 10; val++)
		sum += val;			// 等价于sum=sum+val
	std::cout << "Sum of 1 to 10 inclusive is " << sum << std::endl;
	return 0;
}
// 值得一提的是,在输入完数据后,
// 需要按下Ctrl+Z,然后回车,
// 才会判断istream对象无效,std::cin >> val条件为假
#include <iostream>
int main()
{
	int sum = 0, val = 0;
	while (std::cin >> val)
		sum += val;			// 等价于sum=sum+val
	std::cout << "Sum is: " << sum << std::endl;
	return 0;
}

在这里插入图片描述

#include <iostream>
int main()
{
	int currVal = 0, val = 0;
	if (std::cin >> currVal)
	{
		int cnt = 1;
		while(std::cin >> val)
			if (val == currVal)
				++cnt;
			else
			{
				std::cout << currVal << " occurs " << cnt << " times" << std::endl;
				currVal = val;
				cnt = 1;
			}
		std::cout << currVal << " occurs " << cnt << " times " << std::endl;
	}
	return 0;
}

知识点

一、
while语句反复执行一段代码,直至给定条件为假为止。

二、
for语句改善了while语句需要在循环条件中检测变量,在循环体中递增变量的模式。
循环体每次执行前都会先检查循环条件,表达式在for循环之后执行。

三、
当我们使用一个istream对象作为条件时,其效果是检测流的状态,如果流时有效的,即流末遇到错误,那么检测成功。当遇到文件结束符,或遇到一个无效输入时(例如输入的值不是一个整数),istream对象的状态会变为无效。处于无效状态的istream对象会使条件变为假。

四、
if语句支持条件执行,对一个条件进行求值。

五、
C++中用=进行赋值,用==作为相等运算符。

练习题

在这里插入图片描述
1.4.1节练习

练习1.9:

编写程序,使用while循环将50到100的整数相加。
在这里插入图片描述

#include <iostream>
int main()
{
	int sum = 0, val = 50;
	while (val <= 100)
	{
		sum += val;
		++val;
	}
	std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl;
	return 0;
}

在这里插入图片描述

练习1.10:

除了++运算符将运算对象的值增加1之外,还有一个递减运算符(–)实现将值减少1。编写程序,使用递减运算符在循环中按递减顺序打印出10到0之间的整数。
在这里插入图片描述

#include <iostream>
int main()
{
	int val = 10;
	while (val >= 0)
	{
		std::cout << val << " ";
		--val;
	}
	std::cout << std::endl;
	return 0;
}

在这里插入图片描述

练习1.11:

编写程序,提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数。
在这里插入图片描述

#include <iostream>
int main()
{
	int v1 = 0, v2 = 0;
	std::cout << "Enter two numbers:" << std::endl;
	std::cin >> v1 >> v2;
	if (v1 > v2)		// 如果v1比v2大,则交换两个数
	{
		int temp = v2;
		v2 = v1;
		v1 = temp;
	}
	while (v1 < v2+1)	// 依次输出这两个整数所指定的范围内的所有整数
	{
		std::cout << v1 << " ";
		++v1;
	}
	std::cout << std::endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.4.2节练习

练习1.12:

下面的for循环完成了什么功能?sum的终值是多少?
int sum = 0;
for (int i = -100; i <= 100; ++i)
sum+= i;

功能是从-100到100的所有整数之和,
sum的终值是0

练习1.13:

使用for循环重做1.4.1节中的所有练习(第11页)。

#include <iostream>
int main()
{
	int sum = 0;
	for (int val = 50; val <= 100; ++val)
		sum += val;
	std::cout << "Sum of 50 to 100 inclusive is " << sum << std::endl;
	return 0;
}

在这里插入图片描述

#include <iostream>
int main()
{
	for (int val = 10; val >= 0; --val)
		std::cout << val << " ";
	std::cout << std::endl;
	return 0;
}

在这里插入图片描述

#include <iostream>
int main()
{
	int v1 = 0, v2 = 0;
	std::cout << "Enter two numbers:" << std::endl;
	std::cin >> v1 >> v2;
	if (v1 > v2)		// 如果v1比v2大,则交换两个数
	{
		int temp = v2;
		v2 = v1;
		v1 = temp;
	}
	for(v1;v1<=v2;++v1)
		std::cout << v1 << " ";
	std::cout << std::endl;
	return 0;
}

在这里插入图片描述

练习1.14:

对比for循环和 while循环,两种形式的优缺点各是什么?

for适合需要频繁在循环条件中检测变量、在循环体中递增或递减变量的模式。
while适合不使用具体的数来衡量循环次数的循环。

练习1.15:

编写程序,包含第14页“再探编译”中讨论的常见错误。熟悉编译器生成的错误信息。

#include <iostream>
int main(
{
	return 0;
}

在这里插入图片描述

#include <iostream>
int main()
{
	int val = "error";
	return 0;
}

在这里插入图片描述

#include <iostream>
int main()
{
	int v1 = 0, v2 = 0;
	std::cin >> v1 >> v2;
	cout << v1 + v2 << std::endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述
1.4.3节练习

练习1.16:

编写程序,从cin读取一组数,输出其和。
在这里插入图片描述

#include <iostream>
int main()
{
	int sum = 0, val = 0;
	while (std::cin >> val)
		sum += val;
	std::cout << "Sum is: " << sum << std::endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述
1.4.4节练习

练习1.17:

如果输入的所有值都是相等的,本节的程序会输出什么?如果没有重复值,输出又会是怎样的?

如果输入的所有值都是相等的,本节的程序会输出1条本数出现的次数。
如果没有重复值,将会输出若干条出现次数为1的记录。

练习1.18:

编译并运行本节的程序,给它输入全都相等的值。再次运行程序,输入没有重复的值。

#include <iostream>
int main()
{
	int currVal = 0, val = 0;
	if (std::cin >> currVal)
	{
		int cnt = 1;
		while (std::cin >> val)
			if (val == currVal)
				++cnt;
			else
			{
				std::cout << currVal << " occurs " << cnt << " times" << std::endl;
				currVal = val;
				cnt = 1;
			}
		std::cout << currVal << " occurs " << cnt << " times " << std::endl;
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

练习1.19:

修改你为1.4.1节练习1.10(第11页)所编写的程序(打印一个范围内的数),使其能处理用户输入的第一个数比第二个数小的情况。
在这里插入图片描述

#include <iostream>
int main()
{
	int v1 = 0, v2 = 0;
	std::cout << "Enter two numbers:" << std::endl;
	std::cin >> v1 >> v2;
	if (v1 > v2)		// 如果v1比v2大,则交换两个数
	{
		int temp = v2;
		v2 = v1;
		v1 = temp;
	}
	for (v1; v1 <= v2; ++v1)
		std::cout << v1 << " ";
	std::cout << std::endl;
	return 0;
}

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值