1> 使用递归实现 求 n 的 k 次方
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cf(int a,int b)
{
if(b==0)
{
return 1; //0次方返回1
}
else
{
return a*cf(a,b-1); //非0次方返回a乘以a的b-1次方
}
}
int main(int argc, const char *argv[])
{
int m=0,n=0,c=0;
printf("请输入一个数:");
scanf("%d",&m);
getchar();
printf("请输入要求的次方:");
scanf("%d",&n);
getchar();
c = cf(m,n);
printf("%d\n",c);
return 0;
}
运行结果:
2> 使用递归实现 strlen 的功能
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strlenth(char *arr)
{
if(*arr!='\0') //判断字符是否为'\0',否就判断下一个字符
{
return 1+strlenth(arr+1);
}
else //字符为'\0',返回0
return 0;
}
int main(int argc, const char *argv[])
{
char str[20] = "";
printf("请输入字符串:");
gets(str);
int lenth = strlenth(str);
printf("该字符串长度为:%d\n",lenth);
return 0;
}
运行结果:
3> 使用递归实现汉诺塔问题
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int move(char a,char b)
{
printf("%c---->%c\n",a,b); //a到b的路径
}
int hnt(int n,char a,char b,char c)
{
if(n==1)
{
move(a,c); //a转移到c
}
else
{
hnt(n-1,a,c,b); //先把n-1个盘子从a转到b
move(a,c); //再把最后一个转到c
hnt(n-1,b,a,c); //最后把剩下的盘子转到c
}
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入汉诺塔转移的盘子数:\n");
scanf("%d",&n);
getchar();
hnt(n,'A','B','C');
return 0;
}
运行结果:
4> 定义一个函数将一个字符串从大到小排序
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strpx(char *arr)
{
//冒泡排序
int len = strlen(arr);
for(int i=1;i<len;i++)
{
for(int j=0;j<len-i;j++)
{
if(arr[j] < arr[j+1])
{
char temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main(int argc, const char *argv[])
{
char str[20] = "";
printf("请输入字符串:");
gets(str);
strpx(str);
printf("排序后为:");
puts(str);
return 0;
}
运行结果:
5> 实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int strhw(char *arr)
{
int len = strlen(arr);
for(int i=0;i<len/2;i++) //判断字符串是否回文
{
if(arr[i]!=arr[len-i-1])
return 0;
}
return 1;
}
int main(int argc, const char *argv[])
{
char str[20] = "";
printf("请输入字符串:");
gets(str);
if(strhw(str))
{
printf("该字符串回文。\n");
}
else
{
printf("该字符串不回文。\n");
}
return 0;
}
运行结果:
6> 使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储
代码:
include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dxd(int *a)
{
char *b =(char*)a; //判断大小端
return *b;
}
int main(int argc, const char *argv[])
{
int i = 1;
int j = dxd(&i);
if(j==1)
{
printf("大端\n");
}
else
{
printf("小端\n");
}
}
运行结果:
7>
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dcnum(char *arr)
{
int len = strlen(arr);
int count = 0;
for(int i=0;i<len;i++)
{
if(arr[i] != ' ' && arr[i+1] == ' ') //如果下标为i时不是空格,为i+1时是空格,单词数加1
count++;
}
for(int i=0;i<len;i++)
{
if(arr[i] != ' ' && arr[i+1] == '\0') //如果下标为i时不是空格,为i+1时是'\0',单词数加1
count++;
}
return count;
}
int main(int argc, const char *argv[])
{
char str[100] = "";
printf("请输入文本:");
gets(str);
int n = dcnum(str);
printf("该文本的单词数为:%d\n",n);
return 0;
}
运行结果:
思维导图: