试题四
阅读以下说明和C程序代码,将应填入___(n)___处的语句写在答题纸的对应栏内。
[说明]
函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
# define MAXSIZE 32
typedef struct
int * elem; /* 栈的存储区 */
int max; /* 栈的容量,即栈中最多能存放的元素个数 */
int top; /* 栈顶指针 */
Stack;
[C代码]
int InitStack(Stack * S,int n) / * 创建容量为n的空栈 */
S->elem=(int *)malloc(n * sizeof(int));
if(S->elem==NULL)return-1;
S->max=n; (1) =O;return 0;
int Push(Stack * S,int item) / * 将整数item压入栈顶 * /
if(S->top==S->max) printf(“Stack is full! /n”);return-1;
(2) =item;return 0;
int StackEmpty(StackS) return (! S.top) 1:0; / * 判断栈是否为空 * /
int Pop(Stack *S ) / * 栈顶元素出栈 * /
if(! S->top)printf(“Pop an empty stack! /n”);return-1;
return (3) ;
void MultibaseOutput(long n,int B)
试题四
阅读下列说明和C代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
设某一机器由n个部件组成,每一个部件都可以从m个不同的供应商处购得。供应商j供应的部件i具有重量wij和价格cij。设计一个算法,求解总价格不超过上限cc的最小重量的机器组成。
采用回溯法来求解该问题:
首先定义解空间。解空间由长度为n的向量组成,其中每个分量取值来自集合{1,2, ,m),将解空间用树形结构表示。
接着从根结点开始,以深度优先的方式搜索整个解空间。从根结点开始,根结点成为活结点,同时也成为当前的扩展结点。向纵深方向考虑第一个部件从第一个供应商处购买,得到一个新结点。判断当前的机器价格(c11)是否超过上限(cc),重量(w11)是否比当前已知的解(最小重量)大,若是,应回溯至最近的一个活结点;若否,则该新结点成为活结点,同时也成为当前的扩展结点,根结点不再是扩展结点。继续向纵深方向考虑第二个部件从第一个供应商处购买,得到一个新结点。同样判断当前的机器价格(c11+c21)是否超过上限(cc),重量(w11+w21)是否比当前已知的解(最小重量)大。若是,应回溯至最近的一个活结点;若否,则该新结点成为活结点,同时也成为当前的扩展结点,原来的结点不再是扩展结点。以这种方式递归地在解空间中搜索,直到找到所要求的解或者解空间中已无活结点为止。
[C代码]
下面是该算法的C语言实现。
(1)变量说明
n:机器的部件数
m:供应商数
cc:价格上限
w[][]:二维数组,w[i][j]表示第j个供应商供应的第i个部件的重量
c[][]:二维数组,c[i]D]表示第j个供应商供应的第i个部件的价格 bestW:满足价格上限约束条件的最小机器重量
bestC://最小重量机器的价格
bestX[]:最优解,一维数组,bestX[i]表示第i个部件来自哪个供应商 cw:搜索过程中机器的重量
cp:搜索过程中机器的价格
x[]:搜索过程中产生的解,x[i]表示第i个部件来自哪个供应商
i:当前考虑的部件,从0到n-1
j:循环变量
试题四
阅读以下说明和C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。
[说明]
假设需要将N 个任务分配给N 个工人同时去完成,每个人都能承担这N 个任务,但费用不同。下面的程序用回溯法计算总费用最小的一种工作分配方案,在该方案中,为每个人分配1 个不同的任务。
程序中,N 个任务从0 开始依次编号,N 个工人也从0 开始依次编号,主要的变量说明如下:
c[i][j]:将任务i分配给工人 j的费用;
task[i]:值为0表示任务i未分配。值为j表示任务I分配给工人j;
worker[k]:值为0表示工人k未分配任务,值为1表示工人k已分配任务;
mincost:最小总费用。
[C程序]
#include
#define N 8 /*N表示任务数和工人数*/
int c[N][N];
unsigned int mincost = 65535; /*设置min的初始值,大于可能的总费用*/
int task[N],temp[N],worker[N];
void plan(int k,unsigned int cost)
{int i;
if (_____(1)_____&& cost < mincost){
mincost = cost;
for (I=0;I}
else {
for ( i = 0 ; iif ( worker [i]==0 && ___(2)_____){
worker [ i ] = 1;task [ k ]=___(3)_____;
plan(_____(4)_____,cost + c [ k ] [ i ]);
______(5)_______; task [k] = 0;
} /*if*/
}
} /*Plan*/
void main ( )
{ int i,j;
试题四
阅读以下说明,回答问题1 至问题6,将解答填入答题纸对应的解答栏内。
【说明】
在Linux 下安装配置DHCP 服务,DHCP 服务程序/usr/sbin/dhcpd 需要读取配置文件/etc/dhcpd.conf,以下是一个DHCP 配置文件的主要内容:
subnet 200.117.207.0 netmask 255.255.255.0 {
range 200.117.207.10 200.117.207.100;
range 200.117.207.110 200.117.207.200;
default-lease-time 86400;
max-lease-time 604800;
option subnet-mask 255.255.255.0;
option routers 200.117.207.1;
option domain-name "myuniversity.edu.cn";
option broadcast-address 200.117.207.255;
option domain-name-servers 200.117.207.3;
}
试题 四
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之一。以下代码由C 语言书写,请按要求回答问题。
void cal( int n ) {
int g, s, b, q;
if ( ( n > 1000 ) && ( n < 2000 ) ) {
g = n % 10;
s = n % 100 / 10;
b = n / 100 % 10;
q = n / 1000;
if( ( q + g ) == ( s + b ) ) {
printf("%-5d", n);
}
}
printf("/n");
return;
}
[问题1]
请找出程序中所有的逻辑判断语句。
试题四
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某大学暑假期间为教职员工开办了VPN远程接入服务,员工在校外通过登录界面输入用户名和口令后,就可以访问仅供本校师生使用的各类信息资源。为了实现信息隔离与访问控制,在校园网不同的网络区域之间部署了防火墙等相关设施。
我来回答: