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

PTA平台-2023年软件设计综合实践_5(指针及引用)

第一题

6-1 调和平均 - C/C++ 指针及引用

函数hmean()用于计算整数x和y的调和平均数,结果应保存在指针r所指向的浮点数对象中。当x+y等于0时,函数返回0表示无法计算,否则返回1。数学上,两个数x和y的调和平均数 z = 2xy/(x+y) 。

直接上答案:

int hmean(const int x, const int y, float* r){if(x+y==0)return 0;else{*r=2.0*x*y/(x+y);return 1;}
}

第二关6-2 调和平均-引用 - C/C++ 指针及引用

函数hmean()用于计算整数x和y的调和平均数,结果应保存在参数r所引用的浮点数对象中。当x+y等于0时,函数返回0表示无法计算,否则返回1。数学上,两个数x和y的调和平均数 z = 2xy/(x+y) 。

直接上答案:

int hmean(const int x, const int y, float& r){if(x+y==0) return 0;else{r=2.0*x*y/(x+y); return 1;}
}

第三关地球时间 - C/C++ 指针及引用

(地球时间)以第3章微实践-地球时间的代码为基础,实现下述getTime()函数,将当前小时、分钟和秒数写入指针h、m和s指向的整数对象

直接上答案:

void getTime(int* h, int* m, int* s) {time_t timer;struct tm* tblock;timer = time(NULL);tblock = localtime(&timer);*h = tblock->tm_hour;*m = tblock->tm_min;*s = tblock->tm_sec;
}

 第四关6-4 字符串长度 - C/C++ 指针及引用

strLength()函数用于统计指针s所指向的以0结尾的字符串的长度(字符个数),请实现该函数,使得下述程序可以正确运行。注意不能使用原生的strlen()函数。

直接上答案:

unsigned int strLength(const char* s){unsigned int len = 0;while (*s != '\0') {len++;s++;}return len;
}

第五关6-5 字符串拼接 - C/C++ 指针及引用

函数strAppend(d,s)将以0结尾的字符串s附加到以0结尾的字符串d之后。请实现该函数,使得后续程序可以正确运行。注意不能使用原生的strcat()函数。

示例:指针d所指向的字符串"hello"在附加字符串"world"后变为"helloworld"。

直接上答案:

void strAppend(char *d, char *s) {// 找到字符串d的末尾while (*d != '\0') {d++;}// 将字符串s复制到字符串d的末尾while (*s != '\0') {*d = *s;d++;s++;}// 在字符串d的末尾添加'\0'*d = '\0';
}

 

第六关6-6 IPv4地址 - C/C++ 指针及引用

一个IPv4地址可用一个4字节的无符号整数来表示。下述setByte(ip,idx,v)函数负责将指针ip所指向的IP地址的第idx个字节修改为v,其中,idx取值0到3。请实现该函数,使得下述程序可以正常运行。
该程序通过4次调用该函数将一个ip地址设置为192.168.0.1,然后将整个ip地址按通常格式输出。

直接上答案:

void setByte(unsigned char *ip, int idx, unsigned char v) {ip[idx] = v;
}

第七关6-7 地球时间-引用 - C/C++ 指针及引用

(地球时间)以第3章微实践-地球时间的代码为基础,实现下述getTime()函数,将当前小时、分钟和秒数写入参数h、m和s所引用的整数对象。

直接上答案:

void getTime(int& h, int& m, int& s) {time_t now = time(0);tm* currentTime = localtime(&now);h = currentTime->tm_hour;m = currentTime->tm_min;s = currentTime->tm_sec;
}

第八关6-8 拆分实数的整数与小数部分

本题要求实现一个拆分实数的整数与小数部分的简单函数。

直接上答案:

void splitfloat( float x, int *intpart, float *fracpart )
{*intpart = (int)x;*fracpart = x - *intpart;
}

第九关6-9 有序表的增删改查操作

首先输入一个正整数N(1≤N≤1000)和一个无重复元素的、从小到大排列的、N个元素的有序表,然后在屏幕上显示以下菜单(编号和选项)。

