C基础day9

一、思维导图

二、课后练习

1> 使用递归实现 求 n 的 k 次方

#include<myhead.h>

int Pow(int n,int k)
{
	if(k == 0 )  //递归出口
	{
		return 1;
	}
	else
	{
		return n*Pow(n,k-1);  	//递归主体
	}
}

int main(int argc, const char *argv[])
{
	int n=0,k=0;
	printf("请输入n和k:");
	scanf("%d%d",&n,&k);
	int res = Pow(n,k);
	printf("%d的%d次方:%d\n",n,k,res);
	return 0;
}

2> 使用递归实现 strlen 的功能

#include<myhead.h>
#define Max_Size 100

int Strlen_Dig(char str[Max_Size])
{
	char *ptr = str;
	if(*ptr == '\0') 	//递归出口
	{
		return 0;
	}
	else
	{
		return Strlen_Dig(ptr+1)+1; //指针偏移
	}
}

int main(int argc, const char *argv[])
{
	while(1)
	{
		printf("请输入字符串:");
		char str[Max_Size]; 	//定义字符数组
		gets(str); 				//输入字符数组
		int res = Strlen_Dig(str); //调用函数求数组长度
		printf("字符串的长度为:%d\n",res);
	}
	return 0;
}

3> 使用递归实现汉诺塔问题

#include<myhead.h>

int Tower_Han(int n)
{
	//递归出口
	if(n == 1)
	{
		return 1;
	}
	else
		return Tower_Han(n-1)*2+1;
}

int main(int argc, const char *argv[])
{
	int n = 0;
	printf("请输入汉诺塔的层数:");
	scanf("%d",&n);
	int res = Tower_Han(n);
	printf("%d层汉诺塔需要移动%d次\n",n,res);
	return 0;
}

4> 定义一个函数将一个字符串从大到小排序

#include<myhead.h>
#define Max_Size 100

void Sort_Str(char str[Max_Size])
{
	char *ptr =str;
	int len = strlen(str); //求字符串长度
	//冒泡排序
	for(int i=1;i<len;i++)
	{
		for(int j=0;j<len-i;j++)
		{
			if(*(ptr+j) < *(ptr+j+1)) //降序排序
			{
				char temp = *(ptr+j);
				*(ptr+j) = *(ptr+j+1);
				*(ptr+j+1) = temp;
			}
		}
	}
}

int main(int argc, const char *argv[])
{
	char str[Max_Size];
	//输入字符数组
	printf("请输入字符串");
	gets(str);
	//调用字符数组排序函数
	Sort_Str(str);
	//输出排序后的字符串
	puts(str);
	return 0;
}

5> 实现一个函数,用于检查一个字符串是否是回文字符串(正序和反序都相同)

#include<myhead.h>

#define Max_Size 100

void HuiWen(char str[Max_Size])
{
	//定义指针变量指向字符数组首位
	char *ptr = str;
	//求字符串长度
	int len = strlen(str);
	//判断上是否为回文字符串
	int i=0;
	for(i=0;i<len/2;i++)
	{
		//判断字符串是否对称相等
		if(*(ptr+i) == *(ptr+len-1-i))
			continue;
		else
			break;
	}
	//通过i判断上述判断进行位置
	if(i >= len/2)
		printf("该字符串是回文字符串\n");
	else
		printf("该字符串不是回文字符串\n");
}

int main(int argc, const char *argv[])
{
	//定义一位字符数组存储字符串
	char str[Max_Size];
	//输入字符数组
	printf("请输入字符串:");
	gets(str);
	//调用函数判断
	HuiWen(str);
	return 0;
}

6> 使用指针完成判断自己的主机存储多字节整数时,是大端存储还是小端存储

#include<myhead.h>
int main(int argc, const char *argv[])
{
	int n =1;
	char *ptr = (char*)&n;
	if(*ptr == 1)
		printf("小端存储\n");
	else
		printf("大端存储\n");
	
	return 0;
}

7> 有一段文本,写一段程序统计其中的单词数。例如:Do one thing at a time, and do well.
(注意:单词间的间隔不一定是一个空格。)

#include<myhead.h>

#define Max_size 100

//判断字符是否为空白字符
int isWhitespace(char c) {
    return (c == ' ' || c == '\t' || c == '\n' || c == '\r');
}

// 判断字符是否为标点符号
int isPunctuation(char c) {
    return (c == '.' || c == ',' || c == ';' || c == ':' || c == '!' || c == '?');
}

// 计算文本中的单词数
int Num_Word(const char* str) {
    int inWord = 0;
    int wordCount = 0;

    while (*str) {
        // 跳过空白字符和标点符号
        while (isWhitespace(*str) || isPunctuation(*str)) {
            str++;
        }

        if (*str) { // 如果不是字符串末尾
            wordCount++; // 遇到单词的开始
            inWord = 1;

            // 继续往后找,直到遇到空白字符或标点符号
            while (*str && !isWhitespace(*str) && !isPunctuation(*str)) {
                str++;
            }
        }
    }

    return wordCount;
}

int main(int argc, const char *argv[])
{
	//定义字符数组并输入
	char str[Max_size];
	printf("请输入字符串:");
	gets(str);
	//调用求单词数函数
	int res = Num_Word(str);
	printf("上述文本单词数量为:%d\n",res);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值