当前位置: 首页 > news >正文

C++代码题部分(1)

3.编程

3.1 实现一个函数可以打印下列数组的元素

测试用例 1
int main()
{int ar[]={1,2,3,4,5,6};double dr[]={12.23,34.45,56.67};char str[]={"yhping"};PrintAr(ar);PrintAr(dr);PrintAr(str);return 0;
}

测试用例 2
struct Student
{char s_name[20];int s_age;
};
int main()
{Student sar[]={{"yhping",12},{"tulun",23},{"yuntu",16}};PrintAr(sar);return 0;
}

分析与实现:需实现模板函数 PrintAr,根据不同类型数组(基本类型数组、自定义结构体数组 )打印元素。利用 C++ 模板特性,自动适配不同类型。

#include <iostream>
#include <string.h>
using namespace std;// 处理基本类型数组
template <typename T>
void PrintAr(T arr[], int size) {for (int i = 0; i < size; ++i) {cout << arr[i] << " ";}cout << endl;
}// 处理 Student 结构体数组(也可通过模板特化更通用处理,这里简化演示 )
template <>
void PrintAr(Student arr[], int size) {for (int i = 0; i < size; ++i) {cout << "Name: " << arr[i].s_name << ", Age: " << arr[i].s_age << endl;}
}// 辅助函数,获取数组长度(针对静态数组,动态数组需传长度 )
template <typename T, int N>
int getArraySize(T (&arr)[N]) {return N;
}int main()
{int ar[] = {1,2,3,4,5,6};double dr[] = {12.23,34.45,56.67};char str[] = {"yhping"};// 调用时通过辅助函数传数组长度,或手动指定PrintAr(ar, getArraySize(ar));PrintAr(dr, getArraySize(dr));PrintAr(str, getArraySize(str));Student sar[] = {{"yhping",12},{"tulun",23},{"yuntu",16}};PrintAr(sar, getArraySize(sar));return 0;
}

3.2 输入年月日时分秒

void PrintDate(const std::string &str)
{cout<<str<<endl; //显示为2022/09/19 02:07:48
}
int main()
{const string datetime;int year,month,day;int hour,minutes,seconds;cin>>year>>month>>day>>hour>>minutes>>seconds;//补充代码PrintDate(da);return 0;
}

需求扩展

  • 调用标准库 API 函数获取时间,打印为本地的日期和时间,格式同上
  • 调用标准库 API 函数获取时间,打印本世界标准时间 (UTC),格式同上
  • 探究是否可以获得高精度的时间,如:微秒或纳秒级别
  • 区分 time 与 clock 函数
    • time 函数:返回纪元开始经过的当前系统日历时间,从 UTC 1970 年 1 月 1 日 00:00 开始秒数的整数值
    • clock 函数:程序迄今为止所用的处理器时间(cup 时钟计时器所经过的时钟周期数 )。

实现代码

#include <iostream>
#include <string>
#include <ctime>
#include <sstream>
#include <<iomanip>
using namespace std;void PrintDate(const string &str) {cout << str << endl;
}// 格式化时间为字符串,支持本地时间和 UTC 时间
string formatTime(tm *timeInfo, bool isUTC = false) {ostringstream oss;oss << setfill('0') << timeInfo->tm_year + 1900 << "/" << setw(2) << timeInfo->tm_mon + 1 << "/" << setw(2) << timeInfo->tm_mday << " " << setw(2) << timeInfo->tm_hour << ":" << setw(2) << timeInfo->tm_min << ":" << setw(2) << timeInfo->tm_sec;return oss.str();
}int main()
{// 手动输入年月日时分秒场景const string datetime;int year, month, day;int hour, minutes, seconds;cout << "请输入年月日时分秒(空格分隔):";cin >> year >> month >> day >> hour >> minutes >> seconds;tm inputTime = {};inputTime.tm_year = year - 1900;inputTime.tm_mon = month - 1;inputTime.tm_mday = day;inputTime.tm_hour = hour;inputTime.tm_min = minutes;inputTime.tm_sec = seconds;// 转换为时间戳(假设输入合法,实际需校验 )time_t inputTimeStamp = mktime(&inputTime);tm *localTime = localtime(&inputTimeStamp);tm *utcTime = gmtime(&inputTimeStamp);PrintDate(formatTime(localTime)); PrintDate(formatTime(utcTime, true)); // 获取当前系统本地时间和 UTC 时间time_t now = time(nullptr);tm *localNow = localtime(&now);tm *utcNow = gmtime(&now);cout << "当前本地时间:" << formatTime(localNow) << endl;cout << "当前 UTC 时间:" << formatTime(utcNow, true) << endl;// 高精度时间(C++11 及以上,利用 <chrono> )#if __cplusplus >= 201103L#include <chrono>auto nowHighRes = chrono::high_resolution_clock::now();auto duration = nowHighRes.time_since_epoch();long long microseconds = chrono::duration_cast<chrono::microseconds>(duration).count();long long nanoseconds = chrono::duration_cast<chrono::nanoseconds>(duration).count();cout << "高精度时间(微秒):" << microseconds << " 微秒" << endl;cout << "高精度时间(纳秒):" << nanoseconds << " 纳秒" << endl;#elsecout << "编译器不支持 C++11 及以上,无法演示高精度时间获取" << endl;#endif// 区分 time 和 clock 函数time_t te = time(nullptr);clock_t ck = clock();cout << "time 函数获取的时间戳:" << te << " 秒(纪元到当前系统日历时间 )" << endl;cout << "clock 函数获取的处理器时间:" << ck << " tick 数(程序所用处理器时间 )" << endl;return 0;
}

