第5章 循环和关系表达式
2018-12-08 本文已影响0人
肥树仙僧
复习题
- 入口条件循环和出口条件循环之间的区别是什么?各种
C++
循环分别属于其中的哪一种?
答:
入口条件:先判断再执行。for、while
出口条件:先执行再判断。do while
- 如果下面的代码片段是有效程序的组成部分,它将打印什么内容?
int i;
for ( i = 0; i < 5; i++ )
cout << i;
cout << endl;
答:
0
1
2
3
4
- 如果下面的代码片段是有效程序的组成部分,它将打印什么内容?
int j;
for ( j = 0; j < 11; j += 3 )
cout << j;
cout << endl << j << endl;
答:
0369
12
- 如果下面的代码片段是有效程序的组成部分,它将打印什么内容?
int j = 5;
while ( ++j < 9 )
cout << j++ << endl;
答:
6
8
- 如果下面的代码片段是有效程序的组成部分,它将打印什么内容?
int k = 8;
do
cout << " k = " << k << endl;
while( k++ < 5 );
答:
k = 8
- 编写一个打印
1、2、4、8、 16、 32、 64
的for
循环,每轮循环都将计数变量的值乘以2
。
答:
for ( int i = 1; i < 128; i *= 2 )
{
cout << i << " ";
}
- 如何在循环体中包含多条语句?
答:
使用大括号将多条语句括起来。 - 下面的语句是否有效?如果无效,原因是什么?如果有效,它将完成什么工作?
int x = (1, 024);
答:有效,x=1。
答:表达式由两个表达式组成——1和024,用逗号运算符连接。值为右侧表达式的值,即024(八进制),即20。因此,该声明将值20赋给x。
下面的语句如何呢?
int y;
y = 1, 024;
答:无效。
答:有效。但是运算符优先级将导致它被判定成这样:
(y=1), 024
也就是说,左侧表达式将y设置为1,整个表达式的值(没有使用)为024(八进制)或20(十进制)。 - 在查看输入方面,
cin >> ch
同cin.get(ch)
和ch=cin.get()
有什么不同?
答:母鸡啊。
答:cin>>ch
将跳过空格、换行符和制表符,其他两种格式将读取这些字符。
编程练习
- 编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间(包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和9,则程序将指出2~9之间所有整数的和为44。
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int min, max, sum;
cout << "Enter the min and max number: ";
cin >> min >> max;
sum = 0;
for (int i = min; i <= max; i++)
{
sum += i;
}
cout << " The sum is: " << sum << endl;
return 0;
}
- 使用
array
对象(而不是数组)和long double
(而不是long long
)重新编写程序清单5.4,并计算100!的值。
// 后面补上
- 编写一个要求用户输入数字的程序。每次输入后,程序都将报告到目前为止,所有输入的累计和。当用户输入0时,程序结束。
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int num, sum;
sum = 0;
while (true)
{
cout << "Enter the min and max number: ";
cin >> num;
if (0 == num)
break;
sum += num;
cout << "sum is : " << sum << endl;
}
return 0;
}
- Daphne以10%的単例投资了100美元。也就是说,每一年的利润都是投资额的10%,即每年10美元:
利息 = 0.10 * 原始存款
而Cleo以5%的复利投资了100美元。也就是说,利息是当前存款(包括获得利息)的5%:
利息 = 0.05 * 当前存款
Cleo在第一年投资100美元的盈利是5%——得到了105美元。下一年的盈利是105美元的5%——即5.25美元,以此类推。请编写一个程序,计算多少年后,Cleo的投资价值才能超过Daphne的投资价值,并显示此时两个人的投资价值。
#include <iostream>
#include <string>
using namespace std;
const int money = 100;
int main(void)
{
float Daphne, Cleo;
int years = 0;
Daphne = float(money);
Cleo = float(money);
while (true)
{
years++;
Daphne += float(money) * 0.1;
Cleo += Cleo * 0.05;
if (Cleo > Daphne)
break;
}
cout << "years: " << years << " Daphne: " << Daphne << " Cleo: " << Cleo << endl;
return 0;
}
- 假设要销售
《C++ For Fools》
一书。请编写一个程序,输入全年中每个月的销售量(图书数量,而不是销售额)。程序通过循环,使用初始化为月份字符串的char*
数组(或者string
对象数组)逐月进行提示,并将输入的数据存储在一个int
数组中。然后,程序计算数组中各元素的总数,并报告这一年的销售情况。
#include <iostream>
#include <string>
using namespace std;
const int Month = 12;
int main(void)
{
string monthArray[Month] = { "Jan.","Feb.","Mar.", "Apr.", "May.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.", "Dec." };
int numArray[Month] = { 0 };
int total = 0;
for (int i = 0; i < Month; i++)
{
cout << "Enter " << monthArray[i] << " number: ";
cin >> numArray[i];
total += numArray[i];
}
cout << "Total : " << total << endl;
for (int i = 0; i < Month; i++)
{
cout << monthArray[i] << " " << numArray[i] << endl;
}
return 0;
}
- 完成编程练习5,但这一次要使用一个二维数组来存储输入——3年中每个月的销售量。程序将报告每年销售量以及3年的总销售量。
#include <iostream>
#include <string>
using namespace std;
const int Year = 3;
const int Month = 12;
int main(void)
{
string monthArray[Year][Month] = { { "Jan.","Feb.","Mar.", "Apr.", "May.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.", "Dec." }\
,{ "Jan.","Feb.","Mar.", "Apr.", "May.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.", "Dec." } \
,{ "Jan.","Feb.","Mar.", "Apr.", "May.","Jun.","Jul.","Aug.","Sept.","Oct.","Nov.", "Dec." } };
int numArray[Year][Month] = { 0 };
int total = 0;
for (int i = 0; i < Year; i++)
{
for (int j = 0; j < Month; j++)
{
cout << "Enter the " << i+1 << " year " << monthArray[i][j] << " number: ";
cin >> numArray[i][j];
total += numArray[i][j];
}
}
cout << "Total : " << total << endl;
for (int i = 0; i < Year; i++)
{
for (int j = 0; j < Month; j++)
{
cout << monthArray[i][j] << " " << numArray[i][j] << endl;
}
}
return 0;
}
- 设计一个名为
car
的结构,用它存储下述有关汽车的信息:生产商(存储在字符数组或string
对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆汽车。随后,程序使用new
来创建一个由相应数量的car
结构组成的动态数组。接下来,程序提示用户输入每辆车的生产商(可能由多个单词组成)和年份信息。请注意,这需要特别小心,因为它将交替读取数值和字符串(参见第4章)。最后,程序将显示每个结构的内容。该程序的运行情况如下:
How many cars do you wish to catalog? 2
Car#1:
Please enter the make: Hudson Hornet
Please enter the year made: 1952
Car#2:
Please enter the make: Kaiser
Please enter the year made: 1951
Here is your collection:
1952 Hudson Hornet
1951 Kaiser
#include <iostream>
#include <string>
using namespace std;
struct car {
string make;
int year;
};
int main(void)
{
int number;
car* pcar = NULL;
char ch;
cout << "How many cars do you wish to catalog?: ";
cin >> number;
pcar = new car[number];
for (int i = 0; i < number; i++)
{
ch = cin.get(); // 加上这句的目的是将缓冲区中残留的字符拿走,这里是"\n"
cout << "Car#" << i+1 << ":" << endl;
cout << "Please enter the make: ";
getline(cin, pcar[i].make);
cout << "Please enter the year made: ";
cin >> pcar[i].year;
NULL;
NULL;
}
cout << "Here is your collection:" << endl;
for (int i = 0; i < number; i++)
{
cout << pcar[i].year << " " << pcar[i].make << endl;
}
return 0;
}
- 编写一个程序,它使用一个
char
数组和循环来每次读取一个单词,直到用户输入done为止。随后,改程序指出用户输入了多少个单词(不包括done在内)。下面是该程序的运行情况:
Enter words (to stop, type the word done):
anteater brithday category dumpster envy finagle geometry done for sure
You entered a total of 7 words.
您应在程序中包含头文件cstring
,并使用函数strcmp()
来进行比较测试。
#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
char str[100] = { 0 };
int count = 0;
while (true)
{
cout << "Enter words (to stop, type the word done):";
cin >> str;
if (0 == strcmp(str, "done"))
{
break;
}
count++;
}
cout << "You entered a total of " << count << " words." << endl;
return 0;
}
- 编写一个满足前一个练习中描述的程序,但是用
string
对象而不是字符数组。请在程序中包含头文件string
,并使用关系运算符来进行比较测试。
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string str;
int count = 0;
while (true)
{
cout << "Enter words (to stop, type the word done):";
cin >> str;
if (str == "done")
{
break;
}
count++;
}
cout << "You entered a total of " << count << " words." << endl;
return 0;
}
- 编写一个使用嵌套循环的程序,要求用户输入一个值,指出要显示多少行。然后,程序将显示相应行数的星号,其中第一行包括一个星号,第二行包括两个星号,依此类推。每一行包含的字符数等于用户指定的行数,在星号不够的情况下,在星号签名加上句点。该程序的运行情况如下:
Enter number of rows: 5
....*
...**
..***
.****
*****
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int number;
cout << "Enter number of rows: ";
cin >> number;
for (int i = number-1; i >= 0; i--)
{
for (int j = 0; j < i; j++)
{
cout << ".";
}
for (int k = 0; k < number - i; k++)
{
cout << "*";
}
cout << endl;
}
return 0;
}