当前位置: 首页 > 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.xdnf.cn/news/1215505.html

相关文章:

  • LLM 模型部署难题的技术突破:从轻量化到分布式推理的全栈解决方案
  • AutoSAR(MCAL) --- ADC
  • Linux虚拟内存
  • 【C#】DevExpress.XtraEditors.MemoEdit memoEditLog控件讲解
  • AI服务器中,EEPROM有哪些部件使用,需要存储哪些信息?
  • Syzkaller实战教程2:运行环境配置+实例运行
  • 在Trae中使用MoonBit月兔
  • Android调用python库和方法的实现
  • 三十四、【Linux常用工具】rsync+inotify实时同步演示
  • GitHub使用小记——本地推送、外部拉取和分支重命名
  • Camera相机人脸识别系列专题分析之十九:MTK ISP6S平台FDNode传递三方FFD到APP流程解析
  • git本地仓库,工作区和暂存区的知识
  • llama factory本地部署常见问题
  • 用Python+MySQL实战解锁企业财务数据分析
  • 会吸的簸箕专利拆解:迷你真空组件的吸力控制与吸入口设计原理
  • Redis学习------缓存穿透
  • 数据建模怎么落地?从概念、逻辑到物理模型,一文讲请!
  • Prometheus-2--什么是Exporter是什么?
  • Spring boot 打包成docker image 镜像
  • 数据结构第3问:什么是线性表?
  • (RedmiBook)上禁用触摸板或自带键盘
  • 4.方法的使用
  • OmniParser:提升工作效率的视觉界面解析工具
  • 【深度学习新浪潮】3D城市建筑多样化生产的研发进展调研
  • Kafka 单机多 Broker 实例集群搭建 | 详情
  • 【机器学习】机器学习新手入门概述
  • 如何将DICOM文件制作成在线云胶片
  • React 服务端渲染(SSR)详解
  • Java注解与反射:从自定义注解到框架设计原理
  • 构建智能体(Agent)时如何有效管理其上下文