嵌入式C语言笔试题

合集下载

C语言笔试选择题嵌入式笔试题选择题

C语言笔试选择题嵌入式笔试题选择题

C语言笔试选择题|嵌入式笔试题选择题 C语言笔试选择题篇1以下程序的运行结果是:#include "stdio.h"main() ,, ¥{int a,b,d= 241;a=d/100 % 9b= (一1)&&(一1);printf("%d,%d",a ,b);}A)6,1 B)2,1 C) 6,0 D)2,0C执行以下语句后a的值为:int a,b,c;a= b= c= 1;++a||++b&&++cA)错误 B) 0 C) 2 D) 1A执行以下语句后b 的值为:int a=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);A) 6 B) 0 C) 1 D) 4C以下不正确的if语句形式是:A)if(x>y && x!=y);B)if(x= =y) x+=yC)if(x != y)scanf("%d",&x )else scanf("%d",&y);D)if(XAC语言笔试选择题篇2*1A一个C程序的执行是从_____。

A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序main函数结束*2C以下叙述正确的是:A)在C程序中,main函数必须位于程序的最前面B)C程序的每行中只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误*3D以下叙述不正确的是。

A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面*4CC语言规定:在一个源程序中,main函数的位置。

嵌入式linux c开发常见笔试题目

嵌入式linux c开发常见笔试题目

嵌入式Linux C开发的常见笔试题目主要围绕C语言基础、Linux操作系统以及嵌入式系统开发等方面。

以下是一些可能的笔试题目:
1. 请解释C和C++的主要区别。

2. 描述一下静态变量和全局变量在内存中的分配情况。

3. 解释一下什么是预处理器以及它的主要作用。

4. 编写一个程序,实现两个整数的交换而不使用第三个变量。

5. 描述一下进程和线程的区别以及它们之间的关系。

6. 什么是死锁?请列举至少两种导致死锁的情况。

7. 请解释一下中断处理程序的工作原理。

8. 如何在Linux中创建一个新进程?
9. 描述一下Linux中的同步和异步机制。

10. 什么是RTOS?请列举至少两个RTOS的例子。

c语言嵌入式试题

c语言嵌入式试题

c语言嵌入式试题以下是一些C语言嵌入式试题:1.以下关于C语言嵌入式编程的说法正确的是?(A)C语言嵌入式编程需要考虑内存管理。

(B)C语言嵌入式编程需要考虑实时性。

(C)C语言嵌入式编程需要考虑硬件资源的利用。

(D)以上都正确。

答案:(D)2.以下关于C语言嵌入式编程的内存管理的说法正确的是?(A)嵌入式系统通常内存有限,因此需要精心管理内存。

(B)嵌入式系统通常使用动态内存分配,因此需要注意内存泄漏。

(C)嵌入式系统通常使用静态内存分配,因此不需要考虑内存泄漏。

(D)以上都正确。

答案:(A)、(B)3.以下关于C语言嵌入式编程的实时性的说法正确的是?(A)嵌入式系统通常需要实时响应外部事件。

(B)嵌入式系统通常需要满足一定的延迟要求。

(C)嵌入式系统通常需要满足一定的吞吐量要求。

(D)以上都正确。

答案:(A)、(B)、(C)4.以下关于C语言嵌入式编程的硬件资源利用的说法正确的是?(A)嵌入式系统通常硬件资源有限,因此需要充分利用硬件资源。

(B)嵌入式系统通常需要考虑功耗,因此需要合理使用硬件资源。

(C)嵌入式系统通常需要考虑成本,因此需要降低硬件资源的使用。

(D)以上都正确。

答案:(A)、(B)、(C)5.以下关于C语言嵌入式编程的常见错误是?(A)使用未定义的变量或函数。

(B)使用不兼容的数据类型。

(C)使用未初始化的变量。

(D)以上都正确。

答案:(A)、(B)、(C)6.以下关于C语言嵌入式编程的常见技巧是?(A)使用宏来实现常见的操作。

(B)使用结构体来封装数据。

(C)使用函数指针来实现灵活的处理。

