C++ primer plus第六版第12章编程练习

C++ Primer Plus(第六版)编程练习答案 第12章 类和动态内存分配 本章所有编程练习的工程源码可在此处下载(点击此链接下载),供大家参考交流!   1. 对于下面的类声明: class Cow {          char name[20];          char *hobby;          double weight; public:          Cow();          Cow(const char * nm, co... 阅读详情

1.cow.cpp

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

Cow::Cow()
{
	m_cName[0] = '\0';
	m_cHobby = NULL;
	m_dWeight = 0;
}


Cow::~Cow()
{
	delete[] m_cHobby;
	m_cHobby = NULL;
}
Cow::Cow(const char* nm, const char* ho, double wt) {
	strcpy_s(m_cName,20, nm);
	int len = strlen(ho);
	delete[] m_cHobby;
	m_cHobby = new char[len + 1];
	strcpy_s(m_cHobby,len+1, ho);
	m_cHobby[len] = '\0';
	m_dWeight = wt;
}
Cow::Cow(const Cow& c) {
	strcpy_s(m_cName,20, c.m_cName);
	int len = strlen(c.m_cHobby);
	m_cHobby = new char[len + 1];
	strcpy_s(m_cHobby,len + 1, c.m_cHobby);
	m_cHobby[len] = '\0';
	m_dWeight = c.m_dWeight;
}
Cow& Cow::operator=(const Cow& c) {
	if (this == &c)
		return *this;
	delete[] m_cHobby;
	strcpy_s(m_cName, 20, c.m_cName);
	int len = strlen(c.m_cHobby);
	m_cHobby = new char[len + 1];
	strcpy_s(m_cHobby, len + 1, c.m_cHobby);
	m_cHobby[len] = '\0';
	m_dWeight = c.m_dWeight;
	return *this;
}
void Cow::ShowCow()const {
	cout << "Cow name:" << m_cName << endl;
	cout << "Cow hobby:" << m_cHobby << endl;
	cout << "Cow weight:" << m_dWeight << endl;
}

main函数:

#include <iostream>
#include "Cow.h"

int main()
{
	Cow cow2("lily", "milk", 50);
	Cow cow3 = cow2;
	Cow cow4(cow2);
	cow2.ShowCow();
	cow3.ShowCow();
	cow4.ShowCow();
	return 0;
}

2.string.h:

#include <iostream>
using std::ostream;
using std::istream;
class String
{
public:
  String(const char* s);
  String(const String &);
  String();
  ~String();
  int length()const { return len; }
  String operator + (const String & st)const;
  void StringUp();
  void StringLow();
  int Has(const char c);
  String & operator = (const String &);
  char & operator[](int i);

  friend String operator+(const char* c, const String& st);
  friend bool operator== (const String& st, const String& st2);
  friend std::ostream & operator << (ostream & os, const String & st);
  friend std::istream & operator >> (istream & os, String & st);
private:
  char* str;
  int len;
};

string.cpp:

#include <cstring>
#include <cctype>
#include "String.h"
using std::cout;
using std::cin;

String::String()
{
  int len = 4;
  str = new char[1];
  str[0] = '\0';
}


String::~String()
{
  delete[] str;
}
String::String(const char* s) {
  len = std::strlen(s);
  str = new char[len + 1];
  strcpy_s(str,len+1, s);
}
String::String(const String & st) {
  len = st.len;
  str = new char[len + 1];
  strcpy_s(str,len+1, st.str);
}
String & String::operator = (const String & st) {
  if (this == &st)
    return *this;
  delete[] str;
  len = st.len;
  str = new char[len + 1];
  strcpy_s(str, len+1, st.str);
  return *this;
}
String operator+(const char* c, const String& st) {
	int n = st.len + strlen(c);
	char* t = new char[n + 1];
	strcpy_s(t, n + 1, c);
	strcpy_s(t + strlen(c), st.len + 1, st.str);
	t[n] = '\0';
	return String(t);
}

String String::operator + (const String & st)const {
	int n = st.len + len;
	char* t = new char[n + 1];
	strcpy_s(t, len+1, str);
	strcpy_s(t + len, st.len+1, st.str);
	t[n] = '\0';
	return String(t);
}
void String::StringUp() {
	for (int i = 0; i < len+1; ++i) {
		str[i] = toupper(str[i]);
	}	
}
void String::StringLow() {
	for (int i = 0; i < len+1; ++i) {
		str[i] = tolower(str[i]);
	}	
}
int String::Has(const char c) {
	int n = 0;
	for (int i = 0; i < len + 1; ++i) {
		if (str[i] == c)
			n++;
	}
	return n;
}

char & String::operator[](int i) { return str[i]; }
bool operator== (const String& st, const String& st2) { return (strcmp(st.str, st2.str) == 0); }
std::ostream & operator << (ostream & os, const String & st) { 
  os << st.str;
  return os;
}
std::istream & operator >> (istream & os, String & st) {
  os >> st.str;
  st.len = strlen(st.str);
  return os;
}

题目中的main函数:

#include <iostream>
#include "String.h"
using namespace std;
int main()
{
	String s1(" and I am a C++ student.");
	String s2 = "Please enter your name:";
	String s3;
	cout << s2;
	cin >> s3;
	s2 = "My name is " + s3;
	cout << s2 << ".\n";
	s2 = s2 + s1;
	s2.StringUp();
	cout << "The string\n" << s2 << "\ncontains " << s2.Has('A')
		<< "'A'characters in it.\n ";
	s1 = "red";
	String rgb[3] = { String(s1),String("green"),String("blue") };
	cout << "Enter the name of a primary color for mixing light:";
	String ans;
	bool success = false;
	while (cin>>ans)
	{
		ans.StringLow();
		for (int i = 0; i < 3; ++i) {
			if (ans == rgb[i]) {
				cout << "That's right!\n";
				success = true;
				break;
			}
		}
		if (success)
			break;
		else
			cout << "Try again!\n";
	}
	cout << "Bye!\n";
	return 0;
}

3.stock.h:

#pragma once
#include <iostream>
using namespace std;

class Stock
{
public:
	Stock();
	Stock(const char* co, long n = 0, double pr = 0.0);
	~Stock();
	void Buy(long num, double price);
	void Sell(long num, double price);
	void Update(double price);
	void Show()const;
	const Stock& Top(const Stock& s)const;

	friend ostream& operator<<(ostream& os, const Stock& st);
private:
	char* m_c_company;
	int m_n_shares;
	double m_d_shares;
	double m_d_total;
	void set_total() { m_d_total = m_n_shares * m_d_shares; }
};

stock.cpp:

#include "Stock.h"
Stock::Stock()
{
	//m_str_company = "no names";
	m_c_company = new char[1];
	m_c_company[0] = '\0';
	m_n_shares = 0;
	m_d_shares = 0;
	m_d_total = 0;
}

Stock::~Stock()
{
	delete[] m_c_company;
	m_c_company = NULL;
}
Stock::Stock(const char* co, long n, double pr) {
	int len = strlen(co);
	m_c_company = new char[len+1];
	strcpy_s(m_c_company, len + 1, co);
	m_c_company[len] = '\0';
	if (n < 0) {
		cout << "Number of shares can't be nagative;" << m_c_company << " shares set to 0.\n";
	}
	else
		m_n_shares = n;
	m_d_shares = pr;
	set_total();
}

void Stock::Buy(long num, double price) {
	if(num<0)
		cout << "Number of shares can't be nagative;" << "Transaction is aborted.\n";
	else {
		m_n_shares += num;
		m_d_shares = price;
		set_total();
	}
}
void Stock::Sell(long num, double price) {
	if (num < 0)
		cout << "Number of shares can't be nagative;" << "Transaction is aborted.\n";
	else if (num > m_n_shares) {
		cout << "You can't sell more than you have!" << "Transaction is aborted.\n";
	}
	else {
		m_n_shares -= num;
		m_d_shares = price;
		set_total();
	}
}
void Stock::Update(double price) {
	m_d_shares = price;
	set_total();
}
const Stock& Stock::Top(const Stock& s)const {
	if (s.m_d_total > m_d_total)
		return s;
	else
		return *this;
}
ostream& operator<<(ostream& os, const Stock& st) {
	ios_base::fmtflags orig = os.setf(ios_base::fixed, ios_base::floatfield);
	streamsize prec = os.precision(3);
	os << "Company: " << st.m_c_company << " Shares: " << st.m_n_shares << endl;
	os << " Share Price:$" << st.m_d_shares;
	os.precision(2);
	os << " Total Worth:$" << st.m_d_total << endl;
	os.setf(orig, ios_base::floatfield);
	os.precision(prec);
	return os;
}

4.stack.cpp

#include "Stack.h"
Stack::~Stack()
{
	delete[] m_p_items;
	m_p_items = nullptr;
}
Stack::Stack(int n ) {
	m_p_items = new Item[n];
	m_n_size = n;
	m_n_top = 0;
}
Stack::Stack(const Stack& st) {
	m_n_size = st.m_n_size;
	m_n_top = st.m_n_top;
	m_p_items = new Item[m_n_size];
	for (int i = 0; i < m_n_top; ++i) {
		m_p_items[i] = st.m_p_items[i];
	}
}
bool Stack::IsEmpty()const {	return m_n_top == 0;}
bool Stack::IsFull()const { return m_n_size == m_n_top; }
bool Stack::Push(const Item& item) {
	if (IsFull())
		return false;
	m_p_items[m_n_top] = item;
	m_n_top++;
	return true;
}
bool Stack::Pop(Item& item) {
	if (IsEmpty())
		return false;
	m_n_top--;
	item = m_p_items[m_n_top];
	return true;
}
Stack& Stack::operator=(const Stack& st) {
	m_n_size = st.m_n_size;
	m_n_top = st.m_n_top;
	m_p_items = new Item[m_n_size];
	for (int i = 0; i < m_n_top; ++i)
		m_p_items[i] = st.m_p_items[i];
	return *this;
}

main函数:

#include <iostream>
#include "Stack.h"
using namespace std;
int main()
{

	Stack stack1;
	Stack stack2(5);
	for (int i = 0; i < 5; ++i)
		stack2.Push(i);
	Stack stack3(stack2);
	if (stack2.Push(10))
		cout << "stack2 is full!\n";
	Stack stack4 = stack2;
	for (int i = 0; i < 6; ++i) {
		Item item;
		if (!stack4.Pop(item))
			cout << "stack4 is already empty,it can't pop!\n";
		else
			cout << "stack4 pop " << item << endl;
	}
	return 0;
}

题目中给出的stack.h:

#pragma once
typedef unsigned long Item;
class Stack
{
public:
	Stack(int n = MAX);
	Stack(const Stack& st);
	~Stack();
	bool IsEmpty()const;
	bool IsFull()const;
	bool Push(const Item& item);
	bool Pop(Item& item);
	Stack& operator=(const Stack& st);
private:
	enum {MAX = 10};
	Item* m_p_items;
	int m_n_size;
	int m_n_top;
};

5.题目有问题,应为“希望排队时间不超过1分钟”。按照书中,queue.h:

#pragma once
class Customer
{
public:
  Customer() { arrive = processtime = 0; }
  void set(long when) {
    processtime = std::rand() % 3 + 1;
    arrive = when;
  }
  long when()const { return arrive; }
  int ptime()const { return processtime; }
private:
  long arrive;
  int processtime;
};
typedef Customer Item;

class Queue
{
  struct Node
  {
    Item item;
    struct  Node* next;
  };
  enum { Q_SIZE = 10 };
  Queue(const Queue& q):qsize(0){}
  Queue & operator=(const Queue& q) { return *this; }
public:
  Queue(int qs = Q_SIZE);
  ~Queue();
  bool isfull();
  bool isempty();
  int queuecount()const;
  bool enqueue(const Item& item);
  bool DeleteFirstFromQueue(Item& item);

  private:
  Node * front;
  Node* rear;
  int items;
  const int qsize;
};

queue.cpp:

#include <cstdlib>
#include "Queue.h"

Queue::~Queue()
{
  Node* temp;
  while (front != NULL)
  {
    temp = front;
    front = front->next;
    delete temp;
  }
}

Queue::Queue(int qs):qsize(qs)
{
  front = rear = NULL;
  items = 0;
}
bool Queue::isfull() { return items == qsize; }
bool Queue::enqueue(const Item& item)
{
  if (isfull())
    return false;
  Node* add = new Node;
  add->item = item;
  add->next = NULL;
  items++;
  if (front == NULL)
    front = add;
  else
    rear->next = add;
  rear = add;
  return true;
}
bool Queue::DeleteFirstFromQueue(Item& item) {
  if (front == NULL)
    return false;
  item = front->item;
  items--;
  Node* temp = front;
  front = front->next;
  delete temp;
  if (items == 0)
    rear = NULL;
  return true;
}
bool Queue::isempty() { return items == 0; }
int Queue::queuecount()const { return items; }

main函数:

#include <iostream>
#include <ctime>
#include "Queue.h"
using namespace std;
const int MIN_PER_HR = 60;
bool newcustomer(double x) { return (std::rand()*x / RAND_MAX < 1); }
int main()
{
	srand(time(0));
	cout << "Case Study:Banck of Heather Automatic Teller\n";
	cout << "Enter maximum size of queue:";
	int qs;
	cin >> qs;
	Queue line(qs);
	cout << "Set simulation hours: 100\n";
	int hours = 100;
	long cyclelimit = MIN_PER_HR * hours;
	double perhour = 15;
	double min_per_cust;
	Item temp;
	long turnaway = 0;
	long customers = 0;
	long served = 0;
	long sum_line = 0;
	int wait_time = 0;
	long line_wait = 0;
	double average_wait = 0;
	do {
		min_per_cust = MIN_PER_HR / perhour;
		turnaway = 0;
		customers = 0;
		served = 0;
		sum_line = 0;
		wait_time = 0;
		line_wait = 0;
		average_wait = 0;
		while (!line.isempty())
		{
			line.DeleteFirstFromQueue(temp);
		}

		for (int cycle = 0; cycle < cyclelimit; ++cycle) {
			if (newcustomer(min_per_cust)) {
				if (line.isfull())
					turnaway++;
				else {
					customers++;
					temp.set(cycle);
					line.enqueue(temp);
				}
			}
			if (wait_time <= 0 && !line.isempty()) {
				line.DeleteFirstFromQueue(temp);
				wait_time = temp.ptime();
				line_wait += cycle - temp.when();
				served++;
			}
			if (wait_time > 0)
				wait_time--;
			sum_line += line.queuecount();
		}
		if (served > 0)
			average_wait = (double)line_wait / served;
		cout << "第" << perhour - 14 << "次实验的平均等候时间为:" << average_wait << "分钟,每小时到达的客户数为:" << perhour << "个。\n";
		perhour++;
	} while (average_wait <1);
	return 0;
}

结果为:

6.main函数:

#include <iostream>
#include <ctime>
#include "Queue.h"
using namespace std;
const int MIN_PER_HR = 60;
bool newcustomer(double x) { return (std::rand()*x / RAND_MAX < 1); }
int main()
{
srand(time(0));
	cout << "Case Study:Banck of Heather Automatic Teller\n";
	cout << "Enter maximum size of queue:";
	int qs;
	cin >> qs;
	Queue line(qs);
	Queue line2(qs);
	cout << "Set simulation hours: 100\n";
	int hours = 100;
	long cyclelimit = MIN_PER_HR * hours;
	double perhour = 30;
	double min_per_cust;
	Item temp;
	long turnaway = 0;
	long customers = 0;
	long served = 0;
	long sum_line = 0;
	int wait_time = 0;
	int wait_time2 = 0;
	long line_wait = 0;
	double average_wait = 0;
	do {
		min_per_cust = MIN_PER_HR / perhour;
		turnaway = 0;
		customers = 0;
		served = 0;
		sum_line = 0;
		wait_time = 0;
		wait_time2 = 0;
		line_wait = 0;
		average_wait = 0;
		while (!line.isempty())
		{
			line.DeleteFirstFromQueue(temp);
		}
		while (!line2.isempty())
		{
			line2.DeleteFirstFromQueue(temp);
		}
		for (int cycle = 0; cycle < cyclelimit; ++cycle) {
			if (newcustomer(min_per_cust)) {
				if (line.isfull()&&line2.isfull())
					turnaway++;
				else {
					customers++;
					temp.set(cycle);
					if (line.queuecount() < line2.queuecount())
						line.enqueue(temp);
					else
						line2.enqueue(temp);
				}
			}
			if (wait_time <= 0 && !line.isempty() ) {
				line.DeleteFirstFromQueue(temp);
				wait_time = temp.ptime();
				line_wait += cycle - temp.when();
				served++;
			}
			if (wait_time2 <= 0 && !line2.isempty()) {
				line2.DeleteFirstFromQueue(temp);
				wait_time2 = temp.ptime();
				line_wait += cycle - temp.when();
				served++;
			}
			if (wait_time > 0)
				wait_time--;
			if (wait_time2 > 0)
				wait_time2 -- ;
			sum_line += line.queuecount()+line2.queuecount();
		}
		if (served > 0)
			average_wait = (double)line_wait / served;
		cout << "第" << perhour - 14 << "次实验的平均等候时间为:" << average_wait << "分钟,每小时到达的客户数为:" << perhour << "个。\n";
		perhour--;
	} while (average_wait > 1);

	return 0;
}

 

C++ Primer Plus(第六版)编程练习答案 所有章节汇总 本博客汇总了本人历时一年学完《C++ Primer Plus (第6版)》所做的所有编程练习的答案,供大家学习参考和交流。 以下附上各章节的答案详解博客地址,以及源码工程下载地址。 PS:源码下载大部分都是需要积分的,当时设置的时候好像有点乱,有的是1积分,有的是3积分,最难的第12章和第13章我设置的是不要积分,大家都可以下载下来自己运行一下看看结果。 第 2 章 开始学习C++: ... 阅读详情

相关推荐

C++ Primer Plus(第六版)编程练习答案 第3章 处理数据

本章所有编程练习的工程源码可在此处下载(点击打开下载链接),供大家参考交流!   1. 编写一个小程序,要求用户使用一个整数指出自己的身高(单位为英寸),然后将身高转换为英尺和英寸,该程序使用下划线字符来指示输入位置。另外,使用一个const符号常量来表示转换因子。 本题要求将输入数据转换为不同的表达方式,使用不同的单位。而从单位为英寸,转换为英单位是尺和英寸,就是将原值除以转换比例之间,得...

清水河C罗——Leonardo-Liu 7499

【C++ Primer Plus】第12章 类和动态内存分配

对类成员使用动态内存分配。 隐式和显式复制构造函数。 隐式和显式重载赋值运算符。 在构造函数中使用new所必须完成的工作。 使用静态类成员。 将定位new运算符用于对象。 使用指向对象的指针。 实现队列抽象数据类型(ADT)。

chaiky的博客 1616

C++ Primer Plus(第六版)编程练习答案 第8章 函数探幽

本章所有编程练习的工程源码可在此处下载(点击打开下载链接),供大家参考交流!   1. 编写通常接受一个参数(字符串的地址),并打印该字符串的函数。然而,如果提供了第二个参数(int类型),且该参数不为0,则该函数打印字符串的次数将为该函数被调用的次数(注意,字符串的打印次数不等于第二个参数的值,而等于函数被调用的次数)。是的,这是一个非常可笑的函数,但它让您能够使用本章介绍的一些技术。在一个...

清水河C罗——Leonardo-Liu 5710

c++ primer plus学习笔记_第12章 类和动态内存分配

c++ primer plus>第六版。

编程驴子的博客 2451

cpp-CPrimerPlus6th中文版章后编程练习解答

C Primer Plus 6th 中文版章后编程练习解答

cpp练习答案

C  Primer  Plus  Sixth  Edition  Programming  Exercise  Selected  Answers   1 Chapter  2  Programming  Exercises     PE  2-­‐1   /* Programming Exercise 2-1 */ #include int main(void) { printf("Gustav Mahler\n"); printf("Gustav\nMahler\n"); printf("Gustav "); printf("Mahler\n"); return 0; }

《C++ Primer Plus》第12章:类和动态内存分配(2)

在构造函数中使用new

weixin_40064300的博客 498

《C++程序设计实践教程》(任志鸿版)第12章实验结果.docx

C++11 标准,gcc编译 内含自己写的代码及实验结果,仅供参考, 有问题也可以交流mail:1356199860@qq.com

《C++ Primer Plus》第12章:类和动态内存分配(1)

主要讲了复制构造函数和赋值运算符重载

weixin_40064300的博客 499

(篇八)C语言在母串删子串、输入位置截取子串

文章目录一、字符串二、删除指定的字符三、从母串中截取子串四、输入位置截取子串 本篇主要介绍C语言字符串中的相关操作,然后分析两个C语言实例——在母串中指定删除子串、在母串中截取子串 一、字符串 了解C 语言的都知道,C语言中没有字符串类型,所以C语言是用字符串常量、字符指针、字符数组来表示字符串。这些字符串都是以 NULL、’\0’或者ASCII==0来结尾。说白了就是一个个字符组成一串有序序列,...

Viewinfinitely的博客 1512

机器视觉学习(七)—— 卷积、边缘和滤波器

卷积运算、垂直边缘与水平边缘、滤波器

歆歆~黯了 2740

C++ primer plus 第六版 第十二章 编程练习答案

第十二章 编程练习答案 1. //头文件 #ifndef COW_H_ #define COW_H_ class Cow{ private: char name[20]; char * hobby; double weight; public: Cow(); Cow(const char * nm, const char * ho, double wt...

菜鸡harry的博客 3829

妙算(manifold-2G)通过网线连接笔记本实现静态ip上网

本质就是共享笔记本wifi,配置以太网静态ip,然后在工控机上连接

slender_1031的博客 903

C++ primer Plus(第六版)中文版 编程练习答案 目录(已更新完2~12章)

C++ primer Plus(第六版)编程练习答案 目录(已更新完2~12章) 第二章 开始学习C++ 编程练习答案 https://blog.youkuaiyun.com/weixin_42411044/article/details/85106794 第三章 处理数据 编程练习答案 https://blog.youkuaiyun.com/weixin_42411044/article/details/85...

AirHead 1753

将pytorch的权值矩阵量化为定点数补码并导入FPGA中

Xilinx FPGA实现LSTM算法时对ROM的初始化 将pytorch框架的权重矩阵以定点数补码的形式导入到FPGA中 文章目录Xilinx FPGA实现LSTM算法时对ROM的初始化1. pytorch框架中的LSTM2. 初始化一个RNN模型 3. 初始化ROM的coe文件格式 4. 将参数转换为补码,并且输出到coe文件 5. 配置一个ROM 6. 结论7. 代码 1. pytorch框架中的LSTM pytorch框架将LSTM算法中的八个权值矩阵连接成两个矩阵,假设要导入的LSTM网络的输

随缘分享 4528

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 133

C.Primer.Plus(第六版)第12章 编程练习

//12.1// cow.h #ifndef COW__H__ #define COW__H__ class Cow { private: static const int N = 20; char name[N]; char *hobby; double weight; public: Cow(); Cow(const char* nm,const

mmdnxh的博客 574

GD32主程序跑飞?可能是BOOT0引脚惹的祸(附J-LINK调试实录)

本文针对GD32微控制器程序下载后无法运行的典型问题,深入剖析了BOOT0引脚配置对启动模式的关键影响。通过结合J-LINK调试器与KEIL MDK环境,详细演示了如何从程序跑飞现象(如PC指向0x1FFF Fxxx)定位到硬件层面的BOOT0引脚与VDD短路故障,并提供了系统的硬件排查步骤与设计预防建议。

d6e7f8的博客 704

C++ primer plus(第六版)编程练习答案 第12章 类和动态内存分配

根据实际情况可知,每小时到达的客户数目越多,则平均等候时间越长,若要求平均等候时间为1分钟(即平均等候时间不超过1分钟时的临界情况)对应的每小时到达客户数,则我们可以让程序从每小时客户数从1开始计算(不小于100小时)其对应的平均排队时间,直到平均等待时间刚好超过1分钟的时候停止,此时对应的客户数(或者对应客户数-1)即为答案。请重新编写方法,以适应这种新的表示法,并编写一个程序来演示所有的方法,包括复制构造函数和赋值运算符。定义一个复制构造函数,使初始化复制指针指向的数据,而不是复制指针指向的地址。

吻等离子的博客 1131

[Linux外设驱动详解]RK3588 U-Boot网络功能深度分析

本文深入分析了RK3588平台上U-Boot的网络功能实现,主要内容包括: 网络架构:详细剖析了从硬件层到协议层的完整网络栈架构,包括GMAC驱动、TFTP/NFS启动、网络命令等关键组件。 驱动实现:重点介绍了RK3588 GMAC驱动结构,包含关键数据结构、专用操作函数集、设备树兼容性配置和GRF寄存器设置。 功能实现:详细说明了驱动初始化流程、RGMII速度适配机制以及PHY接口配置过程。 高级特性:涵盖了网络启动功能、镜像更新和MAC地址传递到Linux内核的机制。 文档通过代码片段和流程图清晰展示

Just Linux! 1115

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

C++ Primer Plus(第六版)中文版编程练习答案

53 C++ Primer Plus(第六版)第十二章 编程练习答案1BankAccount.hBankAccount.cppBankAccount.cpp2BankAccount.hBankAccount.cppBankAccount.cpp3BankAccount.hBankAccount.cppBankAccount.cpp4BankAccount.hBankAccount.cppBankAccount.cpp5BankAccount.hBankAccount.cppBankAccount.cpp6B

yuandenixin的博客 304

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++ Primer Plus(第六版)第12章课后编程答案

1. #ifndef QUEUE_H_ #define QUEUE_H_ class Cow { private: char name[20]; char *hobby; double weight; public: Cow(); Cow(const char *num, const char *ho, double wt); Cow(const Cow &amp; c); ~...

云中自有锦书 925

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

c++ Primer Plus(第六版)第十二章习题,写代码之路

c++ Primer Plus(习题12.1) //12.1头文件 #pragma once #ifndef COW_H #define COW_H #include #include class Cow { private: char name[20]; char *hobby; double weight; public: Cow(); Cow(const char* nm, co

Robot_x的博客 1514

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

c++ primer plus 第六版第十二章编程练习

12.1 //Cow.h class Cow { char name[20]; char *hobby; double weight; public: Cow(); Cow(const char*nm, const char *ho, double wt); Cow(const Cow &amp;c); ~Cow(); Cow&amp;operator=(const Cow &...

Schlangemm的博客 345

C++ Primer Plus 第六版 所有章节课后编程练习答案

C++ Primer Plus 第六版 所有章节课后编程练习答案

xiaojimmychen的专栏 9万+
上一篇: C++primer plus第六版第11章编程练习
下一篇: 敏捷软件开发第26章STAIRWAY TO HEAVEN设计模式C++源码
possible1990
博客等级 码龄17年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值