题目
阅读下列函数说明和C代码及流程图,将应填入(n)处的字句写在对应栏内
[说明]
分糖果问题是一个经典问题。问题描述如下:幼儿国有n(<20)个孩子围成一圈分糖果,老师先随机地发给每个孩子若干颗糖果,然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友;如共有8个孩子,则第1个将原来的一半分给第2个,第2个将原有的一半分给第3个……第8个将原来的一半分给第1个,这样的平分动作同时进行;若平分前,某个孩子手中的糖果是奇数颗,则必须从老师那里要一颗,使他的糖果变成偶数。小孩人数和每个小孩的初始数由键盘输入。经过多少次调整,使每个孩子手中的糖果一样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
[C程序]
include <stdlib.h>
include <stdio.h>
bool allequall (int child[], int n ) //判断各小孩子手中的糖果是否相等
{
for (int i=0; i<n-1; i++)
if (child[i]!=child[i+1] )
return false; //不相等返回假
return true; //相等返回真
}
const int MaxNum=20; //定义最大人数
//主函数
void main ()
{
int Num=0;
int *child;
int *child1;
//构造两个相应大小的数组child代表小朋友现有的粮果数child1代表小朋友原来有的糖果数
int Tnum=0;
int i=0;
do{
printf ("Pelase input the number of the children: ").,
scanf ("%d",&Num );
if (Num>MaxNum )
printf ("Error Number!!" );
} while (Num>MaxNum );
child=new int [Nmn];
child1=new int [Num];
for (i=0; i<Num; i++ ) //将数组赋值
{
printf ("Input NO. %d child's candy numbers: ",i+1);
scanf ("%d", &child[i] );
}
while ((1) )
{
for (i=0; i<Num; i++ )
{
if((2) )
{
(3)
Tnum++;
}
}
for (i=0; i<Num; i++ )
child1[i]=child[i]; //将child1赋值用来记忆原来小朋友的粮果数
for (i=0; i<Nam; i++ )
(4)
for (i=0; i<Num-1; i++)//用循环实现前一个小朋友粮果数加后一个小朋友粮果数的一半
{
child[i]/=2;
child[i]+=child 1 [i+1];
}
child[Num-1]/=2;
(5)
}
printf ("每个同学最后分到糖果数目是%d\n", child[1]);
printf ("老师分发出的糖果是%d\n", Tnum );
}
图12-7是一种解决问题的流程图,请根据该流程图将对应C代码(n)处补充完整。
第1题
阅读以下关于软件测试的说明,回答司题l至问题3,将解答填入答题纸的对应
栏内。
【说明】
使用在汽车、飞机中的嵌入式软件, 日于直接影响人的生命及财产安全,测试要求
更为严格。语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖是通常对这类软件的要求。
以下是一段C语言代码,请仔细阅读并回答相关问题:
【问题1】(6分)
请根据测试要求,简要说明语句覆盖、判定覆盖、条件覆盖和MC/DC覆盖的含义。
将答案填写在答题纸的对应栏中。
【问题2】(5分)
画出以上代码的流程图,将答案填写在答题纸的对应栏中。
【问题3】(4分)
请根据【说明】中的C语言代码,计算满足MC/DC覆盖要求的用例数量及条件取
值范围,将答案填写在答题纸的对应栏中.
第2题
阅读下列说明、流程图和算法,将应填(n)处的字句写在对应栏内。
[说明]
下面的流程图(如图3所示)用N - S盒图形式描述了数组A中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为 low,上界为high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以4为基准数的划分过程如下:
[流程图]
[算法说明]
将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int A[],int low,int hieh)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数void sort(int A[],int L,int H)的功能是实现数组A中元素的递增排序。
[算法]
void sort(int A[],int L,int H) {
if (L<H) {
k=p(A,L,R); //p()返回基准数在数组A中的下标
sort((4)); //小于基准敷的元素排序
sort((5)); //大于基准数的元素排序
}
}
第3题
阅读以下关于某订单管理系统的技术说明、部分UML类图及C++代码,将C++程序中(1)~(5)空缺处的语句填写完整。
[说明]
某订单管理系统的部分UML类图如图5-15所示。
图5-15中,Product表示产品,ProductList表示产品目录,Order表示产品订单,Orderltem表示产品订单中的一个条目,OrderList表示订单列表,SalesSystem提供订单管理系统的操作接口。
请完善类Order的成员函数getOrderedAmount()和类SalesSystem的statistic()方法,各个类的属性及部分方法定义参见下面的C++代码。
[C++代码]
第4题
阅读下列函数说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。
【函数】
void QuickSort(int A[ ],int s,int t)
{ int i=s,j=t+1,temp;
int x=A[s];
do{
do i ++ ;while (1);
do j -- ;while(A[j]>x);
if(i<j){temp=A[i];(2);(3);}
}while(i<j);
A[a] =A[j];A[j] =x;
if(s<i-1) (4);
if(j+1<t) (5);
}
第5题
●试题四
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。
【函数】
void QuickSort(int A[],int s,int t)
{int i=s,j=t+1,temp;
int x=A[s];
do{
do i++;while (1) ;
do j--;while(A[j]>x);
if(i<j){temp=A[i]; (2) ; (3) ;}
}while(i<j);
A[a]=A[j];A[j]=x;
if(s<i-1) (4) ;
if(j+1<t) (5) ;
}
第6题
●试题二
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
该程序运行后,输出下面的数字金字塔
【程序】
include<stdio.h>
main ()
{char max,next;
int i;
for(max=′1′;max<=′9′;max++)
{for(i=1;i<=20- (1) ;++i)
printf(" ");
for(next= (2) ;next<= (3) ;next++)
printf("%c",next);
for(next= (4) ;next>= (5) ;next--)
printf("%c",next);
printf("\n");
}
}
第7题
阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。
[说明]
函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。
[函数2.1]
void PrintPrime(int UpBound)
printf("2," );
for(i=3; i<UpBound; i+ =2) {
int k = sqrt(i);
for(j=3; j<= k;(1)) /*检查i是否有3到k以入的奇因数*/
if((2)) break;
fi((3)) printf("%d", i);
[函数2.2说明]
递归函数invert(int a[],int k),int k)的功能是将数组a中的前k个元素逆置。
[函数2.2]
void invert(int a[ ], int k)
{ int t;
if ((4)) {
invert((5));
t=a[0];
a[0] =a[k-1];
a[k-l]=t;
}
}
第8题
阅读下列函数说明和C代码,将应填入(n)外的字句写在对应栏内。
[说明]
为网球比赛的选手安排比赛日程。设有n(n=2m)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手赛一场,且每位选手每天赛一场,不轮空。
设n位选手被顺序编号为1,2,…,n,比赛的日程表是一个n行n-1列的表,第i行j列的内容是第i号选手第j天的比赛对手。用分治法设计日程表,就是从其中一半选手(2m-1位)的比赛日程导出全体2m选手的比赛日程。从众所周知的只有两位选手的比赛日程出发,反复这个过程,直至为n位选手安排好比赛日程为止。
如两位选手比赛日程表如下所示:
如四位选手比赛日程表如下所示:
函数中使用的预定义符号如下:
define M 64
int a[M+1][M];
[函数]
voidd main(){
int twoml,twom,i,j,m,k;
printf("指定n(=2的k次幂)位选手,请输入k:\n");
scanf("%d",&k);
/*8预设两位选手的比赛日程*/
a[1][1] =2;
a[2][1] =1;
m=1;
twoml=1;
while ((1) ){
m++;
twoml+=twoml;
twom=twoml*2;/*为2^m位选手安排比赛日程*/
/*填日程表的左下角*/
for(i=twoml+1; (2) ;i++){
for(j=1; j<=twoml-1; j++){
a[i][j]=a[i-twoml][j]+twoml;
}
}
/*填日程表的右上角*/
a[1][twoml]= (3) ;/+填日程表右上角的第1列*/
for(i=2; i<=twoml; i++){
a[i][twoml]=a[i-1][twoml]+1;
}
/*填日程表右上角的其他列,参照前一列填当前列*/
for(j=twoml+1; j(twom;j++){
for(i=1; i a[i][j]= (4) ;
}
a[twoml][j]=a[1][j-1];
}
/*填日程表的右下角*/
for(j=twoml; j for(i=1;i<=twoml; i++){
a[ (5) [j]=i;
}
}
/*输出日程表*/
for(i=1; i<=twom; i++){
for(j=1;j printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}
}
(1)
第9题
阅读下列函数说明和C代码,填入(n)处字句,并回答相应问题。
[说明]
背包问题就是有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,而且选中物品的价值之和为最大。
背包问题是一个典型的NP完全难题。对该问题求解方法的研究无论是在理论上,还是在实践中都具有一定的意义。如管理中的资源分配、投资决策、装载问题等均可建模为背包问题。
常用的背包问题求解方法很多,但本题中采用了一种新的算法来求解背包问题。该算法思想为:首先要对物品进行价重比排序,然后按价重比从大到小依次装进包裹。这种方法并不能找到最佳的方案,因为有某些特殊情况存在,但只要把包中重量最大的物品取出,继续装入,直到达到limitweight,这时的物品就是limit weight的最大价值。这种算法不需要逐个进行试探,所以在数据非常大时,执行效率主要由排序的时间复杂度决定。该算法的流程图为图11-4。
仔细阅读程序说明和C程序流程图及源码,回答问题1和问题2。
[流程图11-4]
[程序说明]
struct Thing:物品结构
typedef struct Bag:背包结构类型
input ():将物品按序号依次存入数组函数
inbag ():物品按物价比入包函数
init ():初始化函数
sort ():对物品按价格重量比排序函数
outbag ():取出包中weiht最大的物品函数
print ():最佳方案输出函数
[C程序]
define N 255
struct Thing {
double weight;
double value;
double dens;
}thing[N];
typedef stmct Bag {
Thing thing [N];
double weighttmp;
double sumvalue;
}bag,best;
inbag ()
{
do{
bag.thing[i]=thing[i]
(1)
(2)
i++;
}while ((3) )
}
init ()
{
for (inti=0; i<N; i++)
{
input (thing[i].weight, thing [i].value)
thing [i].dens=thing[i].value/thing [i].weight;
};
}
main ()
{
init ();
sort ();
inbag ();
do {
best=bag; //把包中物品放入暂存数组
outbag (); //取出包中weight最大的物品
(4)
}while ((5))
print (best); //输出temp因为是最佳方案
}
根据程序说明及流程图、部分C源码,充分理解算法思想,填入(n)处。
第10题
阅读下列说明和流程图,将应填入(n)处。
[流程图说明]
流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符之间的空白。例如,原字符串“ File Name ”,处理后变成“File Name”。流程图1-2、流程图1-3、流程图1-4分别详细描述了流程图1-1中的框A,B,C。
假设原字符串中的各个字符依次存放在字符数组ch的各元素ch(1),ch(2),…,ch(n)中,字符常量KB表示空白字符。
流程图1-1的处理过程是:先从头开始找出该字符串中的第一个非空白字符ch(i),再从串尾开始向前找出位于最末位的非空白字符ch(j),然后将ch(i),…,ch(j)依次送入 ch(1),ch(2),…中。如果原字符串中没有字符或全是空白字符,则输出相应的说明。在流程图中,strlen是取字符串长度函数。
[问题]在流程图1-1中,判断框P中的条件可表示为:
i>(5)
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!