1.使用递归实现 求 n 的 k 次方
#include <stdio.h>
int digui(int n,int k)
{
if(k==0) //任何数的0次方等于1
{
return 1;
}
else
{
return n*digui(n,k-1); //递归
}
}int main(int argc,const char *argv[])
{
int n=0,k=0,x=0;
printf("请输入:");
scanf("%d %d",&n,&k);
getchar();
x=digui(n,k);
printf("%d的%d次方是%d\n",n,k,x);
return 0;
}
2.使用递归实现 strlen 的功能
#include <stdio.h>
int digui(char *p)
{
if(*p=='\0') // '\0'是字符结束标志
{
return 0;
}
else
{
return 1+digui(p+1); //递归
}
}int main(int argc,const char *argv[])
{
char arr[20]={0};
printf("请输入字符串:");
gets(arr);
int x=digui(arr);
printf("字符串的实际长度为%d\n",x);
return 0;
}
3.使用递归实现汉诺塔问题
#include <stdio.h>
int digui(int n)
{
if(n==1) //当圆环为1时移动一次
{
return 1;
}
else
{
return 2*digui(n-1)+1; //递归
}
}int main(int argc,const char *argv[])
{
int n;
printf("请输入圆环个数:");
scanf("%d",&n);
int x=digui(n);
printf("需要移动%d次\n",x);
return 0;
}
4.定义一个函数将一个字符串从大到小排序
#include <stdio.h>
#include <string.h>void paixu(char *p,int n)
{
for(int i=1;i<n;i++) //冒泡排序
{
for(int j=0;j<n-i;j++)
{
if(*(p+j)<*(p+j+1))
{
char temp=*(p+j); //交换
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
printf("排序后的字符串为:");
for(int i=0;i<n;i++) //打印排序后的字符串
{
printf("%c",*(p+i));
}
putchar(10);
}int main(int argc,const char *argv[])
{
char arr[20]={0};
printf("请输入字符串:");
gets(arr);
paixu(arr,strlen(arr)); //调用排序函数
return 0;
}
5.实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)
#include <stdio.h>
#include <string.h>void huiwen(char *p,int n)
{
int flag=0; //是否为回文数的标志
for(int i=0;i<n/2;i++)
{
if(*(p+i)!=*(p+n-i-1)) //判断是否为回文数
{
flag=1; //不是则标志改为1,并结束循环
break;
}
}
if(flag==1)
{
printf("%s不是回文数\n",p);
}
else
{
printf("%s是回文数\n",p);
}
}int main(int argc,const char *argv[])
{
char arr[20]={0};
printf("请输入字符串:");
gets(arr);
huiwen(arr,strlen(arr)); //调用函数
return 0;
}
6.使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储
#include <stdio.h>
int main(int argc,const char *argv[])
{
int a=0x12345678;
char *p=(char *)&a;
if(*p==0x78)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
7.
#include <stdio.h>
#include <string.h>int danci(char *p,int n)
{
int x=0,f=0;
for(int i=0;i<n;i++)
{
//判断是字母且f为0才计数
if((*(p+i)>='a'&&*(p+i)<='z'||*(p+i)>='A'&&*(p+i)<='Z')&&f==0)
{
x++;
f=1; //f改为1,直到有不属于字母才重新改为0
}
if(!(*(p+i)>='a'&&*(p+i)<='z'||*(p+i)>='A'&&*(p+i)<='Z'))//不是字母
{
f=0;//改为0
}
}
return x;
}int main(int argc,const char *argv[])
{
char arr[100]={0};
printf("请输入字符串:");
gets(arr);
int x=danci(arr,strlen(arr)); //调用函数,并将结果赋为x
printf("单词个数为%d个\n",x);
return 0;
}
思维导图