指针 7.11 day9

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

#include "stdio.h"
int square(int n,int k)
{
    if(k==0)//任何数的零次方都为0
    {
        return 1;
    }else
    {
        return square(n,(k-1))*n;  //n^k = n * n^(k-1)
    }
    
}

int main(int argc, char const *argv[])
{
    int n=0,k=0;
    printf("输入底数:");
    scanf("%d",&n);
    printf("输入指数:");
    scanf("%d",&k);
    int result=square(n,k);
    printf("结果为:%d\n",result);
    return 0;
}

 

2、使用递归实现 stren 的功能

#include "stdio.h"
int str_len(char *arr)
{
    if(*arr=='\0')    //如果字符串为空,则长度为0
    {
        return 0;
    }
    
        return 1+str_len(1+arr);  //递归
    
}

int main(int argc, char const *argv[])
{
    char arr[100];
    int len=0;
    printf("请输入一个字符串:");
    gets(arr);
    putchar(10);
    int result=str_len(arr);
    printf("该字符串长度为: %d\n",result);
    return 0;
}

 

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

#include "stdio.h"
int hn(int n)
{
    if(n==1)
    {
        return 1;
    }
    return 2*hn(n-1)+1;   //递归
}

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

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

#include "stdio.h"
#include "string.h"
void sortstr(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;
                temp=str[j];
                str[j]=str[j+1];
                str[j+1]=temp;
            }
        }
    }
}

int main(int argc, char const *argv[])
{
    char str[100];
    printf("请输入一个字符串:");
    scanf("%s",str);
    printf("字符串排序后为:  ");
    sortstr(str);
    printf("%s\n",str);
    return 0;
}

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

#include "stdio.h"
#include "string.h"
int huiwen(char *str)
{
    int len=strlen(str);
    for (int i = 0; i < len/2; i++)  //判断字符串是否是回文
    {
        if(str[i]!=str[len-i-1])
        {
            return 0;
        }
    }
    return 1;  
}

int main(int argc, char const *argv[])
{
    char str[100];
    printf("请输入一个字符串:");
    scanf("%s",str);
    int result=huiwen(str);
    if(result==1)
    {
        printf("是回文字符串!\n");
    }else
    {
        printf("不是回文字符串!\n");
    }
    return 0;
}

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

#include "stdio.h"
void daduan()
{
    int x=0x12345678;
    char *n=(char*) x;    //转换为 char* 类型的指针
    if(*n==0x78)
    {
        printf("小端存储\n");
    }else
    {
        printf("大端存储\n");
    }
}

int main(int argc, char const *argv[])
{
    daduan();
    return 0;
}

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

#include <stdio.h>

int word(char *str) {
    int word= 0;
    int i = 0;

    // 遍历字符串
    while (*str != '\0') {
        // 如果当前字符是空格
        if (*str == ' ' || *str == '\n' ) {
            i = 0;
        }
        // 如果当前字符不是空格
        else if (!i) {
            i = 1;
            word++;
        }
        str++;
    }

    return word;
}

int main() {
    char text[1000];
    printf("请输入一段文本: ");
    gets(text);

    int words = word(text);
    printf("文本中的单词数为: %d\n", words);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值