(D)以上都正确。

答案:(A)、(B)、(C)7.以下关于C语言嵌入式编程的常见工具是?(A)编译器。

(B)链接器。

(C)调试器。

(D)以上都正确。

答案:(A)、(B)、(C)8.以下关于C语言嵌入式编程的常见平台是?(A)ARM。

(B)MIPS。

(C)x86。

(D)以上都正确。

答案:(A)、(B)、(C)9.以下关于C语言嵌入式编程的常见应用是?(A)家用电器。

嵌入式软件开发面试C语言笔试题+答案

嵌入式软件开发面试C语言笔试题+答案
/************************
Chapter2 系统类
***********************/
1. Linux 和 Uc/os 是如何实现任务调度的?
2. Bootloader 移植过程要注意的事项,要做哪些工作 3. Emacs 用过没有?
/************************
h) int (*a[10]) (int); // An array of 10 pointers to functions that take an in teger argument and return an integer
5. 什么是存储机制里的大、小端模式?试举例说明 大端模式(big-edian):MSB 存放在最低端的地址上。举例,双字节数0x1234以 big-endian 的方式存在起始地
7. 定义一个返回值是指向函数的指针且有一个指向函数的指针作参数的函数。
通用形式如下:
typedef int (*P)( );
// 定义一个函数指针 P 类型
P function( int (*p)( ) );
// 定义一个函数返回值 P 类型,且定义一个指向函数的指针 p 作参数
8. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365) UL // UL 怎么个用法?你暂不要加
SLNode *p,*q; int j; p=head; j=-1; while( (p->next!=NULL) && (j<(i-1)) ) {
int a = 5, b = 7, c;

嵌入式c语言常见笔试题或面试题

嵌入式c语言常见笔试题或面试题
2、#error 的作用
当预处理器预处理到#error 命令时将停止编译并输出用户自定义的错误消息。其目的就 是保证程序是按照你所设想的那样进行编译的。
如 #error Sorry,an error has occurred! 当程序比较大时,往往有些宏定义是在外部指定的(如 makefile),或是在系统头文件 中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译: #ifdef XXX ... #error "XXX has been defined" #else #endif
如果仅仅使用{}将 foo1 和 foo2 包裹起来,展开后如下:
if(a>0)
{
foo1();
foo2();
}; //这是错的
所以,很多人才采用了 do{...}while(0);
#define DOSOMETHING() \
do{ \
foo1();\
foo2();\
}while(0)\
展开后得到:
由于频繁的进行动态内存分配会造成内存碎片的产生,影响系统性能,所以在不同的系 统中,对于动态内存管理,开发了许多不同的算法,不同的操作系统,有不同的实现方式, 为了程序的可移植性,一般在开发语言的库中都提供了统一接口。对于 C 语言,在标准 C 库和 Glib 中,都实现了以 malloc/free 为接口的动态内存分配功能。也就是说,malloc/free 库函索包装了不同操作系统对动态内存管理的不同实现,为开发者提供了一个统一的开发环 境。对于我们前面提到的一些嵌入式操作系统,因为实时系统的特殊要求(实时性要求和开 发者订制嵌入式系统),可能没有提供相应的接口。
1)、算术转换 进行算术运算(加、减、乘、除、取余以及符号运算)时,不同类型数招必须转换成同

嵌入式c语言笔试题

嵌入式c语言笔试题

嵌入式c语言笔试题●为什么嵌入式行业注重C语言的考察?●首先我们需要知道为什么嵌入式开发用c语言开发,在这么多种编程语言中为什么单单c语言在嵌入式行业中这么受用呢?●在编译器的帮助下,c语言开发出来的代码能在多种不同体系结构的软/硬平台上运行,具有出色的可移植性。

●能够直接访问硬件。

其实能够直接访问硬件的语言有汇编和C语言,但是汇编语言属于低级语言,难以完成一些复杂的功能,此外汇编语言和CPU的架构紧密相关,X86架构和ARM架构的汇编代码是不同的,这就违背了嵌入式开发中可以执行的原则。

然而汇编比C语言访问硬件的效率更高,所以,一般将硬件初始化的工作交给汇编,比较复杂的操作交给C语言。

●那面向对象的编程语言受到无法直接操作硬件的限制,使得c语言在嵌入式开发中有不可取代的地位。

●常见嵌入式C语言笔试题的几个专题●数据类型●用变量a定义如下类型的变量●一个整形数int a;●一个指向整形数的指针int *a;●一个指向指针的指针,被指向的指针指向一个整形数int **a;●一个有十个整形数的数组int a[10];●一个又是个指针的数组,数组元素指向一个整形数int *a[10];●一个指向有十个整形数数组的指针int (*a)[10];●一个指向函数的指针,该函数有一个整形参数并返回一个整形数int (*a)(int );●一个有十个指针的数组,该数组指向一个函数,该函数有一个整型参数并返回一个整形数int (*a[10])(int );●解析●这道题有两种考法,一是给出要求,自己写出定义语句,二是给出定义语句,自己写出变量a的含义。

●解决办法掌握几个原则就好●这里首先提供给大家一个图片●然后看这个变量的本质是什么,越靠近本质的定义其优先级越高●举个栗子●一个有10个指针的数组,数组元素指向一个整形数int *a[10];●一个指向有10个整形数数组的指针int (*a)[10];●我们辨析一下上面两个变量●通过上面运算符优先级的图片可以知道 [] 的优先级是高于 * 的,所以int*a[10];中,a的本质是数组,然后数组的中存放的数据成员是指针,数据成员指向的是整型数据。

嵌入式C笔试题目 Microsoft Word 文档

嵌入式C笔试题目 Microsoft Word 文档

嵌入式C开发人员的最好的0x10道笔试题约定:1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了2)数据类型char 一个字节1 byteint 两个字节2 byte (16位系统,认为整型是2个字节)long int 四个字节4 bytefloat 四个字节4 byetdouble 八个字节8 bytelong double 十个字节10 bytepointer 两个字节2 byte(注意,16位系统,地址总线只有16位)第1题: 考查对volatile关键字的认识#include<setjmp.h>static jmp_buf buf;main() { volatile int b; b=3; if(setjmp(buf)!=0) { printf("%d ", b); exit(0); } b=5; longjmp(buf , 1);}请问,这段程序的输出是(a) 3(b) 5(c) 0(d) 以上均不是第2题:考查类型转换main(){ struct node { int a; int b; int c; }; struct node s= { 3,5,6 }; struct node *pt = &s; printf("%d" , *(int*)pt);}这段程序的输出是:(a) 3(b) 5(c) 6(d) 7第3题:考查递归调用int foo ( int x , int n){ int val; val =1; if (n>0) { if (n%2 == 1) val = val*x; val = val * foo(x*x , n/2); } return val;}这段代码对x和n完成什么样的功能(操作)?(a) x^n (x的n次幂)(b) x*n(x与n的乘积)(c) n^x(n的x次幂)(d) 以上均不是第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d" , *(a+1),*(ptr-1) );}这段程序的输出是:(a) 2 2(b) 2 1(c) 2 5(d) 以上均不是第5题:考查多维数组与指针void foo(int [][3] ); main(){ int a [3][3]= { { 1,2,3} ,{ 4,5,6},{7,8,9}}; foo(a); printf("%d" , a[2][1]);}void foo( int b[][3]) { ++ b; b[1][1] =9;}这段程序的输出是:(a) 8(b) 9(c) 7(d)以上均不对第6题目:考查逗号表达式main(){ int a, b,c, d; a=3; b=5; c=a,b; d=(a,b); printf("c=%d" ,c); printf("d=%d" ,d);}这段程序的输出是:(a) c=3 d=3(b) c=5 d=3(c) c=3 d=5(d) c=5 d=5第7题:考查指针数组main(){ int a[][3] = { 1,2,3 ,4,5,6}; int (*ptr)[3] =a; printf("%d %d " ,(*ptr)[1],(*ptr)[2] ); ++ptr; printf("%d %d" ,(*ptr)[1], (*ptr)[2] );}这段程序的输出是:(a) 2 3 5 6(b) 2 3 4 5(c) 4 5 0 0(d) 以上均不对第8题:考查函数指针int *f1(void){ int x =10; return(&x);}int *f2(void){ int*ptr; *ptr =10; return ptr;}int*f3(void){ int *ptr; ptr=(int*) malloc(sizeof(int)); return ptr;}上面这3个函数哪一个最可能引起指针方面的问题(a) 只有f3(b) 只有f1 and f3(c) 只有f1 and f2(d) f1 , f2 ,f3第9题:考查自加操作(++)main(){ int i=3; int j; j = sizeof(++i+ ++i); printf("i=%d j=%d", i ,j);}这段程序的输出是:(a) i=4 j=2(b) i=3 j=2(c) i=3 j=4(d) i=3 j=6第10题:考查形式参数,实际参数,指针和数组void f1(int *, int); void f2(int *, int); void(*p[2]) ( int *, int);main(){ int a; int b; p[0] = f1; p[1] = f2; a=3; b=5; p[0](&a , b); printf("%d\t %d\t" , a ,b); p[1](&a ,b); printf("%d\t %d\t" , a ,b);}void f1( int* p , int q){ int tmp; tmp =*p; *p = q; q= tmp;}void f2( int* p , int q){ int tmp; tmp =*p; *p = q; q= tmp;}这段程序的输出是:(a) 5 5 5 5(b) 3 5 3 5(c) 5 3 5 3(d) 3 3 3 3第11题:考查自减操作(--)void e(int ); main(){ int a; a=3; e(a);}void e(intn){ if(n>0) { e(--n); printf("%d" , n); e(--n); }}这段程序的输出是:(a) 0 1 2 0(b) 0 1 2 1(c) 1 2 0 1(d) 0 2 1 1第12题:考查typedef类型定义,函数指针typedef int (*test) ( float * , float*)test tmp;tmp 的类型是(a) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to function of having two arguments that is pointer to float(b) 整型(c) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int(d) 以上都不是第13题:数组与指针的区别与联系main(){ char p; char buf[10] ={ 1,2,3,4,5,6,9,8}; p = (buf+1)[5]; printf("%d" , p);}这段程序的输出是:(a) 5(b) 6(c) 9(d) 以上都不对第14题: 考查指针数组的指针Void f(char**);main(){ char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" }; f( argv );}voidf( char **p ){ char* t; t= (p+= sizeof(int))[-1]; printf( "%s" , t);}这段程序的输出是:(a) ab(b) cd(c) ef(d) gh第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情有可原呵呵,#include<stdarg.h>int ripple ( int , ...);main(){ int num; num = ripple ( 3, 5,7); printf( " %d" , num);}int ripple (int n, ...){ int i , j; int k; va_list p; k= 0; j = 1; va_start( p , n); for (; j<n; ++j) { i = va_arg( p , int); for (; i; i &=i-1 ) ++k; } return k;}这段程序的输出是:(a) 7(b) 6(c) 5(d) 3第16题:考查静态变量的知识int counter (int i){ static int count =0; count = count +i; return (count );}main(){ int i , j; for (i=0; i <=5; i++) j = counter(i);}本程序执行到最后,j的值是:(a) 10(b) 15(c) 6(d) 7详细参考答案第1题: (b)volatile字面意思是易于挥发的。

嵌入式c语言笔试题

嵌入式c语言笔试题

嵌入式c语言笔试题1. 编写一个C程序,从键盘读入两个整数a和b,计算它们的和并输出。

```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d%d", &a, &b);sum = a + b;printf("它们的和为:%d\n", sum);return 0;}```2. 编写一个C函数,判断一个整数是否是奇数,并返回判断结果(1表示奇数,0表示偶数)。

```c#include <stdio.h>int isOdd(int num) {if (num % 2 == 1) {return 1;} else {return 0;}}int main() {int num;printf("请输入一个整数:\n");scanf("%d", &num);if (isOdd(num) == 1) {printf("是奇数\n");} else {printf("是偶数\n");}return 0;}```3. 编写一个C函数,求一个整数数组中的最大值并返回。

#include <stdio.h>int findMax(int array[], int size) {int max = array[0];for (int i = 1; i < size; i++) {if (array[i] > max) {max = array[i];}}return max;}int main() {int size;printf("请输入数组的大小:\n"); scanf("%d", &size);int array[size];printf("请输入数组元素:\n"); for (int i = 0; i < size; i++) {scanf("%d", &array[i]);int max = findMax(array, size);printf("最大值为:%d\n", max);return 0;}```4. 编写一个C程序,实现冒泡排序算法对一个整数数组进行升序排序并输出结果。

嵌入式笔试题_笔试题目

嵌入式笔试题_笔试题目

嵌入式笔试题从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

下面就由小编为大家介绍一下嵌入式笔试题的文章,欢迎阅读。

嵌入式笔试题篇11:用C语言实现大小端的测试Int CheckCpu{union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端”);else printf(“大端”);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译器这个变量的值会随时发生变化,每次使用之前都要去内存里从新读取它的值,并不要随意针对它做优化,主要用在:1:一个中断子程序中会访问到的非自动变量;2:多线程应用中被几个线程共享的变量;3:并行设备的硬件寄存器。

3:C语言中static关键字的作用有哪些?1:在函数体中,一个被声明为静态的变量在这个变量在调用过程中维持其值不变;2:在模块内(但在函数体外),一个被声明为静态的变量,可以被这个模块内的所用函数使用,但不能被模块外的函数使用,它是一个本地的全局变量;3:在模块内,一个被声明为静态变量的函数,智能被这个模块内的函数调用;4:static全局变量与局部变量的区别:static全局变量只能被初始化一次,防止其他单元文件中被引用;5:static局部变量与局部变量的区别:static局部变量只能被初始化一次,下一次依据上一次结果的值;6:static函数与普通函数的区别:static在内存中只用一份,普通函数在每一次调用中维持一份拷贝。

4:请问下面三种变量的区别:Int const *p : 指向常整型的指针;Int *const p; 指向整型的常指针;Int *const *p:指向常整型的常指针;5:在ARM系统中,在函数调用的时候,参数是通过哪种方式传递的。

嵌入式c语言考题

嵌入式c语言考题

嵌入式c语言考题1.请编写一个函数,实现将一个整数转换为字符串的功能。

例如,将整数123转换为字符串"123"。

void int2str(int num, char* str){sprintf(str, "%d", num);}2.在下面的代码中,变量a、b、c、d分别存储了一个四字节整数的每个字节的值,请编写一行代码,将这个四字节整数合成为一个整数:unsigned char a = 0x11, b = 0x22, c = 0x33, d = 0x44;unsigned int value = (a << 24) | (b << 16) | (c << 8) | d;3.请编写一个函数,从一个字符数组中找出最大的元素,并返回它的下标和值。

例如,对于字符数组['a', 'c', 'b'],最大的元素为'c',下标为1,值为'c'。

void find_max(char* arr, int len, int* index, char* max_value){*max_value = arr[0];*index = 0;for (int i = 1; i < len; i++) {if (arr[i] > *max_value) {*max_value = arr[i];*index = i;}}}4.请编写一个函数,实现将一个二进制字符串转换为十进制整数的功能。

例如,将二进制字符串"1101"转换为整数13。

int bin2dec(char* bin_str){int dec = 0;for (int i = 0; bin_str[i] != '\0'; i++) {dec = dec * 2 + (bin_str[i] - '0');}return dec;}5.在下面的代码中,变量a、b、c分别存储了三个整数,请编写一行代码,在不使用临时变量的情况下,交换a、b、c的值。

嵌入式linux c开发常见笔试题目

嵌入式linux c开发常见笔试题目

嵌入式linux c开发常见笔试题目嵌入式Linux C开发是一个广泛应用于各种嵌入式设备的技术领域,也是许多企业在招聘时重点考察的技能。

在笔试中,考察的内容通常包括C语言基础、嵌入式系统知识、Linux系统编程等方面。

以下是一些常见的嵌入式Linux C开发笔试题目,供大家参考。

1. C语言基础在嵌入式Linux C开发中,对C语言的熟练掌握是非常重要的。

下面是一些与C语言基础相关的题目:1.1 请写出C语言中的数据类型,并解释其含义。

1.2 请解释C语言中的指针,并写出指针的声明、赋值和使用的例子。

1.3 请解释C语言中的结构体,并写出结构体的定义和使用的例子。

2. 嵌入式系统知识嵌入式系统是指在限定的资源和空间中运行的计算机系统,对于嵌入式Linux C开发来说,对嵌入式系统的了解是必不可少的。

下面是一些与嵌入式系统知识相关的题目:2.1 请解释嵌入式系统的特点,并举例说明。

2.2 请简要解释Linux内核的作用,并说明为什么在嵌入式系统中常使用Linux内核。

2.3 请解释交叉编译的概念,并说明为什么在嵌入式Linux C开发中常使用交叉编译。

3. Linux系统编程Linux系统编程是指在Linux系统上进行程序开发和调试的技术。

对于嵌入式Linux C开发者来说,熟悉Linux系统编程是必备的技能。

下面是一些与Linux系统编程相关的题目:3.1 请解释Linux系统中的进程和线程,并说明它们的区别和联系。

3.2 请解释Linux文件系统的层次结构,并说明每个层次的作用。

3.3 请解释Linux中的系统调用,并举例说明几个常用的系统调用。

4. 嵌入式Linux应用开发嵌入式Linux应用开发是指在嵌入式Linux系统上进行应用程序开发的技术。

下面是一些与嵌入式Linux应用开发相关的题目:4.1 请编写一个在嵌入式Linux系统上运行的Hello World程序。

4.2 请解释Linux设备驱动程序的概念,并说明为什么在嵌入式Linux应用开发中常涉及到设备驱动程序。

嵌入式笔试题

嵌入式笔试题

第一章C语言常见问题1.1关作键字static的用这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。

2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用。

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,但是很少的人能懂得第三部分。

这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

考点:在嵌入式系统中,要时刻懂得移植的重要性,程序可能是很多程序员共同协作同时完成,在定义变量及函数的过程,可能会重名,这给系统的集成带来麻烦,因此保证不冲突的办法是显示的表示此变量或者函数是本地的,static即可。

在Linux的模块编程中,这一条很明显,所有的函数和全局变量都要用static 关键字声明,将其作用域限制在本模块内部,与其他模块共享的函数或者变量要EXPORT到内核中。

1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

嵌入式笔试题及答案

嵌入式笔试题及答案

嵌入式笔试题及答案一、选择题(每题2分,共40分)1. 下面哪个不是嵌入式系统的特点?A. 实时性强B. 资源受限C. 包含网络通信功能D. 电源自主供电答案:C2. 嵌入式系统的一个主要应用领域是:A. 医疗设备B. 大型工业控制C. 智能手机D. 电子游戏答案:A3. 在嵌入式系统开发中,通常使用哪种编程语言?A. PythonB. JavaC. C/C++D. JavaScript答案:C4. 嵌入式系统的主要硬件组成部分是:A. 处理器、内存、外设B. 显示屏、键盘、鼠标C. 摄像头、扬声器、麦克风D. 电源、机箱、风扇答案:A5. 在嵌入式系统开发中,以下哪个是常用的实时操作系统?A. WindowsB. LinuxC. AndroidD. RTOS答案:D...二、编程题(共60分)请使用C语言完成以下题目:1. 编写一个函数,判断一个数是否为素数。

函数原型为: int isPrime(int n);答案:```c#include <stdio.h>int isPrime(int n) {int i;for (i = 2; i <= n/2; i++) {if (n % i == 0) {return 0; // 不是素数}}return 1; // 是素数}int main() {int n;printf("请输入一个整数:");scanf("%d", &n);if (isPrime(n)) {printf("%d是素数\n", n);} else {printf("%d不是素数\n", n);}return 0;}```2. 编写一个函数,计算n的阶乘。

函数原型为: int factorial(int n);答案:```c#include <stdio.h>int factorial(int n) {if (n == 0) {return 1;} else {return n * factorial(n - 1);}}int main() {int n;printf("请输入一个整数:");scanf("%d", &n);printf("%d的阶乘为:%d\n", n, factorial(n));return 0;}```...三、简答题(每题10分,共30分)1. 简述嵌入式系统的优缺点。

嵌入式C语言经典笔试题目

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。

记住,第一印象很重要。

2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B)((A)<= (B) ? (A) : (B))这个测试是为下面的目的而设的:1)标识#define在宏中应用的基本知识。

这是很重要的。

因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

2)三重条件操作符的知识。

这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

3)懂得在宏中小心地把参数用括号括起来4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3.预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。

这问题对区分一个正常的伙计和一个书呆子是很有用的。

只有书呆子才会读C语言课本的附录去找出象这种问题的答案。

当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。

死循环(Infinite loops)4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。

嵌入式c语言经典笔试题

嵌入式c语言经典笔试题

嵌入式c语言经典笔试题嵌入式C语言经典笔试题有很多,以下是一些常见的题目,供参考:1. 写出一个宏定义,实现取两个数中的较大值。

c#define MAX(a, b) ((a) > (b) ? (a) : (b))2. 编写一个函数,判断一个整数是否为偶数,如果是则返回1,否则返回0。

cint isEven(int num) {if (num % 2 == 0) {return 1;} else {return 0;3. 实现一个函数,将一个字符串反转。

cvoid reverseString(char* str) {int len = strlen(str);for (int i = 0; i < len / 2; i++) {char temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;4. 编写一个函数,计算一个数组中所有元素的和。

cint sumArray(int* arr, int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += arr[i];return sum;5. 实现一个简单的队列数据结构,包括入队、出队和判空操作。

c#define QUEUE_SIZE 100typedef struct {int data[QUEUE_SIZE];int front;int rear;} Queue;void initQueue(Queue* queue) {queue->front = 0;queue->rear = 0;void enqueue(Queue* queue, int value) {if ((queue->rear + 1) % QUEUE_SIZE == queue->front) {// 队列已满return;queue->data[queue->rear] = value;queue->rear = (queue->rear + 1) % QUEUE_SIZE;int dequeue(Queue* queue) {if (queue->front == queue->rear) {// 队列为空return -1;int value = queue->data[queue->front];queue->front = (queue->front + 1) % QUEUE_SIZE;return value;int isEmpty(Queue* queue) {return queue->front == queue->rear;这些题目是嵌入式C语言笔试中常见的题目,希望对你有帮助。

嵌入式c语言笔试题及答案

嵌入式c语言笔试题及答案

嵌入式c语言笔试题及答案2017年嵌入式c语言笔试题及答案1 读程序段,回答问题int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf("d=%d\n",d);return 0;}a) 写出程序输出b) 在一个可移植的系统中这种表达式是否存在风险?why? #include "stdio.h"int a=0;int b;static char c;int main(int argc,char *argv[]){char d=4;static short e;a++;b=100;c=(char)++a;e=(++d)++;printf("a=%d, b=%d, c=%d, d= %d, e=%d",a,b,c,d,e); return 0;}a) 写出程序输出b) 编译器如果安排各个变量(a,b,c,d)在内存中的布局(eg. stack,heap,data section,bss section),最好用图形方式描述。

2 中断是嵌入式系统中重要的组成部分,这导致了许多编译开发商提供一种扩展:让标准C支持中断,产生了一个新的关键字__interrupt。

下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论以下这段代码。

__interrupt double compute_area(double radius){double area = PI * radius *radius;printf("nArea = %f", area);return area;}3 C/C++基础知识问题a) 关键字volatile在编译时有什么含义?并给出三个不同使用场景的例子(可以伪代码或者文字描述)。

b) C语言中static关键字的具体作用有哪些 ?c) 请问下面三种变量声明有何区别?请给出具体含义int const *p;int* const p;int const* const p;4 嵌入式系统相关问题a) 对于整形变量A=0x12345678,请画出在little endian及big endian的方式下在内存中是如何存储的。

C语言笔试选择题嵌入式笔试题选择题

C语言笔试选择题嵌入式笔试题选择题

C语言笔试选择题嵌入式笔试题选择题 c语言笔试选择题|嵌入式笔试题选择题c语言笔试选择题篇1以下程序的运转结果就是:#include"stdio.h"main(),,{inta,b,d=;a=d/%9b=(一1)&&(一1);printf("%d,%d",a,b);}a)6,1b)2,1c)6,0d)2,0c继续执行以下语句后a的值:inta,b,c;a=b=c=1;++a||++b&&++ca)错误b)0c)2d)1a继续执行以下语句后b的值:inta=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);a)6b)0c)1d)4c以下不正确的if语句形式是:a)if(x>y&&x!=y);b)if(x==y)x+=yc)if(x!=y)scanf("%d",&x)elsescanf("%d",&y);d)if(xac语言笔试选择题篇2*1a一个c程序的继续执行从_____。

a)本程序的main函数开始,到main函数结束b)本程序文件的第一个函数已经开始,至本程序文件的最后一个函数完结c)本程序的main函数开始,到本程序文件的最后一个函数结束d)本程序文件的第一个函数已经开始,至本程序main函数完结*2c以下叙述正确的是:a)在c程序中,main函数必须坐落于程序的最为前面b)c程序的每行中只能写一条语句c)c语言本身没输入输出语句d)在对一个c程序进行编译的过程中,可发现注释中的拼写错误*3d以下描述不恰当的就是。

a)一个c源程序可由一个或多个函数组成b)一个c源程序必须涵盖一个main函数c)c程序的基本组成单位是函数d)在c程序中,注解表明就可以坐落于一条语句的后面*4cc语言规定:在一个源程序中,main函数的位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

经典16道
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

3. 预处理器标识#error的目的是什么?
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
5. 用变量a给出下面的定义
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的指针,它指向的指针是指向一个整型数(A pointer to a pointer to
an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to
integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a
function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一
个整型数(An array of ten pointers to functions that take an integer argument and
return an integer )
6. 关键字static的作用是什么?
7.关键字const是什么含意?下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
8. 关键字volatile有什么含意并给出三个不同的例子。

1). 一个参数既可以是const还可以是volatile吗?解释为什么。

2). 一个指针可以是volatile 吗?解释为什么。

3). 下面的函数有什么错误:
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
9. 嵌入式系统总是要用户对变量或寄存器进行位操作。

给定一个整型变量a,写两段代码,
第一个设置a的bit 3,第二个清除a 的bit 3。

在以上两个操作中,要保持其它位不变。

10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。

在某工程中,要求
设置一绝对地址为0x67a9的整型变量的值为0xaa66。

编译器是一个纯粹的ANSI编译器。

写代码去完成这一任务。

11. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标
准C支持中断。

具代表事实是,产生了一个新的关键字 __interrupt。

下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
12 . 下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6)?puts("> 6") : puts("<= 6");
}
13. 评价下面的代码片断:
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;
/*1's complement of zero */
14. 尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存
的过程的。

那么嵌入式系统中,动态分配内存可能发生的问题是什么?
15. Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。

也可以用预处
理器做类似的事。

例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上两种情况的意图都是要定义dPS 和 tPS 作为一个指向结构s指针。

哪种方法更好呢?(如果有的话)为什么?
16. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?
int a = 5, b = 7, c;
c = a+++b;
嵌入式相关笔试题目
1、将一个字符串逆序
2、将一个链表逆序
3、计算一个字节里(byte)里面有多少bit被置1
4、搜索给定的字节(byte)
5、在一个字符串中找到可能的最长的子字符串
6、字符串转换为整数
7、整数转换为字符串。

相关文档
最新文档