当前位置:   article > 正文

C语言封装函数算法整理

C语言封装函数算法整理

1. 输入两个数,找出两个数的最大公约数和最小公倍数——

  1. #include <stdio.h>
  2. int GetComDivNum(int x, int y)
  3. {
  4. int i = 0;
  5. int min = 0;
  6. min = x < y ? x : y;
  7. for (i = min; i >= 1; i--)
  8. {
  9. if (0 == x % i && 0 == y % i)
  10. {
  11. break;
  12. }
  13. }
  14. return i;
  15. }
  16. int GetComMulNum(int x, int y)
  17. {
  18. int i = 0;
  19. int max = 0;
  20. max = x > y ? x : y;
  21. for (i = max; i <= x * y; i++)
  22. {
  23. if (0 == i % x && 0 == i % y)
  24. {
  25. break;
  26. }
  27. }
  28. return i;
  29. }
  30. int main(void)
  31. {
  32. int num1 = 0;
  33. int num2 = 0;
  34. int divnum = 0;
  35. int mulnum = 0;
  36. scanf("%d%d", &num1, &num2);
  37. divnum = GetComDivNum(num1, num2);
  38. mulnum = GetComMulNum(num1, num2);
  39. printf("最大公约数:%d\n", divnum);
  40. printf("最小公倍数:%d\n", mulnum);
  41. return 0;
  42. }

