例题
#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;
}