c语言上机试题
C语言能以简易的方式编译、处理低级存储器。它是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。所以,像这类编程类的课程没有一定的试题练习是不能真正把知识学到家的。
下半年计算机二级c语言基础试题
任何设计活动都是在各种约束条件和相互矛盾的需求之间寻求一种平衡,程序设计也不例外。下面是小编收集的关于计算机二级c语言基础试题,希望大家认真阅读!
下半年计算机二级c语言基础试题1
一、选择:
1.给出以下定义:
char acX[ ]= "abcdefg";
char acY[ ]= {'a','b','c','d','e','f','g'};
则正确的叙述为( )
A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同
C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组acY的长度
答案:C
2.
void example(char acHello[])
{
printf("%d", sizeof(acHello));
return;
}
void main()
{
char acHello[] = "hello";
example(acHello);//数组名称作参数,传的是地址,一个地址占四个字节
return;
}
的输出是
A 4 B 5 C 6 D不确定
答案:A
3. 有以下程序段
char acArr[]= "ABCDE";
2017年全国计算机二级c语言考试题库
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面是小编整理的关于全国计算机二级c语言考试试题,欢迎参考!
5.3 填空题
1.如果将调用一个函数的'过程分为3个步骤,第1步是转去执行被调用函数 ,第2步是执行被调用函数的语句 ,第3步是返回操作。
2.函数的存储类分两种,它们分别是外部 函数和内部函数,其中内部 函数的存储类说明不可省略,该说明符是 static 。
3.使用关键字inline说明的函数称为内联 函数,具有相同函数名但具有不同实现的函数称为重载 函数。
4.在调用一个函数过程中可以直接或间接地调用该函数,则该函数称为被调用 函数。这种调用称为嵌套 调用。
5.在引用调用中,函数实参用变量名 ,形参用 引用名 。
5.5 编程题
1. 从键盘上输入8个浮点数,编程求出其和以及平均值。要求写出求和以及平均值的函数。
答:编程如下:
#include
double s,sum(double b[],int n),average(int n);
void main()
{
double a[8];
cout<<"输入8个double型数 ;";
for(int i=0;i<8;i++)
cin>>a[i];
2017年3月计算机二级c语言模拟试题
一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)
(1)下列数据结构中,属于非线性结构的是
A.循环队列
B.带链队列
C.二叉树
D.带链栈
(2)下列数据结果中,能够按照“先进后出”原则存取数据的是
A.循环队列
B.栈
C.队列
D.二叉树
(3)对于循环队列,下列叙述中正确的是
A.队头指针是固定不变的
B.队头指针一定大于队尾指针
C.队头指针一定小于队尾指针
D.队头指针可以大于队尾指针,也可以小于队尾指针
(4)算法的空间复杂度是指
A.算法在执行过程中所需要的计算机存储空间
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
(5)软件设计中划分模块的一个准则是
A.低内聚低耦合
B.高内聚低耦合
C.低内聚高耦合
D. 高内聚高耦合
(6)下列选项中不属于结构化程序设计原则的是
A.可封装
B. 自顶向下
C.模块化
D. 逐步求精
(7)数据库管理系统是
A.操作系统的一部分
B.在操作系统支持下的系统软件
C.一种编译系统
D. 一种操作系统
(8)在E-R图中,用来表示实体联系的图形是
2017年全国计算机c语言程序设计考试试题及答案
《C语言程序设计》讲述了C语言的基本概念、各种数据类型的使用技巧、程序流程控制、数组、函数、指针以及有关程序设计的方法等内容。下面是小编整理的关于国计算机c语言程序设计考试试题及答案,欢迎参考!
一、单项选择
1.下列变量名中,非法的是( C )。
A.A25 B.My_car
C.My-str D.abc
2.下列常量中,十六进制int型常量是( A )。
A.0x5f B.x2a
C.046 D.7a
3.下列常量中,不是字符常量的是( B )。
A.'\n' B."y"
C.'x' D.'\7'
4.在函数体内定义了下述变量a,a的存储类为( D )。
int a;
A.寄存器类 B.外部类
C.静态类 D.自动类
5.下列关于变量存储类的描述中,错误的是( C )。
A.任何变量定义后都具有一个确定的存储类
B.变量的存储类确定了变量的`作用域和寿命
C.定义变量时没有存储类说明符者一律为自动类
D.内部静态类变量和外部静态类变量的存储类说明符都是static
6.下列关于变量数据类型的描述中,错误的是( A )。
A.定义变量时int型数据类型可以省略
B.变量的数据类型可以决定该变量占内存的字节数
C.变量的数据类型是可以被强制的
2017年计算机c语言二级考试试题及答案
程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。yjbys小遍小编整理了一套计算机c语言二级考试试题及答案,希望可以帮助大家!
一、单项选择
1 下列数据中,为字符串常量的是()。 D
A、'A'
B、How do you do.
C、$abc
D、"house"
2 以下所列的C语言常量中,错误的是( )。 B
A、0xFF
B、1.2e0.5
C、2L
D、'\72'
3 以下程序的输出结果是()。 D
main()
{float x=3.6;
int i;
i=(int)x;
printf("x=%f,i=%d\n",x,i);
}
A、x=3.600000,i=4
B、x=3 i=3.600000
C、x=3,i=3
D、x=3.600000,i=3
4 若k是整型,则以下程序段的执行结果是:( ) B
k=-3;
if(k<=0) printf("####")
else printf("&&&&");
A、####
B、有语法错误,无结果
yahoo在线笔试题(c语言)
当前位置: 选择试题类型>>答题
C试题
类型:C试题 | 试题:55道试题(50道选择题,5道问答题)
注意: 答题过程如果您不提交答案,或者关闭浏览器退出,我们将不再允许您再次答题。
谢谢!
试题 选项
Question 1. (单选)
在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比
较次数为(3)
1. 2
2. 3
3. 4
4. 5
Question 2. (单选)
设散列表的存储空间大小为19,所用散列函数为h(key)=key mod 19,用开地址线性探查法解
决碰撞。散列表的当前
状态如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 190 194 768 559 582 39
3 208.现要将关键码
值75插入到该散列表中,其地址应为 (1)
1. 1
2. 11
3. 5
4. 15
Question 3. (单选)
作业管理的主要任务包括作业输入、作业处理和作业输出。其中作业处理的工作是Ⅰ.作业
调度 Ⅱ.作业控制 Ⅲ.
作业后备 (3)
1. 只有Ⅰ
2. 只有Ⅱ
3. Ⅰ和Ⅱ
4. 都是
Question 4. (单选)
系统为了管理文件,设置了专门的数据结构----文件控制块(FC。FCB是在执行下列哪一个系
统调用时建立的? (1)
1. create
2. open
3. read
4. write
Question 5. (单选)
下面关于通道的叙述中,正确的是Ⅰ.通道相当于一个功能简单的处理机Ⅱ.通道完成数据输
入输出工作Ⅲ.通道与
CPU共用一个内存 (4)
1. Ⅰ和Ⅱ
2. Ⅰ和Ⅲ
3. Ⅱ和Ⅲ
4. 都是
Question 6. (单选)
互操作性是指在不同环境下的应用程序可以相互操作,交换信息。要使采用不同数据格式的
各种计算机之间能够相
互理解,这一功能是由下面哪一层来实现的? (2)
1. 应用层
2. 表示层
3. 会话层
4. 传输层
Question 7. (单选)
在UNIX的Shell程序中,可以使用位置变量。若要指明Shell引用的最近后台进程的号码,可
以使用位置变量 (2)
1. $$
2. $!
3. $#
4. $-
Question 8. (单选)
设二叉树根结点的层次为0,一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有
f个结点和c个结点,下列
关系式不正确的是: (2)
1. f>=c
2. c>f
3. f=2k+1-1
4. C>2k-1
Question 9. (单选)
单链表的每个结点中包括一个指针link,它指向该结点的后继结点。现要将指针q指向的新
结点插入到指针p指向的
单链表结点之后,下面的操作序列中哪一个是正确的? (3)
1. q:=p^.link; p^.link:=q^.link
2. p^.link:=q^.link; q:=P^.link
3. q^.link:=p^.link; p^.link:=q;
4. p^.link:=q; q^.link:=p^,link
Question 10. (单选)
某二叉树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。
该二叉树结点的前序序
列为 (2)
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 11. (单选)
某二叉树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。
该二叉树对应的树林包
括多少棵树? (2)
1. 1
2. 2
3. 3
4. 4
Question 12. (单选)
某二叉树结点的对称序序列为A、B、C、D、E、F、G,后序序列为B、D、C、A、F、G、E。
该二叉树对应的树林结
点的层次次序序列为 (1)
1. E、G、F、A、C、D、B
2. E、A、C、B、D、G、F
3. E、A、G、C、F、B、D
4. E、G、A、C、D、F、B
Question 13. (单选)
假设就绪队列中有10个进程,系统将时间片设为200ms, CPU进行进程切换要花费10ms。则
系统开销所占的比率约
为 (2)
1. 1%
2. 5%
3. 10%
4. 20%
Question 14. (单选)
长度相同但格式不同的2种浮点数,假设前者阶码长、尾数短,后者阶码短、尾数长,其它
规定均相同,则它们可
表示的数的范围和精度为: (2)
1. 两者可表示的数的范围和精度相同
2. 前者可表示的数的范围大但精度低
3. 后者可表示的数的范围大且精度高
4. 前者可表示的数的范围大且精度高
Question 15. (单选)
所谓“变号操作”是指将一个整数变成绝对值相同但符号相反的另一个整数。假设使用补
码表示的8位整数
X=10010101,则经过变号操作后结果为:(4)
1. 1101010
2. 10101
3. 11101010
4. 1101011
Question 16. (单选)
设有一个用数组Q[1..m」表示的环形队列,约定f为当前队头元素在数组中的位置,r为队
尾元素的后一位置(按顺
时针方向),若队列非空,则计算队列中元素个数的公式应为:(2)
1. r-f
2. (m+r-f) mod m
3. (m-r+f)mod m
4. (m-r-f) mod m
Question 17. (单选)
计算机最主要的工作特点是(2)
1. 存储程序与自动控制
2. 高速度与高精度
3. 可靠性与可用性
4. 有记忆能力
Question 18. (单选)
计算机中数据的表示形式是(3)
1. 八进制
2. 十进制
3. 二进制
4. 十六进制
Question 19. (单选)
下面列出的四种存储器中,易失性存储器是(1)
1. RAM
2. ROM
3. PROM
4. CD-ROM
Question 20. (单选)
I/O接口位于 (2)
1. 总线和设备之间
2. CPU和I/O设备之间
3. 主机和总线之间
4. CPU和主存储器之间
Question 21. (单选)
计算机硬件能直接识别和执行的只有(4)
1. 高级语言
2. 符号语言
3. 汇编语言
4. 机器语言
Question 22. (单选)
具有多媒体功能的微型计算机系统中,常用的CD-ROM是(2)
1. 只读型大容量软盘
2. 只读型光盘
3. 只读型硬盘
4. 半导体只读存储器
Question 23. (单选)
微机中1K字节表示的'二进制位数是(4)
1. 1000
2. 8x1000
3. 1024
4. 8x1024
Question 24. (单选)
下列字符中,ASCII码值最小的是(2)
1. a
2. A
3. x
4. Y
Question 25. (单选)
OSI(开放系统互联)参考模型的最低层是(3)
1. 传输层
2. 网络层
3. 物理层
4. 应用层
Question 26. (单选)
在面向对象的系统中,系统责任的良好分配原则是(3)
1. 在类之间均匀分配
2. 集中分配在少数控制类中
3. 根据交互图的消息进行分配
4. 根据个人喜好进行分配
Question 27. (单选)
在CMM模型中,对软件成熟度有以下5个级别,请从低到高排序
a 初始级:
软件过程的特点是无秩序的,偶尔甚至是混乱的。几乎没有什么过程是经过定义的,成功依
赖于个人的努力。
b 优化级:
利用来自过程和来自新思想、新技术的先导性试验的定量反馈信息,使持续过程改进成为
可能。
c 已定义级:
管理活动和工程活动两方面的软件过程均已文档化、标准化、并集成到组织的标准软件过
程。
d 已管理级:
已采集详细的有关软件过程和产品质量的度量,无论软件过程还是产品均得到定量了解和控
制。
e 可重复级:
已建立基本的项目管理过程去跟踪成本、进度和功能性。必要的过程纪律已经就位,使具
有类似应用的项目。能重
复以前的成功。
(3)
1. acdbe
2. adceb
3. aecdb
4. abcde
Question 28. (单选)
在下面所列举的逻辑测试覆盖中,测试覆盖最强的是(3)
1. 条件覆盖
2. 条件组合覆盖
3. 语句覆盖
4. 条件及判定覆盖
Question 29. (单选)
一般来说,在软件维护过程中,大部分工作是由什么引起的(3)
1. 适应新的软件环境
2. 适应新的硬件环境
3. 用户的需求改变
4. 程序的可靠性
Question 30. (单选)(2)
PSP是?
1. 团队软件过程
2. 个体软件过程
3. 过程改进过程
4. 质量管理过程
Question 31. (单选)
假定a和b为int型变量,则执行以下语句后b的值为 (4)
a=1; b=10;
do { b-=a; a++; } while (b--<0);
1. 9
2. -2
3. -1
4. 8
Question 32. (单选)
设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)
则执行语句:z=2 * (N+Y(5+1));后,z的值为 (3)
1. 出错
2. 42
3. 48
4. 54
Question 33. (单选)
执行以下程序段后,m的值为 (1)
int a[2][3]={ {1,2,3},{4,5,6} };
int m,*p;
p=a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
1. 15
2. 14
3. 13
4. 12
Question 34. (单选)
有以下程序
main()
{ char a[]="programming", b[]="language";
char *p1,*p2;
int i;
p1=a; p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i)) printf("%c",*(p1+i));
}
输出结果是 (4)
1. gm
2. rg
3. or
4. ga
Question 35. (单选)
有以下程序
int fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; *dp=x-y; }
main()
{ int a, b, c, d;
a=30; b=50;
fun(a,b,c,&d);
printf("%d,%d
", c, d);
}
输出结果是 (3)
1. 50,30
2. 30,50
3. 80,-20
4. 80,20
Question 36. (单选)
下述标识符中, 合法的用户标识符是(4)
1. A#C
2. getch
3. void
4. sizeOf
Question 37. (单选)
以下选项中合法的字符常量是(3)
1. A
2. '10'
3. 68
4. D
Question 38. (单选)
以下叙述正确的是 (3)
1. 在C程序中,main函数必须位于程序的最前面
2. C程序的每行中只能写一条语句
3. C语言本身没有输入输出语句
4. 在对一个C程序进行编译的过程中,可发现注释中的拼写错误
Question 39. (单选)
以下叙述中不正确的是 (4)
1. 在不同的函数中可以使用相同名字的变量
2. 函数中的形式参数是局部变量
3. 在一个函数内定义的变量只在本函数范围内有效
4. 在一个函数内的复合语句中定义的变量在本函数范围内有效
Question 40. (单选)
设int类型的数据长度为2个字节,则 unsigned int 类型数据的取值范围是 (2)
1. 0~255
2. 0~65535
3. -32768~32767
4. -256~255
Question 41. (单选)
某文件中定义的静态全局变量(或称静态外部变量)其作用域是 (2)
1. 只限某个函数
2. 本文件
3. 跨文件
4. 不限制作用域
Question 42. (单选)
语句:printf("%d
",12 012);的输出结果是 (3)
1. 12
2. 012
3. 8
4. 6
Question 43. (单选)
设int x=4; 则执行以下语句: x+=x-=x-x;后,x的值为 (3)
1. 0
2. 4
3. 8
4. 12
Question 44. (单选)
while(!x)中的(!x)与下面条件等价。 (4)
1. x==1
2. x!=1
3. x!=0
4. x==0
Question 45. (单选)
已知int i,a;执行语句: i=(a=2*3,a*5),a+6;后,变量i的值是 (3)
1. 6
2. 12
3. 30
4. 36
Question 46. (单选)
整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的表达式是 (4)
1. x || y
2. x | y
3. x y
4. x ^ y
Question 47. (单选)
x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 (2)
1. INPUT x、y、z;
2. scanf("%d%d%d",x,&y,&z);
3. scanf("%d%d%d",x,y,z);
4. read("%d%d%d",x,y,z);
Question 48. (单选)
以下各选项企图说明一种新的类型名,其中正确的是 (2)
1. typedef v1 int;
2. typedef int v3;
3. typedef v4: int;
4. typedef v2=int;
Question 49. (单选)
char x=3,y=6,z;
z=x^y<<2;
则z的二进制值是 (2)
1. 10100
2. 11011
3. 11100
4. 11000
Question 50. (单选)
若有说明:int i, j=2,*p=i;,则能完成i=j赋值功能的语句是 (2)
1. i=*p;
2. *p=*j;
3. i=j;
4. i=**p;
Question 51. (问答)
给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两
个操作中,要保持其它
位不变。
a|=0x4;
int b=a0x7;
a>>=4;
a=(a<<4)|b;
Question 52. (问答)
有双向循环链表结点定义为:
struct node
{ int data;
struct node *front,*next;
};
有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中dat
a值相同的结点删除
struct node
{ int data;
struct node *front,*next;
};
node* del(node *pHead){
if(pHead==pHead->next){
free(pHead);
return NULL;
}
node *p=pHead;
pHead->next->front=pHead->front;
pHead->front->next=pHead->next;
pHead=pHead->next;
free(p);
return pHead;
}
void delequ(node*pHeadA,node *pHeadB){
node *pA=pHeadA;
node *pB;
int flag;
do{
flag=0;
pB=pHeadB;
do{
if(pB->data==pA->data){
if(pA==pHeadA){
pHeadA=pA=del(pHeadA);
flag=1;
}
else{
pA=del(pA);
}
pB=del(pB);
break;
}
pB=pB->next;
}while(pB!=pHeadB);
if(flag==0){
pA=pA->next;
}
}while(!pA & !pB && (flag||(pA!=pHeadA)));
}
Question 53. (问答)
编程实现:找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"c
ad"
char* constr(char *A,char *B){
int lenA=strlen(A),lenB=strlen(B);
int itmp,conlen=0;
char *pequ,*pH=NULL;
char *pA,*pB,*pA2,*pB2;
for(pA=A;pA-Afor(pB=B;pB-Bif(*pB==*pA){
pA2=pA+1;
pB2=pB+1;
for(itmp=1;*pA2==*pB2 & pA2++-Aif(itmp>conlen){
conlen=itmp;
pH=pA;
}
}
pB++;
}
}
pequ=(char*)malloc(conlen+1);
memcpy(pequ,pH,conlen);
*(pequ+conlen)='';
return pequ;
}
Question 54. (问答)
说明关键字static和volatile的含义
static用于外部变量或者函数时,限制了它们的作用域为文件内部;static也可以用于内
部变量,这样,内部变量在每次函数调用时都为同一存储,值具有连续性。
volatile说明了一个变量的值是会随机变化的,即使程序没有对它进行任何赋值操作。它
告诉编译器的优化处理器,这些变量是实实在在存在的,在优化过程中不能无故消除,这样就保证了编译后的代码在每次操作是从变量地址处取数。
Question 55. (问答)
编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列
库函数
void put(long data){
long mask=0x1<<(8*sizeof(long)-1);
int i;
char c;
if(datamask)
putchar('1');
else
putchar('0');
mask=0x1<<(8*sizeof(long)-2);
for(i=1;i<8*sizeof(long);i++){
if(datamask)
putchar('1');
else
putchar('0');
mask>>=1;
}
putchar(' ');
mask=0xf<<(8*sizeof(long)-4);
c=(datamask)>>(8*sizeof(long)-4);
if(c<10)
putchar(c+'0');
else
putchar(c+'a');
mask=0xf<<(8*sizeof(long)-8);
for(i=1;i<2*sizeof(long);i++){
c=(datamask)>>(8*sizeof(long)-4*i-4);
if(c<10)
putchar(c+'0');
else
putchar(c+'a');
mask>>=4;
}
}
注意: 一旦您提交答题后,将不能再修改您的答案。
华为C语言笔试题
一、判断题(对的写t,错的写f并说明原因,每小题4分,共20分)
1、有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的'值为0。( )
2、int (*ptr) (),则ptr是一维数组的名字。( )
3、指针在任何情况下都可进行>, <, >=, <=, = =运算。( )
4、switch(c) 语句中c可以是int, long, char, float, unsigned int 类型。( )
5、#define print(x) printf("the no, "#x",is ")
二、填空题(共30分)
1、在windows下,写出运行结果,每空2分,共10分。
char str[ ]= "hello";
char *p=str;
int n=10;
sizeof(str)=( )
sizeof(p)=( )
sizeof(n)=( )
void func(char str[100])
{ }
sizeof(str)=( )
2、void setmemory(char **p, int num)
{ *p=(char *) malloc(num);}
void test(void)
{ char *str=null;
getmemory(str,100);
2017计算机二级c语言考试试题大全
“C语言程序设计”是计算机专业和非计算机专业的一门技术基础课程,也是程序设计的启蒙语言课程。下面是小编整理的关于计算机二级c语言考试试题,欢迎参考!
一、单选题
1.当一个函数没有返回值时,该函数类型应说明为( A )。
A.void B.int
C.无 D.任意
2.下列关于设置函数默认的参数值的描述中,错误的是( C )。
A.可对函数的部分参数或全部参数设置默认值
B.在有函数说明时,默认值应设置在函数说明时,而不是定义时
C.设置函数默认参数值时,只可用常量不可用含有变量的表达式
D.设置函数参数默认值应从右向左设置
3.下列关于被调用函数中return语句的描述中,错误的是( D )。
A.一个函数中可以有多条return语句
B.return语句具有返回程序控制权的`作用
C.函数通过return语句返回值时仅有一个
D.一个函数中有且仅有一条return语句
4.函数返回值的类型是由( B )决定的。
A.调用该函数的调用函数的类型
B.定义该函数时所指定的类型
C.return语句中表达式的类型
D.接收函数返回值的变量或对象的类型
5.下列设置函数参数默认值的说明语句中,错误的是( C )。
A.int fun(int x , int y=10); B.int fun(int x=5, int =10);
2017年全国计算机c语言试题及答案
C语言是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。下面是小编整理的关于全国计算机c语言试题及答案,欢迎参考!
单选题
1.下列关于语句的描述中,错误的是( A )。
A.C++程序中的函数是由若干条语句组成的
B.每条语句都要实现某种操作
C.条件语句是用来实现分支操作的
D.循环语句是用来在一定条件下重复执行某段程序的
2.下列关于条件语句的描述中,错误的是( C )。
A.if语句中最多只能有一个else子句
16
B.if语句的if体内可以出现开关语句
C.if语句中else if子句和else子句的顺序是没有限制的
D.if语句中else子句是与它最近的if子句配对的
3.下列关于开关语句的描述中,错误的是( B )。
A.开关语句中,case子句的'个数是不受限制的
B.开关语句中,case子句的语句序列中一定要有break语句
C.开关语句中,default子句可以省略
D.开关语句中,右花括号具有退出开关语句的功能
4.下列关于循环语句的描述中,错误的是( A )。
A.while循环语句中<条件>给定的表达式不能为非0的常量,否则便是死循环
B.for循环语句的循环体内可以出现while循环语句、do-while循环语句和for循环语句
C.循环语句的循环体可以是空语句
华硕-嵌入式程序员C语言笔试题目
预处理器(Preprocessor)
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编写死循环呢?
这个问题用几个解决方案。我首选的方案是:
while(1)
{
}
一些程序员更喜欢如下方案:
for(;;)
{
}
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。
第三个方案是用 goto
Loop:
...
goto Loop;
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。
数据声明(Data declarations)
5. 用变量a给出下面的定义
a) 一个整型数(An integer)
b)一个指向整型数的指针( A pointer to an integer)
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)r
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 )
答案是:
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 (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?
Static
6. 关键字static的作用是什么?
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。
Const
7.关键字const有什么含意?
我只要一听到被面试者说:"const意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的`答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)
如果应试者能正确回答这个问题,我将问他一个附加的问题:
下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
/******/
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
1) 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)