在九宫格棋盘上,两位选手轮流在棋盘上摆各自的棋子(每次一枚),谁先取得三子一线的结果就取胜。设程序方MAX的棋子用(×)表示,对手MIN的棋子用(○)表示,MAX先走。静态估计函数f(p)规定如下:若p对任何一方来说都不是获胜的格局,则f(p)=(所有空格都放上MAX的棋子之后,MAX的三子成线(行、列、对角)的总-(所有空格都放上MIN的棋子之后,MIN的三子成线(行、列、对角)的总数)。当×在中央位置,○在中上位置时,则可得f(p)=()
第1题:
下列给定程序中,函数fun()的功能是:在字符串str中找出ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入ABCDeFGH,调用后字符串中的内容为 eABCDFGH。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include<stdio.h>
/***************found************/
fun(char *p)
{ char max, *q;int i=0;
max=p[i];
while (p[i]!=0)
{if (max<p[i])
{
/***************found************/
p = q +i;max=p[i];
}
i++;
}
/***************found************/
while (q<p)
{*q=*(q-1);
q--;
}
p[0]=max;
}
main()
{ char str[80];
printf("Enter a string: "); gets(str);
printf("\nThe original string: ");
puts(str);
fun(str);
printf("\nThe string after moving: ");
puts(str); printf("\n\n");
}
第2题:
论述题2:以下是某“象棋中走马事件”应用程序的走马规则,请按要求回答问题
以下是中国象棋中走马事件中的走马原则:
1)如果落点在棋盘外,则不移动棋子。
2)如果落点与起点不构成日字型,则不移动棋子。
3)如果落点处有己方棋子,则不移动棋子。
4)如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子。
5)如果不属于(1)~(4)条,且落点处无棋子,则移动棋子。
6)如果不属于(1)~(4)条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子。
7)如果不属于(1)~(4)条,且落点处为对方老将,则移动棋子,并提示战胜对方,
游戏结束。
(1)画出该应用程序的因果图。
(2对该软件进行基于因果图的方法设计测试用例。
问题2:
解答:
根据上面的因果图建立对应的判定表。
在该应用程序中原因有7个一个完整的判定表应有27(上标)=128种情况。由于篇幅的限制且考虑到5、 6、7原因只与中间结果11有关所以这里将完整的判定表拆分为两个子表如表17-12和表17-13所示。对于结果22、23、24中间结果是原因因此在表17-13中将11作为原因。
由表17-12可知当结点11为1时结果21为0。由于结果21、22、23、24受到O约束的限制不能同时为0所以在表17-13中的的2列是不能出现的情况;同样受到O约束的还有8、12、14和16列;由于E约束第7、8、11到16列也是不可能出现的情况。在表中用灰框表示。
最后根据判定表设计测试用例。如表17-13所示判定表中没有被划去的每一列就是一个测试用例。
问题2:
解答:
根据上面的因果图,建立对应的判定表。
在该应用程序中,原因有7个,一个完整的判定表应有27(上标)=128种情况。由于篇幅的限制,且考虑到5、 6、7原因只与中间结果11有关,所以这里将完整的判定表拆分为两个子表,如表17-12和表17-13所示。对于结果22、23、24,中间结果是原因,因此在表17-13中,将11作为原因。
由表17-12可知,当结点11为1时,结果21为0。由于结果21、22、23、24受到O约束的限制,不能同时为0,所以在表17-13中的的2列是不能出现的情况;同样受到O约束的还有8、12、14和16列;由于E约束,第7、8、11到16列也是不可能出现的情况。在表中用灰框表示。
最后根据判定表设计测试用例。如表17-13所示,判定表中没有被划去的每一列就是一个测试用例。 解析:首先分析走马规则,找出所有的原因以及所有可能的结果,结合题目中找出二者的联系,按照因果图的画法规则,画出因果图。然后按照基于因果图的方法设计测试用例。
第3题:
阅读下列说明,回答问题1至问题3。
【说明】
因果图方法的思路是:从用自然语言书写的程序规格说明描述中找出因(输入条件)和果(输出或程序状态的改变),通过因果图转换为判定表。
分析中国象棋中走马的实际情况(下面未注明的均指的是对马的说明),马走日字型(邻近交叉点无棋子),遇到对方棋子可以吃掉,遇到本方棋子不能落到该位置。
应用中可能有多种输入条件,在什么情况下可采用因果图法设计测试用例?
根据上述说明,利用因果图法,下面列出走棋出现的情况和结果,找出哪些是正确的输入条件,哪些是正确的输出结果,请把相应的字母编号填入表中。 A.落点在棋盘上; B.落点与起点构成日字;
C.移动棋子; D.落点处为对方棋子:
E.落点处为自己方棋子;F.移动棋子,并除去对方棋子;G.落点方向的邻近交叉点无棋子;H.不移动棋子;I.落点处无棋子。

下图画出中国象棋中走马的因果图,请把问题2中列出的输入条件和输出结果的字母编号填入到空白框中相应的位置。

请帮忙给出每个问题的正确答案和分析,谢谢!

第4题:
今有甲、乙、丙三堆棋子共98枚。先从甲堆中分棋子给另外两堆,使两堆数各增加一倍,再把乙堆棋子照这样分配一次,最后把丙堆棋子也这样分配,结果甲堆棋子数是丙堆棋数的4/5,乙堆棋子数是丙堆棋子数的22/15。求三堆中原来最多一堆的棋子是多少?( )
A.16
B.30
C.52
D.64
第5题:
则P(max{X,y}>1)=_______.
得X~E(2),同理Y~E(3),且X,Y独立.P(max{X,Y}>1)=P(X>1Y>1)=1-P(X≤1,Y≤1)=1-P(X≤1)P(Y≤1)
第6题:
第7题:
一个棋子在棋盘上可能有几口气?
第8题:
一着棋走了以后,不得再予更改。落子生根,以()为准。
第9题:
下列关于行棋的说法正确的是()
第10题:
线
气
格子
第11题:
手碰到棋子
棋子碰到棋盘
手离开棋子
对方走下一步棋
第12题:
左上位置
中上位置
中央位置
中左位置
第13题:
已有函数max(a,b),为了使函数指针变量p指向函数max,则下面选项中赋值方法正确的是( )。
A.p=max
B.*p=max
C.p=max(a,b)
D.*p=max(a,b)
第14题:
fun函数的功能是首先对a所指的N行N列的矩阵找出各行中最大的数,再求这N个最大值中最小的那个数作为函数值返回,请填空。#include <stdio.h>#define N 100int fun(int(*a)[N]){ int row,col,max,min; for(row=0;row<N;row++) { for(max=a[row][0],col=1;col<N;col++) if() max=a[row][col]; if(row==0) min=max; else if() min=max; } return min;}
第15题:
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
【函数】
main ( )
{
int number[10];
input (number);
max min (number);
output (number);
}
input (number)
int number[10];
{int i;
for ( i=0;i<9;i++ )
scanf ( "%d,",&number[i] );
scanf ( "%d",&number[9] );
}
max_min ( array )
int array[10];
{int *max,*min,k,1;
int *p,*arr_end;
arr end=(1);
max=min=array;
for ( p=(2);p<arr_end;p++ )
if((3)) max=p;
else if ( *p<*min ) min=p;
(4);
l=*min;
(5);array[0]=1;1=*p;
*p=array[9];array[9]=k;k=*p;
return;
}
output ( array )
int array[10];
{ int *p;
for ( p=array;p<array+9;p++ )
printf ( "%d,",*p );
printf ( "%d\n",array[9] );
}
第16题:
第17题:
第18题:

第19题:
要把对方的棋子从棋盘上拿掉,就要紧住对方棋子所有的()。
第20题:
在九宫格棋盘上,两位选手轮流在棋盘上摆各自的棋子(每次一枚),谁先取得三子一线的结果就取胜。问第一步的最好着法是把棋子下在()
第21题:
行棋方触摸己方至少一个棋子,必须走动所触摸的第一个可以走动的棋子
行棋方触摸对方至少一个棋子,必须吃掉所触摸的第一个可以被吃掉的棋子
如一方的兵升变,则当所选择的升变棋子触及升变格时,即为升变棋子选定而不能再更换
如果行棋方所触摸的棋子不能走动或吃掉,判处行棋方犯规一次
第22题:
每一步棋都只能用同一只手来走
同时触摸双方棋子或无法确定先触摸何方棋子的处理方法与先触摸对方的棋子,后触摸己方的棋子的处理方法相同
摆正棋子不须事先征得对方同意,不以摸子论处
在同一棋局中五次走出不合规则的着法,为输棋
第23题:
1
2
4
6
第24题:
一般规定有利于MAX的势态,f(p)取正值。
有利于MIN的势态,f(p)取负值。
势均力敌的势态,f(p)取0值。
若f(p)=+∞,则表示MAX赢,若f(p)=-∞,则表示MIN赢。