直接上答案

 
int insert(int a[ ], int value) {int i = 0;for (i = 0; i < Count; i++)if (a[i] == value)return -1;i = 0;while (i < Count ) {if (a[i] > value)break;i++;}if (i == Count)a[i] = value;else {int tmp1 = a[i], tmp2;a[i] = value;while (i < Count) {i++;tmp2 = a[i];a[i] = tmp1;tmp1 = tmp2;}}Count++;return 1;
}int del(int a[ ], int value) {int i = 0, j = 0, flag = 1;for (i = 0; i < Count; i++) {if (a[i] == value) {for (j = i; a[j] != '\0'; j++)a[j] = a[j + 1];flag = 0;}}if (flag)return -1;Count--;return 1;
}int modify(int a[ ], int value1, int value2) {int i, flag = 1;for (i = 0; i < Count; i++) {if (a[i] == value2)return -1;if (a[i] == value1)flag = 0;}if (flag)return -1;for (i = 0; i < Count; i++)if (a[i] == value1) {a[i] = value2;break;}for (i = 0; i < Count; i++)for (int j = i + 1; j < Count; j++)if (a[j] < a[i]) {int tmp = a[j];a[j] = a[i];a[i] = tmp;}return 1;
}int query(int a[ ], int value) {int before = 0, after = Count - 1;while (before <= after) {int mid = (before + after) / 2;if (a[mid] > value)after = mid - 1;else if (a[mid] < value)before = mid + 1;elsereturn mid;}return -1;
}

第十关6-10 链表拼接

本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下:

直接上答案

struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2){struct ListNode  *list=(struct ListNode *)malloc(sizeof(struct ListNode ));struct ListNode  *l=list;while(list1!=NULL&&list2!=NULL){if(list1->data<list2->data){list->next=list1;list1=list1->next;list=list->next;}else{list->next=list2;list2=list2->next;list=list->next;}}while(list1!=NULL){list->next=list1;list1=list1->next;list=list->next;}while(list2!=NULL){list->next=list2;list2=list2->next;list=list->next;}return l->next;
}

第十一关7-1 无符号整数的内部结构 - C/C++ 指针及引用

无符号整数v由4个字节构成。请编程完成下述任务:

  1. 从键盘读取一个整数,存入unsinged int v;
  2. 以16进制格式打印v的值;
  3. 取v的地址,并强制类型转换成unsigned char*,然后通过这个地址/指针依次打印构成v的第0,第1,第2,第3个字节的16进制值。

直接上答案

#include<iostream>
using namespace std;
int main()
{unsigned int v;cin >> v;cout << hex;cout << v << endl;unsigned char* p = (unsigned char*)&v;for (int i = 0; i < 4; i++){cout << int(p[i]);if (i != 3){cout << " ";}}return 0;
}

http://www.lryc.cn/news/234329.html

相关文章:

  • 智慧卫生间
  • Cadence virtuoso drc lvs pex 无法输入
  • 反序列化漏洞(2), 分析调用链, 编写POC
  • Pytorch reshape用法
  • Latex 辅助写作工具
  • frp新版本frp_0.52.3设置
  • 100G.的DDoS高防够用吗?
  • 【django+vue】项目搭建、解决跨域访问
  • 【数据库】数据库连接池导致系统吞吐量上不去-复盘
  • 华纳云:租用的服务器连接超时怎么办?
  • 基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.17,PWM)
  • 编译buildroot出错,这个怎么解决呢,感谢
  • 【0基础学Java第十课】-- 认识String类
  • lxml基本使用
  • 【数据结构初阶】链表OJ
  • 【Vue渲染】 条件渲染 | v-if | v-show | 列表渲染 | v-for
  • 开源网安解决方案荣获四川数实融合创新实践优秀案例
  • debian/ubuntu/linux如何快速安装vscode
  • Python3语法总结-数据转换②
  • 【火炬之光-魔灵装备】
  • javascript选择器的封装,只需要写元素名或css类及id都可以选择到元素
  • 机器学习第7天:逻辑回归
  • 努力奋斗,遇上对的人
  • 基于单片机音乐弹奏播放DS1302万年历显示及源程序
  • ceph学习笔记
  • SQLSERVER 遍历循环的两种方式很详细有源码(2)
  • flutter背景图片设置
  • 【运维 监控】Grafana + Prometheus,监控Linux
  • Sentinel底层原理(下)
  • 竞赛选题 疫情数据分析与3D可视化 - python 大数据