2. 输入年、月、日,获得该年剩余多少天——

  1. #include <stdio.h>
  2. int IsLeepYear(int tmpyear)
  3. {
  4. if ((0 == tmpyear % 4 && tmpyear % 100 != 0) || (0 == tmpyear % 400))
  5. {
  6. return 1;
  7. }
  8. return 0;
  9. }
  10. int GetDayOfYear(int tmpyear, int tmpmon, int tmpday)
  11. {
  12. int i = 0;
  13. int sum = 0;
  14. int a1[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  15. int a2[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  16. if (IsLeepYear(tmpyear))
  17. {
  18. for (i = 0; i < tmpmon-1; i++)
  19. {
  20. sum += a1[i];
  21. }
  22. }else
  23. {
  24. for (i = 0; i < tmpmon-1; i++)
  25. {
  26. sum += a2[i];
  27. }
  28. }
  29. sum += tmpday;
  30. return sum;
  31. }
  32. int GetLeftDayOfYear(int tmpyear, int tmpmon, int tmpday)
  33. {
  34. int sum = 0;
  35. if (IsLeepYear(tmpyear))
  36. {
  37. sum = 366;
  38. }
  39. else
  40. {
  41. sum = 365;
  42. }
  43. return sum - GetDayOfYear(tmpyear, tmpmon, tmpday);
  44. }
  45. int main(void)
  46. {
  47. int year = 0;
  48. int mon = 0;
  49. int day = 0;
  50. int leftday = 0;
  51. scanf("%d%d%d", &year, &mon, &day);
  52. leftday = GetLeftDayOfYear(year, mon, day);
  53. printf("%d年剩余%d天\n", year, leftday);
  54. return 0;
  55. }

3. 封装函数,以数组传递形式实现strlen、strcpy、strcat、strcmp——

  1. #include <stdio.h>
  2. int Mystrlen(char pstr[])
  3. {
  4. int i = 0;
  5. int cnt = 0;
  6. while (pstr[i] != '\0')
  7. {
  8. cnt++;
  9. i++;
  10. }
  11. return cnt;
  12. }
  13. int Mystrcpy(char pdst[], char psrc[])
  14. {
  15. int i = 0;
  16. while (psrc[i] != '\0')
  17. {
  18. pdst[i] = psrc[i];
  19. i++;
  20. }
  21. pdst[i] = '\0';
  22. return 0;
  23. }
  24. int Mystrcat(char pstr1[], char pstr2[])
  25. {
  26. int i = 0;
  27. int j = 0;
  28. while (pstr1[i] != '\0')
  29. {
  30. i++;
  31. }
  32. while (pstr2[j] != '\0')
  33. {
  34. pstr1[i] = pstr2[j];
  35. i++;
  36. j++;
  37. }
  38. pstr1[i] = '\0';
  39. return 0;
  40. }
  41. int Mystrcmp(char pstr1[], char pstr2[])
  42. {
  43. int i = 0;
  44. while (pstr1[i] == pstr2[i] && pstr1[i] != '\0')
  45. {
  46. i++;
  47. }
  48. return pstr1[i] - pstr2[i];
  49. }
  50. int main(void)
  51. {
  52. char str[32] = {0};
  53. char dst[32] = {0};
  54. int len = 0;
  55. int ret = 0;
  56. gets(str);
  57. len = Mystrlen(str);
  58. printf("len = %d\n", len);
  59. Mystrcpy(dst, str);
  60. printf("dst = %s\n", dst);
  61. Mystrcat(dst, str);
  62. printf("dst = %s\n", dst);
  63. ret = Mystrcmp(dst, str);
  64. printf("ret = %d\n", ret);
  65. return 0;
  66. }

4. 封装函数,以指针传递形式实现strlen、strcpy、strcat、strcmp

4.1 strlen

  1. #include <stdio.h>
  2. int MyStrlen(char *pstr)
  3. {
  4. int cnt = 0;
  5. while (*pstr != '\0')
  6. {
  7. cnt++;
  8. pstr++;
  9. }
  10. return cnt;
  11. }
  12. int main(void)
  13. {
  14. char str[32] = {0};
  15. int len = 0;
  16. gets(str);
  17. len = MyStrlen(str);
  18. printf("len = %d\n", len);
  19. return 0;
  20. }

4.2 strcpy

  1. #include <stdio.h>
  2. #include <string.h>
  3. int MyStrcpy(char *pdst, char *psrc)
  4. {
  5. while (*psrc != '\0')
  6. {
  7. *pdst = *psrc;
  8. psrc++;
  9. pdst++;
  10. }
  11. *pdst = '\0';
  12. return 0;
  13. }
  14. int main(void)
  15. {
  16. char src[32] = {0};
  17. char dst[32] = {0};
  18. gets(src);
  19. MyStrcpy(dst, src);
  20. printf("dst = %s\n", dst);
  21. return 0;
  22. }

4.3 strcat

  1. #include <stdio.h>
  2. #include <string.h>
  3. int MyStrcat(char *pstr1, char *pstr2)
  4. {
  5. while (*pstr1 != '\0')
  6. {
  7. pstr1++;
  8. }
  9. while (*pstr2 != '\0')
  10. {
  11. *pstr1 = *pstr2;
  12. pstr1++;
  13. pstr2++;
  14. }
  15. *pstr1 = '\0';
  16. return 0;
  17. }
  18. int main(void)
  19. {
  20. char str1[32] = {0};
  21. char str2[32] = {0};
  22. gets(str1);
  23. gets(str2);
  24. MyStrcat(str1, str2);
  25. printf("str1 = %s, str2 = %s\n", str1, str2);
  26. return 0;
  27. }

4.4 strcmp

  1. #include <stdio.h>
  2. int MyStrcmp(char *pstr1, char *pstr2)
  3. {
  4. while (*pstr1 == *pstr2 && *pstr1 != '\0')
  5. {
  6. pstr1++;
  7. pstr2++;
  8. }
  9. return *pstr1 - *pstr2;
  10. }
  11. int main(void)
  12. {
  13. char str1[32] = {0};
  14. char str2[32] = {0};
  15. int ret = 0;
  16. gets(str1);
  17. gets(str2);
  18. ret = MyStrcmp(str1, str2);
  19. printf("ret = %d\n", ret);
  20. return 0;
  21. }

5. 判断素数——

  1. #include <stdio.h>
  2. int IsPrimayNum(int n)
  3. {
  4. int i = 0;
  5. for (i = 2; i < n; i++)
  6. {
  7. if (0 == n % i)
  8. {
  9. return 0;
  10. }
  11. }
  12. return 1;
  13. }
  14. int main(void)
  15. {
  16. int num = 0;
  17. scanf("%d", &num);
  18. if (IsPrimayNum(num))
  19. {
  20. printf("Yes!\n");
  21. }
  22. else
  23. {
  24. printf("No!\n");
  25. }
  26. return 0;
  27. }

6. 封装函数实现斐波那切数列    1 1 2 3 5 8 13 21 34 55 ——

  1. #include <stdio.h>
  2. int Fibo(int num)
  3. {
  4. if (1 == num || 2 == num)
  5. {
  6. return 1;
  7. }else
  8. {
  9. return Fibo(num-1) + Fibo(num-2);
  10. }
  11. }
  12. int main(void)
  13. {
  14. int num = 0;
  15. int fibo = 0;
  16. scanf("%d", &num);
  17. fibo = Fibo(num);
  18. printf("fibo = %d\n", fibo);
  19. return 0;
  20. }

7. 递归实现汉诺塔——

  1. #include <stdio.h>
  2. int HanNuoTa(int n, char src, char tmp, char dst)
  3. {
  4. if (1 == n)
  5. {
  6. printf("%c -> %c\n", src, dst);
  7. }
  8. else
  9. {
  10. HanNuoTa(n-1, src, dst, tmp);
  11. HanNuoTa(1, src, tmp, dst);
  12. HanNuoTa(n-1, tmp, src, dst);
  13. }
  14. return 0;
  15. }
  16. int main(void)
  17. {
  18. int n = 0;
  19. scanf("%d", &n);
  20. HanNuoTa(n, 'A', 'B', 'C');
  21. return 0;
  22. }

8. 拆分数字各个位数,并将各个位数求和(除10(/10),再对10求余(%10))——

  1. #include <stdio.h>
  2. int fun(int tmp)
  3. {
  4. int sum = 0;
  5. while (tmp != 0)
  6. {
  7. sum += tmp % 10;
  8. tmp /= 10;
  9. }
  10. return sum;
  11. }
  12. int main(void)
  13. {
  14. int num = 0;
  15. int sum = 0;
  16. scanf("%d", &num);
  17. sum = fun(num);
  18. printf("sum = %d\n", sum);
  19. return 0;
  20. }

9. 封装一个函数传入数组和n,根据n的值将数组完成转换——
    int a[5] = {1, 2, 3, 4, 5}
        n=3                        n=2
    3 4 5 1 2                4 5 1 2 3 

  1. #include <stdio.h>
  2. int OutputArray(int arrayp[], int tmplen)
  3. {
  4. int i = 0;
  5. for (i = 0; i < tmplen; i++)
  6. {
  7. printf("%d ", arrayp[i]);
  8. }
  9. putchar('\n');
  10. return 0;
  11. }
  12. int Fun(int arrayp[], int len, int n)
  13. {
  14. int i = 0;
  15. int j = 0;
  16. int tmp = 0;
  17. for (i = 0; i < n; i++)
  18. {
  19. tmp = arrayp[len-1];
  20. for (j = len-1; j > 0; j--)
  21. {
  22. arrayp[j] = arrayp[j-1];
  23. }
  24. arrayp[0] = tmp;
  25. }
  26. }
  27. int main(void)
  28. {
  29. int str[5] = {1, 2, 3, 4, 5};
  30. int len = 5;
  31. int n = 0;
  32. scanf("%d", &n);
  33. OutputArray(str, len);
  34. Fun(str, len, n);
  35. OutputArray(str, len);
  36. return 0;
  37. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号