鱼C论坛

 找回密码
 立即注册
查看: 1057|回复: 0

[技术交流] 自己练习写的一点函数

[复制链接]
发表于 2019-5-29 22:32:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bin554385863 于 2019-5-29 23:07 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*阶乘函数*/
  4. long long fact(int n)
  5. {
  6.     long long fact = 1;
  7.     if (n >= 0)
  8.     {
  9.         if ((n == 0) || (n == 1))
  10.         {
  11.             fact = 1;
  12.         }
  13.         else
  14.         {
  15.             for (int i = 1; i <= n; i++)
  16.             {
  17.                 fact = fact * i;
  18.             }
  19.         }
  20.         return (fact);
  21.     }
  22.     else
  23.     {
  24.         return -1;
  25.     }
  26. }
  27. /*组合函数*/
  28. long long comb(int n, int k)
  29. {
  30.     long long comb = 1;
  31.     if ((n > 0) && (k >= 0))
  32.     {
  33.         if ((n == k) || (k == 0))
  34.         {
  35.             comb = 1;
  36.         }
  37.         else if (n > k)
  38.         {
  39.             comb = fact(n) / (fact(k) * fact(n - k));
  40.         }
  41.         else
  42.         {
  43.             return 1;
  44.         }
  45.     }
  46.     else
  47.     {
  48.         return -1;
  49.     }
  50. }


  51. /*用字符e表示一个数字数组的结束,el = endline*/
  52. #define el "'e'"
  53. /*数组长度函数*/
  54. size_t arrlen(size_t arr[])
  55. {
  56.     size_t i = 1;
  57.     while (*(arr + i) != el)
  58.     {
  59.         i++;
  60.     }
  61.     return i;
  62. }


  63. /*冒泡排序函数*/
  64. void arrsrt(size_t arr[])
  65. {
  66.     int t;
  67.     for (size_t i = 0; i < arrlen(arr); i++)
  68.     {
  69.         for (size_t j = 0; j < arrlen(arr)-1; j++)
  70.         {
  71.             if (arr[j] >= arr[j + 1])
  72.             {
  73.                 t = arr[j];
  74.                 arr[j] = arr[j + 1];
  75.                 arr[j + 1] = t;
  76.             }
  77.         }
  78.     }
  79.    for (size_t i = 0; i < arrlen(arr); i++)
  80.     {
  81.         printf("%d ", arr[i]);
  82.     }
  83. }


  84. /*数组搜索函数*/
  85. void arrsch(size_t arr[], size_t key)
  86. {
  87.     size_t temp[arrlen(arr)];
  88.     size_t j = 0;
  89.     for (size_t i = 0; i < arrlen(arr); i++)
  90.     {
  91.         if (*(arr + i) == key)
  92.         {
  93.             temp[j] = i;
  94.             j++;
  95.         }
  96.     }
  97.     if (j >= 1)
  98.     {
  99.         printf("数据%d总共出现了%d次,下标是:", key, j);
  100.         for (size_t i = 0; i < j; i++)
  101.         {
  102.             printf("%02d ", temp[i]);
  103.         }
  104.     }
  105.     else
  106.     {
  107.         printf("NULL");
  108.     }

  109. /*数字数组拼接函数arrcat(arr1, arr2),请确保arr1有足够的空间接受arr2的数据*/
  110. void arrcat(size_t arr1[], size_t arr2[])
  111. {
  112.     size_t temp[arrlen(arr1) + arrlen(arr2)];
  113.     size_t i, j, k;
  114.     for (i = 0; i < arrlen(arr1); i++)
  115.     {
  116.         temp[i] = arr1[i];
  117.     }
  118.     for (j = 0; j < arrlen(arr2); j++)
  119.     {
  120.         temp[i + j] = arr2[j];
  121.     }
  122.     for (k = 0; k < i + j; k++)
  123.     {
  124.         arr1[k] = temp[k];
  125.         arr1[k+1] = el;
  126.         printf("%d ", arr1[k]);
  127.     }
  128.    
  129. }
复制代码


以上的数字数组函数全都是基于arrlen(size_t arr[])函数,实现
============================================================================
  1. #include <stdio.h>
  2. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  3. void main()
  4. {
  5.     int a[14] = {0, 1, 2, 3, el};
  6.     int b[] = {7, 5, 8, 4, el};
  7.     int c[] = {6, 9, 10, 11, el};
  8.     printf("拼接a[]和b[]\n");
  9.     arrcat(a, b);
  10.     printf("\n\n");
  11.     printf("然后拼接c[]\n");
  12.     arrcat(a, c);
  13.     printf("\n\n");
  14.     printf("对数组排序\n");
  15.     arrsrt(a);
  16.     printf("\n\n");
  17.     printf("打印数组长度\n");
  18.     printf("%d", arrlen(a));
  19.     printf("\n\n");
  20.     printf("查找数字8\n");
  21.     arrsch(a , 8);
  22. }
复制代码

-----------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-asdrue3q.cef --stdout=Microsoft-MIEngine-Out-ply55g5c.jfq --stderr=Microsoft-MIEngine-Error-rxmm5n1v.0hm --pid=Microsoft-MIEngine-Pid-czjei4lx.uno --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
拼接a[]和b[]
0 1 2 3 7 5 8 4

然后拼接c[]
0 1 2 3 7 5 8 4 6 9 10 11

对数组排序
0 1 2 3 4 5 6 7 8 9 10 11

打印数组长度
12

查找数字8
数据8总共出现了1次,下标是:08
E:\Administrator\Documents\My C>

==========================================================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表