c++ primer第五版第一章

系列文章目录



前言

考研复试要使用c++进行机试,希望借助csdn记录自己的学习c++ primer的历程。


一、知识摘要

  1. 函数的定义:返回类型、名字、参数、主体
  2. 类型:定义了元素内容+可以进行的运算
  3. I/O:C++没有内置输入/输出;用标准库提供I/O机制。
  iostream库:istream类型和ostream类型
  cin:istream类型的标准(std)输入对象。
  cout:ostream类型的标准(std)输出对象。

  4. C++(C)一个表达式产生一个计算结果。
含有<<表达式的结果:<<左侧的运算对象,此结果可以用做另一个<<左侧的运算对象,并依次增加<<的个数。

  5. 类:定义数据结构的工具,定义了一个新的类型,以及与之有关的操作,类的提供者定义类供其他人使用。
  类的使用者不关心类如何实现,只关注类对象可以执行的操作。(封装)
  成员函数:定义为类的一部分的函数,也叫方法。由类的对象调用成员函数,使用点运算符(.);成员函数调用表达式的计算结果是点运算符右侧的运算对象的成员。

二、练习

练习1.2 使main()函数返回-1而非一般的0,编译程序查看。

int main() {
	return -1;
}

练习1.3 标准I/O练习,打印Hello,World。

#include<iostream>
//含cout
int main() {
	std::cout << "Hello,World。" << std::endl;
	//std标准,standard;
	//::作用域说明
	//<<std::endl说明左侧表达式的运算结果就是std::cout
	//endl代表换行,同时刷新缓冲区
	return 0;
}

练习1.4 *使用

#include<iostream>
int main() {
	int a, b;
	//变量必须先声明后使用,编译器需要使用为对应名字的变量分配存储空间以使用
	std::cin >> a >> b;
	//输入运算符同样返回其左侧运算对象作为其运算结果
	std::cout <<a<<"*"<<b<<"="<< a * b<<std::endl;
	return 0;
}

练习1.5 验证输入输出运算表达式的结果是其左侧运算对象

#include<iostream>
int main() {
	int a, b;
	std::cin >> a;
	std::cin >> b;
	std::cout << a;
	std::cout << "*";
	std::cout << b;
	std::cout << "=";
	std::cout << a * b;
	std::cout << std::endl;
	return 0;
}

练习1.9 使用while循环

#include<iostream>
int main() {
	int i = 50;
	int sum = 0;
	while (i <= 100) {
		sum += i;
		++i;
	}
	std::cout << sum << std::endl;
	return 0;
}

练习1.10 练习使用–运算符

#include<iostream>
int main() {
	int i = 10, sum = 0;
	while (i >= 0) {
		sum += i;
		--i;
	}
	std::cout << sum << std::endl;
	return 0;
}

练习1.11 输入和循环语句

#include<iostream>
int main() {
	int a, b;
	std::cout << "输入两个整数(另第一个小于第二个):" << std::endl;
	std::cin >> a >> b;
	int i = a;
	while (i <= b) {
		std::cout << i<< std::endl;
		++i;
	}
}

练习1.13 for循环重做
(1.9)

#include<iostream>
int main() {
	int sum = 0;
	for (int i = 50; i <= 100; ++i) {
		sum += i;
	}
	std::cout << sum << std::endl;
	return 0;
}

(1.10)

#include<iostream>
int main() {
	int sum = 0;
	for (int i = 10; i >= 0; --i) {
		sum += i;
	}
	std::cout << sum;
	return 0;
}

(1.11)

#include<iostream>
int main() {
	int a, b;
	std::cin >> a >> b;
	for (int i = a; i <= b; ++i) {
		std::cout << i << std::endl;
	}
	return 0;
}

练习1.16 键盘输入文件结束符,结束输入

#include<iostream>
int main() {
	int i, sum = 0;
	std::cout << "输入一组数:" << std::endl;
	while (std::cin >> i) {
		sum += i;
	}
	std::cout << "这些数的和是" << sum << std::endl;
	return 0;
}

练习1.19 练习使用if

#include<iostream>
int main() {
	int a, b;
	std::cin >> a >> b;
	if (a < b) {
		int i = a;
		while (i <= b) {
			std::cout << i << std::endl;
			++i;
		}
	}
	else {
		std::cout << "输入的第一个数不比第二个小";
	}
	return 0;
}

Sales_item头文件

