如果不想错过我的推送,记得查看右上角公众号并设为star。 选择星星并将其发送给我。
大华FPGA岗位笔试题除了考查FPGA和逻辑相关知识外,还包括很多C语言题。
作为一名FPGA工程师,必须更加精通逻辑。 为什么要熟悉C语言? 事实上,FPGA开发中经常会用到嵌入式软核和硬核,这就需要FPGA工程师熟悉C语言,才能实现更好的协同开发。 另外,通过HLS进行开发时,还需要有C语言的基础,甚至更好的是C++。 如果你想精通验证,你还是需要知道如何去做。 如果在Linux下开发,还需要学习Tcl、Shell、Perl等脚本,以提高开发效率。
综上所述,做FPGA开发,不仅需要精通HDL语言,还需要学习更多的相关内容,让自己更有优势。 这就需要大家在日常的学习中多积累,做到硬件思维和软件思维并重。 ,并且可以自由切换。 我们来看看今天的主题。
16) 程序运行后输出结果为( )
A 30 B 40 C 10 D 20
分析:本题主要考察C语言数组和指针相关的知识。
首先,我们按顺序解释一下这个程序。 程序只有一个main函数,从main函数开始。
第5行定义了一个整数类型的一维数组a,并赋值为a[0] = 10, a[1] = 20, a[2] = 30, a[3] = 40,所以维数组有4个元素。 第6行定义了一个整型指针变量p。 第 7 行定义了一个整型变量 i。 第8行将数组a的地址赋给指针p(数组与指针的对应关系请参考《》中第37题),所以*p = a[0] = 10,*p+1 = a[1 ] = 20,*p+2 = a[2] = 30,*p+3 = a[3] = 40。
第 9 行是一个 for 循环。 循环变量i的初始值为0。从0到3循环4次。每次循环后i的值加1。
第11行是for循环中要执行的语句。 运算符的优先级在分配编号的右侧进行检查。 指针运算符“*”和前缀自增运算符“++”具有相同的优先级,因此从左到右的优先级规则 ) = 20, p+2; 当i=2时,a[2]=*(p+2)=30,p+3; 当i=3时,a[3]=*(p+3)=40,p+4; 当 i = 4 时退出 for 循环。
第12行打印a[2]的值为30。也验证了答案是A。
17) 程序运行后输出结果为( )
A 1, 3 B 0, 2
C 0, 3 D 1, 2
分析:本题主要考察C语言中前自增运算符和后自增运算符的区别
首先我们按顺序解释一下这个程序:
第 5 行定义了一个整型变量 a。
第 6 行定义了一个整型变量 b。
第 7 行将 -2 赋给变量 a。
第 8 行将 0 赋给变量 b。
第 9 行是一个 while 语句。 如果 while 括号中的语句为 true,则始终会执行。 如果是假的,就会跳出来。 再看一下while括号里的语句,发现没有括号。 我们需要首先确定优先级。 其中,后自增运算符“++b”的优先级 > 前自增运算符“a++”的优先级 > 逻辑与运算符“&&”,也相当于 ((a++) && (++b) ),a++先赋值后加1,++b先加值后赋值。
第一次执行while语句时,a = -2,b = 0,b需要先加1,然后等于1。 ((a++) && (++b)) = (- 2 && 1) 是正确的。 继续执行while语句,此时a需要加1。循环结束时,a = -1,b = 1。
第二次执行 while 语句时,a = -1,b = 1,b 需要先加 1,然后等于 2。 ((a++) && (++b)) = (- 1 && 2) 是正确的。 继续执行while语句,此时a需要加1。循环结束时,a = 0,b = 2。
第三次执行while语句时,a = 0,b = 2,b需要先加1到3,((a++) && (++b)) = (0 && 3)的结果为false,则while语句会被跳出。 ,那么a需要增加1。这个循环结束时,a = 1,b = 3。很多同学分析了这一点后都选择了A选项,但验证的结果如下:
分析有问题吗? 事实上,当第三次执行while时,就会出现问题。 当第三次循环开始时,a = 0,b = 2。因为a = 0,此时while判断a不满足条件,然后进行自增操作1,a = 1。因为while语句的条件不满足,循环体不会执行++b,因此b的值不会改变。 答案是D。
18) 在C语言中,执行下列语句后,c的值为( )
int a = 12, b = 7 ;
m(int a, int b)
{
a++;
a = b;
}
main()
{
m(a, &b);
c = a;
}
A 12 B 13 C 8 D 程序错误
分析:本题主要考察C语言变量定义的基础知识
这道题看上去代码很多,但实际上错误很明显。 我们发现c从头到尾都没有定义过,那么程序编译的时候自然会报错。 运行时报错如下:
所以本题选D。
19) 在C语言中,有以下程序段:
int *p, a = 10, b = 1 ;
p = &a;
a = *p+b;
执行该程序后,a的值为( )
A 10 B 11 C 12 D 编译错误
分析:本题主要考察C语言指针的基础知识
代码中有三句话,逐句分析。
第一句定义了一个整型指针变量p,一个赋初值10的整型变量a,赋初值1的整型变量b。
第二句将变量a的地址赋给指针p。
第三句*p就是取指针p的值,即10,然后将b的值加1,然后将结果赋值给a,所以a就是11。也验证了答案是B.
20) 已知int i = 1, j = 3, k = 5; 执行以下程序后,i、j、k的值为( )
if(i > j)
k = i; i = j; j = k;
i = 1,j = 3,k = 5
B i = 3,j = 5,k = 5
C i = 3,j = 5,k = 1
迪 = 3,j = 5,k = 3
分析:本题主要考察C语言语句的顺序执行以及括号的理解
首先,在题干中定义三个整型变量并赋值。 然后if语句确定i和j的大小。 根据题干可知i=1,j=3,如果i>j不成立则为假,所以k=不会被执行。 i语句,所以k仍然是5,但是i=j和j=k会按顺序执行,所以i=3,j=5。也验证了答案是B。
21) 给出定义:int x[2][3]; 那么下列关于二维数组x的说法错误的是()
x[0]可以看作是由3个整数元素组成的一维数组
B x[0]和x[1]是数组名,分别代表不同的地址常量。
C 数组 x 包含 6 个元素
D可以使用语句x[0] = 0; 将初始值 0 分配给所有元素
分析:本题主要考察C语言二维数组的相关知识
在二维数组中,不能使用 x[0] = 0 等赋值语句。 x[0] 表示一维数组。 x[0]是一个指针,指向x[0][0]的位置。 分配初始值时,应该逐个元素分配值,或者组合成一维数组来分配初始值。 因此,选项D是错误的,其他三个选项的描述都是正确的。
22) 在C语言中,函数的隐式存储类是( )
A 无存储类别 B
光盘自动
分析:本题主要考察C语言中函数的隐式存储类型
auto只用于局部变量,必须是auto。 函数的存储类型是指它是否可以被其他文件模块访问。 根据C语言的原理,该函数是全世界(本项目中)隐式访问的,所以默认的是,如果该函数前面有它,则表示该函数只能被本项目访问。 源程序文件中的模块访问,故答案为C。
结尾
笔试分析将持续为您提供笔试题分析和知识补充。 如果你有想分析的题目,可以发给达尔文安排。 同时欢迎您加入达文求职技术交流群。 入群方式:添加倪姐微信()并备注求职,即可邀请入群。
达尔文求职系列: