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