对于C语言的练习题,笔者之前写过不少,而且还有函数,指针,图形……各种练习题,笔者都有涉及,恰巧今日练习了部分函数的练习题,趁热打铁,想要将其分享给各位老铁,希望老铁能给个一箭三连呀!!感激
其实学习语法是次要的,主要在于将知识如何应用到实际中去,因此,练习题就是必不可缺少的部分,对于程序员而言,在力扣,牛客网,这两个热门的网站去练习题,是一个不错的选择!
或不多说,言归正传,下面请看笔者的练习题!
1.题目:利用递归方法求5!。
2.题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
3..题目:计算第五个人的年龄
4.题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
5.题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同
1.
题目:利用递归方法求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;
- }
代码的运行结果为:

2.
题目:利用递归函数调用方式,将所输入的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
- void reverseSentence()
- {
- char c;
- c = getchar();
- if (c != '\n')
- {
- reverseSentence();
- putchar(c);
- }
- }
- int main()
- {
- printf("输入一个字符串: ");
- reverseSentence();
- return 0;
- }
代码的运行结果为:

上述代码,用到了几个库函数,对于不知道用法的读者,可以在https://cplusplus.com 这个网站进行搜索!学习!
3.
题目:有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);
- }
这个代码,可以实现想求第几个人的年龄,就能求出来,简短许多!毕竟规律在哪儿放着来!!
代码的运行结果为:

4.
题目:给一个不多于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
- 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;
- }
上述代码,笔者定义了两个函数,分别实现:输入的数字有几位数,逆序打印该数字!!
代码的运行结果为:

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;
- }
代码的运行结果为:

5.
题目:一个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");
- }
-
- }
代码的运行结果为:

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