zoukankan      html  css  js  c++  java
  • C 2013笔试题

    1、把整数分解成素数 90=2*3*3*5 【见2015年】

    方法一:

    int main()
    {
        int n, i=2;
        printf("
    Input:");
        scanf("%d", &n);
        printf("=");
        i = 2;
        while (n > 1)
        {
            if (n%i == 0)
            {
                printf("%d", i);
                n = n / i;
                if (n > 1) printf("*");
            }
            else i++;  // 如果不能整除时,说明不是其素数
        }
        return 0;
    }

    方法二:

    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<string.h>
    
    //判读是否为质数,并带回它的最小因数(除1之外)。
    int isprime(int value, int *submultiple)
    {
        int i;
        for (i=2; i<(int)sqrt(value)+1; i++)
        {
            if ((value%i)==0)
            {
                *submultiple=i;
                return 0;
            }
        }
        return 1;
    }
    //递归调用,如果为质数则打印出来,否则将该数除以它的最小因数(除1之外)后递归调用
    void prime_submultiple(int value)
    {
        int submultiple;
        if (isprime(value,&submultiple))
        {
            printf("%d",value);
            return;
        }
        else
        {
            printf("%d*",submultiple);
            prime_submultiple(value/submultiple);
            return;
        }
     }
    int main()
    {
        int x;
        printf("
    Please input a integar:");
        scanf("%d",&x);
        printf("%d=",x);
        prime_submultiple(x);
    }
    

    方法三:

    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    #include<string.h>
    //判断是否为质数,并带回他的最小因数(1除外),这个最小因数为素数
    int IfPrime(int value,int *submultiple)
    {
        int i;
        for(i=2; i <sqrt(value); i++)
        {
            if(0 == value%i)
            {
                *submultiple =i;
                return 0;
            }
        }
        return 1;
    }
    //递归调用,如果为质数则直接打印出来,否则为合数,将该合数除以它的最小因数(1除外)后递归调用
    void primre_submultiple(int value)
    {
        int submultiple;
    //value为质数(素数)
        if(IfPrime(value,&submultiple))
        {
            printf("%d",value);
            return;
        }
        else
        {
            printf("%d*",submultiple);
            primre_submultiple(value/submultiple);
            return;
        }
    }
    void main()
    {
        int idata;
        printf("please input a integar:");
        scanf("%d",&idata);
        printf("%d = ",idata);
        primre_submultiple(idata);
        printf("
    ");
    }
    

    2、计算1-x+x^2/2!-x^3/3!+.....+x^n/n! 见【2015相似】

    方法一:

    #include<stdio.h>
    
    int Calculate(int x,int n)
    {
        int total=0;
        int itemp_a=x,itemp_b=1;
        int i,j;
        for(i=0; i <= n; i++)
        {
            if(0 == i)
            {
                total +=1;
                printf("%d : total=%d
    ",i,total);
            }
            else if(1 == i)
            {
                total = total-x;
                printf("%d : total=%d
    ",i,total);
            }
            else
    //===oushu
            {
                if((0 == i%2))
                {
                    itemp_a =1;
                    itemp_b =1;
                    for(j=i; j>= 1; j--)
                    {
                        itemp_a *=x;
                        itemp_b *=j;
                        printf("itemp_a=%d, itemp_b=%d
    ",itemp_a,itemp_b);
                    }
                    printf("%d : total=%d
    ",i,total);
                    total +=(itemp_a/itemp_b);
                    printf("%d,total:%d
    ",i,total);
                }
                else
                {
                    itemp_a =1;
                    itemp_b =1;
                    for(j=i; j>= 1; j--)
                    {
                        itemp_a *=x;
                        itemp_b *=j;
                        printf("itemp_a=%d, itemp_b=%d
    ",itemp_a,itemp_b);
                    }
                    printf("%d : total=%d
    ",i,total);
                    total = total-(itemp_a/itemp_b);
                    printf("%d,total:%d
    ",i,total);
                }
            }
        }
        printf("%d,total:%d
    ",i,total);
        return total;
    }
    void main()
    {
        int x;
        int n;
        int total;
        printf("please input the data of x,n!
    ");
        scanf("%d %d",&x,&n);
        total = Calculate(x,n);
        printf("OK,the result is: %d
    ",total);
    }

    方法二:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main()
    {
        int n, x, j, i = 1;
        float sum = 1, k = 1;
        printf("Input n and x:
    ");
        scanf("%d %d", &n, &x);
        while (i <= n)
        {
            k = 1;
            for (j = 1; j <= i; j++)
            {
                k = -1*k*x;
            }
            for (j = 1; j <= i; j++)
            {
                k =  k/ j;
            }
            sum += k;
            i++;
        }
        printf("%f
    ", sum);
    }

    方法三:动态规划

    #include <stdio.h>
    #include <stdlib.h>
    
    void main()
    {
        int n,x,i=1;
        float sum = 1,k = 1;
        printf("Input n and x:
    ");
        scanf("%d %d", &n, &x);
        while (i <= n)
        {
            k = -1 * k*x / i;
            sum += k;
            i++;
        }
        printf("%f", sum);
    }

    3、删除输入的字符串中的大小写字母和数字 并统计有重复的字符及其重复次数

     


    4、输入整形数据,按输入的逆序建立单链表 【见2016年19题】

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct slist{
        int data;
        struct slist *next;
    };
    
    int main()
    {
        //逆序建立单链表,头插法
        int x;
        struct slist *p,*head = (struct slist *)malloc(sizeof(struct slist));
        head ->next = NULL;
        printf("请输入元素:
    ");
        scanf("%d",&x);
        while(x != 9999)
        {
            struct slist *node = (struct slist *)malloc(sizeof(struct slist));
            node ->data = x;
            node ->next = head ->next;
            head ->next = node;
            scanf("%d",&x);
        }
        //输出
        printf("单链表为:");
        p = head ->next;
        while(p != NULL)
        {
            printf("%d	",p ->data);
            p = p->next;
        }
        return 0;
    }

    5、单链表逆序 【见2017.24】

    方法一:头插法

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct slist
    {
        int data;
        struct slist *next;
    };
    struct slist *head;
    
    // 尾插法建立链表
    void creatslist()
    {
        int x;
        head = (struct slist *)malloc(sizeof(struct slist));  //头结点
        struct slist *p,*node; // q为尾指针
        p = head;
    
        printf("请输入元素:");
        scanf("%d",&x);
        while(x != 9999)
        {
            node = (struct slist *)malloc(sizeof(struct slist));
            node ->data = x;
            p ->next = node;
            p = node;
            printf("请输入元素:");
            scanf("%d",&x);
        }
        p ->next = NULL;
    }
    //链表输出打印
    void inputslist()
    {
        struct slist *q;//q是工作指针
        q = head ->next; //头结点无元素
        while(q != NULL)
        {
            printf("%d	",q ->data);
            q = q ->next;
        }
    }
    // 方法一:头插法 逆序链表
    void reverseslist1()
    {
        struct slist *p,*r; // p是工作指针,r是p的后继,以防断链
        p = head ->next;  //从第一个元素开始
        head ->next = NULL;  //将头节点后置null,断开
        while(p != NULL)
        {
            r = p ->next; // r暂存s后继
            p ->next = head ->next; // 依次将元素结点摘下
            head ->next = p;
            p = r;
        }
    }
    void main()
    {
        creatslist();
        inputslist();
        printf("
    逆序后:
    ");
        reverseslist1();
        inputslist();
    }

    方法二: 后继指针指向前驱结点

     

     代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct slist
    {
        int data;
        struct slist *next;
    };
    struct slist *head;
    
    // 尾插法建立链表
    void creatslist()
    {
        int x;
        head = (struct slist *)malloc(sizeof(struct slist));  //头结点
        struct slist *p,*node; // q为尾指针
        p = head;
    
        printf("请输入元素:");
        scanf("%d",&x);
        while(x != 9999)
        {
            node = (struct slist *)malloc(sizeof(struct slist));
            node ->data = x;
            p ->next = node;
            p = node;
            printf("请输入元素:");
            scanf("%d",&x);
        }
        p ->next = NULL;
    }
    //链表输出打印
    void inputslist()
    {
        struct slist *q;//q是工作指针
        q = head ->next; //头结点无元素
        while(q != NULL)
        {
            printf("%d	",q ->data);
            q = q ->next;
        }
    }
    // 方法二:后继指针指向前驱结点
    void reverseslist2()
    {
        struct slist *pre,*p = head ->next,*r =p ->next;
        p ->next = NULL;  //处理第一个结点
        while(r != NULL) // r若为空,则p为最后一个节点
        {
            pre = p;
            p = r;
            r = r ->next;
            p ->next = pre;
        }
        head ->next = p;  //处理最后一个结点
    }
    
    void main()
    {
        creatslist();
        inputslist();
        printf("
    逆序后:
    ");
        reverseslist2();
        inputslist();
    }
  • 相关阅读:
    IMWebConf 2017 官网彩蛋解谜
    解决SVG animation 在IE中不起作用
    百度大搜和度秘面经
    浅谈JavaScript原型与原型链
    听说2017你想写前端?
    如何制作icon-font小图标
    HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能
    javaweb action无法跳转、表单无法跳转的解决方法
    hadoop备战:yarn框架的搭建(mapreduce2)
    liferay 指定默认首页
  • 原文地址:https://www.cnblogs.com/pam-sh/p/12587689.html
Copyright © 2011-2022 走看看