华为历年上机笔试题

更新时间:2023-10-07 16:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.

给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A,如aBf转换成bCg,字符串内的其他字符不改变,给定函数,编写函数 void Stringchang(const char*inpu,char*output) 其中input是输入字符串,output是输出字符串 #include #include

void Stringchang(const char*input,char*output) {

const char *p=input; /*if(input==NULL) { printf(\ //用这种表示方式可否? return; //用return 好不好? } */

assert(input!=NULL); while(*p!='\\0') { if((*p>='a')&&(*p<='y')||(*p>='A')&&(*p<='Y')) *output=*p+1; else if(*p=='z'||*p=='Z') *output=*p+1-26; else *output=*p; output++; p++; }

*output=0; }

void main() {

char a[11]={\ //如何模拟空指针的情况 char b[11];

Stringchang(a,b); printf(\} 2. 求一个整型数字中有没有相同的部分,例如12389756123这个整型数字中相同的部分是123,相同的

部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。函数为 int same(int num)其中num是输入的整型数字 #include using namespace std;

int same(int num) //整数值的范围:long int为-2(共10位)到正2开头共10位;unsigned //long int 为从0

到4的共10位数

{

char a[11]; int i=0,m=0,j=0; while(num) { a[i]=num+'0'; num=num/10; i++; j++; } i=0; int k=j; while(i

{ char temp=a[i]; a[i]=a[j-1]; a[j-1]=temp; i++; j--; } for(i=0;i

int main() //是不是用int 会好一点? { int a,b; cin>>a; b=same(a); cout<

分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来. 函数为 void mul(char *input1,int n,char *input2, int m,char *output)

其中input1和input2是输入,n是input1的长度,m是input2的长度。Output是输出 #include #include #include using namespace std;

void mul(char *input1,int n,char *input2,int m,char *output) { long int num1=0,num2=0,num3=0; //char *p1=input1;char *p2=input2; int i=0,j=0,temp; int sign1=0,sign2=0; assert(input1!=NULL&&input2!=NULL);

//以下程序是将input1字符串转换为数字,考虑到了字符串中第一个字符为‘+’或者‘-’号的情况, //同时考虑到了非法输入时的处理情况。 if(*input1=='-') { input1++; sign1=1; } if(*input1=='+') input1++; while(*input1!='\\0') { assert(*input1<='9'&&*input1>='0'); num1=num1*10+(*input1-'0'); input1++; }

if(sign1==1) num1=-num1;

//以下程序是将input2字符串转换为数字,考虑到了字符串中第一个字符为‘+’或者‘-’号的情况, //同时考虑到了非法输入时的处理情况。 if(*input2=='-') { input2++; sign2=1; } if(*input2=='+') input2++; while(*input2!='\\0') { assert(*input2<='9'&&*input2>='0'); num2=num2*10+(*input2-'0'); input2++; } if(sign2==1) num2=-num2; //将两个数相乘 num3=num1*num2;

//考虑到结果为负数的情况,将整数转换为字符串,并且将字符串倒序 if(num3<0) { output[i]='-'; i++; j++; num3=-num3; } while(num3) { output[i]=num3+'0'; i++; num3=num3/10; } output[i]=0; //将字符串倒序 i--; while(j

int main() {

char a[10],b[10],c[10]; int anum,bnum; cin>>a; cin>>b; anum=strlen(a); bnum=strlen(b); mul(a,anum,b,bnum,c); cout<

//用纯指针实现程序如下:

#include #include

void mul(char *input1,int n,char *input2,int m,char *output) { int sum1=0,sum2=0,sum=0; int i=0; int sign1,sign2; char *p=input1,*q=input2,*s=output,*r=output; assert(input1!=NULL&&input2!=NULL); if(*p=='+') { p++; sign1=1; } else if(*p=='-') { p++; sign1=0; } while(*p) { assert(*p<='9'&&*p>='0'); sum1=sum1*10+(*p-'0'); p++; } if(sign1==0) { sum1=-sum1; } //input2de chuli if(*q=='+') {q++;sign2=1;} else if(*q=='-') {q++;sign2=0;} while(*q) { assert(*q<='9'&&*q>='0'); sum2=sum2*10+(*q-'0'); q++; } if(sign2==0) {sum2=-sum2;} //两数相乘 sum=sum1*sum2; // printf(\ if(sum<0) { sum=-sum; *s='-'; s++; r++; //因为返回的指针开始地址是output,所以这里output不能变,只能是另外用一个指针代替他 } while(sum) { *s=sum+'0'; sum=sum/10; s++; }

*s=0; s--; //忘记s- - 了 //printf(\ while(r

void main() { char a[3]=\ char b[3]=\ char c[11]; mul(a,3,b,3,c); printf(\}

两个大数相乘: #include #include #include #define N 100

void GetDigits(int *a,char *s); void multiply(int *a,int *b,int *c); main() {

char s1[N],s2[N];

int i,j,a[N],b[N],c[N*2];

printf(\ scanf(\

printf(\ scanf(\

//把输入的字符串,按位存放到数组 GetDigits(a,s1); GetDigits(b,s2);

multiply(a,b,c);

//找到最高位 j=N*2-1;

while(c[j]==0) j--;

//打印计算结果

printf(\ for(i=j;i>=0;i--)

printf(\}

/*把字符串形式的数字按位存放到数组*/

本文来源:https://www.bwwdw.com/article/ld3d.html

Top