作业
1> 使用递归实现 求 n 的 k 次方
程序代码:
double print_num(int n,int k)
{
if (k == 0)//递归出口
{
return 1;
}else if (k < 0)
{
return(1.0 / (print_num(n,-k)));
}else
{
return n * print_num(n,k-1);//递归表达式
}
}
/***********主函数***********/
int main(int argc, char const *argv[])
{
int n = 0,k = 0;
printf("请输入一个数n^k:\n");
scanf("%d%d",&n,&k);
double res = print_num(n,k);//调用函数求n^k
printf("res = %lf\n",res);
return 0;
}运行结果:
2> 使用递归实现 strlen 的功能插入
程序代码:
int str(char *str)
{
int count = 0;//计数
while (*str != '\0')
{
count++;//每循环一次计数器加1
str++;//指针向后移动一个字符
}
return count;
}int main(int argc, char const *argv[])
{
char arr[] = "I love China";//初始化数组
int len = str(arr);
printf("len = %d\n",len);
return 0;
}运行结果:
3> 使用递归实现汉诺塔问题
程序代码:
#include<stdio.h>
int count=0;
void hannuo(int n, char a, char b, char c)
{
if (n >= 2)//终止条件
{
hannuo(n - 1, a, c, b);
count++;
printf("%d: %c -> %c\n",count,a,c);
hannuo(n - 1, b, a, c);
}
else if (n == 1)
{
count++;
printf("%d: %c -> %c\n", count, a, c);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
hannuo(n, 'A', 'B', 'C');
return 0;
}运行结果:
4> 定义一个函数将一个字符串从大到小排序
程序代码:
void sort_str(char str[])
{
for (int i = 1; i < MAX; i++)
{
for (int j = 0; j < MAX - i; j++)
{
if (str[j] < str[j+1])
{
//交换
char temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
}
printf("排序后的结果为:%s\n",str);
}int main(int argc, char const *argv[])
{
char arr[MAX] = "";
printf("请输入一个字符串:");
gets(arr);
sort_str(arr);return 0;
}运行结果:
5> 实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)
程序代码:
char arr[20] = "";
int j = 0;
void rev(char *p)
{
if (*p != '\0')
{
rev(p+1);
arr[j] = *p;
j++;
}
}int main(int argc, char const *argv[])
{
char str[MAX] = "";
printf("请输入一个字符串:");
gets(str);
rev(str);
if (strcmp(arr,str) == 0)
{
printf("是回文\n");
}else
{
printf("不是回文\n");
}
return 0;
}运行结果:
6> 使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储
程序代码:
void endian()
{
int num = 0x12345678;//定义变量存储多字节整数char *ptr = (char *)#//&num 是int *类型
//对地址低位的一字节进行判断
if (*ptr == 0x12)
{
printf("大端储存\n");
}else
{
printf("小端储存\n");
}
}int main(int argc,const char *argv[])
{
endian();
return 0;
}
运行结果:
7>
程序代码:
//定义一个函数
int words(char str[])
{
int len = strlen(str);//求字符串实际长度
int count = 0;
//遍历整个字符串
for (int i = 0; i < len; i++)
{
if (str[i] != ' ' && str[i+1] == ' ')
{
count++;//表示有一个单词出现
}
}
//遍历结束后,判断最后一个元素是否为空格
if (str[len - 1] != ' ')
{
count ++;
}
return count;
}int main(int argc, char const *argv[])
{
char str[100] = "";
printf("请输入一段话:");
gets(str);printf("一共有%d个单词\n",words(str));
return 0;
}
运行结果: