每日十问5c+±循环和关系表达式
1.入口条件循环和出口条件循环之间的区别是什么?各种 C++循环分别属于其中的哪一种?
解析:
对于入口条件循环,在进入循环体之前先进行表达式的判断。如果表达式为真,则开始执行循环体内的语句:若为假,则不执行循环体内的语句,并越过该循环,执行循环语句之后的语句。对于出口条件循环,首先执行循环体内的语句,然后再判断表达式。如果表达式为真,则再次执行循环体;否则,退出该循环,执行循环之后的语句。因此两者的差异在于入口条件循环有可能一次都不会执行循环体内语句,出口条件循环则至少会执行一次循环体。C++语言中 do…while 循环是出口条件循环,while 循环和 for 循环是入口条件循环。
2.如果下面的代码片段是有效程序的组成部分,它将输出什么内容?
int i;
for(i = 0;i<5;i++) cout<<i; cout<<endl;
解析:
代码先输出 01234,后输出换行符。由于 for 循环的循环体只有一条语句 cout<<i;,因此在循环完成后执行一遍cout<<endl;语句。需要注意的是,使用 C++语言编写代码过程中的缩进主要是为了使代码清晰可读,并不是像 Python 语言那样通过缩进标识代码块。
3.如果下面的代码片段是有效程序的组成部分,它将输出什么内容?
int j;
for(j = 0;j<11;j+=3)
cout<<j;
cout<<end1<<j<<endl;
解析:
程序的输出结果如下。036912
for循环中j从0开始,当j小于11时输出j的值,输出完成后j做加3的操作,然后开始下一次循环。因此循环内数据从0开始输出,最后输出9,加3后不满足循环条件,于是退出循环。循环退出后,输出换行符和12,最后再输出一个换行符。
4.如果下面的代码片段是有效程序的组成部分,它将输出什么内容?
int j = 5;
while(++j<9)
cout<<j++<<endl;
解析:
程序的输出结果如下。
6
8
本题主要考察以递增运算符作为前缀的知识点。while 循环从 j=5开始,在进行 while循环的条件判断时,先递增,再判断和9的大小关系。如果小于 9,则进入循环。进入循环后先输出j,再递增。因此输出结果为6和8。
5.如果下面的代码片段是有效程序的组成部分,它将输出什么内容?
int k = 8;
do
cout<<" k = "<<k<<endl;
while(k++<5);
解析:
程序的输出结果如下。
k= 8
本题主要考察 do.….while 循环的出口条件判断,由于k= 8,因此不满足循环条件,但是该循环至少会执行一次,于是输出 k = 8,然后退出循环。
6.编写一个输出 1、2、4、8、16、32、64 的 for 循环,每轮循环都将计数变量的值乘以 2。
解析:
为了在 for 循环内控制循环计数变量,需要在更新条件处使用表达式i=i*2,也可以使用表达式i =2。输出1、2、4、8、16、32、64 的 for 循环的基本代码如下。
int i;
for(i =1;i<64;i=2)
cout<<i<<“、”;
cout<<i<<endl;
7.如何在循环体中包括多条语句?
解析:
如果在循环体内需要执行多条语句,可以使用一对花括号{}将多条语句组合成一个语句块或者复合语句。并且初学者应当在循环语句中尽量多使用花括号来表示循环体,即使循环体中只有一条语句。
**8.下面的语句是否有效?如果无效,原因是什么?**如果有效,它将完成什么工作? intx=(1,024);
下面的语句是否有效? int yi
y= 1,024;
解析:
首先应当注意到(1,024)中间的符号是逗号运算符,并不是浮点型数据的小数点。
在语句 int x=(1,024);中,赋值语句首先计算右侧圆括号内的值,(1,024)中逗号运算符的功能是首先计算逗号左侧表达式的值,再计算逗号运算符右侧的值,且整个逗号表达式的值是右侧表达式的值,因此赋值语句将 024 赋给变量 x,024 是八进制的常量数值,转换成十进制为 20,所以x被赋值为 20。
语句y=1,024 则不同,整个语句中由于赋值运算符优先级较高,因此整个表达式先进行赋值运算,y的值为1,然后进行逗号运算,计算整个表达式的值,即024,但该值并未产生实际意义,语句结束后数值被丢弃,但是y的值不变,因此y为 1。2>++g
9.在查看输入方面,cin >>ch 与 cin.get(ch)和 ch=cin.get()有什么不同?
解析:
C++语言中要使用输入/输出流进行字符数据的读取,通常使用 3 种方式,分别是 cin>>ch、cin.get(ch)和 ch=cin.get()。其中 cin>>ch 将会忽略所有空白字符(空格符、换行符制表符);cin.get(ch)和 ch=cin.get()将会读取所有 ASCII 字符并将其保存在 ch变量内
10.基于范围的for循环(C++11)
C++11新增了一种循环:基于范围(range-based)的for
循环。这简化了一种常见的循环任务:对数组(或容器类,如vector
和array
)的每个元素执行相同的操作,如下例所示:
double prices[2] = {3.2, 29.1};
for (double x : prices)
cout << x << endl;
其中,x
最初表示数组prices
的第一个元素。显示第一个元素后,不断执行循环,而x
依次表示数组的其他元素。因此,上述代码显示全部5个元素,每个元素占据一行。总之,该循环显示数组中的每个值。
要修改数组的元素,需要使用不同的循环变量语法:
for (double &x : prices)
{
x = x * 0.8;
cout << x << endl;
}
符号&
表明x
是一个引用变量,这种声明让接下来的代码能够修改数组的内容,而第一种语法不能。