• C<6.1>函数习题(函数内测整形数组大小,递归


     

    目录

     1,数组比较

    2,勒让德多项式

    3,查询数组(sizeof问题


     1,数组比较

    1. 编写函数实现比较两个长度为 n(
    n 可变)的数组大小。比较逻
    辑如下:
    假设 a 和 b 为 n 个元素的整型数组,比较两个数组对应元素的
    大小,用变量 m 和 n 记录 a[i]>b[i]和 a[i]n,
    则数组 a>b;如果 m

     

    1. #include
    2. int main()
    3. {
    4. int value;
    5. int compare(int* arraya, int* arrayb, int n);
    6. int array1[10] = { 1,2,3,4,5,6,7,8,9,0 };
    7. int array2[10] = { 1,1,2,3,5,8,3,1,4,5 };
    8. value = compare(array1, array2, 10);
    9. if (value == 0)
    10. printf("两者一样大");
    11. else
    12. (value == 1) ? printf("前者大") : printf("后者大");
    13. return 0;
    14. }
    15. int compare(int* arraya, int* arrayb, int n)
    16. {
    17. int x=0, y=0;//m:数组a大的次数;n数组b大的次数;
    18. for (int i = 0; i < n; i++)
    19. {
    20. if ((*(arraya + i)) > (*(arrayb + i)))
    21. x++;
    22. if ((*(arraya + i)) < (*(arrayb + i)))
    23. y++;
    24. }
    25. if (x < y) { return -1; }
    26. if (x > y) { return 1; }
    27. if (x == y) { return 0; }
    28. }

    2,勒让德多项式

     

    编写函数实现计算 x 的 n 阶勒让德多项式的值。x 的 n 阶勒让
    德多项式的递归公式如下:

     

     

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main()
    4. {
    5. double lrd(double x, int n);
    6. int n;
    7. double x;
    8. scanf("%lf", &x);
    9. scanf("%d", &n);
    10. printf("\n答案是%lf",lrd(x, n));
    11. return 0;
    12. }
    13. double lrd(double x, int n)
    14. {
    15. double y,z;
    16. if (n == 0) { return 1; }
    17. if (n == 1) { return x; }
    18. if (n != 0 && n != 1)
    19. {
    20. y = lrd(x,n - 1);
    21. z = lrd(x, n - 2);
    22. return ((2 * n - 1) * x * y - (2 * n - 1) * x * z) / n;
    23. }
    24. }

    3,查询数组

    3.编写函数,实现从数组中查找出具有给定值 x 的元素,若查找成
    功则返回该元素的下标位置,否则查找失败返回-1。
    比如:一个数组有 10 个元素,分别为:42, 55, 73, 28, 48, 66, 30, 65,
    94, 72。若 x 为 28,则返回 3,若 x 为 100,则返回-1
    1. #define _CRT_SECURE_NO_WARNINGS
    2. #define ARR_LENGTH(arr) sizeof(arr)/sizeof(arr[0])
    3. #include
    4. void main()
    5. {
    6. int retrieve(int* array, int x, int length);
    7. int sample[] = { 42, 55, 73, 28, 48, 66, 30, 65, 94, 72 };//数组
    8. int x,len1;
    9. len1=ARR_LENGTH(sample);
    10. scanf("%d", &x);
    11. printf("%d", retrieve(sample, x,len1));
    12. }
    13. int retrieve(int* array,int x, int length)
    14. {
    15. //length = (sizeof(array) / sizeof(array[0]));注意不能用这个
    16. for (int i = 0; i < length; i++)
    17. {
    18. if (x == *(array + i))
    19. {
    20. return i;
    21. }
    22. }
    23. return -1;
    24. }

     注意:当数组以指针传递的时候,其本身会变成(32位计算机:4个字节;64位计算机:8个字节)

    所以常用的sizeof测数组大小函数内不再适用

    ps:这里我只好用了宏定义,当然直接数组大小直接传进来也可以

    网上看到大佬通过这个方法传递数组,请大家参考观摩

    1. template <size_t N>
    2. long calc(long (&array)[N]) // 利用模板传递参数 array是数组的引用
    3. {
    4. long res = 0L;
    5. for (size_t i = 0;i < N;i ++) {
    6. res += array[i];
    7. }
    8. return res;
    9. }
    10. int main()
    11. {
    12. long longarr[] = {1, 23, 4, 45, 46, 57,};
    13. long sum = calc(longarr);
    14. }

  • 相关阅读:
    关于良率:交期延误、报废补料、不做退款都是什么情况?
    基于vue-tianditu实现瓦片数据层添加
    QT+OSG/osgEarth编译之三十八:gdal+Qt编译(一套代码、一套框架,跨平台编译,版本:gdal-3.6.0)
    神经网络国内外发展概况,神经网络最新研究方向
    ROS三种通信方式之服务通信
    MCE | 促炎症的 PCD——细胞焦亡
    Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示
    【Spring Boot】通过AOP拦截Spring Boot日志并将其存入数据库
    STM32 Cubemx 基本定时器Basic Timers
    解决Python+vscode环境,QThread 线程无法加入断点问题
  • 原文地址:https://blog.csdn.net/weixin_60787500/article/details/128008400