头文件后缀一般是.h或.hpp等,源文件后缀一般是.c或.cpp等。
我使用的是VS2022,命令行可以输入 cl 文件名 可以在当前目录下生成.exe文件,然后双击打开即可运行。
int main() {
return -1;
}
在Windows操作系统下main函数没有报告运行失败,因此返回0或-1在运行效果没有什么区别。
#include
int main()
{
std::cout << "Hello , World。" << std::endl;
return 0;
}
#include
int main()
{
std::cout << "请输入两个数" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << v1 << "和" << v2 << "的乘积为" << v1 * v2 << std::endl;
return 0;
}
#include
int main()
{
std::cout << "请输入两个数" << std::endl;
int v1 = 0, v2 = 0;
std::cin >> v1 >> v2;
std::cout << v1;
std::cout << "和";
std::cout << v2;
std::cout << "的乘积为";
std::cout << v1 * v2 << std::endl;
return 0;
}
错误代码
#include
int main()
{
int v1 = 10, v2 = 20;
std::cout << "The sum of" << v1;
<< "and" << v2;
<< "is" << v1 + v2 << std::endl;
}
不合法
第5行和第6行代码最后分别有一个分号,表示语句结束。而第6行和第7行<<操作符为二元操作符,两行第一个<<操作符没有左操作数,因此不合法。
修正代码
#include
int main()
{
std::cout << "The sum of" << v1
<< "and" << v2
<< "is" << v1 + v2 << std::endl;
return 0;
}
/*
* 注释对/* */不能嵌套。
* “不能嵌套”几个字会被认为是源码,像剩余程序一样处理
*/
int main() {
return 0;
}
#include
int main()
{
std::cout << "/*"; //合法 打印/*
std::cout << "*/"; //合法 打印*/
std::cout<< /* "*/" */; //不合法 缺少右引号
//改正代码
std::cout << /* "*/" */";
std::cout <</* "*/" /* "/*" */; //合法 打印/*
return 0;
}
#include
int main()
{
int sum = 0, val = 50;
while (val <= 100)
{
sum += val;
++val;
}
std::cout << "50-100的整数和为" << sum << std::endl;
return 0;
}
#include
int main()
{
int val = 10;
while (val >= 0)
{
std::cout << val << std::endl;
--val; //每次循环val的值减1
}
return 0;
}
#include
int main()
{
int v1 = 0, v2 = 0;
std::cout << "请输入两个整数:";
std::cin >> v1 >> v2;
//如果v1大于v2,则交换v1和v2的值
if (v1 > v2) {
v1 = v1 - v2;
v2 = v1 + v2;
v1 = v2 - v1;
}
while (v1 < (v2-1)) {
v1++;
std::cout << v1 << std::endl;
}
system("pause"); //冻结屏幕,便于观察程序的执行结果
return 0;
}
sum = (-100)+(-99)+…+(-1)+0+1+…+99+100 = 0
#include
int main()
{
int sum = 0;
for (int i = -100; i <= 100; i++)
sum += i;
std::cout << sum << std::endl;
return 0;
}
#include
int main()
{
int sum = 0, val = 50;
for(val = 50;val <= 100; ++val)
{
sum += val;
}
std::cout << "50-100的整数和为" << sum << std::endl;
return 0;
}
#include
int main()
{
int val = 10;
for(val = 10;val >= 0; --val)
{
std::cout << val << std::endl;
}
return 0;
}
#include
int main()
{
int v1 = 0, v2 = 0;
std::cout << "请输入两个整数:";
std::cin >> v1 >> v2;
//如果v1大于v2,则交换v1和v2的值
if (v1 > v2) {
v1 = v1 - v2;
v2 = v1 + v2;
v1 = v2 - v1;
}
for (int i = v1 + 1; i < v2; i++) {
std::cout << i << std::endl;
}
system("pause");
return 0;
}
while的优点和缺点:
- 结构不清晰,循环控制变量的初始化在while语句之前,其改变在while循环体中
- 适用于不知道具体循环次数的情况
for的优点和缺点:
- 结构清晰,循环控制变量的初始化和修改都放在语句头部分
- 适用于已知循环次数的情况
请自行尝试。
#include
int main() {
int sum = 0, value = 0;
while (std::cin >> value)
sum += value;
std::cout << "Sum is " << sum << std::endl;
system("pause");
return 0;
}
在Windows系统中,输入文件结束符的方法是Ctrl+Z,然后按Enter或Return。
在UNIX系统中,文件结束符输入是Ctrl+D。
见1.18
#include
int main() {
// currVal 是我们正在统计的数;我们将读入的新值存入val
int currVal = 0, val = 0;
// 读取第一个数,并确保确实有数据可以处理
if (std::cin >> currVal) {
int cnt = 1; // 保存我们正在处理的当前值的个数
while (std::cin >> val) { // 读取剩余的数
if (currVal == val) // 如果值相同
++cnt; // 将cnt加1
else { // 否则,打印前一个值的个数
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
currVal = val; // 记住新值
cnt = 1; // 重置计数器
}
} // while循环在这里结束
// 记住打印文件中最后一个值的个数
std::cout << currVal << " occurs " << cnt << " times" << std::endl;
} // 最外层的if语句在这里结束
system("pause");
return 0;
}
输出:
1 1 1 1 1 1 1 1^Z
1 occurs 8 times
1 2 3 4 5 6 7^Z
1 occurs 1 times
2 occurs 1 times
3 occurs 1 times
4 occurs 1 times
5 occurs 1 times
6 occurs 1 times
7 occurs 1 times
见1.11
Sales_item.h
#pragma once
#ifndef SALESITEM_H
#define SALESITEM_H
#include
#include
class Sales_item {
public:
Sales_item(const std::string& book) :isbn(book), units_sold(0), revenue(0.0) {}
Sales_item(std::istream& is) { is >> *this; }
friend std::istream& operator>>(std::istream&, Sales_item&);
friend std::ostream& operator<<(std::ostream&, const Sales_item&);
public:
Sales_item& operator+=(const Sales_item&);
public:
double avg_price() const;
bool same_isbn(const Sales_item& rhs)const {
return isbn == rhs.isbn;
}
Sales_item() :units_sold(0), revenue(0.0) {}
public:
std::string isbn;
unsigned units_sold;
double revenue;
};
using std::istream;
using std::ostream;
Sales_item operator+(const Sales_item&, const Sales_item&);
inline bool operator==(const Sales_item& lhs, const Sales_item& rhs) {
return lhs.units_sold == rhs.units_sold && lhs.revenue == rhs.revenue && lhs.same_isbn(rhs);
}
inline bool operator!=(const Sales_item& lhs, const Sales_item& rhs) {
return !(lhs == rhs);
}
inline Sales_item& Sales_item::operator +=(const Sales_item& rhs) {
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
inline Sales_item operator+(const Sales_item& lhs, const Sales_item& rhs) {
Sales_item ret(lhs);
ret += rhs;
return ret;
}
inline istream& operator>>(istream& in, Sales_item& s) {
double price;
in >> s.isbn >> s.units_sold >> price;
if (in)
s.revenue = s.units_sold * price;
else
s = Sales_item();
return in;
}
inline ostream& operator<<(ostream& out, const Sales_item& s) {
out << s.isbn << "\t" << s.units_sold << "\t" << s.revenue << "\t" << s.avg_price();
return out;
}
inline double Sales_item::avg_price() const {
if (units_sold)
return revenue / units_sold;
else
return 0;
}
#endif
1.20.cpp
#include
#include "Sales_item.h"
int main() {
Sales_item book;
while (std::cin >> book)
std::cout << book << std::endl;
system("pause");
return 0;
}
结果:
0-201-70353-X 4 24.99
0-201-70353-X 4 99.96 24.99
0-201-70353-X 3 20
0-201-70353-X 3 60 20
0-201-70353-X 1 22
0-201-70353-X 1 22 22
0-201-70353-X 5 23
0-201-70353-X 5 115 23
0-201-70353-X 6 24
0-201-70353-X 6 144 24
0-201-70353-X 8 26
0-201-70353-X 8 208 26
0-201-70353-X 2 20
#include
#include "Sales_item.h"
int main() {
Sales_item item1, item2;
std::cin >> item1 >> item2; // 读取一对交易记录
std::cout << item1 + item2 << std::endl; // 打印它们的和
system("pause");
return 0;
}
结果:
0-201-70353-X 2 30
0-201-70353-X 3 20
0-201-70353-X 5 120 24
#include
#include "Sales_item.h"
int main() {
Sales_item item, sum;
while (std::cin >> item)
sum += item;
std::cout << sum << std::endl;
system("pause");
return 0;
}
输出:
1-01 2 100
1-01 2 100
1-01 3 100
1-01 7 700 100^Z
1-01 14 5600 400
#include
#include "Sales_item.h"
int main() {
Sales_item currItem, item;
int cnt = 1;
if (std::cin >> currItem) {
while (std::cin >> item) {
if(currItem.isbn == item.isbn){
cnt++;
}
else {
std::cout << currItem.isbn << " has " << cnt << " records" << std::endl;
cnt = 1;
currItem = item;
}
}
std::cout << currItem.isbn << " has " << cnt << " records" << std::endl;
}
system("pause");
return 0;
}
0-201-70353-X 4 24.99
0-201-70353-X 3 20
0-201-70353-X 2 30
0-201-70353-X 5 23
0-201-70353-X 6 24
0-201-70353-X 8 26
0-201-70351-X 2 20
0-201-70352-X 2 20^Z
0-201-70353-X has 6 records
0-201-70351-X has 1 records
0-201-70352-X has 1 records
#include
#include "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; // total现在表示下一本书的销售额
}
}
std::cout << total << std::endl; // 打印最后一本书的结果
}
else {
//没有输入!警告读者
std::cerr << "No data?" << std::endl;
system("pause");
return -1; //表示失败
}
system("pause");
return 0;
}
结果:
0-201-70351-X 1 20
0-201-70351-X 1 20
0-201-70352-X 2 30
0-201-70352-X 2 30
0-201-70353-X 4 25
0-201-70353-X 5 20
0-201-70353-X 5 23
0-201-70353-X 6 24^Z
0-201-70351-X 2 40 20
0-201-70352-X 4 120 30
0-201-70353-X 20 459 22.95