C++Primer plus第五章知识点+习题答案

目录

一、for循环

二、while循环

三、do while 循环

四、基于范围的for循环

五、循环和文本输出

六、嵌套循环和二维数组


一、for循环

1.1

for循环结构体的组成部分

for (initialization;test-expression;update-expression)

        body

for循环只执行一次初始化。通常程序使用该表达式将变量设置为初始值,然后用该变量计算循环周期。

test-expression决定循环体是否被执行

for循环是入口条件循环,这意味着在每轮循环之前,都将计算测试表达式的值,当测试表达式为false时,将不会执行循环体。

for循环本身是没有值的因此他不能当作一个变量来赋值

在c++中 可以在for循环体中声明变量例如:

for (int i = 0 ;i<5;i++)

        cout << "the giant fox of csdn"<

cout <<"Done"<

用for循环计算阶乘

#include
#include
#include
const int Arsize = 16;//定义数组的个数
#pragma warning(disable:4996)
using namespace std;
int other() {
    long long factorials[Arsize];//定义一个数组
    factorials[1] = factorials[0] = 1;//把前两个值写死
    for (int i = 2; i < Arsize; i++) //这个for循环是用来计算阶乘的数值
        factorials[i] = i * factorials[i - 1];
    for (int i = 0; i < Arsize; i++)//这个循环是用来显示的
        cout << i << "! = " << factorials[i] << endl;
   
    
    return 0;

}

1.2

利用for循环修改步长

#include
#include
#include
using namespace std;
int other() {
    cout << "const the by of value: " << endl;
    int by;
    cin >> by;
    cout << "couting by :" << by << endl;
    for (int i = 0; i < 100;i= i + by)
        cout << i << endl;;    
    return 0;

}

for循环也可以打印字符串,结果输入为反向打印

#include
#include
#include
using namespace std;
int other() {
    cout << "Enter a word: ";
    string word;
    cin >> word;
    for (int i = word.size()-1; i >= 0; i--)
        cout << word[i];
    cout << "\nBye.\n";
    return 0;
}

Enter a word: helloworld
dlrowolleh
Bye.

 递增运算符 i++ i=i+1 比前一个数加一

递减运算符 i-- i=i-1 比前一个数减一

i++递增/递减运算符和指针

#include
#include
#include
using namespace std;
int other() {
    double arr[5] = { 1.1,2.1,3.1,4.1,5.1 };
    double* pt = arr;
    ++pt;//对指针递增
    cout << *pt << endl;//
    double x = *++pt;// 对指针递增
    cout << x << endl;
    cout << ++ * pt << endl;//先取得pt所对应的值 然后对值递增 但pt不变
    cout << (*pt)++ << endl;//对值递增
    x = *pt++;//++的优先级更高 对pt指针递增
    cout << x << endl;
    return 0;

}

组合运算符 += 将两个操作数相加,并将结果赋给左边的操作数。相同的还有

C++Primer plus第五章知识点+习题答案_第1张图片

C++Primer plus第五章知识点+习题答案_第2张图片

 ###下个例子注意花括号 如果没有花括号,for循环的结构体里除了cout语句将不会执行其他语句

#include
#include
#include
using namespace std;
int other() {
    double number; //计算五个数字的和
    double num = 0.0;
    for (int i = 1; i <= 5; i++)
    {
        cout << "value" << i << ":";
        cin >> number;
        num += number;
    }
    cout << num << endl;
    return 0;
}

正确的使用 == 和 = 区别两者的作用:

#include
#include
#include
using namespace std;
int other() {
    int quiz[10] = { 20,20,02,20,20,20,5,6,7,8 };
    cout << "正确的操作" << endl;
    for (int i = 0; quiz[i] == 20; i++)
        cout << quiz[i] << endl;
    cout << "错误示范" << endl;
    //for (int i = 1; quiz[i] = 20; i++)
    //    cout << quiz[i] << endl;
    //下面这个会一直循环20 所以为了不卡死 我给注释了 如果你认真看到这里了 不妨也尝试一下
    return 0;
}

