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

挑战指针题

  1. 利用指针变量将一个数组中的数据反向输出。

    #include <stdio.h>int main()
    {//定义数组int arr[] = {1,2,3,4,5};//定义指针指向数组首元素int *p = arr;//计算数组大小int len = sizeof(arr) / sizeof(arr[0]);//定义数组指向数组末尾元素int *q = arr + len - 1;while(p < q){int temp = *p;*p = *q;*q = temp;//指针移动p++;q--;}//遍历数组for(int i = 0;i<len;i++){printf("%d",arr[i]);}return 0;
    }
    

在这里插入图片描述

  1. 利用指针变量计算下标为奇数的数组的和;

    #include <stdio.h>int main()
    {int sum = 0;int arr[] = {1,2,3,4,5};int len = sizeof(arr) / sizeof(arr[0]);int *p = arr;for(int i = 0;i < len ;i++){if(arr[i] % 2 != 0)sum += *(p + i); }printf("下标是奇数和为:%d\n",sum);
    }
    

    在这里插入图片描述

  2. 确认整型,字符型,浮点型指针变量的大小;

    #include <stdio.h>int main()
    {int *int_p;float *float_p;char *char_p;printf("整型%zu字节\n",sizeof(int_p));printf("浮点型%zu字节\n",sizeof(float_p));printf("字节型%zu字节\n",sizeof(char_p));return 0;
    }
    

在这里插入图片描述
4. 利用指针变量输出字符数组中的所有字符。

#include <stdio.h>int main()
{char arr[] = "hihi,hi\0hihi,hi";char *p = arr;while(*p != '\0'){printf("%c",*p);p++;}printf("\n");return 0;
}

在这里插入图片描述

  1. 编写一个函数,用指针变量做参数,用于求出一个浮点型数组元素的平均值。

    #include <stdio.h>float _float_average(float *arr,int size)
    {//处理空数组的情况if (size <= 0)return 0.0f;float sum = 0.0f;for(int i = 0;i < size;i++){sum += *(arr + i);}return sum / size;
    }int main()
    {float arr[] = {1.2f,2.4f,4.5f};int size = sizeof(arr) / sizeof(arr[0]);float avg = _float_average(arr,size);printf("数组平均值:%.2f\n",avg);return 0;
    }
    

    在这里插入图片描述

  2. 编写函数,要求用指针做形参,分别实现以下功能: (1)求一个字符串长度 (2)在一个字符串中统计大写字母的个数 (3)在一个字符串中统计数字字符的个数

    #include <stdio.h>int str1(const char *str)
    {int len = 0;while(*str++){len++;}return len;
    }//统计大写字母个数
    int str2(const char *str)
    {int count = 0;while(*str){if(*str >= 'A'&& *str <= 'Z'){count++;}str++;}return count;}//统计数字字符个数
    int str3(const char *str)
    {int count = 0;while(*str){if(*str >= '0' && *str <= '9'){count++;}str++;}return count;
    }int main() 
    {char str[] = "ILoveYou521";// 测试求字符串长度printf("字符串长度: %d\n", str1(str));// 测试统计大写字母个数printf("大写字母个数: %d\n", str2(str));// 测试统计数字字符个数printf("数字字符个数: %d\n", str3(str));return 0;
    }
    

在这里插入图片描述

  1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换): int (*p)[N]

    #include <stdio.h>
    #define N 3  void transpose(int (*p)[N], int result[N][N]) 
    {for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {result[j][i] = p[i][j];  }}
    }int main() 
    {int arr[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int result[N][N];  transpose(arr, result);  printf("转置后:\n");for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {printf("%d ", result[i][j]);}printf("\n");}return 0;
    }
    

    在这里插入图片描述

  2. 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量:

    #include <stdio.h>
    #define N 3  int fun_1(int (*p)[N]) //定义指针
    {int num = 0; //统计0的个数初始化//遍历for (int i = 0; i < N; i++)  {for (int j = i; j < N; j++) {//判断是否为0if(p[i][j] == 0){//计数num++;}}}return num;
    }int main() 
    {//原数组int arr[N][N] = {{1, 0, 0}, {4, 0, 6}, {7, 8, 9}};//调用fun_1函数统计上三角区域中0的数量int sum = fun_1(arr);   printf("上三角区中有%d个0\n",sum);return 0;
    }
    

    在这里插入图片描述

  3. 编写一个指针函数,返回二维数组中最大元素的地址。

    /*************************************************************************> File Name:    > Author:      rch************************************************************************/
    #include <stdio.h>
    #define N 3int find_max(int (*p)[N],int *row = 0,int *col = 0)
    {int num_max = p[0][0];for(int i = 0; i < N;i++){for(int j = 0; j <N ; j++){if(p[i][j] > num_max){num_max = p[i][j];*row = i;*col = j;}}}return num_max;
    }int main(int argc,char *argv[])
    {//原数组int arr[N][N] = {{1, 0, 8}, {4, 7, 6}, {7, 8, 9}};int max_row,max_col;//存最大最小值行列下标// 调用find_max函数查找最大值及其位置int sum_max = find_max(arr,&max_row,&max_col);printf("最大值下标是%d,位于第%d行%d列\n",sum_max,max_row+1,max_col+1);return 0;
    }
    

在这里插入图片描述
10. 动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据,并找出第一次出现 12.35 的下标位置,并输出。

