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
结果正确。