试题二 ( 共15 分)
阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。
【 问题1 】
分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。
【C程序】
【 问题2】
函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组 a,并返回实际输入的整数个数。函数 inputArr 可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。
请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。
【C 函数】
第1题:
试题五(共15分)
阅读下列说明和程序,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
在开发某嵌入式系统时,设计人员根据系统要求,分别编写了相关程序,其中:
【程序1】是李工编写的一个数据交换子程序。
【程序2】是赵工编写的一段利用递归方法判别链表表示的两个数据结构是否相等的程序,若相等则返回值为1,否则返回为0。判别的准则是若两个链表的首指针相等,则相等;否则进行内部元素比较,元素中的itemid表示后面联合体un的有效性,itemid为0时,联合体un里面的data项有效,否则联合体un中的link项有效。
【程序1】
#include <stdio.h>
swap(int x,int y){
int t:
t= x;
x=y;
y=t;
}
main() {
int a,b;
a=3;
b=4;
swap(a,b);
printf(”%d, %d\n",a,b);
}
【程序2】
typedef struct Item {
int itemid;
union {
char data;
struct Item *link;
}un;
struct Item *nextItem;
} ItemNode;
int EqualItem( ItemNode*x,ItemNode*y){
int res;
if(x==y) retun1;
if(1){
if (2){
If(x->itemid==0){
res= (3) ;
}
else{
res= (4) ;
}
if (res){
retun (5) ;
}
}
}
Return0;
}
【问题1】(6分)
执行【程序1】后,打印出来的a=3,b=4;并没有完成数据交换,请指出李工的问题?并改正程序错误。将答案填写在答题纸中对应的栏目。
【问题2】(5分)
仔细阅读并分析【程序2】中的C语言代码,完成其中(1)~(5)空白填空,将
答案填入答题纸的对应栏内。
【问题3】(4分)
李工编写某嵌入式软件时,遇到了一些问题,请帮助李工解答下面2个问题,并将答案填写在答题纸中对应的栏目。
(1)李工在编译时,程序没有通过编译,经检查程序后将文件头的#include<filename.h>改为#include“filename.h”后编译通过,请问#include <filename.h>和#include“filename.h”的区别是什么?
(2)李工在编写一段C++程序时,需要调用一段已编译的C语言函数,为什么要加exten“C”?
第2题:
阅读下面的说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。
[说明]
阅读以下说明,回答问题1~问题4,将解答填入答题纸对应的解答栏内。
windows Server 2003是一个多任务多用户的操作系统,能够以集中或分布的方式实现各种应用服务器角色,是目前应用比较广的操作系统之一。
Windows内置许多应用服务功能,将下表中(1)~(5)处空缺的服务器名称填写在答题纸对应的解答栏内。
(1)
第3题:
试题二(共15 分)
阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。
【说明】
在Linux服务器中,inetd/xinetd是Linux系统中一个重要服务。
【问题1】(2 分)
下面选项中 (1) 是xinetd的功能。
(1)备选答案:
A. 网络服务的守护进程
B. 定时任务的守护进程
C. 负责配置网络接口
D. 负责启动网卡
第4题:
阅读以下说明,回答问题1至问题3,将答案填入答题纸对应栏内。
【说明】
在某嵌入式处理器上,编写以下两段秸序(编译选项中,存储采用4字节对齐方式)。
程序段1:
struct studentl {
char name [10] ;
long sno;
char sex;
float score [4] ;
*pl, al, bl;
程序段2:
union student2 {
char name [10] ;
long sno;
char sex,
float score [4] ;
*p2, a2, b2;
汉诺塔问题说明:有n个盘子在A处,盘子从小到大,最上面的盘予最小,程序要
把这n个盘子从A处搬到C处,可以在E处暂存,但任何时候都不能出现大的盘子压
在小的盘子上面的情况。
下列是一段求解汉诺塔问题的C语言程序。
include <stdio . h>
void move (int n, char a, char c)
{
static int Step=l;
printf ("Step %2d: Disk %d %c..--> %c\n", Step, n, a, c) ;
Step++;
}
void Hanoi (int n, char a, char b, cnar c)
{
if (n>l)
{
Hanoi (n-l, a, c, b) ;
move (n, a. c) ;
Hanoi (n-l, b, a, c) ;
}
else move (n,a,c);
}
void main()
{
Hanoi(3, ’A’, 、B’, 、C ’);
}
【问题1】(3分)
C语言函数的一般格式为:
<函数类型> <函数名> (<参数列表>)
{
<函数体>;
}
简答下述问题,将答案填写在答题纸中对应栏目。
(l)<函数类型>的含义是什么?
(2)<参数列表>的含义是什么?
(3)C语言函数之间的参数如何传递?
【问题2] (6分)
回答问题,将答案填写在答题纸中对应栏目。
(1)sizeof(struct studentl)结果是多少
(2) sizeof(union student2)结果是多少
(3)变量a2在程序段2中定义,写出执亍以下语句后的输出结果。
strcpy (a2. name,¨zhangwei¨);
a2.sex=’f’;
printf ("%s¨, a2 .name);
【问题3](6分)
仔细阅读求解汉诺塔问题的C语言程序,完成其中(1)~(4)空白填空,将答案
填入答题纸的对应栏内。
运行结果为:
Step1:Disk l A---->C
Step 2: (l)
Step 3: Disk I C---->B
Step4: (2)
Step 5: (3)
Step 6: Disk 2 B---->C
Step 7: (4)
第5题:
阅读下列说明,回答问题 1 至问题 4 ,将解答写在答题纸的对应栏内。 【说明】 基于 Windows32 位系统分析下列代码,回答相关问题 。 void Challenge(char *str) { char temp[9]={0}; strncpy(temp,str,8); printf("temp=%s\n",temp); if(strcmp(temp"Please!@")==0){ printf("KEY: ****"); } } int main(int argc,char *argv[ ]) { Char buf2[16] Int check=1; Char buf[8] Strcpy (buf2, "give me key! !"); strcpy(buf,argv[1]); if(check==65) { Challenge(buf); } else { printf("Check is not 65 (%d) \n Program terminated!!\n",check); } Return 0; }
【问题 1】(3 分) main 函数内的三个本地变量所在的内存区域称为什么?它的两个最基本操作是什么? 【问题 2】(3分) 画出buf,check,buf2 三个变量在内存的布局图。【问题 3】(2分) 应该给程序提供什么样的命令行参数值(通过argv变量传递)才能使程序执行流程进入判断语句 If(check=65)....然后调用challenge( )函数。 【问题4】(4分) 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。
第6题:
试题二(共15分)
阅读以下说明和C程序代码,将解答写在答题纸的对应栏内。
【说明】
下面是一个待修改的C程序,其应该完成的功能是:对于输入的一个整数num,计算其位数k,然后将其各位数字按逆序转换为字符串保存并输出。若num为负整数,则输出字符串应有前缀“-”。例如,将该程序修改正确后,运行时若输入“14251”,则输出“15241”;若输入“-6319870”,则输出“-0789136”。
下面给出的C程序代码中有五处错误,请指出错误代码所在的行号并给出修改正确后的完整代码行。
【C程序代码】
第7题:
试题一(共15分)
阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。
【说明】
某网吧拓扑结构如图 1-1 所示,可提供影视、游戏竞技、视频聊天等多种服务,采用VLAN 划分来区分不同的服务。
问题 1】(2分)
网吧要求实现千兆接入,可采用的方式为 (1) 。
(1)备选答案:
A. FTTx
B. ADSL
C. PSTN拨号
第8题:
●试题二
阅读下列程序或函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【函数2.1说明】
函数strcmp()是比较两个字符串s和t的大小。若s<t函数返回负数;若s=t函数返回0;若s>t,函数返回正数。
【函数2.1】
int strcmp(char *s,char *t)
{ while(*s && *t && (1) ){
s++;t++;
}
return (2) ;
}
【程序2.2说明】
在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个。
【程序2.2】
#includestdio.h
#define N 100
int a[N][N];
void main()
{ int row ,col,max,min,n;
/*输入合法n(<100),和输入n×n个整数到数组a的代码略*/
for (row=0;row<n;row++){
for(max=a[row][0],col=1;col<n;col++)
if( (3) )max=a[row][col];
if( (4) )min=max;
else if( (5) )min=max;
}
printf ("The min of max numbers is %d\n",min);
}
●试题二
【答案】(1)*s == *t(2) *s - *t
【解析】*s 和 *t相等才执行循环体。返回二者差值,恰好符合题目要求。
【答案】(3) a[row][col]>max (4) row == 0(5) max<min
【解析】当前值比max大,则把它赋给max。max是本行最大值。初始化min为第一行的max。该行的max比min小,则将max赋给min。
第9题:
阅读下列C程序,回答问题1至问题3,将解答填入答题纸的对应栏内。 【C程序】 int count(int x,int z){ inty=0; while(x>0){ //l if(x==1) //2 y=7; //3 else{ //4 y=x+z+4; if(y=7||y=21) //5,6 x=1; //7 } x--; //8 } return y; //9 }
【问题1】(3分) 请针对上述C程序给出满足100%DC(判定覆盖)所需的逻辑条件。 【问题2】(7分) 请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。 【问题3】(5分) 请给出问题2中控制流图的线性无关路径。
第10题:
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现
程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
【问题1] (6分)
请给出满足100%DC(判定覆盖)所需的逻辑条件。
【问题2] (10分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
【问题3](4分)
请给出问题2中控制流图的线性无关路径。