问答题[说明] 打保龄球是用一个滚球去打出10个站立的柱,将柱击倒。一局分10轮,每轮可滚球一次或多次,以击倒的柱数为依据计分。一局得分为10轮得分之和,而每轮的得分不仅与本轮滚球情况有关,还可能与后续一两轮的滚球情况有关。即某轮某次滚球击倒的柱数不仅要计入本轮得分,还可能会计入前一两轮得分。具体的滚球击柱规则和计分方法如下: 1) 若某一轮的第一次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加两次滚球)。该轮得分为本次倒柱数(即10)与以后两次滚球所击倒柱数之和。 2) 若某一轮的第一次滚球未击倒10个柱,则可对剩下未倒的柱再滚球一次。如果这两次滚球击倒全部10个柱,则本轮不再滚球(若是第10轮则还需另加一次滚球),该轮得分为本次倒柱数10与以后一次滚球所击倒柱数之和。 3) 若某一轮的两次滚球未击倒全部10个柱,则本轮不再继续滚球,该轮得分为这两次滚球击倒的柱数之和。 总之,若一轮中一次滚球或两次滚球击倒10个柱,则本轮得分是本轮首次滚球开始的连续3次滚球击倒柱数之和(其中有一次或两次不是本轮滚球)。若一轮内二次滚球击倒柱数不足10个,则本轮得分即为这两次击倒柱数之和。表3-15是打保龄球计分的某个实例说明。 {{B}}表3-15 某保龄球计分实例表{{/B}}
轮
1
2
3
4
5
6
7
8
9
10
附加
各轮第1次得分
10
10
10
7
9
8
8
10
9
10
8
各轮第2次得分
—
—
—
2
1
1
2
—
1
—
2
各轮得分
30
27
19
9
18
9
20
20
20
20
累计总分
30
57
76
85
103
112
132
152
172
192
以下[C程序]是模拟打一局保龄球的过程,统计各轮得分和累计总分。程序交互地逐轮逐次输入一次滚球击倒的柱数,计算该轮得分和累计总分。为记录一轮内击倒10柱,但还暂不能计算该轮得分和累计总分的情况,程序引入变量ok,用来记录当前已完成完整计算的轮次。程序每输入一次滚球击倒柱数,就检查还未完成完整计算的轮次,并计算。 [C程序] #include<stdio.h> #define N 13 struct { int n; /* 一轮内滚球次球 */ int f; /* 第一次击倒柱数 */ int s; /* 第一次击倒柱数 */ int score; /* 本轮得分 */ int total; /* 至本轮累计总分 */ int m; /* 完成本轮得分计算,还需滚球次数 */ } a[N]; int ok = 0; /* 已完成完整计算的轮次数 */ int ball(int i, int n, int max) /* 完成一次滚球,输入正确击倒柱数 */ { int d, j, k; static c=1; while (1) { if(i <= 10) printf(" 输入第%d轮的第%d次滚球击倒柱数。(<=%d)/n", i, n, max ); else printf(" 输入附加的第%d次滚球击倒柱数。(<=%d)/n", C++, max); scanf("%d , if (d >=0 printf(" 不合理的击倒柱数,请重新输入。/n") ) if (ok < {{U}}(1) {{/U}}) { /* 对以前未完成计算的轮次分别计算得分与累计总分*/ for(j = ok+1; {{U}}(2) {{/U}}; j++) { a[j].score += d; if (--a[j].m == 0) { a[j].total = ({{U}} (3) {{/U}}) + a[j].score; ok = {{U}}(4) {{/U}}; } } } return d; } main ( ) { int i, first, second, k; /* i表示轮次 */ for ( i = 1 ; ok < 10 ; i++) a[i].score = a[i].f = first = ball(i,1,10); if ( first == 10) a[i].m = 2; a[i].n = 1; if (first < 10 if (first + second == 10) a[i].m = 1; {{U}}(6) {{/U}}; } if (i <= 10 {{U}} (7) {{/U}}; } printf( "各轮处1次得分"); for(k = 1; k <= 1; k++) printf("%5d", a[k].f); printf("/n 各轮第2次得分"); for(k=1; k <= i; k++) if (a[k].n < 2) printf(" /"); else printf("%5d", a[k].s); printf("/n 各轮得分"); for(k = 1; k <= ok; k++) printf("%5d", a[k].score); printf("/n 累计总分"); for(k = 1; k <= ok; k++) printf("%5d", a[k].total); printf("/n"); } }
问答题[函数2.1说明]
下面程序的功能是计算x和y的最小公倍数。
[函数2.1]
main()
{ int m,n,d,r;
seanf("%d %d",
if(m<n) {r=m;m=n;n=r;}
{{U}}(1) {{/U}};
while (d%n! =0) {{U}}(2) {{/U}};
printf("%d/n",d);
}
[函数2.2说明]
下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。
[函数2.2]
#include <stdio.h>
main()
{ char c,preChar='/0';
c = getchar();
while(c! = '.'){
if({{U}} (3) {{/U}}) putchar(c);
else if(preChar! =' ') putchar(c);
{{U}}(4) {{/U}};
c={{U}} (5) {{/U}};
}
}
问答题试题一(共15分)阅读下列说明和流程图,将应填入(n)处的字句写在答题纸的对应栏内。[流程图说明]流程图1-1描述了一个算法,该算法将给定的原字符串中的所有前导空白和尾部空白都删除,但保留非空字符之间的空白。例如,原字符串“FileName”,处理后变成“FileName”。流程图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][流程图1-2][流程图1-3][流程图1-4][问题]在流程图1-1中,判断框P中的条件可表示为:i>(5)
问答题[说明]本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。[程序]#include<stdio.h>intpos,a[9],b[11];/*用于存储方格所填入的整数*/voidwrite(inta[])/*方格输出函数*/……intisPrime(intm)/*素数判断函数,若m为素数则返回1,否则返回0*/……intselectNum(intstart)/*找到start到10之间尚未使用过的最小的数,若没有则返回0*/intj;for(j=start;j<=10;j++)if(b[j])returnj;return0;intcheck()/*检查填入pos位置的整数是否合理*/inti,jintcheckMatrix[][3]=-1,0,-1,1,-1,0,-1,1,3,-1,2,4,-1,3,-1,4,6,-1,5,7,-1;for(i=0;(j=(1))>=0;i++)if(!isPrime((2)))return0;return1;voidextend()/*为下一方格找一个尚未使用过的整数*/(3)=selectNum(1);b[a[pos]]=0;voidchange()/*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/intj;while(pos>=0if(pos<0)return;(4);a[pos]=j;b[j]=0;voidfind()intok=1;pos=0;a[pos]=1;b[a[pos]]=0;doif(ok)if((5))write(a);change();elseextend();elsechange();ok=check(pos);while(pos>=0);voidmain()inti;for(i=1;i<=10;i++)b[i]=1;find();
问答题【说明】本应用程序的运行窗口如图2所示。只要用户单击“闪烁”按钮,文字“欢迎光临”就会以0.3秒消失、0.3秒显示反复进行闪烁;单击“停止”按钮时,闪烁停止,恢复图示的初态。在开发过程中,需要设置的属性如表1所示。{{B}}表1属性设置{{/B}}对象对象名属性名属性值窗体FrmlCaption闪烁显示演示标签LabelCaption欢迎光临命令按钮CmdFCaption闪烁命令按钮CmdTCaption停止定时器TimerlEnabled {{U}} (1) {{/U}}Interval {{U}} (2) {{/U}}在开发过程中,需要编写的程序代码如下:【程序】PrivateSubCmdF_Click()Timerl.{{U}}(3){{/U}}=TrueLabel.Visible=FalseEndSubPrivateSubTimerl_Timer(){{U}}(4){{/U}}=notLabel.VisibleEndSubPrivateSubCmdT_Click()Timer].Enabled={{U}}(5){{/U}}LabelVisible=trueEndSub
问答题[说明]下面的流程图用于计算一个英文句子中最长单词的长度(即单词中字母个数)MAX。假设该英文句子中只含字母、空格和句点“.”,其中句点表示结尾,空格之间连续的字母串称为单词。[流程图]
问答题【说明】
以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。
【程序】
#include < stdio. h >
main( )
{ FILE * fp;
char str[100]; int i=0;
if((fp=fopen("text.txt"{{U}} (1) {{/U}})) ==NULL)
{ printf("can't open this file. /n") ;exit(0) ;}
printf(" input astring: /n" ); gest(str);
while( str[i] )
{ if(str[i] >='a'
fputc(str[i],{{U}} (3) {{/U}});
i++;
}
fclose(fp);
fp=fopen(" test.txt",{{U}} (4) {{/U}});
fgets(str, 100, fp);
printf("%s/n" ,str);
{{U}} (5) {{/U}};
}
问答题【说明】
进行两个整数之间的比较,由考生通过输入窗口分别输入两个整数,程序比较出结果。例如:先后输入的两个数分别为25和36。
比较结果显示:
25!=36
25<36
25<=36
【Java代码】
import javax.swing.JOptionPane;
public class Java3
{
public static void main(String args[])
{
String{{U}} (1) {{/U}} // 用户输入第1个字符串
secondNumber, // 用户输入第2个字符串
result; // 包含输出
int number1, // 比较的第1个数
number2; // 比较的第2个数
// 用户输入的第1个字符串
firstNumber =
JOptionPane.{{U}} (2) {{/U}}("Enter first integer:");
//读用户输入的第2个字符串
secondNumber =
JOptionPane.showlnputDialog("Enter second integer:");
将字符串类型转换成整数类型
number1= Integer.{{U}} (3) {{/U}}(firstNumber);
number2= Integer.parselnt(secondNumber);
result= "":
if ({{U}} (4) {{/U}})
result=number1+"=="+number2;
if (number1 != number2)
result=number1+"!="+number2;
if (number1<number2)
result=result+"/n"+number1+"<"+ number2;
if (number1>number2)
result=result+"/n"+number1+">"+number2;
if (number1<=number2)
result=result+"/n"+number1+"<="+number2;
if (numbed>=number2)
result=result+"/n"+number1+">="+number2;
//显示结果
JOptionPane.{{U}} (5) {{/U}}.(
null, result, "Comparison Results",
JOptionPane. INFORMATION_MESSAGE);
//程序正常退出
System.exit(0);
}
}
问答题试题一(15分,每空3分)阅读下列说明和流程图,将应填入(n)的字句写在答题纸的对应栏内。[流程图说明]下面的流程图描述了对8位二进制整数求补的算法。该算法的计算过程如下:从二进制数的低位(最右位)开始,依次向高位逐位查看,直到首次遇到“1”时,停止查看。然后,对该“1”位左面的更高位(如果有的话),逐位求反,所得的结果就是对原二进制数求补的结果。例如:对二进制整数10101000求补的结果是01011000。设8位二进制整数中的各位,从低位到高位,依次存放在整型数组BIT的BIT[1]~BIT[8]中。例如,二进制整数10101000存放在数组BIT后,就有BIT[1]=0,BIT[2]=0,...,BIT[7]=0,BIT[8]=1。若流程图中存在空操作,则用NOP表示。[流程图]流程图中(1)处按“循环变量名:循环初值,增量,循环终值”格式描述。
问答题[说明]
函数DelA - InsB ( LinkedList La, LinkedList Lb, int key 1,int key 2,int len)的功能是,将线性表A中关键码为key 1的节点开始的len个节点,按原顺序移至线性表B中关键码为key 2的节点之前。若移动成功,则返回0;否则返回-1。
线性表的存储结构为带头节点的单链表,La为表A的头指针,Lb为表B的头指针。单链表节点的类型定义如下。
typedef struct node{
int key;
struct node*next;
} *LinkedList;
[C程序]
int DelA_InsB (LinkedLiSt La, LinkedList Lb, int key1,int key2,int len
{ LinkedList p, q, S, prep, pres;
int k;
if (!La ->next || !Lb ->next || len<=0)
return-l;
p = La->next;
prep = La;
while (p
p = p->next;
}
if (!p)
return -1; /* 表A中不存在键值为key1的节点 */
q = p;
k = 1;
while (q
k++;
}
if (!q)
return -1; /* 表A中不存在要被删除的len个节点 */
S = Lb ->next;
{{U}} (3) {{/U}};
while (s
s = e->next;
}
if (!s)
return -1; /* 表B中不存在键值为key2的节点 */
{{U}} (4) {{/U}} q->next; /* 将表A中的len个节点删除 */
q->next= {{U}}(5) {{/U}}
pres->next = p; /* 将len个节点移至表B */
return 0;
}
问答题[说明]某单位组织一次职业技术考核比赛,由十名评委对选手的现场表现打分(0到100以内的数值)。本程序接收原始评分后,去掉一个最高分、一个最低分,最后计算并输出选手最后得分。在接收输入第i个评分时,若输入数据的类型、范围不正确,程序将给出相应提示,并等待下一次输入,直至正确接收第i个评分为止。程序的运行界面如下:在开发过程中,文本框名为Text1,界面上有上至下三个按钮分别取名为CmdMark、CmdReresh和CmdExit。[VisualBasic代码]PrivateSubCmdMark_Click()’按钮“输入评分”的单击事件响应代码DimiAsInteger,tempAsVariant’声明变量Dimmarks(1To10),maxMark,minMark,sumMark,markAsSinglesumMark=0Text1.Text=“编号”&Chr(9)&“评分”&vbCrLfFori=1To10’接收十个评分输入DoWhile1=1’验证并接收第i个评委的评分temp=InputBox(“请输入”&i&“号评委的评分:”)If{{U}}(1){{/U}}IsNumeric(temp)ThenMsgBox“数据类型错误,请重试!”ElseIfCSng(temp)<0OrCSng(temp)>100ThenMsgBox“数值范围错误,请重试!”Else:ExitDoEndIfLoopmarks(i)=CSng(temp)Ifi=1ThenmaxMark={{U}}(2){{/U}}:minMark={{U}}(2){{/U}}Ifmarks(i)>maxMarkThenmaxMark=marks(i)IfminMark>marks(i)Then{{U}}(3){{/U}}sumMark=sumMark+marks(i)Text1.Text=Text1.Text&i&Chr(9)&marks(i)&vbCrLf输出第i个评委的评分Nextmark=({{U}}(4){{/U}})/8’计算选手最后得分Text1.Text=Text1.Text&"去掉一个最高分:"&maxMark&vbCrLf&_"去掉一个最低分:"&minMark&vbCrLf&_"选手最后得分:"&markEndSubPrivateSubCommand2_Click()’按钮“刷新屏幕”的单击事件响应代码{{U}}(5){{/U}}.Text=“单击”输入评分“按钮,开始统分……”EndSubPrivateSubCommand3_Click()按钮“退出程序”的单击事件响应代码EndEndSub
问答题【函数2.1说明】 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 【函数2.1】 Fun1 (int n) int i; for(i=2;i<=n;i++) while ( (1) ) if (n%i==0) printf("%d*",i); (2) ; else break; printf("%d",/n); 【函数2.2说明】 下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只猴子把这堆桃子平均分为5份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第2只猴子把剩下的桃子又平均分成5份,又多了一个,它同样把多的一个扔入海中,拿走了一份。第 3、4、5只猴子都是这样做的,问海滩上原来最少有多少个猴子? 【函数2.2】 main() int i,m,j,k,count; for(i=4;i<10000;i+=4) count=0; (3) ;for(k=0;k<5;k++) (4) ; i=j; if(j%4==0) (5) ; else break; i=m; if(count==4) printf("%d/n",count); break;
问答题5.
问答题【说明】【C程序1】用回溯算法来产生由0或1组成的2m个二进位串,使该串满足以下要求。视串为首尾相连的环,则由m位二进制数字组成的2m个子序列,每个可能的子序列都互不相同。例如,如果m=3,在串11101000首尾相连构成的环中,由3位二进制数字组成的每个可能的子序列都在环中恰好出现一次,它们依次是111,110,101,010,100,000,001,011,如图2-14所示。【C程序2】是求“背包问题”的一组解的递归算法程序。“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为W1,W2,…,Wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。【C程序1】#defineN1024#defineM10intb[N+M-1]intequal(intk,intjintm){inti;for(i=0;i<m;i++if(b[k+i]{{U}}(1){{/U}})return0;return1;}intexchange(intk,intm,intv){while(b[k+m-1)==v){b[kncm--i]=!v{{U}}(2){{/U}};}{{U}}(3){{/U}}=v;returnk;}init(ihtv){intkfor(k=0;K=N+M-1;k++)b[k]=v;}main(){intm,v,k,n,j;printf('Enterm(l<m<10),vv=0,v=1)/n");scanf("%d%d,n=0x01<<m;init(!v);k=0;while({{U}}(4){{/U}}<n)for(j=0;j<k;j++)if(equal(k,j,m)){k=exchange(k,m,v)j={{U}}(5){{/U}};}for(k=0;k<n;k++)print{("%d/n",b[k]);}}【C程序2】#include<stdio.h>#defineN7#defineS15intw[N+1]={0,1,4,3,4,5,2,7};intknap(intS,intn){if(S==0)return1;if(s<0||(s>0if({{U}}(6){{/U}})){printf("4d",w[n]);return1;}return{{U}}(7){{/U}}}main(){if(knap(S,N)printf("OK:/n");elseprintf("NO!/n")}
问答题试题六(共15分)阅读以下说明和C++代码,将解答写入答题纸的对应栏内。[说明]类Stock的定义中有三处错误,分别在代码的第04、06、10行。请补齐下述代码中的空缺1,修改错误并给出修改后该行的完整代码,最后完善程序运行后的输出结果。[C++代码]程序运行后的输出结果为:1:3.5(2)(3)
问答题【说明】
计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为“46 512037-*+”。
计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇,到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5120 37-*+”的计算过程如下。
a.依次将46、5、120、37压入栈中;
b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中:
c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;
d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;
e.表达式结束,则计算过程完成。
函数computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“/”)。
函数computing中所用栈的基本操作的函数原型说明如下。
· void InitStack(STACK *s):初始化栈。
· void Push(STACK,s,int e):将一个整数压栈,栈中元素数目增1。
· void Pop(STACK *s):栈顶元素出栈,栈中元素数目减1。
· int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。
· int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。
【C函数】
int computing (char expr[],int *result)
{
STACK s; int tnum,a,b; char *ptr;
InitStack(&s);
ptr=expr;pstr /*字符指针指向后缀表达式串的第一个字符*/
while(*ptr!='/0') {
if(*ptr==' ') { /*当前字符是空格*/
{{U}} (1) {{/U}}; /*字符指针指向下一字符*/
continue;
}
else
if(isdigit (*ptr)) {
/*当前字符是数字,则将该数字开始的数字串转换为数值*/
tnum={{U}} (2) {{/U}};
while (*ptr>='0' && *ptr <='9') {
tnum=tnum * 10 + {{U}}(3) {{/U}};
ptr++;
}
Push({{U}} (4) {{/U}});
}
else /*当前字符是运算符或其他符号*/
if (*ptr=='+'||*ptr=='-'||*ptr=='*'||*ptr=='/'){
if(!IsEmpty(s)) {
a=Top(s);Pop(&s); /*取运算符的第二个运算数*/
if(!IsEmpty(s)) {
b=Top(s);Pop(&s);/*取运算符的第一个运算数*/
}
else return -1;
}
else return -1;
switch (*ptr) {
case '+': Push(&s,b+a); break;
case '-':Push(&s,b-a); break;
case '*':Push(&s,b*a); break;
case '/':Push(&s,b/a); break;
}
}
else
return -1;
ptr++; /*字符指针指向下一字符*/
}/*while*/
if(IsEmpty(s)) return -1;
else{
{{U}}(5) {{/U}}=Top(s); Pop(&s); /*取运算结果*/
if(!IsEmpty(s)) return -1;
return 0;
}
}
问答题[说明]下面的程序演示了根据随机产生的奖牌数,生成金银奖牌榜的过程。程序使用的排序法是简单排序法。以金牌得数为例,其思想是选择最大的元素,将它交换到最前面;然后对剩下的部分采用同样的方法,直到全部排序完成。程序界面中,左右两个文本框分别用于存放随机产生的奖牌数以及生成的奖牌榜,名为Text1和Text2,上下两个按钮分别名为Command1和Command2。代码中使用的量主要有:一维数组cntries,用于存储10个国家的名称,二维数组medals,其元素medals(i,0)和medals(i,1)分别用于存放第i个(i从0开始)国家的金、银牌数目。[VisualBasic代码]Dimcntries(10)AsString,medals(10,2)AsInteger’随机产生奖牌数SubnewMedals()……’为数组cntries和medals赋值EndSub’输出奖牌榜SubprintOut(txtAs{{U}}(1){{/U}})DimstrResuhAsString,iAsIntegerstrResult=“国家”&Chr(9)&“金牌数”&Chr(9)&“银牌数”&vbCrLfFori=0To9strResult=strResult&cntries(i)&Chr(9)&medals(i,0)&Chr(9)&medals(i,1)&vbCrLfNexttxt.Text=strResultEndSub’交换两变量的值Subexchange({{U}}(2){{/U}}aAsVariant,{{U}}(2){{/U}}bAsVariant)DimtempAsVarianttemp=a:a=b:b=tempEndSub’随机产生并输出奖牌数PrivateSubCommand1_Click()newMedalsprintOutText1EndSub’生成并输出奖牌榜PrivateSubCommand2_Click()Dimi,j,kAsInteger,tempAsStringFori=0To9’按金牌数排序j=i’找到自第i个位置起全部数据中金牌得数最多者,记其下标为jFork=i+1To9If{{U}}(3){{/U}}Thenj=kNextIfi<>jThen’若i,j不等,则交换对应位置的国家名、金银牌数目exchangecntnes(i),entries(j)exchangemedals(i,0),medals(j,0)exchangemedals(i,1),medals(j,1)EndIfNextFori=0To9’按银牌数进行二次排序j=iFork=i+1To9Ifmedals(k,0)<>medals(j,0)Then{{U}}(4){{/U}}If{{U}}(5){{/U}}Thenj=kNextIfi<>jThenexchangecntries(i),cntries(j)exchangemedals(i,1),medals(j,1)EndIfNextprintOutText2EndSub
问答题
问答题【说明】设M叉树采用列表法表示,即每棵子树对应一个列表,列表的结构为:子树根结点的值后跟用“()”括起来的各子树的列表(若有子树的话),各子树的列表间用“,”分隔。例如,如下图所示的三叉树可用列表a(b(c,d),e,f(g,h,i))表示。本程序根据输入的列表生成一棵M叉树,并由M叉树再输出列表。【函数】#include#include#defineM3/*三叉树*/typedefstructnode{intval;structnode*subTree[M];}NODE;charbuf[255],*str=buf;NODE*d=NULL;NODE*makeTree()/*由列表生成M叉树*/{intk;NODE*s;s={{U}}(1){{/U}};s->val=*str++;for(k=0;k<M;k++)s->subTree[k]=NULL;if(*str=='('){k=0;do{str++;s->subTree[k]={{U}}(2){{/U}};if(*str==')'){str++;break;}k=k+1;}while({{U}}(3){{/U}});}returns;}voidwalkTree(NODE*t)/*由M叉树输出列表*/{inti;if(t!=NULL){{{U}}(4){{/U}};if(t->subTree[0]==NULL)return;putchar('(');for(i=0;i<M;i++){{{U}}(5){{/U}};if(i!=M-1}putchar(')');}}voidmain(){printf("Enterexp:");scanf("%s",str);d=makeTree();walkTree(d);putchar('/n');}
问答题试题四(共15分)阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。[说明]已知两个整数数组A和B中分别存放了长度为m和n的两个非递减有序序列,函数Adjustment(A,B,m,n)的功能是合并两个非递减序列,并将序列的前m个整数存入A中,其余元素依序存入B中。例如:合并过程如下:从数组A的第一个元素开始处理。用数组B的最小元素B[0]与数组A的当前元素比较,若A的元素较小,则继续考查A的下一个元素;否则,先将A的最大元素暂存入temp,然后移动A中的元素挪出空闲单元并将B[0]插入数组A,最后将暂存在temp中的数据插入数组B的适当位置(保持B的有序性)。如此重复,直到A中所有元素都不大于B中所有元素为止。[C函数]
