学习笔记:

作业:
1.使用递归实现求n的k次方
//使用递归实现求n的k次方
#include <stdio.h>
int nnn();
int main(int argc, char const *argv[])
{
int n, k;
printf("请输入要求的数以及要求的次方:");
scanf("%d %d", &n, &k);
int result = nnn(n, k);
printf("%d的%d次为%d\n",n,k,result);
return 0;
}
int nnn(int a, int b)
{
if (b == 0)
{
return 1;
}
else
{
return a * nnn(a, b - 1);
}
}

2.使用递归实现strlen的功能
// 使用递归实现strlen的功能
#include <stdio.h>
int sum();
int main(int argc, char const *argv[])
{
char str[100];
printf("请输入字符串:");
scanf("%s", str);
int length = sum(str);
printf("字符串%s的长度为%d\n", str, length);
return 0;
}
int sum(char *str1)
{
if (*str1 == '\0')
{
return 0;
}
else
{
return 1 + sum(str1 + 1);
}
}

3.用递归函数实现汉诺塔问题
//用递归函数实现汉诺塔问题
#include <stdio.h>
int hannuota();
int main()
{
int x;
printf("请输入盘子的个数:");
scanf("%d", &x);
int n = hannuota(x);
printf("需要操作的次数:%d\n", n);
}
int hannuota(int x)
{
if (x == 1)
{
return 1;
}
else
{
return 2 * hannuota(x - 1) + 1;
}
}

4. 定义一个函数将一个字符串从大到小排序
// 定义一个函数将一个字符串从大到小排序
#include <stdio.h>
#include <string.h>
void sort();
int main(int argc, char const *argv[])
{
char str[100];
printf("请输入一个字符串: ");
gets(str);
sort(str);
printf("排序后的字符串: %s\n", str);
return 0;
}
void sort(char *str)
{
int len = strlen(str);
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (str[j] < str[j + 1])
{
char temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
}

5.实现一个函数 用于检查一个字符串是否是回文字符串(正序和反序都相同)
// 实现一个函数 用于检查一个字符串是否是回文字符串(正序和反序都相同)
#include <stdio.h>
#include <string.h>
int huiwen();
int main(int argc, char const *argv[])
{
char str[100];
printf("请输入一个字符串:");
gets(str);
int x = huiwen(str);
if (x == 1)
{
printf("是回文\n");
}
else
{
printf("不是回文\n");
}
return 0;
}
int huiwen(char a[])
{
int len = strlen(a);
int count = 0;
for (int i = 0; i < len / 2; i++)
{
if (a[i] != a[len - i - 1])
{
return 0;
}
}
return 1;
}
6.使用指针完成判断自己的主机存储多字节整数时是大端存储还是小端存储
// 使用指针完成判断自己的主机存储多字节整数时是大端存储还是小端存储
// 思路:
// 定义一个多字节整数,比如一个 int 类型的整数。
// 使用指针指向这个整数的地址。
// 通过指针读取整数的第一个字节和最后一个字节。
// 如果第一个字节存储的是整数的高位数据,那么就是大端存储;
// 如果第一个字节存储的是整数的低位数据,那么就是小端存储。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int x = 0x1234578;
int *zch = &x;
printf("%p\n", zch);
printf("0x%x\n", *zch);
//取第一个字节
char *first = (char *)zch;
char first1 = *first;
printf("0x%x\n", first1);
if (first1 == 0x78)
{
printf("是小端存储");
}
else
{
printf("是大端存储");
}
return 0;
}

7.统计单词数
// 统计单词数
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char str[] = "Do one thing at a time,and do well.";
int len = strlen(str);
int count = 1;
for (int i = 0; i < len; i++)
{
if (!((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')))
{
if ((str[i + 1] >= 'a' && str[i + 1] <= 'z') || (str[i + 1] >= 'A' && str[i + 1] <= 'Z'))
{
count++;
}
}
}
printf("%s\n这段文本中共有%d个单词\n", str, count);
return 0;
}
