试题二 ( 共15 分)阅读以下问题说明、C 程序和函数,将解答填入答题纸的对应栏内。【 问题1 】分析下面的C 程序,指出错误代码(或运行异常代码)所在的行号。【C程序】【 问题2】函数inputArr(int

题目

试题二 ( 共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)


正确答案:域名(DNS)服务器
域名(DNS)服务器

第3题:

试题二(共15 分)

阅读以下说明,回答问题1至问题5,将解答填入答题纸对应的解答栏内。

【说明】

在Linux服务器中,inetd/xinetd是Linux系统中一个重要服务。

【问题1】(2 分)

下面选项中 (1) 是xinetd的功能。

(1)备选答案:

A. 网络服务的守护进程

B. 定时任务的守护进程

C. 负责配置网络接口

D. 负责启动网卡


正确答案:A
 
问题 1(每空 1.5 分,3 分)
(1)A或网络报务的守护进程

第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)


正确答案:
本题考查C语言应用知识。
【问题l】
C语言函数的一般格式为:
<函数类型><函数名>(<参数列表>:
(
<函数体>;
)
其中<函数类型>为函数返回值的类型,无返回值时应写void;<参数列表>为函数
的接口参数,可以为空,即表示没有参数,但函数名后面的0不能省略。
C语言函数之间的参数传递是传值,是通过栈来传递的。调用时所有参数在栈中新
开辟相应类型的单元并将实参值填入,函数中对参数的任何操作都是对栈中单元的操作,
调用结束,栈中开辟的相应单元都会释放,并不影响实参变量的值。
【问题2】
studentl是一个结构体,sizeof(structstudentl)结果为所有元素字节数之和,因此
sizeof(structstudentl)结果为:10+4+1-16=31字节。
student2是联合体(或共用体),sizeo(unionstudent2)结果为其中最长一个元素的
字节数。因此sizeof(unionstudent2)结果为:16字节。
变量a2在程序段2中定义,执行以下语句:
Strcpy(a2.name,”zhangwei”)
a2.sex=f;
Printf(“%s,a2.name);
结果为:“fhangwei”
【问题3]
汉诺塔问题是指有n个盘子在A处,盘子从大到小,最上面的盘子最小,现在要把
这n个盘子从A出搬到C处,可以在B处暂存,但任何时候不能出现大的盘子压在小
的盘子上面的情况。算法如下:
(1)若n=l,则可以将盘子直接从A处搬到C处;
(2)假设n-l时,指导如何解;
(3)则n时,根据(2)的假设,可以先把前n-1个盘子从A处通过C处搬到B处,
就可以把第n个盘子直接从A处搬到C处,再把前n-l个盘子从B处通过A处搬到C
处,则完成了全部盘子搬动。
因此,运行结果为:
Step1:DisklA---->C
Step2:Disk2A---->B
Step3:DisklC----->B
Step4:Disk3A----->C
Step5:DisklB----->A
Step6:Disk2B----->C
Step7:DisklA----->C
参考答案
【问题1]
(l)<函数类型>的含义是:函数返回值的类型,无返回值时应写为void;
(2)<参数列表>的含义是:函数的接口参数,可以为空,即表示没有参数,但函
数名后面的()不能省略。
(3)C语言函数之间的参数传递是传值,是通过栈来传递的。
【问题2]
(1)sizeof(structstudentl)结果为:31
(2)sizeof(unionstudent2)结果为:16
(3)执行语句后的结果为:“fhangwei”
【问题3]
(1)Disk2A->B
(2)Disk3A->C
(3)DisklB->A
(4)DisklA->C

第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分) 上述代码所存在的漏洞名字是什么,针对本例代码,请简要说明如何修正上述代码以修补次漏洞。


正确答案:问题1
1、堆栈。2、PUSH和POP。

问题2

问题3
       用户输入9个字符的字符串,使其满足条件:前8个字符为任意字符和第9个字符为大写字母A;

问题4
       缓冲区溢出。使用安全函数strncpy()来代替strcpy()函数。

第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拨号


正确答案:A

第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】

#includestdio.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) arow][col>max (4) row == 0(5) max<min

【解析】当前值比max大,则把它赋给maxmax是本行最大值。初始化min为第一行的max。该行的maxmin小,则将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中控制流图的线性无关路径。


正确答案:【问题1】
x>0;x<=0
x==1;x!=1
y==7或者y==21;y!=7且y!=21
【问题2】

V(g)=5
【问题3】
1:1,9
2:1,2,3,8,1,9
3:1,2,4,5,7,8,1,9
4:1,2,4,5,6,7,8,1,9
5:1,2,4,5,6,8,1,9


第10题:

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现

程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。

【问题1] (6分)

请给出满足100%DC(判定覆盖)所需的逻辑条件。

【问题2] (10分)

请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。

【问题3](4分)

请给出问题2中控制流图的线性无关路径。


正确答案:
本题考查白盒测试技术的应用。
【问题1】
本问题考查白盒测试用例设计方法:判定覆盖法。
判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次
“真”值和“假”值,从而使程序的每一个分支至少都通过一次。本题中程序有6个判定,
所以满足判定覆盖一共需要12个逻辑条件。
【问题2】
本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据代码绘
制控制流图、计算环路复杂度。
控制流图是描述程序控制流的一种图示方式,它由节点和定向边构成。控制流图的
节点代表一个基本块,定向边代表控制流的方向。其中要特别注意的是,如果判断中的
条件表达式是复合条件,即条件表达式是由一个或多个逻辑运算符连接的逻辑表达式,
则需要改变复合条件的判断为一系列之单个条件的嵌套的判断。本题程序中,
if((filename[len-2]==’.’)&&(filename[len.1]=’c’))这条判断语句中的判定由两个条件
组成,因此在画控制流图的时候需要拆开成两条判断语句。程序的环路复杂度等于控制
流图中判定节点的个数加1,本题控制流图I中判定节点个数为7,所以V(G)=8。
【问题3】
本问题考查白盒测试用例设计方法:基本路径法。涉及的知识点包括:根据控制流
图和环路复杂度给出线性无关路径。
线性无关路径是指包含一组以前没有处理的语句或条件的路径。从控制流图上来
看,一条线性无关路径是至少包含一条在其他线性无关路径中从未有过的边的路径。程
序的环路复杂度等于线性无关路径的条数,所以本题中应该有8条线性无关路径。
参考答案

【问题2]
环路复杂度V(G)=8。

线性无关路径:
1.1-2-3-4-6-7-8-9-10-11-12-13-10......
2.1-2-5-6-7-8-9-10-11-12-13-10.....
3.1-2-3-5-6-7-8-9-10-11-12-13-10...
4.1-2-3-4-6-8-9-10-11-12-13-10...
5.1-2-3-4-6-7-8-10-11-12-13-10....
6.1-2-3-4-6-7-8-9-10-15
7.1-2-3-4-6-7-8-9-10-11-14-10.....
8.1-2-3-4-6-7-8-9-10-11-12-10....

更多相关问题