C++ Prime Plus 第六版 第九章 内存模型于名称空间 编程练习 参考答案 详细版

本文详细介绍了使用C++进行结构体定义、成员函数实现及动态内存分配的方法。通过具体实例,如高尔夫球手信息管理、字符串计数、以及销售数据处理,展示了结构体在实际应用中的灵活性和效率。同时,文章深入探讨了如何利用new操作符为结构体数组分配内存,以及在不同存储区中初始化结构体的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下答案本人在VS2019中均已亲自测试编译通过,完美运行.

9.1

//golf.h文件

#ifndef GOLF_H
#define GOLF_H

const int len = 40;

struct golf
{
    char fullname[len];
    int handicap;
};

void setgolf(golf & g, const char * name, int hc);
int setgolf(golf & g);
void handicap(golf & g, int hc);
void showgolf(const golf & g);

#endif
//golf.cpp文件

#include<iostream>
#include<cstring>
#include"golf.h"

void setgolf(golf & g, const char * name, int hc)
{
    strcpy(g.fullname, name);
    g.handicap = hc;
}

int setgolf(golf & g)
{
    using std::cout;
    using std::cin;
    cout << "请输入姓名:";
    cin >> g.fullname;
    cout << "请输入等级:";
    cin >> g.handicap;
}
void handicap(golf & g, int hc)
{
    g.handicap = hc;
}
void showgolf(const golf & g)
{
    using std::cout;
    using std::cin;
    using std::endl;
    cout << "姓名:" << g.fullname << endl;
    cout << "等级:" << g.handicap << endl;
}
#include<iostream>
#include"golf.h"

using namespace std;

int main(void)
{
    golf ann;
    char name[20] = "wu 123456";
    int grade = 999;
    setgolf(ann, name, grade);
    showgolf(ann);
}

9.2

#include<iostream>
#include<string>

void strcount(const std::string str);

int main(void)
{
	using namespace std;
	string input;
	cout << "Enter a line:\n";
	getline(cin, input);
	while (input != " ")	//只输入一个空格时,结束
	{
		strcount(input);
		cout << "\nEnter next line(empty line to quit):\n";
		getline(cin, input);
	}
	cout << "Bye\n";
}
void strcount(const std::string str)
{
	using namespace std;
	static int total = 0;
	int count = str.size();
	total += count;
	cout << count << " characters\n";
	cout << total << " characters total\n";
}

9.3

#include<iostream>
#include<cstring>
#include<new>

struct chaff
{
	char dross[20];
	int slag;
};

chaff buffer[2];

int main()
{
	using namespace std;
	chaff* P1 = new(buffer) chaff[2];
	chaff* P2 = new chaff[2];
	char name1[20]{ "123456" };
	char name2[20]{ "abcdef" };
	for (int i = 0; i < 2; i++)
	{
		strcpy_s(P1[i].dross, name1);
		cout << i + 1 << " slag: ";
		cin >> P1[i].slag;
	}
	for (int i = 0; i < 2; i++)
	{
		strcpy_s(P2[i].dross, name2);
		cout << i + 1 << " slag: ";
		cin >> P2[i].slag;
	}
	for (int i = 0; i < 2; i++)
	{
		cout << i + 1 << " buffer dross: " << buffer[i].dross << "  " << &buffer[i].dross << endl
			<< i + 1 << " buffer  slag: " << buffer[i].slag << "  " << &buffer[i].slag << endl
			<< i + 1 << " P1     dross: " << P1[i].dross << "  " << &P1[i].dross << endl
			<< i + 1 << " P1      slag: " << P1[i].slag << "  " << &P1[i].slag << endl
			<< i + 1 << " P2     dross: " << P2[i].dross << "  " << &P2[i].dross << endl
			<< i + 1 << " P2      slag: " << P2[i].slag << "  " << &P2[i].slag << endl;
	}
}

9.4

//Salesclass.h文件

#pragma once

namespace SALSS
{
	const int QUARTERS = 4;
	struct Sales
	{
		double sales[QUARTERS];
		double average;
		double max;
		double min;
	};
	void setSales(Sales& s, const double arr[], int n);
	void setSales(Sales& s);
	void showsSales(const Sales& s);
}
//Salesclass.cpp 文件

#include"Salesclass.h"
#include<iostream>
namespace SALSS
{
	using::std::cout;
	using::std::cin;
	using::std::endl;
	void setSales(Sales& s, const double arr[], int n)
	{
		double sum = 0;
		s.max = arr[0], s.min = arr[0];
		for (int i = 0; i < n; i++)
		{
			s.sales[i] = arr[i];
			sum += s.sales[i];
		}
		for (int i = 1; i < n; i++)
		{
			if (s.max < s.sales[i])
				s.max = s.sales[i];
			if (s.min > s.sales[i])
				s.min = s.sales[i];
		}
		s.average = sum / n;
	}
	void setSales(Sales& s)
	{
		double sum = 0;
		cout << "Enter sales:";
		for (int i = 0; i < QUARTERS; i++)
		{
			cin >> s.sales[i];
			sum += s.sales[i];
		}
		s.max = s.sales[0], s.min = s.sales[0];
		for (int i = 1; i < QUARTERS; i++)
		{
			if (s.max < s.sales[i])
				s.max = s.sales[i];
			if (s.min > s.sales[i])
				s.min = s.sales[i];
		}
		s.average = sum / QUARTERS;
	}
	void showsSales(const Sales& s)
	{
		for (int i = 0; i < QUARTERS; i++)
			cout << "sales[ " << i << "] = " << s.sales[i] << endl;
		cout << "average :" << s.average << endl
			<< "  max   :" << s.max << endl
			<< "  min   :" << s.min << endl << endl;
	}
}
#include<iostream>
#include"Salesclass.h"

int main()
{
	using namespace SALSS;
	Sales money[2];
	double arr[4]{ 220.1, 300.1, 260.8, 300.2 };
	setSales(money[0], arr, 4);
	setSales(money[1]);
	showsSales(money[0]);
	showsSales(money[1]);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值