#ifndef SALESITEM_H
#define SALESITEM_H
#include "Version_test.h" 
#include <iostream>
#include <string>
class Sales_item {
    friend std::istream& operator>>(std::istream&, Sales_item&);
    friend std::ostream& operator<<(std::ostream&, const Sales_item&);
    friend bool operator<(const Sales_item&, const Sales_item&);
    friend bool
        operator==(const Sales_item&, const Sales_item&);
public:
#if defined(IN_CLASS_INITS) && defined(DEFAULT_FCNS)
    Sales_item() = default;
#else
    Sales_item() : units_sold(0), revenue(0.0) { }
#endif
    Sales_item(const std::string& book) :
        bookNo(book), units_sold(0), revenue(0.0) { }
    Sales_item(std::istream& is) { is >> *this; }
public:
    Sales_item& operator+=(const Sales_item&);
    std::string isbn() const { return bookNo; }
    double avg_price() const;
private:
#ifdef IN_CLASS_INITS
    unsigned units_sold = 0; 
    double revenue = 0.0;
#else
    unsigned units_sold;
    double revenue;
#endif
};
inline
bool compareIsbn(const Sales_item& lhs, const Sales_item& rhs)
{
    return lhs.isbn() == rhs.isbn();
}
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.isbn() == rhs.isbn();
}
inline bool
operator!=(const Sales_item& lhs, const Sales_item& rhs)
{
    return !(lhs == rhs); 
}
Sales_item& Sales_item::operator+=(const Sales_item& rhs)
{
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}
Sales_item
operator+(const Sales_item& lhs, const Sales_item& rhs)
{
    Sales_item ret(lhs);  
    ret += rhs;          
    return ret;          
}
std::istream&
operator>>(std::istream& in, Sales_item& s)
{
    double price;
    in >> s.bookNo >> s.units_sold >> price;
    if (in)
        s.revenue = s.units_sold * price;
    else
        s = Sales_item();  
    return in;
}
std::ostream&
operator<<(std::ostream& out, const Sales_item& s)
{
    out << s.isbn() << " " << s.units_sold << " "
        << s.revenue << " " << s.avg_price();
    return out;
}

double Sales_item::avg_price() const
{
    if (units_sold)
        return revenue / units_sold;
    else
        return 0;
}
#endif

Version_test.h

#ifndef VERSION_TEST_H
#define VERSION_TEST_H


#if _MSC_FULL_VER == 170050522 || _MSC_FULL_VER == 170050727 
#endif  

#ifndef LROUND
inline long lround(double d)
{
    return (d >= 0) ? long(d + 0.5) : long(d - 0.5);
}
#endif
#endif  

1.20 利用上述两个头文件,使用Sales_item类,读取一组数据并输出

#include<iostream>
#include"Sales_item.h"
int main() {
	Sales_item book;
	std::cout << "输入书本的ISBN、出售量、售价" << std::endl;
	while (std::cin >> book) {
		std::cout << book << std::endl;
		std::cout << "输入书本的ISBN、出售量、售价" << std::endl;
	}
	std::cout << "结束";
	return 0;
}

1.21 利用上述两个头文件,输出两个Sales_item类的和。

#include<iostream>
#include"Sales_item.h"
int main() {
	Sales_item book1, book2;
	std::cout << "输入两个ISBN号相同的Sales_item对象,ISBN、销售量、单价";
	std::cin >> book1 >> book2;
	Sales_item book = book1 + book2;
	std::cout << "总共是" << std::endl;
	std::cout << book;
}

1.22 多组输入

#include<iostream>
#include"Sales_item.h"
int main() {
	Sales_item book_i, book_sum;
	std::cout << "输入一组ISBN相同的Sales_item类的book数据:ISBN、售量、单价" << std::endl;
	while (std::cin >> book_i) {
		book_sum += book_i;
	}
	std::cout << "结果是" << std::endl;
	std::cout << book_sum << std::endl;
}

1.23 多组输入,统计每个ISBN的销售

#include<iostream>
#include"Sales_item.h"
int main() {
	Sales_item book1,book2;
	std::cout << "输入第一本书的ISBN、销售量、单价" << std::endl;
	std::cin >> book1;
	std::cout << "输入第二本书的ISBN、销售量、单价" << std::endl;
	while (std::cin >> book2) {
		if (book1.isbn() == book2.isbn()) {
			book1 += book2;
			continue;
		}
		else {
			std::cout << "ISBN为" << book1.isbn() << "的书的销售情况" << book1 << std::endl;
			book1 = book2;
			std::cout << "继续输入" << std::endl;
			continue;
		}
	}

	return 0;
}

总结

  本书第一章简单的介绍了C++程序的一般格式,介绍了诸如类型、表达式、类、成员函数等内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值