C++Primer plus第五章知识点+习题答案_第3张图片

二、while循环

while循环是没有初始化和更新部分的for循环,它只有测试条件和循环体:

while (test-condition)

        body

#include
#include
#include
const int ArSize = 10;
using namespace std;
int other() { 
	char name[ArSize];
	cout << "Your first name,please: ";
	cin >> name;
	cout << "Here is your name,verticalized and ASCIIized:\n";
	int i = 0;
	while (name[i] != '\0') {
		cout << name[i] <<":" << int(name[i]) << endl;
		i++;
	}
	return 0;
}

 while和for循环差不多,for 循环的表达式由三部分组成,while其实也是这三部分只不过分开来写了,while循环是从上到下顺序进行,直到条件为false;for循环的优点时结构提供了一个可实现下面所列的三条指导规则的地方,有助于让程序员记得该这样做。

在设计循环时,请记住下面几条指导原则。

· 指定循环终止的条件

· 在首次测试之前初始化条件

· 在条件被再次测试之前更新条件

记得 写while循环时要加花括号 不然while只会识别第一句

三、do while 循环

他不同于前两种循环,他是出口条件循环。首先执行循环体,然后再判定测试表达式。决定是否应继续执行循环,如果条件为false,则循环终止,否则,进入新一轮的执行和测试,这样的循环通常至少执行一次,因为其程序流必须经过循环体后才能达到测试条件

do

         body

while (test-expression)

#include
#include
#include
const int ArSize = 10;
using namespace std;
int other() { 
	int n;
	cout << "Enter numbers in the range 1-10 to find";
	cout << "my favorite number\n";
	do
	{
		cin >> n;
	} while (n != 7); {
		cout << "Yes , 7 is my favorite.\n";
	}
	return 0;
}

四、基于范围的for循环

这简化了一种常见的循环任务;对数组(或容器类,如vector,array)的每个元素执行相同的操作,如下例所示;

#include
#include

using namespace std;
int other() { 
	double prices[5] = { 4.99,1.33,5.42,2.55,4.66 };
	for (double x : prices) //遍历这个数组
		cout << x << endl;
	return 0;
}

五、循环和文本输出

废话不多说 看小程序

#include
#include

using namespace std;
int other() { 
	char ch; //定义字符串
	int count = 0;//计算单词个数
	cout << "请输入单词,将计算单词个数,当输入#时退出" << endl;
	cin >> ch;
	while (ch != '#') { //当输入#时结束循环
		cout << ch;
		++count;
		cin >> ch; //很重要 重新输入 不然会卡死在第一个单词
	}
	cout << endl << count << "characters read\n";
	return 0;
}

最后cin>>ch 我们也可以使用cin.get(ch) 读取输入中的下一个字符 即使他是空格,并将其赋给变量ch ###这是c语言中是无效的

C++Primer plus第五章知识点+习题答案_第4张图片

 六、嵌套循环和二维数组

嵌套循环通俗的理解 就是for循环里面还有一个for循环 是不是有那个画面了就这么个意思

二维数组也是数组中包含数组 例如 mask[5][8] mask是由五个数组组成的,但每个数组中又包含了八个数值

#include
#include

using namespace std;
int other() { 
	int maxtemps[4][5] = { //数组里面多个数值
		{11,21,22,23,24},
		{12,33,34,35,36},
		{13,44,45,46,47},
		{14,55,56,57,58}
	};
	for (int row = 0; row < 4; ++row) {  //循环套着循环
		for (int col = 0; col < 5; ++col)
			cout << maxtemps[row][col] << "\t";
		cout << endl;
	}
	return 0;
}

总结:

C++ 提供了三种循环 for 、 while 、do while。for和while循环都是入口条件循环,do while是出口条件循环,这意味着其将在执行循环体中的语句之后检查条件。

cin>>ch 输入文本时会自动忽略空格、换行符和制表符

cin.get(ch) 不管是什么都会储存到ch中去

