分类: 嵌入式
2011-08-01 21:10:35
嵌入式班阶段考试试卷(C、C++、Linux部分)
说明:
1. 试卷总分100分。
2. 试卷中代码的运行环境为:Linux 2.6.23环境,平台为32为处理器系统,编译器为GCC4.4.3。
一. 选择题:
1. 下面哪项不是链表优于数组的特点?(D)
A. 方便删除 B. 方便插入 C. 长度可变 D. 存储空间小
2. 以下程序的输出结果是( C )。
int func(int n)
{ static int m=0;
m=m+n;
return(m); }
main()
{ int i,a=0;
for(i=1;i<=4;i++)
a+=func(i);
printf("%d\n",a); }
A.10 B.15 C.20 D.22
3. 以下程序执行后,a的值是(C )
void main()
{
int a,k=4,m=6,*p1=&k,*p2=&m;
a = p1==&m;
printf(“%d\n”,a);
}
A) 4 B) 1 C) 0 D) 运行时出错,a无定值
4. 编译以下程序时,结果是(B)。
#include
#define aa 123; //第2行
void main(void) //第3行
{cout<
A.编译时第2行出错 B.编译时第4行出错
C.编译时第2行和第4行出错 D.编译时无错误
5. 在linux系统中,所有文件系统的挂载信息存放在配置文件( B)中:
A./etc/passwd B./etc/fstab
C./etc/modules.conf D./etc/inittab
6. 你使用命令“vi /etc/inittab”查看该文件的内容,你不小心改动了一些内容,为了防止系统出问题,你不想保存所修改内容,你应该如何操作(B )。
A.在末行模式下,键入:wq B.在末行模式下,键入:q!
C.在末行模式下,键入:x! D.在编辑模式下,键入“ESC”键直接退出vi
7. 建立一个新文件可以使用的命令为(D )
A.chmod B.more C.cp D.touch
8. GDB中设置断点的命令是(B)。
A.bt B.break C.info D.display
9. 系统调用 fork 是用来创建一个子进程,当调用执行成功时,返回值为(A)。
A.对父进程返回子进程的 PID,对子进程返回 0
B.对子进程返回父进程的 PID,对父进程返回 0
C.对父进程返1,对子进程返回 0
D.对父进程0,对子进程返回 1
10. 如果采用别的文件名来书写makefile,比如Make.linux,则在运行的时候要采用(A)选项。
A.-f B.-c C.-i D.-name
11. 所有的LINUX文件和目录都具有拥有权和许可权,现在我们有一名为fido的文件,并用chmod 551 fido 对其进行了许可权的修改,我们用 ls –al 查看到如下的几个文件许可权信息,问那一个文件的许可权是fido文件的。(D)
A.–rwxr-xr-x B.-rwxr—r-- C.-r—r—r-- D.-r-xr-x—x
12. 在下面所列出的服务器类型中那一种可以使用户在异构网络操作系统之间进行文件系统共享的。(B)
A.FTP B. Samba C.DHCP D.Squid
13. 下列关于链接描述,错误的是(B ) 。
A 硬链接就是让链接文件的i节点号指向被链接文件的i节点
B 硬链接和符号连接都是产生一个新的i节点
C 链接分为硬链接和符号链接
D 硬连接不能链接目录文件
14. 在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用(D)命令实现。
A # reboot B # halt C # reboot D # shutdown –r now
15. 在使用匿名登录ftp时,用户名为(B)。
A users B anonymous C root D guest
16. 当用命令ls –al查看文件和目录时,欲观看卷过屏幕的内容,应使用组合键(D)。
A Shift+Home B Ctrl+ PgUp C Alt+ PgDn D Shift+ PgUp
17. 在/home/stud1/wang目录下有一文件file,使用(D)可实现在后台执行命令,此命令将file文件中的内容输出到file.copy文件中。
A cat file >;file.copy B cat >;file.copy C cat file file.copy & D cat file >file.copy &
18. 关于进程调度命令,(B )是不正确的。
A 当日晚11点执行clear命令,使用at命令:at 23:00 today clear
B 每年1月1日早上6点执行date命令,使用at命令:at 6am Jan 1 date
C 每日晚11点执行date命令,cro/*-ntab文件中应为:0 23 * * * date
D 每小时执行一次clear命令,crontab文件中应为:0 */1 * * * clear
19. 系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果user2用户想修改user1用户目录下的file1文件,应拥有(B)权限。
A 744 B 664 C 646 D 746
20. 下列程序的输出是什么?(B)
#include
#include
using namespace std;
int main()
{
int x = 10, y = 10, i;
for(i=0; x>8; y=i++)
{
printf(“%d, %d,”, x--, y);
}
return 0;
}
A 10,0,9,1 B 10,10,9,0 C 10,1,9,2 D 9,10,8,0
21. 下列代码,在编译时哪句会出错?( C )
struct Test
{
Test(int){}
Test(){}
void fun(){}
};
int main()
{
Test a(1); //语句1
a.fun(); //语句2
Test b(); //语句3
b.fun(); //语句4
return 0;
}
A 语句1 B 语句2 C 语句3 D 语句4 E 没有错误
22 which definition is correct?( c )
A int a[]; B int n=10,a[n]; C int a[10+1]={0}; D int a[3]={1,2,3,4};
23 How many bytes will be occupied for the variable(definition:char **a[3][4])?( c )
A 64 B 96 C 48 D 128
二.简答题:(共6题,每题4分,总分24分)
1. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
#define BIT3 (0x1 << 3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
}
2. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa66;
3.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;
改后答案依次为9,10,10,11
4.用变量a给出下面的定义
a) 一个整型数
b)一个指向整型数的指针
c)一个指向指针的的指针,它指向的指针是指向一个整型数
d)一个有10个整型数的数组
e) 一个有10个指针的数组,该指针是指向一个整型数的。
f) 一个指向有10个整型数数组的指针
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
a) int a;
b) int *a;
c) int **a;
d) int a[10];
e) int *a[10];
f) int (*a)[10];
g) int (*a)(int);
h) int (*a[10])(int);
5. 指针和引用的区别?
引用必须被初始化,指针不必。
Int *p;
&b;
引用初始化以后不能被改变,指针可以改变所指的对象。
不存在指向空值的引用,但是存在指向空值的指针。
6.下面程序运行后的输出是什么?
typedef struct
{
int a:2;
int b:2;
int c:1;
}test;
int main()
{
test t;
t.a = 1;
t.b = 3;
t.c = 1;
printf("%d",t.a);
printf("%d",t.b);
printf("%d",t.c);
}
7. 某32位系统下, C程序,请计算sizeof 的值.
char str[] = “”
char *p = str ;
int n = 10;
请计算
sizeof (str ) = ?(1)
sizeof ( p ) = ?(2)
sizeof ( n ) = ?(3)
void Foo ( char str[100]){
请计算
sizeof( str ) = ?(4)
}
void *p = malloc( 100 );
请计算
sizeof ( p ) = ?(5)
(1)25 (2)4 (3) 4 (4)4 (5)4
8. Void GetMemory(char **p, int num){
*p = (char *)malloc(num);
}
void Test(void){
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test 函数会有什么样的结果?
输出“hello”
(2). void Test(void){
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL){
strcpy(str, “world”);
printf(str);
}
}
请问运行Test 函数会有什么样的结果?
输出“world”
(3). char *GetMemory(void){
char p[] = "hello world";
return p;
}
void Test(void){
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test 函数会有什么样的结果?
无效的指针,输出不确定
8. 写出下列代码的输出内容
#include
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
FUNC1 p=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,&a);
return 0;
}
110
9. 网络编程中设计并发服务器,使用多进程 与 多线程,请问有什么区别?
进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移
10. 以下代码中的两个sizeof用法有问题吗?
void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
{
for( size_t i=0; i
if( 'a'<=str[i] && str[i]<='z' )
str[i] -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符长度为: " << (sizeof(str)-1)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;
函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4
11. ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
应用层
表示层
会话层
运输层
网络层
物理链路层
物理层
tcp /udp属于运输层
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好
udp: 不提供稳定的服务,包头小,开销小
三. 编程题(共两题,总分16分)
1. 文件中有一组整数,要求排序后输出到另一个文件中(10分)
12,34,56
12 34 56
12
34
56
2.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。(6分)
If [ -d /home/lizhanglin/a ]
Then
Cp
fi
3. 编写strcat函数(已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);
其中strDest 是目的字符串,strSrc 是源字符串。
不调用C 的字符串库函数,请编写函数 strcat