1.要输出bool,要设置标记,默认是输出0和1的。
- cout.setf(ios_base::boolalpha);
- cout << true << endl;
2.每个表达式都是值,例如
if(x = 100),相当于x = 100;if(x);
不过我强烈要求不要这么写,容易看错,或者你觉得自己牛逼,但是看你的代码的人未必牛逼。
最后还得加大自己的工作量,成为傻逼
3.这应该是冷知识,在比较旧的C++版本,for循环中的声明(就是下面的int i = 0),是不合法的,
- for (int i = 0; i < 5; i++)
- {
- }
for循环中只能使用表达式,而声明不能算是表达式。
后来的一些版本,增加了一个声明表达式,让下面的for循环方式出现。但是这是一个兼容操作,
实际上,还是把i的声明提前的。
cout << i << endl;这个语句在for循环后面是合法的,
再后来,i就真的只能在for循环里面使用了。这不知道多少版本的事了。
跟着再写多一些代码:
- int i = 0;
- while (i++ < 10)
- {
- cout << i << endl;
- }
- int y = (4 + i++) + (6 + i++);
虽然i是for里面的局部变量了,在外面不能用了,但是在vs的调试工具,鼠标指向的内存居然还是显示i的内容还存在,
然后再看外面面的i,发现当前内存里面有两个i。不知道这算不算bug呢。不过并不影响使用。
4.i++和++i是不同的,不过我建议还是把这个东西独立一行。
- int i = 0;
- while (i++ < 10)
- {
- cout << i << endl;
- }
- int y = (4 + i++) + (6 + i++);
可能不同的编译器也会有不同效果。所以不要把i++放进复杂的表达式中。
5.++i比i++效率更高。两个表达式都是i先自增,后返回的,只是i++自增前创建一个副本,然后自增,然后返回副本。
对于我们自己的类,效率差别会很明显。
6.基于范围的for循环,C++11新产品
- int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
- for (int &i : a)
- {
- cout << i << endl;
- }
7.模拟eof
- char ch;
- int count = 0;
- cin.get(ch);
- while (!cin.fail())
- {
- cout << ch;
- ++count;
- cin.get(ch);
- }
- cout << endl << count << " characters read\n";
5.8 复习题
1.入口条件就是在进入循环的时候就检测,出口条件是先进入循环,再检测,至少可以执行一次循环。
for、while属于入口条件检测,do while属于出口条件检测。
2.
01234
- int i;
- for (i = 0; i < 5; i++)
- cout << i;
- cout << endl;
3.
0369
12
- int j;
- for (j = 0; j < 11; j += 3)
- cout << j;
- cout << endl << j << endl;
4.
6
8
- int j = 5;
- while (++j < 9)
- {
- cout << j++ << endl;
- }
5.
k = 8
- int k = 8;
- do
- cout << "k = " << k << endl;
- while (k++ < 5);
6.
- for (int i = 1; i <= 64; i *= 2)
- {
- cout << i<<" ";
- }
- cout << endl;
7.使用{},其实就算只有一条语句,也应该使用{},可以是代码更加清晰,而且说不定什么时候需求就要变了,一条语句通常干不了什么的。
8.都有效。
- int x = (1, 024);
- int y;
- y = 1, 024;
9.cin>>ch,跳过空格、换行符、制表符。cin.get(ch) 和 ch = cin.get()可以读取这些字符
5.9编程题
1.
- int m = 0;
- int n = 0;
- cin >> m;
- cin >> n;
- if (m > n) {
- int t = m;
- m = n;
- n = t;
- }
- int total = 0;
- for (int i = m; i <= n; i++) {
- total += i;
- }
- cout << total <<endl;
2.
5.4程序清单
- const int ArSize = 16;
- long long factorials[ArSize];
- factorials[1] = factorials[0] = 1LL;
- for (int i = 2; i < ArSize; i++) {
- factorials[i] = i * factorials[i-1];
- }
- for (int i = 0; i < ArSize; i++) {
- cout << i << " = " << factorials[i] << endl;
- }
修改后:
- const int ArSize = 101;
- array<long double, ArSize> factorials;
- factorials[1] = factorials[0] = 1;
- for (int i = 2; i < ArSize; i++) {
- factorials[i] = i * factorials[i-1];
- }
- for (int i = 0; i < ArSize; i++) {
- cout << i << " = " << factorials[i] << endl;
- }
结果:
0 = 1
1 = 1
2 = 2
3 = 6
4 = 24
5 = 120
6 = 720
7 = 5040
8 = 40320
9 = 362880
10 = 3.6288e+06
11 = 3.99168e+07
12 = 4.79002e+08
13 = 6.22702e+09
14 = 8.71783e+10
15 = 1.30767e+12
。。。好长
3.
- cout << "Please enter:" << endl;
- int i = -1;
- int total = 0;
- while (i != 0) {
- cin >> i;
- total += i;
- cout << "current sum: "<< total << endl;
- }
4.
- const double base = 100;
- const double interestA = 0.1;
- const double interestB = 0.05;
- double moneyA = base;
- double moneyB = base;
- int year = 0;
- while (moneyA >= moneyB) {
- ++year;
- moneyA += (base * interestA);
- moneyB += (moneyB * interestB);
- }
- cout << "Year:" << year << " A:" << moneyA << " B:" << moneyB << endl;
结果:
- <span style="font-family: Arial, Helvetica, sans-serif;">Year:27 A:370 B:373.346</span>
5.
- string month[12] = {
- "January","February","March","April",
- "May","June","July","August",
- "September","October","November","December"};
- int total = 0;
- int thisYearData[12];
- for (int i = 0; i < 12; ++i) {
- cout << "Please enter " << month[i] <<"'data:" ;
- cin >> thisYearData[i];
- total += thisYearData[i];
- }
- cout << "this year' data: "<< total <<endl;
6.
- string month[12] = {
- "January","February","March","April",
- "May","June","July","August",
- "September","October","November","December"};
- int total = 0;
- int yearData[3][12];
- int yearTotal[3];
- for (int j = 0; j < 3; ++j) {
- for (int i = 0; i < 12; ++i) {
- cout << "Please enter the " << j + 1 << " year " << month[i] <<"'data:" ;
- cin >> yearData[j][i];
- total += yearData[j][i];
- yearTotal[j] += yearData[j][i];
- }
- }
- for (int i = 0; i < 3; ++i) {
- cout << "year:"<< i + 1 << " data:"<< yearTotal[i] << endl;
- }
- cout << "all year' data: "<< total <<endl;
7.
- struct SCar
- {
- string manufacturer;
- int year;
- };
- int num = 0;
- cout << "How many cars do you wish to catalog?";
- cin >> num;
- cin.get();
- SCar* carArr = new SCar[num];
- for (int i = 0; i < num; ++i ) {
- cout<< "Car #" << i + 1 << ":"<<endl;
- cout<< "Please enter the make:";
- getline(cin, carArr[i].manufacturer);
- cout << "Please enter the year made:";
- cin >> carArr[i].year;
- cin.get();
- }
- cout << "Here is your collection:" << endl;
- for (int i = 0 ; i < num; ++i) {
- cout << carArr[i].year << " " << carArr[i].manufacturer << endl;
- }
8.
- char s[20];
- int count = 0;
- cout << "Enter words (to stop, type the word done):" <<endl;
- while (true) {
- cin >> s;
- if (0 == strcmp(s, "done")) {
- break;
- }else{
- ++count;
- }
- }
- cout << "You entered a total of " << count << " words" << endl;
9.
- string s;
- int count = 0;
- cout << "Enter words (to stop, type the word done):" <<endl;
- while (true) {
- cin >> s;
- if (s == "done") {
- break;
- }else{
- ++count;
- }
- }
- cout << "You entered a total of " << count << " words" << endl;
10.
- cout << "Enter number of rows: ";
- int n = 0;
- cin >> n;
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n ; ++j) {
- if (j < n - i - 1) {
- cout << "." ;
- }else{
- cout << "*";
- }
- }
- cout << endl;
- }