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


    第一题

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

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

    直接上答案:

    1. int hmean(const int x, const int y, float* r){
    2. if(x+y==0)
    3. return 0;
    4. else{
    5. *r=2.0*x*y/(x+y);
    6. return 1;
    7. }
    8. }

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

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

    直接上答案:

    1. int hmean(const int x, const int y, float& r){
    2. if(x+y==0)
    3. return 0;
    4. else{
    5. r=2.0*x*y/(x+y);
    6. return 1;
    7. }
    8. }

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

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

    直接上答案:

    1. void getTime(int* h, int* m, int* s) {
    2. time_t timer;
    3. struct tm* tblock;
    4. timer = time(NULL);
    5. tblock = localtime(&timer);
    6. *h = tblock->tm_hour;
    7. *m = tblock->tm_min;
    8. *s = tblock->tm_sec;
    9. }

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

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

    直接上答案:

    1. unsigned int strLength(const char* s){
    2. unsigned int len = 0;
    3. while (*s != '\0') {
    4. len++;
    5. s++;
    6. }
    7. return len;
    8. }

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

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

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

    直接上答案:

    1. void strAppend(char *d, char *s) {
    2. // 找到字符串d的末尾
    3. while (*d != '\0') {
    4. d++;
    5. }
    6. // 将字符串s复制到字符串d的末尾
    7. while (*s != '\0') {
    8. *d = *s;
    9. d++;
    10. s++;
    11. }
    12. // 在字符串d的末尾添加'\0'
    13. *d = '\0';
    14. }

     

    第六关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地址按通常格式输出。

    直接上答案:

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

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

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

    直接上答案:

    1. void getTime(int& h, int& m, int& s) {
    2. time_t now = time(0);
    3. tm* currentTime = localtime(&now);
    4. h = currentTime->tm_hour;
    5. m = currentTime->tm_min;
    6. s = currentTime->tm_sec;
    7. }

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

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

    直接上答案:

    1. void splitfloat( float x, int *intpart, float *fracpart )
    2. {
    3. *intpart = (int)x;
    4. *fracpart = x - *intpart;
    5. }

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

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

    直接上答案

    1. int insert(int a[ ], int value) {
    2. int i = 0;
    3. for (i = 0; i < Count; i++)
    4. if (a[i] == value)
    5. return -1;
    6. i = 0;
    7. while (i < Count ) {
    8. if (a[i] > value)
    9. break;
    10. i++;
    11. }
    12. if (i == Count)
    13. a[i] = value;
    14. else {
    15. int tmp1 = a[i], tmp2;
    16. a[i] = value;
    17. while (i < Count) {
    18. i++;
    19. tmp2 = a[i];
    20. a[i] = tmp1;
    21. tmp1 = tmp2;
    22. }
    23. }
    24. Count++;
    25. return 1;
    26. }
    27. int del(int a[ ], int value) {
    28. int i = 0, j = 0, flag = 1;
    29. for (i = 0; i < Count; i++) {
    30. if (a[i] == value) {
    31. for (j = i; a[j] != '\0'; j++)
    32. a[j] = a[j + 1];
    33. flag = 0;
    34. }
    35. }
    36. if (flag)
    37. return -1;
    38. Count--;
    39. return 1;
    40. }
    41. int modify(int a[ ], int value1, int value2) {
    42. int i, flag = 1;
    43. for (i = 0; i < Count; i++) {
    44. if (a[i] == value2)
    45. return -1;
    46. if (a[i] == value1)
    47. flag = 0;
    48. }
    49. if (flag)
    50. return -1;
    51. for (i = 0; i < Count; i++)
    52. if (a[i] == value1) {
    53. a[i] = value2;
    54. break;
    55. }
    56. for (i = 0; i < Count; i++)
    57. for (int j = i + 1; j < Count; j++)
    58. if (a[j] < a[i]) {
    59. int tmp = a[j];
    60. a[j] = a[i];
    61. a[i] = tmp;
    62. }
    63. return 1;
    64. }
    65. int query(int a[ ], int value) {
    66. int before = 0, after = Count - 1;
    67. while (before <= after) {
    68. int mid = (before + after) / 2;
    69. if (a[mid] > value)
    70. after = mid - 1;
    71. else if (a[mid] < value)
    72. before = mid + 1;
    73. else
    74. return mid;
    75. }
    76. return -1;
    77. }

    第十关6-10 链表拼接

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

    直接上答案

    1. struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2){
    2. struct ListNode *list=(struct ListNode *)malloc(sizeof(struct ListNode ));
    3. struct ListNode *l=list;
    4. while(list1!=NULL&&list2!=NULL){
    5. if(list1->data<list2->data){
    6. list->next=list1;
    7. list1=list1->next;
    8. list=list->next;
    9. }else{
    10. list->next=list2;
    11. list2=list2->next;
    12. list=list->next;
    13. }
    14. }
    15. while(list1!=NULL){
    16. list->next=list1;
    17. list1=list1->next;
    18. list=list->next;
    19. }while(list2!=NULL){
    20. list->next=list2;
    21. list2=list2->next;
    22. list=list->next;
    23. }return l->next;
    24. }

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

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

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

    直接上答案

    1. #include<iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. unsigned int v;
    6. cin >> v;
    7. cout << hex;
    8. cout << v << endl;
    9. unsigned char* p = (unsigned char*)&v;
    10. for (int i = 0; i < 4; i++)
    11. {
    12. cout << int(p[i]);
    13. if (i != 3)
    14. {
    15. cout << " ";
    16. }
    17. }
    18. return 0;
    19. }

  • 相关阅读:
    自定义注解+AOP解决重复提交的问题
    同事:这个页面的逻辑没什么能复用的,不抽组件也没什么影响吧?
    MATLAB——一维离散小波的单层分解
    spring面试题
    阿里后端开发:抽象建模经典案例
    Java基础知识面试题
    docker镜像命令
    写一个flutter程序
    Shell编程-02-正则表达式
    MySQL入门:数据库是什么 | SQL是什么 | MySQL是什么
  • 原文地址:https://blog.csdn.net/qq_65628600/article/details/134478808