初学C++ primer,记录整理,使用ubuntu14.04和GNU编译器,答案参考于github
第一章 开始
1.1
文件命名约定:参考这里(https://www.cnblogs.com/yang666/p/6515623.html) GCC 5.4 头文件后缀: h, hh, hpp, H, tcc (for shared template code); 源文件后缀: cp, cpp, CPP, C, cc, cxx, c++.
1.2
返回值为255,含义是超出了退出状态的范围,具体参考这里
1.3
#include <iostream> int main() { std::cout << "Hello, World" << std::endl; return 0; }
1.4
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The product of " << v1 << " and " << v2
<< " is " << v1 * v2 << std::endl;
return 0;
}
1.5
#include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << "The product of ";
std::cout << v1;
std::cout << " and ";
std::cout << v2;
std::cout << " is ";
std::cout << v1 * v2;
std::cout << std::endl;
return 0;
}
1.6
不合法,去掉前两个分号,分号代表语句结束,会导致后两个输出运算符左侧没有ostream对象
1.7
/* * comment pairs /* */ cannot nest. * ''cannot nest'' is considered source code, * as is the rest of the program */ int main() { return 0; }
1.8
第三句不合法,在分号前添加双引号即可
1.9
#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
#include <iostream> int main() { int val = 10; while (val >= 0) { std::cout << val << std::endl; --val; } return 0; }
1.11
#include <iostream> int main() { int small = 0, big = 0; std::cout << "please input two integers:"; std::cin >> small >> big; if (small > big) { int tmp = small; small = big; big = tmp; } while (small <= big) { std::cout << small << " "; ++small; } std::cout << std::endl; return 0; }
1.12
-100到100的和,sum为0
1.13
Ex1.9:
#include <iostream> int main() { int sum = 0; for (int i = 50; i <= 100; ++i) sum += i; std::cout << "the sum is: " << sum << std::endl; return 0; }Ex1.10:
#include <iostream> int main() { for (int i = 10; i >= 0; --i) std::cout << i << " "; std::cout << std::endl; return 0; }Ex1.11:
#include <iostream> int main() { int small = 0, big = 0; std::cout << "please input two integers:"; std::cin >> small >> big; if (small > big) { int tmp = small; small = big; big = tmp; } for (int i = small; i <= big; ++i) std::cout << i << " "; std::cout << std::endl; return 0; }
1.14
注意:for语句中定义的变量在循环结束之后是不可以使用的。
1.15
语法错误
类型错误
声明错误
1.16
#include <iostream> int main() { int sum = 0; for (int value = 0; std::cin >> value; ) sum += value; std::cout << sum << std::endl; return 0; }
1.17
都相等,输出总共次数,都不重复,输出每个值重复一次。
1.18
1.19
见1.10
1.20
#include <iostream> #include "./1/Sales_item.h" int main() { Sales_item item; while (std::cin >> item) std::cout << item << std::endl; return 0; }
我这边需要指定-std=c++0x参数
1.21
#include <iostream> #include "./1/Sales_item.h" int main() { Sales_item item1, item2; std::cin >> item1 >> item2; if (item1.isbn() == item2.isbn()) { std::cout << item1 + item2 << std::endl; return 0; } else { std::cerr << "Data must refer to same ISBN." << std::endl; return -1; } }
1.22
#include <iostream> #include "./1/Sales_item.h" int main() { Sales_item total; if (std::cin >> total) { Sales_item trans; while (std::cin >> trans) { if (total.isbn() == trans.isbn()) total += trans; else { std::cout << total << std::endl; total = trans; } } std::cout << total << std::endl; } else { std::cerr << "No data?!" << std::endl; return -1; } return 0; }
1.23
#include <iostream> #include "../include/Sales_item.h" int main() { Sales_item currItem, valItem; if (std::cin >> currItem) { int cnt = 1; while (std::cin >> valItem) { if (valItem.isbn() == currItem.isbn()) ++cnt; else { std::cout << currItem << " occurs " << cnt << " times " << std::endl; currItem = valItem; cnt = 1; } } std::cout << currItem << " occurs " << cnt << " times " << std::endl; } return 0; }
1.24
1.25