• 学习c语言中的几道习题(小有难度)!


    有兴趣的朋友可以看着题目自己做做,最后在和答案对比!相信能力会有所提升的。我现在只是刚刚开始学习c语言,如果有什么说的不对的地方,网路过的大佬,及时予以指正。多谢!

    1、函数判断闰年
    实现函数判断year是不是闰年。

    1. 函数判断闰年
    2. 实现函数判断year是不是闰年。
    3. #include"stdio.h"
    4. int panduan(int x) {
    5. if (x % 4 == 0 && x % 100 != 0 || x % 400 == 0) {
    6. return 1;
    7. }
    8. else
    9. return 0;
    10. }
    11. int main() {
    12. int year = 2000;
    13. if (panduan(year)) {
    14. printf("%d年是闰年", year);
    15. }
    16. return 0;
    17. }

    2、交换两个整数
        实现一个函数来交换两个整数的内容。

    1. /*
    2. 交换两个整数
    3. 实现一个函数来交换两个整数的内容。
    4. */
    5. #include"stdio.h"
    6. void jiaohuan(int *x, int *y) {
    7. int z = 0;
    8. z = *x;
    9. *x = *y;
    10. *y = z;
    11. }
    12. int main() {
    13. int a = 9, b = 5;
    14. printf("交换前 a=%d b=%d\n", a, b);
    15. jiaohuan(&a, &b);
    16. printf("交换后 a=%d b=%d\n", a, b);
    17. return 0;
    18. }

    3、乘法口诀表
        实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
        如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表

    1. /*
    2. 乘法口诀表
    3. 实现一个函数,打印乘法口诀表,口诀表的函数和列数自己制定
    4. 如:输入9,输出9*9口诀表,输入12,输出12*12乘法口诀表
    5. */
    6. #include"stdio.h"
    7. void print(int); // 声明函数
    8. int main() {
    9. int input = 0;
    10. printf("请输入你要打印的乘法口诀表的行数?\n");
    11. scanf("%d", &input);
    12. print(input);
    13. return 0;
    14. }
    15. void print(int x) { // 此函数在主函数的调用之后,所以在前面要有声明。
    16. int i = 0, j = 0;
    17. for (i = 1; i <= x; i++) {
    18. for (j = 1; j <= i; j++) {
    19. printf("%2dX%2d = %3d ", j, i, j * i);
    20. }
    21. printf("\n");
    22. }
    23. }

    4、调用fun(2)返回值是多少?

    int fun(int n) {
        if (n == 5) {
            return 2;
        }
        else
            return 2 * fun(n + 1);

    }

    1. int fun(int n) {
    2. if (n == 5) {
    3. return 2;
    4. }
    5. else
    6. return 2 * fun(n + 1);
    7. }

    5、打印一个数的每一位
    递归的方式实现?

    1. /*
    2. 打印一个数的每一位
    3. 递归的方式实现?
    4. */
    5. #include"stdio.h"
    6. void print(int a) {
    7. if (a > 9) {
    8. print(a / 10);
    9. }
    10. printf("%d ", a%10);
    11. }
    12. int main() {
    13. int a = 122456;
    14. print(a);
    15. return 0;
    16. }

     6、求阶乘
           递归和非递归分别实现求n的阶乘

    1. /*
    2. 求阶乘
    3. 递归和非递归分别实现求n的阶乘
    4. */
    5. #include"stdio.h"
    6. int jiecheng(int n) {
    7. int a = 1;
    8. int i = 1;
    9. for (i = 1; i <= n; i++) {
    10. a *= i;
    11. }
    12. return a;
    13. }
    14. int main() {
    15. int n = 0;
    16. scanf("%d", &n);
    17. int ret = jiecheng(n);
    18. printf("%d", ret);
    19. return 0;
    20. }

    下面是递归的方式实现阶乘:

    1. #include"stdio.h"
    2. int jiecheng(int n) {
    3. if (n <= 1)
    4. return 1;
    5. return n * jiecheng(n - 1);
    6. }
    7. int main() {
    8. int n = 0;
    9. scanf("%d", &n);
    10. int ret = jiecheng(n);
    11. printf("%d", ret);
    12. return 0;
    13. }

     7、字符串逆序(递归实现)
        编写一个函数reverse_string(char * string)(递归实现)
        实现:
            将参数字符串中的字符反向排列,不是逆序打印。
        要求:
            不能使用c函数库中的字符串操作函数。
        比如:
            char arr[]="abcdef";
        逆序之后的数组内容变成fedcba。

    1. #include"stdio.h"
    2. // 下面是循环的方式实现功能
    3. int my_strled(char* str) { // 计算传入的字符串中的字符个数
    4. int count = 0;
    5. while (*str != '\0') {
    6. count++;
    7. str++;
    8. }
    9. return count;
    10. }
    11. //void reverse_string(char *pa){
    12. // int left = 0;
    13. // int right = my_strled(pa) - 1; // 字符个数减1也就是最右边的下标
    14. // while(left
    15. // char tmp = pa[left];
    16. // pa[left] = pa[right];
    17. // pa[right] = tmp;
    18. // left++;
    19. // right--;
    20. // }
    21. // }
    22. void reverse_string(char* pa) {
    23. int left = 0;
    24. int right = my_strled(pa) - 1; // 字符个数减1也就是最右边的下标
    25. while (left < right) {
    26. char tmp = *(pa+left);
    27. *(pa+left) = *(pa+right);
    28. *(pa+right) = tmp;
    29. left++;
    30. right--;
    31. }
    32. }
    33. int main() {
    34. char arr[] = "abcdefg";
    35. printf("调整之前的数组是:%s\n", arr);
    36. reverse_string(arr); // 数组名arr是数组首元素的地址
    37. printf("调整之后的数组是:%s\n", arr);
    38. return 0;
    39. }

    下面是递归的方式实现:

    1. #include"stdio.h"
    2. int my_strlen(char* arr) {
    3. int count = 0;
    4. while (*arr != '\0') {
    5. count++;
    6. arr++;
    7. }
    8. return count;
    9. }
    10. void diandao(char* arr) {
    11. int tem = *arr; // 第一步
    12. int len = my_strlen(arr);
    13. *arr = *(arr + len - 1); // 第二步
    14. *(arr + len - 1) = '\0'; // 第三步
    15. if (my_strlen(arr+1) >= 2) {
    16. diandao(arr + 1); // 第四步
    17. }
    18. *(arr + len - 1) = tem; // 第五步
    19. }
    20. int main() {
    21. char arr[] = "abcdef";
    22. diandao(arr);
    23. printf("%s\n", arr);
    24. return 0;
    25. }

    8、计算一个数的每位之和(递归实现)
           写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。   

            例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
             输入:1729,输出:19

    1. ///*
    2. //计算一个数的每位之和(递归实现)
    3. //写一个递归函数DigitSum(n),输入一个非负整数,返回组成他的数字之和。
    4. //例如,调用Digit(1729),则应该返回1+7+2+9,他的和是19
    5. //输入:1729,输出:19
    6. //*/
    7. #include"stdio.h"
    8. int DigitSum(int n) {
    9. if (n > 9) {
    10. return n%10 + DigitSum(n / 10);
    11. }
    12. else
    13. return n;
    14. }
    15. int main() {
    16. int n = 1729;
    17. int ret = DigitSum(n);
    18. printf("%d", ret);
    19. return 0;
    20. }

    9、 递归实现n的k次方
            题目内容:
            编写一个函数实现n的k次方,使用递归实现

    1. #include"stdio.h"
    2. double Fang(int n, int k) {
    3. if (k > 0) {
    4. return n * Fang(n, k - 1);
    5. }
    6. else if (k == 0)
    7. return 1;
    8. else
    9. return 1.0 / Fang(n, -k);
    10. }
    11. int main() {
    12. int n = 0;
    13. int k = 0;
    14. scanf("%d%d", &n,&k);
    15. double ret = Fang(n, k);
    16. printf("%lf", ret);
    17. return 0;
    18. }

     

    以上就是今天早晨起来做的 9道题,主要是为了自己不忘记,或是忘记的时候看自己的代码熟悉的速度会更快,特此记录。

  • 相关阅读:
    matlab双目标定中基线物理长度获取
    设计模式:观察者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
    【Java-框架-SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手 - 简易版
    ORM数据库操作
    Shell 之 免交互编程(expect用法)
    QT Creator 添加快捷生成函数、文件注释脚本
    数据结构之单向链表
    47-用户和权限管理
    QProperty 理解与示例
    tcp连接 三次握手、四次挥手
  • 原文地址:https://blog.csdn.net/xingyuncao520025/article/details/130908987