C开发笔试题三道

1,给你任意三个整形数据,找出其中最大一个整形数。

#include<stdio.h>
int MaxNumber(int x,int y,int z);
void main()
{
    int x,y,z;
    printf("请输入要比较的三个整数:\n");   
    scanf("%d,%d,%d",&x,&y,&z);
    printf("三个数中最大的数为:%d\n",MaxNumber(x,y,z));
}
int MaxNumber(int x,int y,int z)
{
    int max=x;
    if(max<y)
    {
        max=y;
        if(max<z)
            max=z;
    }
    else
    {
        if(max<z)
            max=z;
    }
    return max;
}

这里写图片描述
2,求1+2!+3!+…+20!的和

#include<stdio.h>
/*求1+2!+3!+...+20!的和*/
int sumN(int n)
{
    int sum=0;
    int multi;
    if(n>0)
    {
        multi=1;
    }
    else
    {
        return 0;
    }
    for(int i=1;i<=n;i++)
    {
        multi=multi*i;
    }
    sum=multi+sumN(n-1);
    return sum;
}
void main()
{   
    printf("1~20到20的阶乘和为:%d\n",sumN(20));
}

这里写图片描述
sum用int型,若n值过大,可能会溢出。所以改为double型更合适。
3,编程完成数据加密。数据是五位数的整数,加密规则为:每位数字都加上6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换。


/*编程完成数据加密。
数据是五位数的整数,加密规则为:
每位数字都加上6,然后用和除以8的余数代替该数字,
再将第一位和第五位交换,第二位和第四位交换。*/
#include<stdio.h>
#define MAX 100 
#include<math.h>
//n位数的数字加密

static void  DataEncrypt(int number,int n)
    {
        int k=(int)pow(10,n-1);
        //存取获得的每一位数字
        int x[100];
        x[0]=number/k;
        int length=1;
        int k2=k/10;
        for(int i=1;k2>=1;k=k/10,k2=k2/10,i++)
        {
            x[i]=(((number%k)/k2)+6);//每位数字都加上6
            length++;

        }
        x[0]=x[0]+6; 
        for(i=0;i<length;i++)//求每位数字加6之后的和
        {
            if(x[i]>=10)//如果加6之后是两位数,这个数字等于这个数的十位个位求和
            {
                x[i]=x[i]/10+x[i]%10;
            }
        }

        for(i=0;i<length;i++)//然后用和除以8的余数代替该数字
        {
             x[i]=x[i]%8;
        }

        //再将第一位和第n位交换,第二位和第n-1位交换,即数组逆序
        if(length%2==0)//n为偶数
            {
             for(int i=0,j=length-1;(i<length/2)&&(j>=length/2);i++,j--)
              {
                int temp=x[i];
                x[i]=x[j];
                x[j]=temp;
              }     
            }
            else//a[n/2]不进行交换//如:n=5  0,1,2,3,4
            {
                for(int i=0,j=length-1;(i<length/2)&&(j>length/2);i++,j--)
                  {
                    int temp=x[i];
                    x[i]=x[j];
                    x[j]=temp;
                  }       
            }
         printf("加密后的数为:\n");
        for(i=0;i<length;i++)
        {
         printf("%d",x[i]);
        }
        printf("\n");
    }
    void main()
    {
        DataEncrypt(59683,5);
    }

这里写图片描述
测试:5 9 6 8 3
每位加6变成:11 15 12 14 9
每个求和:2 6 3 5 9
%8:2 6 3 5 1
交换:1 5 3 6 2
结果正确。

posted @ 2017-10-18 21:32  快乐的内啡肽呀  阅读(30)  评论(0)    收藏  举报