1.使用递归实现 求 n的k次方
#include<stdio.h>
int fang(int a,int b)
{
if(a==0)
{
return 1;
}else
{
return b*fang(a-1,b);
}
}
//主函数
int main(int argc, char const *argv[])
{
int n=0,k=0;
printf("请输入n和k:");
scanf("%d%d",&n,&k);
int num=fang(k,n);
printf("%d的%d次方=%d\n",n,k,num);
return 0;
}
2.使用递归实现 strlen 的功能
#include<stdio.h>
#include<string.h>
//求字符串的长度
int str_len(char *arr)
{
if(*arr=='\0') //如果出现\0,就返回0
{
return 0;
}else
{
return 1+str_len(arr+1); //地址+1,往后走
}
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]={0};
printf("输入一串字符串:");
gets(str); //输入
int len=str_len(str);
printf("这个字符串的长度是:%d\n",len);
return 0;
}
3.使用递归实现汉诺塔问题
//汉诺塔函数
#include<stdio.h>
int han(int n)
{
if(n==1)
{
return 1; //只有一个的时候返回1
}else
{
return han(n-1)*2+1; //前一层的次数×2+1
}
}
//主函数
int main(int argc, char const *argv[])
{
int s=0;
printf("汉诺塔的层数为:");
scanf("%d",&s);
int num=han(s);
printf("汉诺塔需要移动%d次\n",num);
return 0;
}
4.定义一个函数将一个字符串从大到小排序
#include<stdio.h>
#include<string.h>
//字符串排序
void up(char arr[100])
{
int n=strlen(arr); //求字符串的长度
char temp="";
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(arr[j]<arr[j+1])
{
temp=arr[j]; //交换三步曲
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
printf("字符串从大到小排序为:\n");
for(int i=0;i<n;i++)
{
printf("%c",arr[i]);
}
printf("\n");
}
//主函数
int main(int argc, char const *argv[])
{
char str[100]={0};
printf("输入一串字符串:");
gets(str);
up(str);
return 0;
}
5.实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)
#include<stdio.h>
#include<string.h>
//检查回文字符串函数
void chart(char str[100])
{
//先求出字符串长度
int n=strlen(str);
char abc[100]={0};
for(int i=n-1;i>=0;i--) //重新用一个数组保存原字符串的反序
{
abc[i]=str[n-i-1];
}
int m=0;
//判断正序和反序是否相同,每次比较相同m就+1,当最后m=n时就说明相同
for(int j=0;j<n;j++)
{
if(abc[j]==str[j])
{
m++;
}else
{
m=0;
}
}
if(m==n)
{
printf("该字符串是回文字符串\n");
}else
{
printf("该字符串不是回文字符串\n");
}
}
//主函数
int main(int argc, char const *argv[])
{
char bbc[100]={0};
printf("请输入一串字符串:");
gets(bbc);
chart(bbc);
return 0;
}
6.使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储
#include <stdio.h>
int check_sys()
{
int i = 1; //1的16进制为 00 00 00 01
return (*(char *)&i); //用char访问1的字节
}
//主函数
int main()
{
int ret = check_sys();
if(ret == 1)
{
printf("我的主机是小端存储\n");//如果访问的值为01,就是小端
}
else
{
printf("我的主机是大端存储\n");//如果访问的值为00,就是大端
}
return 0;
}
7.有一段文本,写一段程序统计其中的单词数。例如:Do one thing at a time, and do well.注意:单词间的间隔不一定是一个空格。
#include<stdio.h>
#include<string.h>
int sex_in(char str[100])
{
int n=strlen(str); //求字符串的长度
int m=0;
for(int i=0;i<n;i++)
{
//判断依据:遍历字符串,当遍历到一个字母后面不是字母时,m+1
if(((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))&&((str[i+1]<'a'||str[i+1]>'z')&&(str[i+1]<'A'||str[i+1]>'Z')))
{
m++;
}
}
return m; //将m的值返回
}
//主函数
int main(int argc, char const *argv[])
{
char arr[100]={0};
printf("请输入一串字符串:");
gets(arr);
int x=sex_in(arr);
printf("单词数为:%d\n",x);
return 0;
}