PTA-练习9

目录

[实验10-4 递归实现顺序输出整数](#实验10-4 递归实现顺序输出整数)

[实验10-10 十进制转换二进制](#实验10-10 十进制转换二进制)

[实验10-6 递归求简单交错幂级数的部分和](#实验10-6 递归求简单交错幂级数的部分和)

[实验11-1-2 输出月份英文名](#实验11-1-2 输出月份英文名)

[实验11-1-6 指定位置输出字符串](#实验11-1-6 指定位置输出字符串)

[实验11-1-8 查找子串](#实验11-1-8 查找子串)


递归的基本思路:

  1. 推出递归的条件或者进入递归的条件
  2. 每层递归需要执行的代码

第一种简单的就是:像Fabonacci数列和求阶乘这样,只需要判断递归推出的条件,然后递归加或者乘

cpp 复制代码
int f( int n ){
    if(n==0){
        return 0;
    }
    if(n==1){
        return 1;
    }
    return f(n-1)+f(n-2);
}

第二种复杂一点就是,满足条件进入递归,直到最深层后不满足条件,然后依次推出递归执行相应的操作,比如依次输出123456的数字

cpp 复制代码
void printdigits( int n ){
    
    if (n / 10 > 0)
        printdigits(n / 10);
    
    printf ("%d\n", n % 10);
}

实验10-4 递归实现顺序输出整数

cpp 复制代码
void printdigits( int n ){
    
    if (n / 10 > 0)
        printdigits(n / 10);
    
    printf ("%d\n", n % 10);
}

实验10-10 十进制转换二进制

cpp 复制代码
void dectobin( int n ){
    if(n/2!=0){
        dectobin(n/2);
    }
    printf("%d",n%2);
}

实验10-6 递归求简单交错幂级数的部分和

cpp 复制代码
#include <stdlib.h>
double fn( double x, int n ){
    if(n==0){
        return 0;
    }
    return pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}

实验11-1-2 输出月份英文名

强调一下,函数里面如果要返回函数里面的形式参数,需要使用指针形式

  • 如果这里使用char str[12][100]定义二维字符串数组的话,参数传递不出函数就会被释放,所以使用指针字符串
  • 还有就是,指针指向的内容为空的话,NULL表示
cpp 复制代码
//好好好,考英语是吧
#include <string.h>
char *getmonth( int n ){
    if(n<1||n>12){
        return NULL;
    }
    char *str[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};
    
    return str[n-1];
}

如果不想这么麻烦直接直接:

cpp 复制代码
char *getmonth( int n ){
    switch(n){
        case 1: return "January";
        case 2: return "February";
        case 3: return "March";
        case 4: return "April";
        case 5: return "May";
        case 6: return "June";
        case 7: return "July";
        case 8: return "August";
        case 9: return "September";
        case 10: return "October";
        case 11: return "November";
        case 12 :return "December";
        default: return NULL;
    }
}

实验11-1-6 指定位置输出字符串

cpp 复制代码
#include<string.h>
#include <stdlib.h>
char *match( char *s, char ch1, char ch2 ){
    int n=strlen(s);
    char *a=(char*)malloc(sizeof(char)*n);
    int j=0;
    int i=0;
    for(i=0;i<n;i++){
        if(s[i]==ch1){
            while(s[i]!=ch2){
                a[j]=s[i];
                j++;
                i++;
            }
            a[j]=ch2;
            j++;
            break;
        }//of if;
        
    }
    printf("%s\n",a);
    for(;i+1<n;i++){
        a[j]=s[i+1];
        j++;
    }
    return a;
    
}

实验11-1-8 查找子串

返回数组中某个元素的指针,直接使用数组名a+元素的下标就可以了

比如求char a[100]="dhdssjsjbsdd",中求元素字符'b'的地址指针,直接b+8就可以了

cpp 复制代码
#include <stdlib.h>
#include <string.h>
//sjdhjdhdj
//dhd
/*char *search( char *s, char *t ){
    int n=strlen(s);
    int j=0;
    int i=0;
    int m=strlen(t);
    for(i=0;i<n;i++){
        if(s[i]==t[j]){
            j++;
        }else if(s[i]!=t[j]){
            j=0;
        }
        if(j==m){
            return s+i-m+1;
        }
        
    }
    return -1;
}
*/
#include <string.h>

char *search(char *s, char *t) {
    int n = strlen(s);
    int m = strlen(t);
    for (int i = 0; i < n; i++) {
        int j = 0;
        while (j < m && s[i + j] == t[j]) {
            j++;
        }
        if (j == m) {
            return s + i;
        }
    }
    return NULL;
}

/*
char *search( char *s, char *t )
{
  return strstr(s,t);
}

*/

OKOK,以后字符串函数为四个了

  1. strlen(a),返回字符串a的长度
  2. strcpy(b,a),把字符串a赋值给字符串b(copy,不能使用=)
  3. strcmp(a,b),比较字符串a比的大小,a>b返回正数,等于返回0
  4. strstr(a,b),查找子串b在主串a中出现的位置,如果出现返回第一个字符的地址,如果没有则返回NULL
相关推荐
n***F8751 分钟前
SpringMVC 请求参数接收
前端·javascript·算法
Liangwei Lin11 分钟前
洛谷 P1025 [NOIP 2001 提高组] 数的划分
算法
yuuki23323329 分钟前
【C++】类和对象(上)
c++·后端·算法
dangdang___go36 分钟前
动态内存管理||malloc和free.realloc和calloc
c语言·开发语言·算法·动态内存管理
稚辉君.MCA_P8_Java36 分钟前
Gemini永久会员 快速排序(Quick Sort) 基于分治思想的高效排序算法
java·linux·数据结构·spring·排序算法
数字化脑洞实验室1 小时前
智能决策与决策优化:从算法到产业的演进逻辑
算法
cpp_25011 小时前
P5412 [YNOI2019] 排队
数据结构·c++·算法·题解·洛谷
kingmax542120081 小时前
图论核心算法(C++):包括存储结构、核心思路、速记口诀以及学习方法, 一站式上机考试学习【附PKU百练,相关练习题单】
c++·算法·图论·信奥赛·上机考试·百练·pku
罗湖老棍子1 小时前
【例9.15】潜水员(信息学奥赛一本通- P1271)
c++·算法·动态规划·二维费用背包
_OP_CHEN1 小时前
算法基础篇:(二十一)数据结构之单调栈:从原理到实战,玩转高效解题
数据结构·算法·蓝桥杯·单调栈·算法竞赛·acm/icpc