C语言绘图能力强,具备可移植性,并拥有非常强的数据处置能力,因此适于撰写系统,三维,二维图形和动画。它是数值计算的高级语言。下面就由学习啦我们为大伙介绍一下c招聘笔考试题目的文章,欢迎阅读。
c招聘笔考试题目篇1
1. 改错
void test
{
char str[10];
char_ str1 = 0123456789; strcpy; }
2.改错
void test
{
char str[10], str1[10]; for {
str = a;
}
strcpy; }
3.读程序,写出结果 int sum
{
int c = 0;
static int b = 3;
c += 1;
b += 2;
return ; }
int main
{
int a = 2;
for {
printf); }
return 0;
}
4.读程序,写出结果 int main
{
int a[3];
a[0] = 0;
a[1] = 1;
a[2] = 2;
int _p, _q;
p = a;
q = a[2];
int c = a[q - p];
printf;
printf;
return 0;
}
c招聘笔考试题目篇2
1.读程序,写出结果
#define STRCPY strcpy
int main
{
char var1_p[20];
char var2_p[30];
strcpy;
STRCPY;
printf;
printf;
return 0;
}
2.不需要除法和库函数,计算285 / 16的商和余数, 需要效率尽可能高.
3.撰写字符串反转函数:strrev.需要时间和空间效率都尽可能高.
;
提示:dest和src可能是同一个字符串.
4.撰写将字符串转换成整数的函数atoi,只处置输入字符串仅由0-9,-,+,和空格的状况.
函数原型为:
int atoi;
提示:假如字符串不可以构成一整数,可以直接返回0.但对于以空格开始的字符串应特殊处置.
5.撰写一组单链表操作函数.链表的结构如下:
struct ListNode
{
long id;
struct ListNode_ next;
};
链表节点以id的从小到大排列,当id相等时,节点顺序没约定,哪个在前都可以.
需要撰写的函数有:
遍历函数:返回cur下一个节点, 假如没更多的节点, 返回0;
struct ListNode_ ListNext;
插入函数:将newNode插入到head链表中,然后返回newNode的前一节点,
假如newNode已经在链表中,返回0.
struct ListNode_ ListInsert;
删除函数:从head中删除theNode节点.返回theNode的前一节点.
假如theNode不在链表中,返回0;
struct ListNode_ ListRemove;
嵌入式c语言考试题目 [转]
1 . 用预处置指令#define 声明一个常数,用以表明1年中有多少秒
#define SECONDS_PER_YEAR UL
我在这想看到几件事情:
我在这想看到几件事情:
#define 语法的入门知识
了解预处置器将为你计算常数表达式的值,因此,直接写出你是怎么样计算一年中有多少秒而不是计算出实质的值,是更明确而没代价的。
意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
假如你在你的表达式中用到UL,那样你有了一个好的起点。记住,第一印象非常重要。
2 . 写一个“标准”宏MIN ,这个宏输入两个参数并返回较小的一个。
#define MIN = ? : )
这个测试是为下面的目的而设的:
标识#define在宏中应用的入门知识。这是非常重要的,由于直到嵌入操作符变为标准C的一部分,宏是便捷产生嵌入代码的唯一办法,对于嵌入式系统来讲,为了能达到需要的性能,嵌入代码常常是需要的办法。
三重条件操作符的常识。这个操作符存在C语言中是什么原因它使得编译器能产生比if-then-else更优化的代码,知道这个使用方法是非常重要的。
了解在宏中小心地把参数用括号括起来
我也用这个问题开始讨论宏的不良反应,比如:当你写下面的代码时会发生啥事?
least = MIN;
3. 预处置器标识#error的目的是什么?
预处置器标识#error的目的是什么?
假如你不知晓答案,请看参考文献1。这问题对区别一个正常的伙计和一个书呆子是非常有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然假如你不是在找一个书呆子,那样应试者最好期望自己不要知晓答案。
死循环
4. 嵌入式系统中常常要用到无限循环,你如何用C撰写死循环呢?
嵌入式系统中常常要用到无限循环,你如何用C撰写死循环呢?
这个问题用几个解决方法。我最佳选择的策略是:
while
{
?}
一些技术员更喜欢如下策略:
for或者他是一个想进入新范围的BASIC/FORTRAN技术员。
5. 用变量a给出下面的概念
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针,它指向的指针是指向一个整型数r d)一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的。
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
答案是:
a) int a; // An integer
b) int _a; // A pointer to an integer
c) int __a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int _a[10]; // An array of 10 pointers to integers
f) int [10]; // A pointer to an array of 10 integers
g) int ; // A pointer to a function a that takes an integer argument and returns an integer
h) int ; // An array of 10 pointers to functions that take an integer argument and return an integer
大家常常声称这里有几个问题是那种要翻一下书才能回答的问题,我赞同这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但当我被应聘的时候,我期望被问到这个问题。由于在被应聘的这期间里,我确定我知晓这个问题的答案。应试者假如不知晓所有些答案,那样也就没为这次应聘做筹备,假如该应聘者没为这次应聘做筹备,那样他又能为何出筹备呢?
6. 关键词static有哪些用途是什么?
大家常常声称这里有几个问题是那种要翻一下书才能回答的问题,我赞同这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但当我被应聘的时候,我期望被问到这个问题。由于在被应聘的这期间里,我确定我知晓这个问题的答案。应试者假如不知晓所有些答案,那样也就没为这次应聘做筹备,假如该应聘者没为这次应聘做筹备,那样他又能为何出筹备呢?
6. 关键词static有哪些用途是什么?
这个容易的问题极少有人能回答完全。在C语言中,关键词static有三个明显有哪些用途:
这个容易的问题极少有人能回答完全。在C语言中,关键词static有三个明显有哪些用途:
在函数体,一个被声明为静态的变量在这一函数被调用过程中保持其值不变。
在模块内,一个被声明为静态的变量可以被模块内所用函数访问,但不可以被模块外其它函数访问。它是一个当地的全局变量。
在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的当地范围内用。
大部分应试者能正确回答第一部分,一部分能正确回答第二部分,同是极少的人能了解第三部分。这是一个应试者的紧急的缺点,由于他显然不会当地化数据和代码范围有哪些好处和重要程度。
7.关键词const有哪些含意?
我只须一听到被应聘者说:“const意味着 常数”,我就知晓我正在和一个业余者交际。去年Dan Saks已经在他的文章里完全概括了const的所有使用方法,因此ESP的每一位读者应该很熟知const能干什么和不可以干什么.假如你从没读到那篇文章,只须能说出const意味着“只读”就好了。尽管这个答案不是完全的答案,但我同意它作为一个正确的答案。
假如应试者能正确回答这个问题,我将问他一个附加的问题:
我只须一听到被应聘者说:“const意味着 常数”,我就知晓我正在和一个业余者交际。去年Dan Saks已经在他的文章里完全概括了const的所有使用方法,因此ESP的每一位读者应该很熟知const能干什么和不可以干什么.假如你从没读到那篇文章,只须能说出const意味着“只读”就好了。尽管这个答案不是完全的答案,但我同意它作为一个正确的答案。
假如应试者能正确回答这个问题,我将问他一个附加的问题:
下面的声明都的意思是?
const int a;
int const a;
const int _a;
int _ const a;
int const _ a const;
前两个有哪些用途是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针。第四个a是一个指向整型数的常指针。最后一个意味着a是一个指向常整型数的常指针。假如应试者能正确回答这部分问题,那样他就给我留下了一个好印象。顺带提一句,或许你可能会问,即便不需要关键词 const,也还是能比较容易写出功能正确的程序,那样我为何还要这样重视关键词const呢?我也如下的几下理由:
前两个有哪些用途是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针。第四个a是一个指向整型数的常指针。最后一个意味着a是一个指向常整型数的常指针。假如应试者能正确回答这部分问题,那样他就给我留下了一个好印象。顺带提一句,或许你可能会问,即便不需要关键词 const,也还是能比较容易写出功能正确的程序,那样我为何还要这样重视关键词const呢?我也如下的几下理由:
关键词const有哪些用途是为给读你代码的人传达很有用的信息,事实上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。假如你曾花不少时间清理其它人留下的垃圾,你就会非常快掌握感谢这点多余的信息。
关键词const有哪些用途是为给读你代码的人传达很有用的信息,事实上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。假如你曾花不少时间清理其它人留下的垃圾,你就会非常快掌握感谢这点多余的信息。
通过给优化器一些附加的信息,用关键词const或许能产生更紧凑的代码。
合理地用关键词const可以使编译器非常自然地保护那些不期望被改变的参数,预防其被无意的代码修改。简而言之,如此可以降低bug的出现。
8. 关键词volatile有哪些含意?并给出三个不一样的例子。
一个概念为volatile的变量是说这变量可能会被意想不到地改变,如此,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时需要每次都小心地重新读取这个变量的值,而不是用保存在寄存器里的备份。下面是volatile变量的几个例子:
一个概念为volatile的变量是说这变量可能会被意想不到地改变,如此,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时需要每次都小心地重新读取这个变量的值,而不是用保存在寄存器里的备份。下面是volatile变量的几个例子:
并行设施的硬件寄存器
一个中断服务子程序中会访问到的非自动变量
多线程应用中被几个任务共享的变量
并行设施的硬件寄存器
一个中断服务子程序中会访问到的非自动变量
多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我觉得这是区别C技术员和嵌入式系统技术员的最基本的问题。搞嵌入式的家伙们常常同硬件、中断、RTOS等等交际,所有这部分都需要用到volatile变量。不会volatile的内容将会带来灾难。
假设被应聘者正确地回答了这是问题,我将稍微深究一下,看一下这家伙是否直正了解volatile完全的重要程度。
一个参数既可以是const还可以是volatile吗?讲解为何。
一个指针可以是volatile 吗?讲解为何。
下面的函数有哪些错误:
int square
{
return _ptr _ _ptr;
}
下面是答案:
是的。一个例子是只读的状况寄存器。它是volatile由于它可能被意想不到地改变。它是const由于程序不应该试图去修改它。
是的。尽管这并不非常容易见到。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
这段代码有点变态。这段代码的目的是用来返指针_ptr指向值的平方,但,因为_ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square
{
int a,b;
a = _ptr;
b = _ptr;
return a _ b;
}
因为_ptr的值可能被意想不到地该变,因此a和b可能是不一样的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square
{
int a;
a = _ptr;
return a _ a;
}
9. 嵌入式系统一直要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a
的bit 3,第二个清除a 的bit 3。在以上两个操作中,要维持其它位不变。
对这个问题有三种基本的反应
不知晓怎么样下手。该被面者从没做过任何嵌入式系统的工作。
用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我近期不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,由于我的编译器用其它的方法来达成bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实质硬件的边。
用 #defines 和 bit masks 操作。这是一个有极高可移植性的办法,是应该被用到的办法。最好的解决方法如下:
#define BIT3
static int a;
void set_bit3 {
a |= BIT3;
}
void clear_bit3 {
a = ~BIT3;
}
一些人喜欢为设置和清除值而概念一个掩码同时概念一些说明常数,这也是可以同意的。我期望看到几个要素:说明常数、|=和=~操作。
c招聘笔考试题目篇3
1. 嵌入式系统常常具备需要技术员去访问某特定的内存地方的特征。在某工程中,需要设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
这一问题测一下你是不是知晓为了访问一绝对地址把一个整型数强制转换为一指针是合法的。这一问题的达成方法伴随个人风格不同而不同。典型的类似代码如下:
这一问题测一下你是不是知晓为了访问一绝对地址把一个整型数强制转换为一指针是合法的。这一问题的达成方法伴随个人风格不同而不同。典型的类似代码如下:
int _ptr;
ptr = 0x67a9;
_ptr = 0xaa55;
A more obscure approach is:
一个较晦涩的办法是:
_ = 0xaa55;
即便你的品味更接近第二种策略,但我建议你在应聘时用第一种策略。
2. 中断是嵌入式系统中要紧的组成部分,这致使了不少编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键词 __interrupt。下面的代码就用了__interrupt关键词去概念了一个中断服务子程序,请评论一下这段代码的。
__interrupt double compute_area
{
double area = PI _ radius _ radius;
printf;
return area;
}
这个函数有太多的错误了,以至被人不知从何说起了:
ISR 不可以返回一个值。假如你不懂这个,那样你不会被雇用的。
ISR 不可以传递参数。假如你没看到这一点,你被雇用的机会等同第一项。
在很多的处置器/编译器中,浮点通常都是不可重入的。有的处置器/编译器需要让额处的寄存器入栈,有的处置器/编译器就是不允许在ISR中做浮点运算。除此之外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。
与第三点一脉相承,printf常常有重入和性能上的问题。假如你丢掉了第三和第四点,我不会太为难你的。不需要说,假如你能得到后两点,那样你的被雇用前景愈加光明了。
3 . 下面的代码输出是什么,为何?
void foo
{
unsigned int a = 6;
int b = -20;
? puts( 6 : puts(= 6;
}
这个问题测一下你是不是了解C语言中的整数自动转换原则,我发现有的开发者了解极少这部分东西。不管怎么样,这无符号整型问题的答案是输出是 ”6”。缘由是当表达式中存在有符号种类和无符号种类时所有些操作数都自动转换为无符号种类。因此-20变成了一个很大的正整数,所以该表达式 计算出的结果大于6。这一点对于应当频繁用到无符号数据种类的嵌入式系统来讲是丰常要紧的。假如你答错了这个问题,你也就到了得不到这份工作的边缘。