1. 程式人生 > >c++ primer plus 第六版第九章程式設計練習

c++ primer plus 第六版第九章程式設計練習

9.1

//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);
//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)
{
	char temp[Len];
	std::cout << "enter the full name:";
	std::cin.getline(temp, Len);
	if (strcmp(temp, "") == 0)
		return 0;
	else
	{
		strcpy(g.fullname, temp);
		return 1;
	}
}
void handicap(golf &g, int hc)
{
	g.handicap = hc;
}
void showgolf(const golf &g)
{
	using std::cout;
	using std::cin;
	using std::endl;
	cout << "fullname: " << g.fullname
		<< "\nhandicap: " << g.handicap
		<< endl;

}
//Main.cpp
#include<iostream>
#include"golf.h"
int main()
{
	using std::cout;
	using std::cin;
	golf andy;
	int flag;
	setgolf(andy, "Ann Birdfree", 24);
	cout << "non-interactive version:\n";
	showgolf(andy);
	flag = setgolf(andy);
	if (flag)
	{
		cout << "enter handicap: ";
		cin >> andy.handicap;
		cout << "interactive version\n";
	}
	else
	{
		cout << "invalid fullname\n";
	}
	showgolf(andy);
	return 0;
}

9.2

#include<iostream>
#include<string>
using namespace std;
void strcount(string str);
int main()
{
	string str;
	cout << "enter a line\n";
	getline(cin, str);
	while (cin)
	{
		strcount(str);
		cout << "enter next(empty to quit):";
		getline(cin, str);
		if (str == "")
			break;
	}
	cout << "Bye\n";
	return 0;
}

void strcount(string str)
{
	int count=0;
	static int total=0;
	for (int i = 0; str[i] != '\0'; i++)
	{
		++count;
	}
	total = total + count;
	cout << count << " characters\n";
	cout << total << " characters total\n";
}

9.3

#include<iostream>
#include<cstring>
using namespace std;
struct chaff
{
	char dross[20];
	int slag;

};
char buffer[128];
int main()
{
	
	chaff *dy= new chaff[2];
	for (int i = 0; i < 2; i++)
	{
		strcpy((dy+i)->dross, "dynamic memory ");
		(dy + i)->slag = i+1;
		cout << dy + i << ":";
		cout<< (dy + i)->dross << ","
			<< (dy + i)->slag << endl;
	}
	delete[] dy;
	chaff *sta = new(buffer)chaff[2];
	for (int i = 0; i < 2; i++)
	{
		strcpy((sta + i)->dross, "static memory ");
		(sta + i)->slag = i+1;
		cout << sta + i << ":";
		cout << (sta + i)->dross << ","
			<< (sta + i)->slag << endl;
	}
	cout << (void *)buffer << "= buffer address\n";
	return 0;
}

9.4

//sales.h
namespace SALES
{
	const int QUARTERS = 4;
	struct Sales
	{
		double sales[QUARTERS];
		double average;
		double max;
		double min;

	};
	void setSales(Sales &s, const double ar[], int n);
	void setSales(Sales &s);
	void showSales(const Sales &s);
}
//fuction.cpp
#include<iostream>
#include"sales.h"//需要使用SALES名稱空間中的結構定義、函式原型
namespace SALES //對SALES名稱空間的擴充套件,函式原型與函式定義必須在同一個名稱空間
{
	using std::cout;
	using std::cin;
	using std::endl;
	void setSales(Sales &s, const double ar[], int n)
	{
		int count=0;
		double sum=0;
		s.max = s.min =ar[0];
		for (int i=0; i < n&&i < QUARTERS; i++)
		{
			s.sales[i] = ar[i];
			++count;
			sum = sum + s.sales[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 / count;
		
	}

	void setSales(Sales &s)
	{
		double sum = 0;
		cout << "enter sales:\n";
		for (int i = 0; i < QUARTERS; i++)
		{
			cout << "#" << i + 1<<": ";
			cin >> s.sales[i];
	    }
		s.max = s.min = s.sales[0];
		for (int i = 0; i < QUARTERS; i++)
		{
			sum = sum + s.sales[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 showSales(const Sales &s)
	{
		for (int i = 0; i < QUARTERS; i++)
		{
			cout << "#" << i + 1 << ": " << s.sales[i] << endl;
		}
		cout << "max: " << s.max << endl
			<< "min: " << s.min << endl
			<< "average: " << s.average << endl;

	}
}
//main()
#include<iostream>
#include"sales.h"
int main()
{
	using namespace std;
	using namespace SALES;
	Sales s1, s2;
	double ar[QUARTERS] = { 1.4,1.2,1.1,1.5 };
	setSales(s1, ar, 4);
	cout << "non-interactive version,n=4:\n";
	showSales(s1);
	setSales(s1, ar, 5);
	cout << "non-interactive version,n>5:\n";
	showSales(s1);
	setSales(s1, ar, 3);
	cout << "non-interactive version,n<4:\n";
	showSales(s1);
	cout << "interactive version:\n";
	setSales(s2);
	showSales(s2);
	return 0;
}