3.3 输入数字,输出对应的字符串

typedef enum LOG_LEVEL
{TRACE = 0, // 跟踪,追踪DEBUG,     // 调试INFO,      // 信息WARN,      // 警告ERROR,     // 错误FATAL,     // 致命错误NUM_LOG_LEVELS, // 日志级别数
} LOG_LEVEL;

需求:输入数字(如 0 输出 "TRACE",2 输出 "INFO" ),输出对应的字符串。

实现代码

#include <iostream>
#include <string>
using namespace std;typedef enum LOG_LEVEL
{TRACE = 0,   // 跟踪,追踪DEBUG,       // 调试INFO,        // 信息WARN,        // 警告ERROR,       // 错误FATAL,       // 致命错误NUM_LOG_LEVELS, // 日志级别数
} LOG_LEVEL;string getLogLevelStr(LOG_LEVEL level) {switch (level) {case TRACE:   return "TRACE";case DEBUG:   return "DEBUG";case INFO:    return "INFO";case WARN:    return "WARN";case ERROR:   return "ERROR";case FATAL:   return "FATAL";default:      return "UNKNOWN";}
}int main() {int input;cout << "请输入日志级别数字(0 - " << NUM_LOG_LEVELS - 1 << "):";cin >> input;if (input < 0 || input >= NUM_LOG_LEVELS) {cout << "输入无效,范围应为 0 到 " << NUM_LOG_LEVELS - 1 << endl;return 1;}LOG_LEVEL level = static_cast<LOG_LEVEL>(input);cout << "对应的字符串:" << getLogLevelStr(level) << endl;return 0;
}

3.4 动态创建二维数组

需求:输入行和列值,动态构建二维数组。

实现代码

#include <iostream>
using namespace std;int** create2DArray(int rows, int cols) {int** arr = new int*[rows];for (int i = 0; i < rows; ++i) {arr[i] = new int[cols];// 可初始化,如初始化为 0for (int j = 0; j < cols; ++j) {arr[i][j] = 0;}}return arr;
}void delete2DArray(int** arr, int rows) {for (int i = 0; i < rows; ++i) {delete[] arr[i];}delete[] arr;
}int main() {int rows, cols;cout << "请输入二维数组的行数和列数(空格分隔):";cin >> rows >> cols;int** arr = create2DArray(rows, cols);// 测试赋值for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {arr[i][j] = i * cols + j; }}// 打印二维数组cout << "动态创建的二维数组:" << endl;for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {cout << arr[i][j] << " ";}cout << endl;}delete2DArray(arr, rows);return 0;
}
http://www.lryc.cn/news/605268.html

相关文章:

  • 模型相关类代码回顾理解 | BatchNorm2d\fc.in_features\nn.Linear\torchsummary
  • c#_文件的读写 IO
  • C#_创建自己的MyList列表
  • 【36】C# WinForm入门到精通 —— flowLayoutPanel 控件 拖拽大小 “在父容器中停靠” ,“取消在父容器中停靠”
  • 独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升
  • Java内存模型(JMM)
  • 地图可视化实践录:显示高德地图和百度地图
  • ica1靶机攻略
  • C#垃圾回收机制:原理与实践
  • 分享一个FPGA寄存器接口自动化工具
  • 时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式
  • 做题笔记:某大讯飞真题28道
  • 万字深度详解DHCP服务:动态IP地址分配的自动化引擎
  • 100万QPS短链系统如何设计?
  • 基于C语言实现的KV存储引擎(一)
  • 3 运算符与表达式
  • 【CVPR2025】FlowRAM:用区域感知与流匹配加速高精度机器人操作策略学习
  • 架构实战——架构重构内功心法第一式(有的放矢)
  • 《Computational principles and challenges in single-cell data integration》
  • SpringMVC 6+源码分析(一)初始化流程
  • 2021 年 NOI 最后一题题解
  • 项目文档太多、太混乱怎么解决
  • C语言高级(构造数据类型)
  • 2020 年 NOI 最后一题题解
  • REST、GraphQL、gRPC、tRPC深度对比
  • 订阅区块,部署合约,加载合约
  • 颐顿机电携手观远BI数据:以数据驱动决策,领跑先进制造智能化升级
  • 流程制造的数字孪生:从黑箱生产到全息掌控
  • Linux c网络专栏第四章io_uring
  • Linux零基础Shell教学全集(可用于日常查询语句,目录清晰,内容详细)(自学尚硅谷B站shell课程后的万字学习笔记,附课程链接)