问题描述:
--4.请基于下面这个名称空间编写一个由3个文件组成的程序:
namespace SALES
{
const int QUARTERS = 4;
struct Sales
{
double sales[QUARTERS];
double max;
double min;
double average;
};
void setSales(Sales &s, const double arr[], int n);
void setSales(Sales &s);
void showSales(const Sales &s);
}
--第一个文件是一个头文件,其中包含名称空间。第二个文件是源代码,定义3个函数。第三个文件提供main()函数。
解决方案:
1.头文件:sales.h
#ifndef SALES_H_
#define SALES_H_
namespace SALES
{
const int QUARTERS = 4;
struct Sales
{
double sales[QUARTERS];
double max;
double min;
double average;
};
void setSales(Sales &s, const double arr[], int n);
void setSales(Sales &s);
void showSales(const Sales &s);
}
#endif
2.源文件:sales.cpp
#include<iostream>
#include"sales.h"
namespace SALES
{
void setSales(Sales &s, const double arr[], int n)
{
double sum = 0.0;
s.max = arr[0];
s.min = arr[0];
for(int i = 0; i < QUARTERS; i++)
{
s.sales[i] = arr[i];
if(s.max < s.sales[i])
{
s.max = s.sales[i];
}
if(s.min > s.sales[i])
{
s.min = s.sales[i];
}
sum += s.sales[i];
}
s.average = sum / 4;
}
void setSales(Sales &s)
{
std::cout << "Enter the : # " << 1 << " th sales : ";
std::cin >> s.sales[0];
s.max = s.sales[0];
s.min = s.sales[0];
double sum = s.sales[0];
for(int i = 1; i < QUARTERS; i++)
{
std::cout << "Enter the : # " << i + 1 << " th sales : ";
std::cin >> 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];
}
sum += s.sales[i];
}
s.average = sum / 4;
}
void showSales(const Sales &s)
{
for(int i = 0; i < QUARTERS; i++)
{
std::cout << " sales are :" << s.sales[i] << " , ";
}
std::cout << std::endl;
std::cout << "max is : " << s.max << " , ";
std::cout << "min is : " << s.min << " , ";
std::cout << "average is : " << s.average << std::endl;
}
}
3.main()函数
#include<iostream>
#include"sales.h"
using namespace std;
int main()
{
using SALES::Sales;
using SALES::setSales;
using SALES::showSales;
Sales s;
double sales[4] = {2.0, 3.0, 1.0, 4.0};
setSales(s, sales, 4);
showSales(s);
setSales(s);
showSales(s);
return 0;
}
另附Linux下C++编译及Makefile结构:
#1: 保存上述文件在同一目录下,例如:
sales/ sales.h sales.cpp main.cpp
#2:sales文件目录下编写Makefile文件:
main:main.o sales.o
g++ main.o sales.o -o main
main.o:main.cpp
g++ -c main.cpp
sales.o:sales.cpp
g++ -c sales.cpp
clean:
rm *.o
#3:当前目录下执行命令:make
#4:当前目录下执行命令:make clean
#5:当前目录下执行命令:./main
大功告成,Makefile文件为Linux下gcc/g+编译提供文件链接,适合多文件处理、大型项目设计,经过反复试错,最终成功实现。
practice make perfect !