成员函数调用cin.get()返回下一个输入字符,包括空格、换行符和制表符,因为可以这样使用

ch = cin.get()

嵌套循环时循环中的循环,适用于二维数组

复习题:

1.是否在执行循环体时执行条件,do while时出口条件 for while时入口条件

2.打印 01234

3.打印 0369

4.打印 6 8

5. k = 8

6.

#include
#include
const int Cities = 5;
const int Years = 4;
using namespace std;
int other() { 
	int i;
	for (i = 1; i < 100; i = i * 2)
		cout << i << endl;
	return 0;
}

 7.加花括号

8.有效,因为i=(1,024)用逗号操作符连接,值为右侧表达式的值.这是024,八进制为20

9.见上面总结的解释

编程练习:

1.编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数之间(包括这两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是2和9,则程序将指出2~9之间所有整数的和为44。

#include
#include

using namespace std;
int other() { 
    int i, j;
    cout << "输入第一个较小的数" << endl;
    cin >> i;
    cout << "输入第二个数" << endl;
    cin >> j;
    int sum = 0;
    for (i ; i <= j; i++) 
        sum = sum + i;
    
    cout <<"和为: " << sum;
    return 0;
}

2.思路采用之前5.4的思路 因为只计算100的阶乘所以把ArSize定义为101

使用array对象(而不是数组)和long double(而不是long long)重新编写程序清单5.4,并计算100!的值。

#include
#include
#include
using namespace std;
int other() { 
	const int ArSize = 101;
	arrayfactorials;
	int i;
	factorials[1] = factorials[0] = 1;
	for (i = 2; i < ArSize; i++)
		factorials[i] = i * factorials[i - 1];
	i = i - 1;
	cout << i << "! = " << factorials[i] << endl;
	return 0;
}

3.这道题也是模仿上面的一道例题,只不过这个要求我们计算求和,通过题目可以知道当数字为零时,程序结束,那我们循环体的条件是不是要不等于0,每次循环都与上一个数字相加,那么循环体的内容不就是新数+旧数,知道了之后做题就容易了

 编写一个要求用户输入数字的程序。每次输入后,程序都将报告到目前为止,所有输入的累计和。当用户输入0时,程序结束。

#include
#include
#include
using namespace std;
int other() { 
	cout << "请输入数字,将计算数字之和,输入0时结束程序: " << endl;
	int value;
	cin>>value;
	int count = 0;
	while (value != 0) {
		cout << "请继续输入数字计算求和,输入0程序结束" << endl;
		count =value+count ;
		cin >> value;
	}
	cout << endl << count;

	return 0;
}

4.这道题用了数组,刚开始我没做出来,数组做起来很方便

假设要销售《C++ For Fools》一书。请编写一个程序,输入全年中每个月的销售量(图书数量,而不是销售额)。程序通过循环,使用初始化为月份字符串的char*数组(或string对象数组)逐月进行提示,并将输入的数据储存在一个int数组中。然后,程序计算数组中各元素的总数,并报告这一年的销售情况。

#include
#include
#include
using namespace std;
int other() { 
	double money[2] = { 100,100 };
	int i;
	cout << "Daphne and Cleo both have $100 at first" << endl;
	for (i = 0; money[0] >= money[1]; i++)
	{
		money[0] = 0.1 * 100 + money[0];
		money[1] = 0.05 * money[1] + money[1];
	}
	cout << i << "年后Cleo的投资价值超过了Daphne" << endl;
	return 0;
}

5.完成编程练习5,但这一次使用一个二维数组来存储输入——3年中每个月的销售量。程序将报告每年销售量以及三年的总销售量。

#include
#include
#include
using namespace std;
int other() { 
	const int num = 11;
	int sell[num + 1];
	int total = 0;
	const char* months[num + 1] =
	{
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December",
	};
	for (int i = 0; i <= num; i++) {
		cout << months[i] << ":";
		cin >> sell[i];
		total += sell[i];
	}
	cout << "今年一共卖了" << total << "本书" << endl;
	
	return 0;
}

6.

#include
#include
#include
using namespace std;
int other() { 
	const int years = 3;
	const int month = 12;
	const char* months[month] =
	{
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December",
	};
	int sell[month][years];
	int sum[3] = { 0,0,0 };
	int totalsum = 0;
	for (int i = 0; i < years; i++) {
		cout << "The "<> sell[j][i];
			sum[i] = sum[i] + sell[j][i];
		}
	}
	totalsum = sum[0] + sum[1] + sum[2];
	cout << "The 1st year's saleroom is " << sum[0] << ".\n";
	cout << "The 2nd year's saleroom is " << sum[1] << ".\n";
	cout << "The 3rd year's saleroom is " << sum[2] << ".\n";
	cout << "The total saleroom of the 3 years is " << totalsum << ".\n";
	return 0;
}

