华为C语言机试题面试题汇总.docx
- 格式:docx
- 大小:59.17 KB
- 文档页数:38
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char *num1,*num2; //两个长长整型数据char *sum;// int temp;int len_num1,len_num2; // 两个长长整型数据的长度int len_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)? len_num1:len_num2;len_min=(len_num1<=len_num2)? len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1 - 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2 - 1]-'0';len_num2--;}for(int j=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char *outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return 0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
华为机试题目总结(程序篇)自己写的,水平很挫,仅供参考目录1.语言识别问题2.销售网络问题(未完成)3.股票投资问题4.判断手机号码合法性5.元音字母复制6.验证身份证号7.选秀节目打分8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)10.将某字符变成小写后的某个字符11.链表的逆序12.单词统计13.字符串进行转换,转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字14.一个数组中比平均数大的个数15.求一个数组中第一大和第二大数16.字符变成整数17.整数变字符18.判断素数问题19(1).约瑟夫环(循环列表)19(2).约瑟夫环(数学方法只能求出最后的胜利者的序号)19(3).约瑟夫环(容器实现)20.判断某个整数是回文。
即这样的,反过来还是21.判断一个字符串是不是回文22.求一个字符串中的最大回文子串,就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文23.找出^n的数24.统计一个数二进制表达中的个数25.镜像反转二进制表达式,并输出十进制值26.连续字符统计27.判断一个字符串中()是否配对28.查找子字符串个数29(1).找出一个字符串中是否包含相同(包括连续的)的子字符串(要求子串长度大于等于)并输出出现频率最高的子字符串29(2)找出一个字符串中是否包含连续相同的子字符串,并输出出现频率最高的子字符串30.删除字符窜中字符数最少的字符31.关于数组的循环移位,左移为负,右移为正32.求一个二维数组每列的最小值33.两个字符串,求最长公共子串34.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。
华为C语言面试题tank整理1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.4、请写出下列代码的输出内容#include <stdio.h>int main(void){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}答:10,12,1205、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
内容摘要:华为C语言面试题关键词:华为面试题C语言面试题本文地址:/post/2007072910.html 内容正文:找错Void test1(){char string[10];char* str1="0123456789";strcpy(string, str1);}Void test2(){char string[10], str1[10];for(I=0; I<10;I++){str1[i] ='a';}strcpy(string, str1);}Void test3(char* str1){char string[10];if(strlen(str1)<=10){strcpy(string, str1);}}2. 找错#define MAX_SRM 256DSN get_SRM_no(){static int SRM_no;int I;for(I=0;I{SRM_no %= MAX_SRM;if(MY_SRM.state==IDLE){break;}}if(I>=MAX_SRM)return (NULL_SRM);elsereturn SRM_no;}3. 写出程序运行结果int sum(int a){auto int c=0;static int b=3;c+=1;b+=2;return(a+b+C);}void main(){int I;int a=2;for(I=0;I<5;I++){printf("%d,", sum(a)); }}4.int func(int a){int b;switch(a){case 1: 30;case 2: 20;case 3: 16;default: 0}return b;}则func(1)=?5:int a[3];a[0]=0; a[1]=1; a[2]=2;int *p, *q;p=a;q=&a[2];则a[q-p]=?6.定义 int **a[3][4], 则变量占有的内存空间为:_____7.编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。
华为c语言面试题C语言作为一门广泛应用于嵌入式系统和高性能计算领域的编程语言,成为了许多IT从业者必备的技能之一。
在华为的面试中,C语言题目也常常出现,对应聘者的编程基础和逻辑思维能力有所考察。
在本文中,我们将介绍一些常见的华为C语言面试题,供大家参考。
一、变量与数据类型1. 如何声明一个整型变量并初始化为10?int x = 10;2. 如何声明一个字符型变量并初始化为字母'A'?char ch = 'A';3. 如何声明一个常量,并将其值设定为3.14?const float pi = 3.14;4. 如何交换两个变量的值,例如将变量a的值与变量b的值交换?int temp;temp = a;a = b;b = temp;二、控制结构1. 请写出一个实现求1到100之间所有奇数和的C语言程序。
```c#include <stdio.h>int main() {int sum = 0;int i;for (i = 1; i <= 100; i += 2) {sum += i;}printf("奇数和为:%d\n", sum);return 0;}```2. 请写出一个实现判断一个数是否为素数的C语言程序。
```c#include <stdio.h>int isPrime(int num) {int i;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数。
\n", num); } else {printf("%d不是素数。
1、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2、如何引用一个已经定义过的全局变量?答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.4、请写出下列代码的输出内容#include <stdio.h>int main(void){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}答:10,12,1205、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
(一) 初级题1. 什么是预编译,何时需要预编译:答:(1) 总是使用不经常改动的大型代码体(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头<<预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等就是为编译做的预备工作的阶段主要处理#开始的预编译指令预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
常见的预编译指令有:>>2. char * const pchar const * pconst char *p上述三个有什么区别?答:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p3.char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
16.谈谈Windows DNA结构的特点和优点。
答:Windows Distributed interNet Application Architecture(Windows分布式应用结构,简称Windows DNA)是微软创建新一代高适应性商业解决方案的框架,它使公司能够充分地挖掘数字神经系统的优点。
Windows DNA是第一个将Internet、客户/服务器、和用于计算的PC模型结合并集成在一起的为新一类分布式计算方案而设计的应用软件体系结构17.网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答:1)进程:子进程是父进程的复制品。
子进程获得父进程数据空间、堆和栈的复制品。
2)线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。
同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
思科1. 用宏定义写出swap(x,y)答#define swap(x, y)x = x + y;y = x - y;x = x - y;2.数组a[N],存放了1至N-1个数,其中某个数重复一次。
写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a[],int N)答:int do_dup(int a[],int N) //未经调试{int sun = 0;int sum2;for(int i=0;i<N;++i){Sum+=a[i];}Sum2 = (1+N-1)*N/2;Return (sum-sum2);}3 一语句实现x是否为2的若干次幂的判断答:方法1)int i = 512;cout << boolalpha << ((i & (i - 1)) ? false : true) << endl; //位与为0,则表示是2的若干次幂2)return (x>>N==1);4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p 为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b00010001,p=4,n=3转换后x=0b0110 0001答:unsigned int intvert(unsigned int x,int p,int n) //假定p=4,n=3 {unsigned int _t = 0;unsigned int _a = 1;for(int i = 0; i < n; ++i)//循环的目的主要是-t{_t |= _a; //位或_a = _a << 1;}_t = _t << p; //转换后_t变为1110000x ^= _t; /异或,将原来的位取反return x;}慧通:1. 什么是预编译,何时需要预编译:答: 就是指程序执行前的一些预处理工作,主要指#表示的.何时需要预编译?1)、总是使用不经常改动的大型代码体。
华为技术有限公司面试试题(C语言) (冯兴军)一、单项选择题(每题3分,共30分)1、调用函数时的实参是数组名时(如func(A),A为数组),传递给形参实际上是:A)数组的首地址 B)数组的第一个元素C)数组中的全部元素的值 D)数组元素的个数2、有如下定义:Union FLAG{Struct{Unsigned char Mode;};Unsigned short usVal;}myFlag;那么myFlag占用内存的大小为:()A)8位 B)16位 C)24位 D)32位3、有如下定义:int(*ptr)(); ,以下叙述中正确的是()A) ptr是指向一维数组的指针变量。
B) ptr是指向int型数据的指针变量。
C) ptr是指向函数的指针,该函数返回一个int型数据。
D) ptr是一个函数名,该函数的返回值是指向int型数据的指针。
4、有以下程序段int x=4;do{Printf(“%d,”,x--);}while(--x);其输出结果是:()A)3,0 B)4,1 C)4,2 D)死循环5、有如下程序段Unsigned char a[5];Unsigned char *p,*q;a [0] = 1;a[1] = 2;a[2] = 3;a[3] = 4;a[4] = 5;p = a;q = &a[3];请问a[q-p] =( )A)5 B)1 C)2 D)46、关于静态变量,下面说法不正确的有:()A)静态变量在堆栈中分配;B)静态变量的作用域一定是局部的,例如在一个文件内或一个函数内;C)静态变量的生命周期与其所在部分的代码等长;D)静态变量可分为静态局部变量和静态全局变量;E)静态变量存在于数据段中;7、设有以下宏定义:#idefine N 4#define Y(n) ((N+1)*n)则执行语句:Y(5+1)为()A)30 B)28 C)26 D)248、对栈S进行下列操作:push(1),push(2),pop(),pop()。
1.第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50#include<stdio.h>main(){int num[50]={0};int i,n;printf("请输入整型数组的长度(1~50):");scanf("%d",&n);printf("请输入整型数组的元素:");for (i=0;i<n;i++){scanf("%d",&num[i]);}int min_num=num[0];int max_num=num[0];for(int j=0;j<n;j++){if(max_num<num[j])max_num=num[j];else if(min_num>num[j])min_num=num[j];}int sum=min_num+max_num;printf("数组中最大与最小值之和:%d\n",sum);return 0;}2.求两个长长整型的数据的和并输出,例如输入1233333333333333 。
3111111111111111111111111.。
,则输出。
#include<stdio.h>#include<string.h>#include<malloc.h>main(){char *num1,*num2; //两个长长整型数据char *sum;// int temp;int len_num1,len_num2; // 两个长长整型数据的长度int len_max,len_min;num1=(char*)malloc(sizeof(char));num2=(char*)malloc(sizeof(char));printf("输入两个长长整型数据:");scanf("%s",num1);printf("输入两个长长整型数据:");scanf("%s",num2);len_num1=strlen(num1);len_num2=strlen(num2);len_max=(len_num1>=len_num2)? len_num1:len_num2;len_min=(len_num1<=len_num2)? len_num1:len_num2;int len_max1=len_max;sum=(char*)malloc(sizeof(char)*len_max);memset(sum,0x00,len_max+1);//切忌初始化for(;len_num1>0&&len_num2>0;len_num1--,len_num2--){sum[len_max--]=((num1[len_num1-1]-'0')+(num2[len_num2-1]-'0'));}if(len_num1>0){sum[len_max--]=num1[len_num1 - 1 ]-'0';len_num1--;}if(len_num2>0){sum[len_max--]=num1[len_num2 - 1]-'0';len_num2--;}for(int j=len_max1;j>=0;j--) //实现进位操作{// temp=sum[j]-'0';if(sum[j]>=10){sum[j-1]+=sum[j]/10;sum[j]%=10;}}char *outsum=(char*)malloc(sizeof(char)*len_max1);j=0;while(sum[j]==0) //跳出头部0元素j++;for(int m=0;m<len_max1;j++,m++)outsum[m]=sum[j]+'0';outsum[m]='\0';printf("输出两长长整型数据之和:%s\n",outsum);return 0;}3.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<malloc.h>void stringFilter(const char *p_str, long len, char *p_outstr){int array[256]={0};const char *tmp = p_str;for(int j=0;j<len;j++){if(array[tmp[j]]==0)*p_outstr++= tmp[j];array[tmp[j]]++;}*p_outstr = '\0';}void main(){char *str = "cccddecc";int len = strlen(str);char * outstr = (char *)malloc(len*sizeof(char));stringFilter(str,len,outstr);printf("%s\n",outstr);free(outstr);outstr = NULL;}4.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:1.仅压缩连续重复出现的字符。
比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2.压缩字段的格式为"字符重复的次数+字符"。
例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"要求实现函数:void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<malloc.h>void stringZip(const char *p_str, long len, char *p_outstr){int count=1;for(int i=0;i<len;i++){if(p_str[i]==p_str[i+1]){count++;}else{if(count>1){*p_outstr++ = count +'0';*p_outstr++ =p_str[i];}else{*p_outstr++ =p_str[i];}count = 1;//注意其位置}}*p_outstr = '\0';}void main(){char *str = "cccddecc";printf("压缩之前的字符串为:%s\n",str);int len = strlen(str);char * outstr = (char*)malloc(len*sizeof(char));stringZip(str,len,outstr);printf("压缩之后的字符串为:%s\n",outstr);free(outstr);outstr = NULL;}5.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:1.操作数为正整数,不需要考虑计算结果溢出的情况。
2.若输入算式格式错误,输出结果为“0”。
要求实现函数:void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;#include <stdio.h>#include<string.h>#include<stdlib.h>void arithmetic(const char *input, long len, char *output){char s1[10];char s2[10];char s3[10];int cnt = 0;int len_input=strlen(input);for(int i=0;i<len_input;++i){if(input[i]==' ')cnt++;}if(cnt!=2){*output++ = '0';*output = '\0';return;}sscanf(input,"%s %s %s",s1,s2,s3);if(strlen(s2)!=1||(s2[0]!='+'&&s2[0]!='-')){*output++ = '0';*output = '\0';return;。