C语言练习题之函数部分

简介: C语言练习题之函数部分

C 练习实例26


题目:利用递归方法求5!。


程序分析:递归公式:fn=fn_1*4!


下面请看笔者代码:


//题目:利用递归方法求5!。
//
//程序分析:递归公式:fn = fn_1 * 4!
#include <stdio.h>
int fn(int n)
{
  if (n == 1)
  return 1;
  else 
  return n=n * fn(n - 1);
}
int main()
{
  int n = 0;
  while (~scanf_s("%d", &n))
  {
  printf("%d\n", fn(n));
  }
  return 0;
}


代码的运行结果为:


0a2653c851af460fa595bd959398a8f1.png


2.C 练习实例27


题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。


程序分析:无。


对于这等难度的练习题一开始没有思路,可以选择,由浅入深,一步步进行深入!从而破解该题!


因此对于该题,笔者首先想到的是:将5个字符,以相反顺序打印出来。然后在根据此问题来进行思考题目的代码


//题目;将5个字符,以相反顺序打印出来。
#include <stdio.h>
#include <string.h>
int main()
{
  char ch[6] = "abcde";
  int sz = strlen(ch);
  int left = 0;
  int right = sz - 1;
  while (left < right)
  {
  char tmp = ch[left];
  ch[left] = ch[right];
  ch[right] = tmp;
  left++;
  right--;
  }
  printf("%s\n", ch);
  return 0;
}


上述代码,将5个字符,以相反顺序打印出来。所以,根据此代码,可以进行选择性的增添,从而达到目的!


笔者对于上述代码的更改就不做更多的讲述!


下面请看笔者的函数写法:参考代码为:


//利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#include <stdio.h>
void reverseSentence()
{
    char c;
    c = getchar();
    if (c != '\n')
    {
        reverseSentence();
        putchar(c);
    }
}
int main()
{
    printf("输入一个字符串: ");
    reverseSentence();
    return 0;
}


代码的运行结果为:


6de278e6d6694ce5bb08e7e842b7e74b.png


上述代码,用到了几个库函数,对于不知道用法的读者,可以在https://cplusplus.com 这个网站进行搜索!学习!


3.C 练习实例28


题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?


程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。。


根据题意,这个题目,将会是函数的真正典范!!如果你能自主写出来该题目,那么你将能够成功出师!


#include <stdio.h>
int reserve(int n)
{
  if (n == 1)
  return 10;
  if (n > 1)
  return 2 + reserve(n - 1);
}
int main()
{
  int n = 0;
  scanf_s("%d", &n);
  int ret = reserve(n);
  printf("%d\n",ret);
}


这个代码,可以实现想求第几个人的年龄,就能求出来,简短许多!毕竟规律在哪儿放着来!!


代码的运行结果为:


12c3b7f3f8814309a195c64f051d4445.png


4.C 练习实例29


题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。


对于该题目,可以选择创建数组来进行不多于五位数字的输入(不过该写法就得首先知道要输入的是几位数),也可以直接输入该数字来进行求!


1.直接输入该数字进行求:参考代码为:


//题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
#include <stdio.h>
int main()
{
    long a, b, c, d, e, x;
    printf("请输入 5 位数字:");
    scanf("%ld", &x);
    a = x / 10000;        /*分解出万位*/
    b = x % 10000 / 1000;   /*分解出千位*/
    c = x % 1000 / 100;     /*分解出百位*/
    d = x % 100 / 10;       /*分解出十位*/
    e = x % 10;           /*分解出个位*/
    if (a != 0) {
        printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n", e, d, c, b, a);
    }
    else if (b != 0) {
        printf("为 4 位数,逆序为: %ld %ld %ld %ld\n", e, d, c, b);
    }
    else if (c != 0) {
        printf("为 3 位数,逆序为:%ld %ld %ld\n", e, d, c);
    }
    else if (d != 0) {
        printf("为 2 位数,逆序为: %ld %ld\n", e, d);
    }
    else if (e != 0) {
        printf("为 1 位数,逆序为:%ld\n", e);
    }
}


上述代码显得臃肿,而且不是该函数的写法!不是很建议!!!


2.下面请看笔者对于函数的写法!!参考代码为:


#include<stdio.h>
int the_mount_of_noumbles(int n) {
  int i = 0;
  while (n) {
  n /= 10;
  i++;
  }
  return i;
}
void print_noumbles(int n) {
  int i;
  while (n) {
  i = n % 10;
  n /= 10;
  printf("%d", i);
  }
}
int main() {
  int n;
  printf("输入一个数: ");
  scanf_s("%d", &n);
  printf("它是 %d 位数", the_mount_of_noumbles(n));
  print_noumbles(n);
  return 0;
}


上述代码,笔者定义了两个函数,分别实现:输入的数字有几位数,逆序打印该数字!!


代码的运行结果为:


34e8d716411043c08c7ffba9fbba23de.png


3.假设知道输入的是几位数!请看参考代码!!


选择创建数组来进行不多于五位数字的输入(不过该写法就得首先知道要输入的是几位数)


#include <stdio.h>
int main()
{
  int arr[10] = { 0 };
  int n = 0;
  scanf_s("%d", &n);   //假设知道几位数
  int i = 0;
  for (i = 0; i < n; i++)
  {
  scanf_s("%d", &arr[i]);
  }
  int left = 0;
  int right = n - 1;
  while (left < right)
  {
  int tmp = arr[left];
  arr[left] = arr[right];
  arr[right] = tmp;
  left++;
  right--;
  }
  for (i = 0; i < n; i++)
  {
  printf("%d", arr[i]);
  }
  return 0;
}


代码的运行结果为:


92ba0822ed0b46e1ae72df8a17d3a45b.png


5.C 练习实例30 - 回文数


题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。


程序分析:学会分解出每一位数。


参考代码为:


//题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
//
//程序分析:学会分解出每一位数。
#include <stdio.h>
int main()
{
    long ge, shi, qian, wan, x;
    printf("请输入 5 位数字:");
    scanf_s("%ld", &x);
    wan = x / 10000;        /*分解出万位*/
    qian = x % 10000 / 1000;  /*分解出千位*/
    shi = x % 100 / 10;       /*分解出十位*/
    ge = x % 10;            /*分解出个位*/
    if (ge == wan && shi == qian) { /*个位等于万位并且十位等于千位*/
       printf("这是回文数\n");
    }
    else {
       printf("这不是回文数\n");
    }
}


代码的运行结果为:


d79b274929334152a6d38be91e2d1be3.png


对于函数的习题,本次就到此结束,有兴趣的读者,请看笔者之前的练习题!!


相关文章
|
21天前
|
存储 Serverless C语言
【C语言基础考研向】11 gets函数与puts函数及str系列字符串操作函数
本文介绍了C语言中的`gets`和`puts`函数,`gets`用于从标准输入读取字符串直至换行符,并自动添加字符串结束标志`\0`。`puts`则用于向标准输出打印字符串并自动换行。此外,文章还详细讲解了`str`系列字符串操作函数,包括统计字符串长度的`strlen`、复制字符串的`strcpy`、比较字符串的`strcmp`以及拼接字符串的`strcat`。通过示例代码展示了这些函数的具体应用及注意事项。
|
24天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
24天前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
1月前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
1月前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
1月前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
2月前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
26 4
|
2月前
|
机器学习/深度学习 编译器 Serverless
C语言中函数
C语言中函数
22 0
|
2月前
|
存储 Serverless C语言
C语言中的标准库函数
C语言中的标准库函数
30 0
|
2月前
|
C语言
【C语言】epoll函数
【C语言】epoll函数
20 0