C++ Primer 前三章部分习题代码

这篇博客主要涵盖了C++ Primer教材中的部分练习,包括2.6.2节的2.41和2.42题,以及3.3.3节的3.17和3.20题,3.4.2节的3.24和3.25题。作者详细解答了这些练习,涉及将Sales_data结构体移到头文件、cpp文件的调用方式以及其它相关编程问题。
摘要由CSDN通过智能技术生成

2.6.2 节练习 - 练习 2.41

//涵盖了1.5.1节要求的几种方式
#include <iostream>
#include <string>
using namespace std;

struct Sales_data{
    string ISBN;
    int mun = 0;
    double price = 0.0;
    double allprice = 0.0;
};

int main()
{
    Sales_data item1, item2;
    
    if(cin >> item1.ISBN >> item1.mun >> item1.price){
        item1.allprice = item1.mun * item1.price;
        int cut =1;
        while (cin >> item2.ISBN >> item2.mun >> item2.price) {
            item2.allprice = item2.mun * item2.price;
            if(item1.ISBN == item2.ISBN){
                item1.mun = item1.mun + item2.mun;
                item1.allprice = item1.allprice + item2.allprice;
                ++cut;
            }else{
                cout << item1.ISBN << " " << item1.mun << " " << item1.allprice << " "
                << item1.allprice/item1.mun << " Time " << cut << endl;
                item1.ISBN = item2.ISBN;
                item1.mun = item2.mun;
                item1.price = item2.price;
                item1.allprice = item2.allprice;
                cut = 1;
            }
        }
        cout << item1.ISBN << " " << item1.mun << " " << item1.allprice << " "
        << item1.allprice/item1.mun << " Time " << cut << endl;
    }
    return 0;
}

2.6.3 节练习 - 练习 2.42

代码与上一段相同,只不过是把Sales_data放在了名为Sales_data.h的头文件中

//这是头文件,从.cpp中把此段内容剔除即可

#ifndef Sales_data_h
#define Sales_data_h

#include <string>
using namespace std;
struct Sales_data{
    string ISBN;
    int mun = 0;
    double price = 0.0;
    double allprice = 0.0;
};

#endif /* Sales_data_h */

在.cpp文件中的调用如下

#include <iostream>
#include "Sales_data.h"
using namespace std;

int main()
{
    Sales_data item1, item2;

    if(cin >> item1.ISBN >> item1.mun >> item1.price){
        item1.allprice = item1.mun * item1.price;
        int cut =1;
        while (cin >> item2.ISBN >> item2.mun >> item2.price) {
            item2.allprice = item2.mun * item2.price;
            if(item1.ISBN == item2.ISBN){
                item1.mun = item1.mun + item2.mun;
                item1.allprice = item1.allprice + item2.allprice;
                ++cut;
            }else{
                cout << item1.ISBN << " " << item1.mun << " " << item1.allprice << " "
                << item1.allprice/item1.mun << " Time " << cut << endl;
                item1.ISBN = item2.ISBN;
                item1.mun = item2.mun;
                item1.price = item2.price;
                item1.allprice = item2.allprice;
                cut = 1;
            }
        }
        cout << item1.ISBN << " " << item1.mun << " " << item1.allprice << " "
        << item1.allprice/item1.mun << " Time " << cut << endl;
    }
    return 0;
}

3.3.3 节练习 - 练习 3.17

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
    vector<string> v;
    string s;
    
    while(cin >> s)
		v.push_back(s);			//向v尾压入循环每次输入的字符串
    
    for(auto &i : v)			//先读取字符串
        for(auto &j : i)		//再读取字符
            j = toupper(j);		//变换大小写
            
    for(auto a : v)				//打印v中内容
        cout << a << endl;
    
    return 0;
}

3.3.3 节练习 - 练习 3.20

#include <iostream>
#include <vector>
using namespace std;

int main()
{
 	int a = 0;
    vector<int> v;
    
    while(cin >> a)
        v.push_back(a);
        
    decltype(v.size()) i; 		// i 的作用域包括for和if
    
    for(i = 0; i != v.size()/2; i++)
        cout << v[i]+v[v.size()-1-i] << endl;
        
    if(v.size()%2) 								//输出奇数余留值
        cout << v[i] << endl;
    return 0;
}

3.4.2 节练习 - 练习 3.24

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v;
    int a = 0;
    while(cin >> a)
        v.push_back(a);

    if(v.size() % 2 != 0){
    	for(auto b = v.begin(),e = v.end(); b != e - 1; b++)
            cout << *b + *(--e) << endl;
            
        cout << v[v.size() / 2] << endl;
    }else{
        for(auto b = v.begin(),e = v.end(); b != e; b++)
            cout << *b + *(--e) << endl;
    }
    return 0;
}

3.4.2 节练习 - 练习 3.25

#include <iostream>
#include <vector>
using namespace std;

int main()
{
	vector<int> v(11, 0);
    auto t = v.begin();
    int c;
    
    while (cin >> c) {
    	if(c <= 100)
        	*(t+c/10)+=1;
    }
    for(auto o = v.begin(); o != v.end(); o++){
        cout << *o << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值