7. 设计一个名为car的结构,用它存储下述有关汽车的信息:生产商(存储在字符数组或string对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆汽车。随后,程序使用new来创建一个由相应数量的car结构组成的动态数组。接下来,程序提示用户输入每辆车的生产商(可能是由多个单词组成)和年份信息。请注意,这需要特别小心,因为它将交替读取数值和字符串(参见第4章)。最后,程序将显示每个结构的内容。该程序的运行情况如下:

#include
#include

using namespace std;
int other() { 
	struct car{
		string name;
		int product;
	};
	cout << "How many cars do you wish to catalog?  ";
	int num;
	cin >> num;
	car* user = new car[num];
	for (int i = 0; i < num; i++)
	{
		cout << "Car #" << i + 1 << ":\n";
		cout << "Please enter the make: ";
		getline(cin, user[i].name); //防止后面的输出弹出来 写两个此语句 也可以写cin.get()吃掉空格
		getline(cin, user[i].name);
		cout << "Please enter the year made";
		cin >> user[i].product;
	}
	cout << "Here is your collection: " << endl;
	for (int i = 0; i < num; i++)
		cout << (*(user + i)).name << "" << (*(user + i)).product << endl;
	return 0;
}

8.编写一个程序,它使用一个char数组和循环来每次读取一个单词,直到用户输入done为止。随后,该程序指出用户输入了多少个单词(不包括done在内)。下面是该程序的运行情况:

#include
#include
int other()
{
    using namespace std;

    char word[100];
    cout << "Enter words (to stop, type the word done):" << endl;
    cin >> word;
    int count = 0;

    while (strcmp(word, "done") != 0)
    {
        if (bool(cin >> word) == true)
            count++;
    }


    cout << endl << "You entered a total of " << count << " words." << endl;

    system("pause");
    return 0;
}

9.编写一个满足前一个练习中描述的程序,但使用string对象而不是字符数组。请在程序中包含头文件string,并使用关系运算符来进行比较测试。

#include
#include
#include
int other()
{
    using namespace std;

    string word;
    cout << "Enter words (to stop, type the word done):" << endl;
    cin >> word;
    int count = 0;

    while (word!= "done")
    {
        if (bool(cin >> word) == true)
            count++;
    }


    cout << endl << "You entered a total of " << count << " words." << endl;

    system("pause");
    return 0;
}

10. 编写一个使用嵌套循环的程序,要求用户输入一个值,指出要显示多少行。然后,程序将显示相应行数的星号,其中第一行包括一个星号,第二行包括两个星号,依此类推。每一行包含的字符数等于用户指定的行数,在星号不够的情况下,在星号前面加上句点。该程序的运行情况如下:

#include
#include
#include
int other()
{
    using namespace std;

    cout << "Enter number of rows:  " << endl;
    int value;
    cin >> value;
    for (int i = 1; i <= value; i++) {
        int j, k;
        for (j = 1; j <= value-i; j++)
            cout << ".";
        for (k = 1; k <= i; k++)
            cout << "*";
        cout << endl;
    }
    return 0;
}

你可能感兴趣的:(C++,c++,算法,开发语言)