1、华为面试笔试题华为硬件面试题 硬件工程师全都是几本模电数电信号单片机题目1.用与非门等设计全加法器2.给出两个门电路让你分析异同3.名词:sram,ssram,sdram4.信号与系统:在时域与频域关系5.信号与系统:和4题差不多6.晶体振荡器,好像是给出振荡频率让你求周期(应该是单片机的,12分之一周期.)7.串行通信与同步通信异同,特点,比较8.RS232c高电平脉冲对应的TTL逻辑是?(负逻辑?)9.延时问题,判错10.史密斯特电路,求回差电压11.VCO是什么,什么参数(压控振荡器?)12. 用D触发器做个二分颦的电路.又问什么是状态图13. 什么耐奎斯特定律,怎么由模拟信号转为数字信
2、号14. 用D触发器做个4进制的计数15.那种排序方法最快?一、 研发(软件)用C语言写一个递归算法求N!;给一个C的函数,关于字符串和数组,找出错误;防火墙是怎么实现的?你对哪方面编程熟悉?硬件:1、继电器控制电路。2、SDRAM是怎么工作的3、写出逻辑表达式说明A2A1A0大于B2B1B0。4、常用触发器有几种5、示波器有几种触发方式,举出三种华为笔试题含答案 软件工程题 写一个程序, 要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。如:100个1是一个组合,5个1加19个5是一个组合。 请用C+语言写。答案:最容易想到的算法是: 设x是1的个数,y是2的个数,z是5
3、的个数,number是组合数 注意到0=x=100,0=y=50,0=z=20,所以可以编程为: number=0; for (x=0; x=100; x+) for (y=0; y=50; y+) for (z=0; z=20; z+) if (x+2*y+5*z)=100) number+; coutnumberendl; 上面这个程序一共要循环100*50*20次,效率实在是太低了 事实上,这个题目是一道明显的数学问题,而不是单纯的编程问题。我的解法如下: 因为x+2y+5z=100 所以x+2y=100-5z,且z=20 x=100 y=50 所以(x+2y)=100,且(x+5z)是
4、偶数 对z作循环,求x的可能值如下: z=0, x=100, 98, 96, . 0 z=1, x=95, 93, ., 1 z=2, x=90, 88, ., 0 z=3, x=85, 83, ., 1 z=4, x=80, 78, ., 0 . z=19, x=5, 3, 1 z=20, x=0 因此,组合总数为100以内的偶数+95以内的奇数+90以内的偶数+.+5以内的奇数+1,即为:(51+48)+(46+43)+(41+38)+(36+33)+(31+28)+(26+23)+(21+18)+(16+13)+(11+8)+(6+3)+1 某个偶数m以内的偶数个数(包括0)可以表示为m
5、/2+1=(m+2)/2 某个奇数m以内的奇数个数也可以表示为(m+2)/2 所以,求总的组合次数可以编程为: number=0; for (int m=0;m=100;m+=5) number+=(m+2)/2; coutnumbernext = NULL; p=h; for(i=0;inext = s; printf(Please input the information of the student: name sex no age n); scanf(%s %c %d %d,s-name,&s-sex,&s-no,&s-age); s-next = NULL; p = s; prin
6、tf(Create successful!); return(h);void deletelist(struct stu *s,int a)struct stu *p;while(s-age!=a)p = s;s = s-next;if(s=NULL)printf(The record is not exist.);elsep-next = s-next;printf(Delete successful!);void display(struct stu *s)s = s-next; while(s!=NULL) printf(%s %c %d %dn,s-name,s-sex,s-no,s-
7、age); s = s-next; int main() struct stu *s;int n,age;printf(Please input the length of seqlist:n);scanf(%d,&n); s = creatlist(n); display(s);printf(Please input the age:n);scanf(%d,&age);deletelist(s,age);display(s); return 0;2、实现一个函数,把一个字符串中的字符从小写转为大写。#include stdio.h#include conio.hvoid uppers(cha
8、r *s,char *us) for(;*s!=0;s+,us+) if(*s=a&*s=z) *us = *s-32; else *us = *s; *us = 0;int main() char *s,*us; char ss20; printf(Please input a string:n); scanf(%s,ss); s = ss; uppers(s,us); printf(The result is:n%sn,us); getch();随机输入一个数,判断它是不是对称数(回文数)(如3,121,12321,45254)。不能用字符串库函数 /*1.函数名称:Symmetry 功能
9、: 判断一个数时候为回文数(121,35653) 输入: 长整型的数 输出: 若为回文数返回值为1 esle 0 */unsigned char Symmetry (long n)long i,temp;i=n; temp=0;while(i) /不用出现长度问题,将数按高低位掉换 temp=temp*10+i%10; i/=10;return(temp=n); 方法一 /* - 功能: 判断字符串是否为回文数字 实现: 先将字符串转换为正整数,再将正整数逆序组合为新的正整数,两数相同则为回文数字 输入: char *s:待判断的字符串 输出: 无 返回: 0:正确;1:待判断的字符串为空;2
10、:待判断的字符串不为数字; 3:字符串不为回文数字;4:待判断的字符串溢出 - */ unsigned IsSymmetry(char *s) char *p = s; long nNumber = 0; long n = 0; long nTemp = 0; /*判断输入是否为空*/ if (*s = 0) return 1; /*将字符串转换为正整数*/ while (*p != 0) /*判断字符是否为数字*/ if (*p9) return 2; /*判断正整数是否溢出*/ if (*p-0) (4294967295-(nNumber*10) return 4; nNumber = (
11、*p-0) + (nNumber * 10); p+; /*将数字逆序组合,直接抄楼上高手的代码,莫怪,呵呵*/ n = nNumber; while(n) /*判断正整数是否溢出*/ if (n%10) (4294967295-(nTemp*10) return 3; nTemp = nTemp*10 + n%10; n /= 10; /*比较逆序数和原序数是否相等*/ if (nNumber != nTemp) return 3; return 0; 方法二 /* - 功能: 判断字符串是否为回文数字 实现: 先得到字符串的长度,再依次比较字符串的对应位字符是否相同 输入: char *s
12、:待判断的字符串 输出: 无 返回: 0:正确;1:待判断的字符串为空;2:待判断的字符串不为数字; 3:字符串不为回文数字 - */ unsigned IsSymmetry_2(char *s) char *p = s; int nLen = 0; int i = 0; /*判断输入是否为空*/ if (*s = 0) return 1; /*得到字符串长度*/ while (*p != 0) /*判断字符是否为数字*/ if (*p9) return 2; nLen+; p+; /*长度不为奇数,不为回文数字*/ if (nLen%2 = 0) return 4; /*长度为1,即为回文数
13、字*/ if (nLen = 1) return 0; /*依次比较对应字符是否相同*/ p = s; i = nLen/2 - 1; while (i) if (*(p+i) != *(p+nLen-i-1) return 3; i-; return 0; 求22000的所有素数.有足够的内存,要求尽量快答案:int findvalue2000=2;static int find=1;bool adjust(int value)assert(value=2);if(value=2) return true;for(int i=0;i=find;i+)if(value%findvalue=0)return false;findvaluefind+;return true; (注:可编辑下载,若有不当之处,请指正,谢谢!)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1