作业社区
探索学习新天地,共享知识资源!
浪潮君 的学生作业:
#include class Test { private: int size; // 数组最大容量 int index; // 当前已插入元素数量 int *data; // 存储数据的数组指针 public: // 构造函数:分配数组空间并初始化变量 Test(int size) { this->size = size; // 设置容量 data = new int[size]; // 分配数组空间 index = 0; // 初始化插入索引 } // 析构函数:释放动态分配的数组 ~Test() { delete[] data; } // 插入函数:在数组未满时插入新值 void insert(int value) { if (index < size) { data[index++] = value; } else { std::cout
+10
浪潮君 的学生作业:
#include // 引入标准输入输出流库 #include // 引入 I/O 操作格式控制库,用于 setw 和 setfill // 定义一个表示时间的类 class Time { private: int hour; // 小时(取值范围:0~23) int minute; // 分钟(取值范围:0~59) int second; // 秒钟(取值范围:0~59) public: // 构造函数:将时间初始化为 00:00:00 Time() : hour(0), minute(0), second(0) { } // 设置时间,带输入合法性判断 void setTime(int h, int m, int s) { // 如果小时合法,设置为 h,否则归零 if (h >= 0 && h < 24) hour = h; else hour = 0; // 如果分钟合法,设置为 m,否则归零 if (m >= 0 && m < 60) minute = m; else minute = 0; // 如果秒数合法,设置为 s,否则归零 if (s >= 0 && s < 60) second = s; else second = 0; } // 输出时间,格式为 HH:MM:SS,自动补零 void displayTime() const { std::cout
+12
浪潮君 的学生作业:
space.h #ifndef SPACE_H #define SPACE_H namespace A_Space { int calc(int a, int b); // 加法 } namespace B_Space { int calc(int a, int b); // 减法 } #endif a.cpp #include "space.h" namespace A_Space { int calc(int a, int b) { return a + b; } } b.cpp #include "space.h" namespace B_Space { int calc(int a, int b) { return a - b; } } main.cpp #include #include "space.h" int main() { int x = 10, y = 5; std::cout
+13
浪潮君 的学生作业:
#include // 引入标准输入输出头文件,用于 printf、fprintf 等函数 #include // 引入标准库头文件,用于 atoi() 等函数 #include // 引入网络字节序转换相关函数头文件,如 inet_aton, htons, ntohs 等 int main(int argc, char *argv[]) { // 判断命令行参数数量是否正确,应为程序名 + IP + 端口,共 3 个参数 if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); // 使用说明 return 1; // 参数错误,返回非0表示程序失败 } // 1. IP 字符串转为网络字节序的 struct in_addr 结构体 struct in_addr ip_addr; // 用于存储网络字节序格式的 IPv4 地址 if (!inet_aton(argv[1], &ip_addr)) { // 将字符串 IP 转换为网络字节序存入 ip_addr fprintf(stderr, "Invalid IP address\n"); // 转换失败,提示错误 return 1; } // 2. 字符串端口转数字(atoi)并转换为网络字节序(htons) uint16_t port_net = htons(atoi(argv[2])); // 字符串转为整数,然后转换为大端格式 // 3. 输出网络字节序(原始格式,不适合人直接阅读) printf("Network Byte Order:\n"); printf(" IP: 0x%x\n", ip_addr.s_addr); // IP 输出为16进制的大端整数 printf(" Port: %u\n", port_net); // 端口以整数形式输出(实际是大端格式) // 4. 转回主机字节序并输出可读格式 printf("Host Byte Order:\n"); printf(" IP: %s\n", inet_ntoa(ip_addr)); // 将 IP 地址结构体转换为可读的字符串 printf(" Port: %u\n", ntohs(port_net)); // 将端口号从网络字节序还原为主机字节序 return 0; // 正常退出 }
+6
Linkus 的学生作业:
#include #include #include #include #include static int number = 0;//共享变量 static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; void *thread_handler(void *arg) { int cnt = atoi((char *)arg); int i,tmp; for(i = 0;i < cnt;i++){ pthread_mutex_lock(&mtx); printf("线程 [%ld] 生产一个产品,产品数量为:%d\n",pthread_self(),++number); pthread_mutex_unlock(&mtx); pthread_cond_signal(&cond); // 唤醒消费者线程 } pthread_exit((void *)0); } int main(int argc,char *argv[]) { pthread_t tid; int i; int err; int total_of_produce = 0;//总的生产产品的数量 int total_of_consume = 0;//总的消费产品的数量 bool done = false; for (i = 1;i < argc;i++){ total_of_produce += atoi(argv[i]); // 生产数量的总和 err = pthread_create(&tid,NULL,thread_handler,(void *)argv[i]); if (err != 0){ perror("[ERROR] pthread_create(): "); exit(EXIT_FAILURE); } } for (;;){ pthread_mutex_lock(&mtx); while(number == 0) // 当产品数量为 0时,让线程阻塞,并释放锁,这里一般设置循环,防止没有重新获取到锁 pthread_cond_wait(&cond,&mtx); while(number > 0){ total_of_consume++; // 消费产品总数 printf("消费一个产品,产品数量为:%d\n",--number); done = total_of_consume >= total_of_produce; // 判断消费者数量与产品数量 } pthread_mutex_unlock(&mtx); // 消费者消费完成之后,释放锁 if (done) break; }
+7