```c
/*************************************************************************> File Name:    demo11.c> Author:       rch> Description:  ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() {// 已有数组float arr_1[] = {1.2, 3.4, 5.6, 12.35, 7.8, 9.0, 12.35, 11.22, 13.45, 6.7};int n = 10; // 动态申请10个float类型元素的内存空间float *arr_2 = (float *)malloc(n * sizeof(float));if (arr_2 == NULL) {printf("内存分配失败\n");return 1;}// 从已有数组拷贝数据到动态分配的内存memcpy(arr_2, arr_1, n * sizeof(float));// 查找第一次出现12.35的下标位置int index = -1;for (int i = 0; i < n; i++) {if (abs(arr_2[i] - 12.35) < 0.0001) {index = i;break;  // 找到第一个就退出循环}}if (index != -1) {printf("12.35第一次出现的下标位置是: %d\n", index);} else {printf("未找到12.35\n");}// 释放动态分配的内存free(arr_2);arr_2 = NULL;  // 避免野指针return 0;
}

在这里插入图片描述

  1. 动态申请一个整型数组,并给每个元素赋值,要求删除第3个元素;

    /*************************************************************************> File Name:    12.c> Author:       rch> Description:  ************************************************************************/
    #include <stdio.h>
    #include <stdlib.h>int main(int argc, char *argv[])
    {int n = 6;int *arr = (int *)malloc(n * sizeof(int));  // 定义普通int指针而非指针数组if(arr == NULL){printf("内存分配失败\n");                        return 1;}// 给数组元素赋值for (int i = 0; i < n; i++){arr[i] = i + 1;  // 使用正确定义的arr变量}// 要删除第三个元素(下标为2)int back = 2;n--;for (int i = back; i < n; i++){arr[i] = arr[i + 1];}// 重新申请内存存储删除后的数组int *newarr = (int *)realloc(arr, n * sizeof(int));if(newarr == NULL){printf("内存重新分配失败\n");free(arr);return 1;}arr = newarr;// 输出结果for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");// 释放内存free(arr);return 0;
    }
    

在这里插入图片描述

  1. 动态申请一个整型数组,并给每个元素赋值,要求在第4个元素后插入100;

    /*************************************************************************> File Name:   > Author:       rch> Description:  ************************************************************************/
    #include <stdio.h>
    #include <stdlib.h>int main(int argc, char *argv[])
    {int n = 6;int *arr = (int *)malloc(n * sizeof(int));  // 定义普通int指针而非指针数组if(arr == NULL){printf("内存分配失败\n");                        return 1;}// 给数组元素赋值for (int i = 0; i < n; i++){arr[i] = i + 1;  // 使用正确定义的arr变量}// 要插入第四个元素(下标为3)int insert_pos = 3;  // 第4个元素的下标n++;  // 元素总数增加1(关键修正:原来是原来是n--,这是删除逻辑)// 重新分配内存(容量+1)int *newarr = (int *)realloc(arr, n * sizeof(int));if(newarr == NULL){printf("内存重新分配失败\n");free(arr);return 1;}arr = newarr;// 元素后移(从最后一个元素开始,避免覆盖)for (int i = n - 1; i > insert_pos + 1; i--)  // 修正循环范围{arr[i] = arr[i - 1];  // 修正赋值方向(原来是反的)}// 在目标位置插入100arr[insert_pos + 1] = 100;// 输出结果printf("插入后的数组: ");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");// 释放内存free(arr);return 0;
    }
    

在这里插入图片描述

http://www.dtcms.com/a/314919.html

相关文章:

  • TCP(2)
  • IP 成长的破局之道:从停滞到突破的核心逻辑
  • MyBatis高效查询:简化JDBC开发实战
  • Python 虚拟环境深入浅出全指南
  • 为流媒体时代而生的云服务:Akamai 推出 Accelerated Compute 加速计算服务
  • 在 Maven 多模块项目中统一管理配置文件
  • 8.4 Java Web(Maven P50-P57)
  • 【web应用】为什么 子模块已经删除,但 Maven 依赖项仍然报错?
  • python采集拍立淘按图搜索API接口,json数据参考
  • maven install和package的区别
  • AI绘图-Stable Diffusion-WebUI的基本用法
  • 安卓开发--ConstraintLayout(约束布局)
  • 5天挑战网络编程 -DAY1(linux版)
  • 二十年代深度立体匹配的进化与前沿综述
  • 咖啡参考基因组
  • 机器学习 入门——决策树分类
  • FreeRTOS源码分析四:时钟中断处理响应流程
  • 倒排索引:Elasticsearch 搜索背后的底层原理
  • 【C#】Blazor基本应用
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • Matlab(2)
  • Maven配置,Idea集成Maven_依赖引入,Idea生成单元测试
  • 《AI Agent工程师(初级)》
  • ubuntu24.01安装odoo18
  • gdb print设置技巧,离线查看复杂结构体和数组变量内容,展开多层嵌套的结构体的方法
  • 【Docker安装】Ubuntu 24.04.2 LTS系统下安装Docker环境——指定APT源安装方式
  • C + +
  • 宝塔运维实战:CentOs7启动PHP7.4失败
  • 华为OD机考2025C卷 - 最小矩阵宽度(Java Python JS C++ C )
  • Linux下PXE服务器搭建