zoukankan      html  css  js  c++  java
  • C语言经典题目

    回顾一下吧:

    一、

    有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    解析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

    常规写法:

    #include<stdio.h>
     
    int main()
    {
        int i,j,k;
        printf("
    ");
        for(i=1;i<5;i++) { // 以下为三重循环
            for(j=1;j<5;j++) {
                for (k=1;k<5;k++) { // 确保i、j、k三位互不相同
                    if (i!=k&&i!=j&&j!=k) { 
                        printf("%d,%d,%d
    ",i,j,k);
                    }
                }
            }
        }
    }

    避免一些不必要的循环,下面是优化写法:

    #include<stdio.h>
    int main()
    {
        int i,j,k;
        for(i=1;i<5;i++)
        {
            for(j=1;j<5;j++)
            {
                if(i==j)//百位与十位重复,跳过当前十位
                    continue;
                for(k=1;k<5;k++)
                {
                    if(i==k||j==k)//百位与个位重复,或十位与个位重复
                        continue;
                    printf("%d %d %d
    ",i,j,k);
                }
            }
        }
        return 0;
    }

    二、

    企业发放的奖金根据利润提成。

    • 利润(I)低于或等于10万元时,奖金可提10%;
    • 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
    • 20万到40万之间时,高于20万元的部分,可提成5%;
    • 40万到60万之间时高于40万元的部分,可提成3%;
    • 60万到100万之间时,高于60万元的部分,可提成1.5%;
    • 高于100万元时,超过100万元的部分按1%提成。

    从键盘输入当月利润I,求应发放奖金总数?

    #include<stdio.h>
    int main()
    {
        double i;
        double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
        printf("您好,请输入您的净利润:
    ");
        scanf("%lf",&i);
        bonus1=100000*0.1;
        bonus2=bonus1+100000*0.75;
        bonus4=bonus2+200000*0.05;
        bonus6=bonus4+200000*0.03;
        bonus10=bonus6+400000*0.015;
        if(i<100000)
        {
            bonus=i*0.1;
        }
        else if(i<=200000)
        {
            bonus=bonus1+(i-100000)*0.075;
        }
        else if(i<=400000)
        {
            bonus=bonus2+(i-200000)*0.05;
        }
        else if(i<=600000)
        {
            bonus=bonus4+(i-200000)*0.03;
        }
        else if(i<=1000000)
        {
            bonus=bonus6+(i-400000)*0.015;
        }
        else if(i>1000000)
        {
            bonus=bonus10+(i-1000000)*0.001;
        }
        printf("您获得的提成为:bonus=%lf.
    ",bonus);
    
        return 0;
    }

    用循环优化:

    #include<stdio.h>
    int main()
    {
        int i;
        double lirun;
        double jiangjin = 0;
        float fanwei[] = {100000, 200000, 400000, 600000, 1000000};
        float ticheng[] = {0.1, 0.075, 0.05, 0.03, 0.015, 0.01};
        printf("您好,请问您的净利润是多少?
    ");
        scanf("%lf", &lirun);
        for (i=0;i<5;i++)
        {
            if (lirun < fanwei[i])
            {
                jiangjin += lirun * ticheng[i];
                break;
            }
            else
            {
                jiangjin += fanwei[i] * ticheng[i];
                lirun -= fanwei[i];
            }
        }
        printf("提成是%.2lf
    ", jiangjin);
    
        return 0;
    }

    三、

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    程序分析:

    假设该数为 x。

    1、则:x + 100 = n2, x + 100 + 168 = m2

    2、计算等式:m2 - n2 = (m + n)(m - n) = 168

    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

    4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

    5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

    6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

    7、接下来将 i 的所有数字循环计算即可。

    /*一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?*/
    #include<stdio.h>
    int main()
    {
        int i,j,m,n,x;
        for(i=1;i<168/2+1;i++)
        {
            if(168%i==0)
            {
                j=168/i;
                if(i>j&&(i+j)%2==0&&(i-j)%2==0)
                {
                    m=(i+j)/2;
                    n=(i-j)/2;
                    x=n*n-100;
                    printf("%d+100=%d*%d
    ",x,n,n);
                    printf("%d+100+168=%d*%d
    ",x,m,m);
                }
            }
    
    
        }
        return 0;
    }

    四、

    古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

    分析(及其易懂了):

    说明:δ1表示出生第一个月的兔子数量,δ2表示出生第二个的兔子数量,δ3表示出生第三个月即成熟的兔子数量(单位:对)。也就是只有标注为δ3的兔子对才能生出新的一对δ1。下面分析中我们直接以δ出现的个数表示现存的兔子对数。

    第一个月:δ1                                                                                                    (1只)

    第二个月:δ2                                                                                                    (1只)

    第三个月:δ3+                                          δ1                                                    (2只)

    第四个月:δ3+                        δ1+            δ2                                                    (3只)

    第五个月:δ3+            δ1+      δ2+            δ3+            δ1                                  (5只)

    第六个月:δ3+      δ1+δ2+      δ3+      δ1+δ3+      δ1+δ2                                  (8只)

    第七个月:δ3+δ1+δ2+δ3+δ1+δ3+δ1+δ2+δ3+δ1+δ2+δ3+δ1                            (13只)

    以此类推。。。(为便于观察理解,上述分析中,上下能对应的是同一只兔子的生长状态,纵向观察一下这些可爱的δ,有没有发现更容易理解了呢)

    用数组:

    #include <stdio.h>
    
    int main()
    {
        int n[41],i;   //i表示月份
        
        n[0]=0;   //赋值
        n[1]=1;
        n[2]=1;
    
        for(i=3;i<41;i++)//计算从第三个月开始的兔子数量,i=3
        {
            n[i]=n[i-1]+n[i-2];
        }    
    
        printf("month	number
    ");   //输出
    
        for(i=1;i<41;i++)//输出自第一个月开始的兔子数量,i=1
        {
            printf("%d	%d
    ",i,n[i]);
        }
        return 0;
    }

    下面是递归方式,运行一下你会发现,时间复杂度较大,运算效率很低:

    //斐波那契数列
    
    #include<stdio.h>
    
    int fibonaci(int i)
    {
        if(i == 0)
        {
            return 0;
        }
        if(i == 1)
        {
            return 1;
        }
        return fibonaci(i-1) + fibonaci(i-2);
    }
    
    int main()
    {
        int i;
        printf("month	number
    ");
        for (i = 1; i < 41; i++)
        {
            printf("%d	%d
    ", i,fibonaci(i));
        }
    
        return 0;
    }

    五、

    判断101到200之间的素数。

    分析:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

    #include<stdio.h>
    #include<math.h>
    
    int main()
    { 
        int i,j,k;
        for(i=101;i<201;i++)
        {
            k=sqrt(i);   //如果i不能被2~√i间任一整数整除,i必定是素数
            for(j=2;j<=k;j++) if(i%j==0) break;
            if(j>k) printf("%d
    ",i);
            }
    }

    六、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

    分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

    #include<stdio.h>
    
    
    int main()
    { 
        int i,x,y,z;
        for(i=100;i<1000;i++)
        {
            x=i%10;//个位数
            y=i/10%10;//十位数
            z=i/100%10;//百位数
    
            if(i==(x*x*x+y*y*y+z*z*z))
            printf("%d
    ",i);
        }
        return 0;
    }

    七、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    分析:

           对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    • (1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
    • (2)但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
    • (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
    #include<stdio.h>
    int main()
    {
        int n,i;
        printf("请输入整数:");
        scanf("%d",&n);
        printf("%d=",n);
        for(i=2;i<=n;i++)
        {
            while(n%i==0)
            {
                printf("%d",i);
                n/=i;
                if(n!=1) printf("*");
            }
        }
        
        printf("
    ");
        return 0;
    }

    八、输入两个正整数m和n,求其最大公约数和最小公倍数。

    程序分析:

    (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;

    (2)求最大公约数用辗转相除法(又名欧几里德算法

    1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
    令r=a mod b
    设a=kc,b=jc,则k,j互素,否则c不是最大公约数
    据上,r=a-mb=kc-mjc=(k-mj)c
    可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
    由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。

    2)算法描述:

    第一步:a ÷ b,令r为所得余数(0≤r<b);

    第二步:互换:置 a←b,b←r,并返回第一步。

    附:辗转相除法

    有两整数a和b:

    ① a%b得余数c

    ② 若c=0,则b即为两数的最大公约数

    ③ 若c≠0,则a=b,b=c,再回去执行①

    例如求27和15的最大公约数过程为:

    27÷15 余1215÷12余312÷3余0因此,3即为最大公约数

    #include<stdio.h>
    int main()
    {
        int a,b,t,r;
        printf("请输入两个数字:
    ");
        scanf("%d %d",&a,&b);
        if(a<b)
        {
            t=b;
            b=a;
            a=t;
        }
        r=a%b;
        int n=a*b;
        while(r!=0)//辗转相除法
        {
            a=b;
            b=r;
            r=a%b;
        }
        printf("这两个数的最大公约数是%d,最小公倍数是%d
    ",b,n/b);
        return 0;
    }

    九、打印出杨辉三角形(要求打印出10行)。

    #include <stdio.h>
     
    int main()
    {
        int i,j;
        int a[10][10];
        printf("
    ");
        for(i=0;i<10;i++) {
            a[i][0]=1;
            a[i][i]=1;
        }
        for(i=2;i<10;i++)
            for(j=1;j<i;j++)
                a[i][j]=a[i-1][j-1]+a[i-1][j];
        for(i=0;i<10;i++) {
            for(j=0;j<=i;j++)
                printf("%5d",a[i][j]);
            printf("
    ");
        }
    }

    结构如下所示:

    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1

    十、创建一个链表。

    分析:

    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    typedef struct node
    {
        int data;
        struct node *next;
    }node,*Linklist;
    
    Linklist CreateList(int n)
    {
        int i = 1;
        Linklist L,rear,s;
        L = (node*)malloc(sizeof(node));
        if(!L)
            return 0;
        L->next = NULL;
        rear = L;
        while(n)
        {
            s = (Linklist)malloc(sizeof(node));
            printf("请输入第%d个数:",i++);
            scanf("%d",&(s->data));
            rear->next = s;
            rear = s;
            n--;
        }
        rear->next = NULL;
        return L;
    }
    void Print(Linklist L)
    {
        Linklist p = L->next;
        while(p)
        {
            printf("%d ",p->data);
            p = p->next;
        }
    }
    
    int main(void)
    {
        Linklist L = NULL;
        int n;
        printf("请输入数据个数:
    ");
        scanf("%d",&n);
        L = CreateList(n);
        Print(L);
    printf(" ");
    return 0; }

    十一、反向输出一个链表。

    #include <stdio.h>
    #include <stdlib.h>
     
    struct list
    {
        int data;
        struct list *next;
    };
     
    typedef struct list node;
    typedef node *link;
     
    void main()
    {
        link ptr, head, tail;
        int num, i;
        tail=(link)malloc(sizeof(node));
        tail->next=NULL;
        ptr=tail;
        printf("Please enter 5 data ==>
    ");
        for(i=0; i <= 4; i++)
        {
            scanf("%d", &num);
            ptr->data=num;
            head=(link)malloc(sizeof(node));
            head->next=ptr;
            ptr=head;
        }
        ptr=ptr->next;
        while(ptr != NULL)
        {
            printf("The value is ==>%d
    ", ptr->data);
            ptr=ptr->next;
        }
    }

    十二、连接两个链表。

    #include <stdlib.h>
    #include <stdio.h>
    struct list
    {
        int data;
        struct list *next;
    };
    typedef struct list node;
    typedef node *link;
    link delete_node(link pointer,link tmp)
    {
        if (tmp==NULL) /*delete first node*/
            return pointer->next;
        else
        {
            if(tmp->next->next==NULL)/*delete last node*/
                tmp->next=NULL;
            else /*delete the other node*/
                tmp->next=tmp->next->next;
        return pointer;
        }
    }
    void selection_sort(link pointer,int num)
    {
        link tmp,btmp;
        int i,min;
        for(i=0;i<num;i++)
        {
            tmp=pointer;
            min=tmp->data;
            btmp=NULL;
            while(tmp->next)
            {
                if(min>tmp->next->data)
                {
                    min=tmp->next->data;
                    btmp=tmp;
                }
                tmp=tmp->next;
            }
            printf("40: %d
    ",min);
            pointer=delete_node(pointer,btmp);
        }
    }
    link create_list(int array[],int num)
    {
        link tmp1,tmp2,pointer;
        int i;
        pointer=(link)malloc(sizeof(node));
        pointer->data=array[0];
        tmp1=pointer;
        for(i=1;i<num;i++)
        {
            tmp2=(link)malloc(sizeof(node));
            tmp2->next=NULL;
            tmp2->data=array[i];
            tmp1->next=tmp2;
            tmp1=tmp1->next;
        }
        return pointer;
    }
    link concatenate(link pointer1,link pointer2)
    {
        link tmp;
        tmp=pointer1;
        while(tmp->next)
            tmp=tmp->next;
        tmp->next=pointer2;
        return pointer1;
    }
    int main(void)
    {
        int arr1[]={3,12,8,9,11};
        link ptr;
        ptr=create_list(arr1,5);
        selection_sort(ptr,5);
    }

    十三、输入一个整数,并将其反转后输出。

    #include <stdio.h>
    int main()
    {
        int n,reverseNumber=0,remainder;
    
        printf("请输入一个整数:");
        scanf("%d",&n);
    
        while(n!=0)
        {
            remainder=n%10;
            reverseNumber=reverseNumber*10+remainder;
            n/=10;
        }
        printf("反转后的整数是:%d
    ",reverseNumber);
        return 0;
    }

    十四、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)。

    #include<stdio.h>
    #include<stdlib.h>
    double  evenumber(int n);
    double  oddnumber(int n);
     
    int main()
    {
        int n;
        double r;
        double (*pfunc)(int);
        printf("请输入一个数字:");
        scanf("%d",&n);
        if(n%2==0) pfunc=evenumber;//偶数
        else pfunc=oddnumber;//奇数
        
        r=(*pfunc)(n);
        printf("%lf
    ",r);
        
        system("pause");
        return 0;
    }
    double  evenumber(int n)//偶数时,执行1/2+1/4+...+1/n
    {
        double s=0,a=0;
        int i;
        for(i=2;i<=n;i+=2)
        {
            a=(double)1/i;
            s+=a;
        }
        return s;
    }
    double  oddnumber(int n)//奇数时,执行1/1+1/3+...+1/n
    {
        double s=0,a=0;
        int i;
        for(i=1;i<=n;i+=2)
        {
            a=(double)1/i;
            s+=a;
        }
        return s;
    }

    十五、填空练习(指向指针的指针)。

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        char *s[]={"man","woman","girl","boy","sister"};
        char **q;
        int k;
        for(k=0;k<5;k++)
        {
            q=&s[k];       /*在这里填入内容*/
            printf("%s
    ",*q);
        }
        return 0;
    }

    十六、八进制转换为十进制

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int n=0,i=0;
        char s[20];
        printf("请输入一个8进制数:
    ");
        gets(s);
        while(s[i]!=''){
            n=n*8+s[i]-'0';
            i++;
        }
        printf("刚输入的8进制数转化为十进制为
    %d
    ",n);
        
        return 0;
    }

    十七、求0—7所能组成的奇数个数。

    程序分析:

    这个问题其实是一个排列组合的问题,设这个数为 sun=a1a2a3a4a5a6a7a8,a1-a8 表示这个数的某位的数值,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。如果最后一位数为偶数,则这个数一定为偶数。

    a1-a8可以取 0-7 这个八个数字,首位数字不为 0。

    从该数为一位数到该数为8位数开始统计奇数的个数:

    • 1.当只有一位数时也就是该数的最后一位,奇数个数为4
    • 2.当该数为两位数时,奇数个数为4*7=28
    • 3.当该数为三位数时,奇数个数为:4*8*7=224
    • ...
    • 8.当该数为八位数时,奇数个数为:4*8*8*8*8*8*8*7(依次为最后一位到第一位)
    #include<stdio.h>
    int main(int agrc, char*agrv[])
    {
        long sum = 4, s = 4;//sum的初始值为4表示,只有一位数字组成的奇数个数为4个
        int j;
        for (j = 2; j <= 8; j++)
        {    
            printf("%d位数为奇数的个数%ld
    ", j-1, s);
            if (j <= 2)
                s *= 7;
            else
                s *= 8;
            sum += s;    
        }
        printf("%d位数为奇数的个数%ld
    ", j-1, s);
        printf("奇数的总个数为:%ld
    ", sum);
        // system("pause");
        return 0;
    }

    十八、一个偶数总能表示为两个素数之和。

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int Isprimer(unsigned int n);
    int main()
    {
        unsigned int n,i;
        do{
            printf("请输入一个偶数:
    ");
            scanf("%d",&n);
        }while(n%2!=0);
        for(i=1;i<n;i++)
            if(Isprimer(i)&&Isprimer(n-i))
                break;
        printf("偶数%d可以分解成%d和%d两个素数的和
    ",n,i,n-i);
        
        return 0;
    }
    int Isprimer(unsigned int n)
    {
        int i;
        if(n<4)return 1;
        else if(n%2==0)return 0;
        else
            for(i=3;i<sqrt(n)+1;i++)
                if(n%i==0)return 0;
        
        return 1;
    }

    十九、判断一个素数能被几个9整除。

    分析:这道题的意思应该是判断一个数能被含有且只含有若干个9的数字整除。素数是不能被除1和自身之外的数整除的

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        int p,i;
        long int sum=9;
        printf("请输入一个素数:
    ");
        scanf("%d",&p);
        for(i=1;;i++)
            if(sum%p==0)break;
            else sum=sum*10+9;
        
        printf("素数%d能整除%d个9组成的数%ld
    ",p,i,sum);
        return 0;
    }

    二十、将两个字符串连接。

    #include <stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    char* strconnect(char *str1,char *str2);
     
    int main()
    {
        char str1[20],str2[20];
        char *str;
        puts("请输入两个字符串,用回车分开:");
        scanf("%s%s", str1, str2);
        str=strconnect(str1,str2);
        puts("连接后的字符串为:");
        puts(str);
        return 0;
    }
    char* strconnect(char *str1,char *str2)
    {
        char*str;
        str=(char*)malloc(strlen(str1)+strlen(str2)+1);
        str[0]='';
        strcat(str,str1);
        strcat(str,str2);
        return str;
    }

    二十一、

    读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的 *。

    #include <stdio.h>
    void Print(int n)
    {
        for(int i=0;i<n;i++)
            printf("*");
        printf("
    ");
    }
    int main()
    {
        int n;
        for(int i=0;i<7;i++)//7:每轮只能输出7次,之后程序退出
        {
            printf("你想输出几颗星:",n);
            scanf("%d",&n);
            Print(n);
        }
        return 0;
    }

    二十二、猜谜游戏。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    void caizi(void)
    {
        int n;
        char begin;
        int count = 1;
        srand((int)time(NULL));
        int m = (rand() % 100) + 1;
        puts("游戏开始,请输入数字:");
        while (1)
        {
            scanf("%d", &n);
            if (n == m)
            {
                printf("猜中了,使用了 %d 次!
    ", count);
                if (count == 1)
                {
                    printf("你是神级人物了!膜拜
    ");
                    getchar();
                    printf("你已经达到最高级别,还需要玩吗?Y/N 
    ");
                    scanf("%c", &begin);
                    if (begin == 'Y' || begin == 'y')      //重复玩的一个嵌套循环
                    {
                        caizi();
                    }
                    else
                    {
                        printf("谢谢,再见!
    ");
                    }
                }
                else if (count <= 5)
                {
                    printf("你是王级人物了!非常赞
    ");
                    getchar();
                    printf("需要挑战最高级别不?Y/N 
    ");
                    scanf("%c", &begin);
                    if (begin == 'Y' || begin == 'y')
                    {
                        caizi();
                    }
                    else
                    {
                        printf("谢谢,再见!
    ");
                    }
                }
                else if (count <= 10)
                {
                    printf("你是大师级人物了!狂赞
    ");
                    getchar();
                    printf("需要挑战最高级别不?Y/N 
    ");
                    scanf("%c", &begin);
                    if (begin == 'Y' || begin == 'y')
                    {
                        caizi();
                    }
                    else
                    {
                        printf("谢谢,再见!
    ");
                    }
                }
                else if (count <= 15)
                {
                    printf("你是钻石级人物了!怒赞
    ");
                    getchar();
                    printf("需要挑战最高级别不?Y/N 
    ");
                    scanf("%c", &begin);
                    if (begin == 'Y' || begin == 'y')
                    {
                        caizi();
                    }
                    else
                    {
                        printf("谢谢,再见!
    ");
                    }
                }
                else
                {
                    getchar();
                    printf("你的技术还有待提高哦!重玩? Y/N
    ");
                    scanf("%c",&begin);
                    if (begin == 'Y' || begin == 'y')
                    {
                        caizi();
                    }
                    else
                    {
                        printf("谢谢,再见!
    ");
                    }
                }
                break;
            }
            else if (n < m)
            {
                puts("太小了!");
                puts("重新输入:");
            }
            else
            {
                puts("太大了!");
                puts("重新输入:");
            }
            count++;//计数器
            
            
        }
    }
     
     
    int main(void)
    {
        
        caizi();
        system("pause");
        return 0;
    }

    二十三、简单的结构体应用实例。

    #include <stdio.h>
    
    struct programming
    {
        float constant;
        char *pointer;
    };
    
    int main()
    {
        struct programming variable;
        char string[] = "https://home.cnblogs.com/u/ariel-dreamland/";
        
        variable.constant = 1.23;
        variable.pointer = string;
        
        printf("%f
    ", variable.constant);
        printf("%s
    ", variable.pointer);
        
        return 0;
    }

    二十四、计算字符串中子串出现的次数 。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        int i,j,k,TLen,PLen,count=0;
        char T[50],P[10];
        printf("请输入两个字符串,以回车隔开,母串在前,子串在后:
    ");
        gets(T);
        gets(P);
        TLen=strlen(T);
        PLen=strlen(P);
        for(i=0;i<=TLen-PLen;i++)
        {
            for(j=0,k=i;j<PLen&&P[j]==T[k];j++,k++)
                ;
            if(j==PLen)count++;
        }
        printf("%d
    ",count);
        system("pause");
        return 0;
    }
  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/10446418.html
Copyright © 2011-2022 走看看