问答题

阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内[说明]<br>本程序在3×3方格中填入1到10以内9个互不相等的整数,使所有相邻两个方格内的两个整数之和为质数。程序的输出是全部满足条件的方格。<br>方格的序号如下图所示。程序采用试探法,从序号为0的方格开始,依次为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数;如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的填入整数;当序号为8的方格也填入合理的整数后,就找到了一个解。<br>为检查当前方格所填整数的合理性,程序引入数组CheckMatrix,存放需要进行合理性检查的相邻方格的序号。事实上,CheckMatrix中只要求第i个方格中的数向前兼容,即填写第4个方格时,只检查在它之前、与之相邻的第1,3个方格是否满足和为素数的条件。<br>[程序]<br>include <stdio.h><br>int pos,a[9],b[11]; /*用于存储方格所填入的整数*/<br>void write(int a[]) /*方格输出函数*/<br>{ ……}<br>int isPrime(int m) /*素数判断函数,若m为素数则返回1,否则返回0*/<br>{ ……}<br>int selectNum(int start) /*找到start到10之间尚未使用过的最小的数,若没有则返回0*/<br>{ int j;<br>for(j=start;j<=10;j++) if(b[j]) return j;<br>return0;<br>}<br>int check() /*检查填入pos位置的整数是否合理*/<br>{ int i,j<br>int checkMatrix[][3]={{-1},{0,-1},{1,-1},{0,-1},{1,3,-1},{2,4,-1},{3,- 1},{4,6,-1},{5,7,-1}};<br>for(i=0;(j=(1))>=0;i++)<br>if(! isPrime((2)))return 0;<br>return 1;<br>}<br>void extend() /*为下一方格找一个尚未使用过的整数*/<br>{ (3)=selectNum(1);<br>b[a[pos]]=0;<br>}<br>void change() /*为当前方格找下一个尚未使用过的整数,若找不到则回溯*/<br>{ int j;<br>while(pos>=0&&(j=selectNum(a[pos]+1))= =0) b[a[pos- -]]=1;<br>if(pos<0)return;<br>(4);a[pos] =j;b[j]=0; }<br>void find()<br>{ int k=1;<br>pos=0;a[pos]=1;b[a[pos]]=0;<br>do{<br>if(ok)<br>if((5) ){<br>write(a);change();<br>}<br>else extend();<br>else change();<br>k=check(pos);<br>}while(pos>=0);<br>}<br>void main()<br>{ int i;<br>for(i=1;i<=10;i++)b[i]=1;<br>find();<br>}


问答题

阅读以下说明和C语言函数,将应填入(n)处。<br>[说明]<br>二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身就是两棵二义排序树。<br>函数insert_BST(char *str)的功能是:对给定的字符序列按照ASCⅡ码值大小关系创建二叉排序树,并返回指向树根结点的指针。序列中重复出现的字符只建一个结点,并由结点中的Count域对字符的重复次数进行计数。<br>二叉排序树的链表结点类型定义如下:<br>typedef struct BSTNode{<br>char Elem; /*结点的字符数据*/<br>int Count; /*记录当前字符在序列中重复出现的次数*/<br>struct BSTNode *Lch,*Rch; /*接点的左、右子树指针*/<br>}*BiTree;<br>[函数]<br>BiTree insert_BST(char *str)<br>{ BiTree root,parent,p;<br>char (1); /*变量定义及初始化 */<br>root=(BiTree)malloc(sizeof(struct BSTNode));<br>if(!root||*s=='\0') return NULL;<br>root->Lch=root->Rch=NULL; foot->Count=1; root->Elem=*s++;<br>for(; *s!='\0';s++) {<br>(2); parent=NULL;<br>while (p){ /*p从树跟结点出发查找当前字符*s所在结点 */<br>parent = p;<br>if(*s==p->Elem)/*若树中已存在当前字符结点,则当前字符的计数值加1*/<br>{p->Count++; break;}<br>else /*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/<br>if (*s>p->Elem) p=p->Rch;<br>else p=p->Lch;<br>}/*while*/<br>if((3)) {/* 若树中不存在字符值为*s的结点,则申请结点并插入树中 */<br>p=(BiTree)malloc(sizeof(struct BSTNode));<br>if(!p)return NULL;<br>p->Lch=p->Rch=NULL; p->Count=1; p->Elem=*s;<br>/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/<br>if(p->Elem>parent->Elem) (4)=p;<br>else (5)=p;<br>}<br>}/*for*/<br>return root;<br>}


问答题

阅读以下说明及Visual Basic程序代码,将应填入(n)处的字句写在对应栏内。<br>[说明]<br>我国现行使用的公民身份证号码有两种,分别遵循两个国家标准:〖GB 11643-1989〗和〖GB 11643-1999〗。〖CB 11643-1989〗中规定的是15位身份证号码,排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。〖GB 11643 -1999〗中规定的是18位身份证号码,是特征组合码,它由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其中,校验码C由本体码按如下过程求得:<br>(1)计算校验码和S=a18W18+a17W17+…+a2W2,其中i表示18位身份证号,码每一位的序号,从右至左,最左侧为18,最右侧为1;ai表示身份证号码第i位上的号码;wi表示第i位上的权值,其值为2i-1模11的结果;<br>(2)计算校验码值R,其值为校验和模11的结果;<br>(3)根据下面对应关系找出校验码C:<br>由上述计算过程可以看出,18位身份证号码中可能包含非数字的字母X(代表数字10)。下面的应用程序基于这一算法实现了身份证号码的升位查询:<br>在开发过程中,显示新旧两种身份证号码的文本框(TextBox)分别名为Text1和Text2,“号码升位”按钮(CommandButton)名为Command1。<br>代码中使用到的字符串函数及功能说明如下:<br>(1)Len(s):获取字符串s的长度;<br>(2)Left(s,1):返回字符串s左端长度为1的子串;<br>(3)Right(s,1):返回字符串s右端长度为1的子串;<br>(4)Mid(s,p,1):返回字符串s从第P个字符开始长度为1的子串。<br>[Visual Basic代码]<br>’计算18位身份证号码<br>Private Sub Commandl_Click()<br>Dim code As String<br>Dim S As Integer<br>code = Textl. Text '提取15位身份证号码<br>If Len(code) < > 15 Then<br>MsgBox "ID 号码长度不正确,请检查!"<br>(1)<br>End If<br>code = Left(code, 6) + "19" + (2) (code, 9) '年份升位<br>S=0<br>For i = 18 To 2 Step -1 '计算校验码和<br>S = S + Clnf((3)) * (2 ^ (i - 1) Mod11)<br>Next i<br>(4) '计算校验码值<br>Select Case S '确定校验码<br>Case 0: code = code + "1"<br>Case 1: code = code + "0"<br>Case 2: code = code + "X"<br>Case Else: code = code + CStr((5))<br>End Select<br>Text2. Text = code '显示18位身份证号码<br>End Sub


问答题

阅读下列程序说明和Visual Basic代码,将应填入(n)处的字句写在对应栏内。<br>[说明]<br>本程序提供了查询景点票价信息的功能,查询包括两种方式:按景点名称查询以及白定义查询。程序界面如下图所示:<br>其中,选择景点名称的组合框(Comobox)名为Combo1,单旋钮“旺季”和“淡季”分别名为Op- tion1和Option2,用于输入票价上限的文本框名为Texi1,两种查询方式的“提交”按钮分别名为 Command1和Command2。已知Combol列表中第i个景点的旺季票价和淡季票价分别存放于数组元素P(i,0)和p(i,1)中。<br>[Visual Basic代码]<br>Dim p(20, 2) As Single '通用声明<br>Private Sub Form_Load()<br>For i = 0 To 9 '对p赋值<br>p(i, 0)=........ :p(i, 1)=.......<br>Next<br>End Sub<br>Private Sub Commandl_Click() '查询方式一:按景点名称查询<br>Dim cboTcxt As String<br>eboText =(1)<br>Fori = 0 To (2) -1 '对Combo1中各列表项循环<br>If (3)= cboText Then<br>MsgBox "景点名称" & cboText & "旺季票价" & p(i, 0) & _<br>",淡季票价" & p(i, 1)<br>Exit Sub<br>End If<br>Next i<br>End Sub<br>Private Sub Command2_Click() 查询方式二:自定义查询<br>Dim price As Single, result As String, flag As Boolean<br>price =Val((4) )<br>flag = False<br>result = ""<br>For i = 0 To (2) - 1'对Combo1中列表项循环,找出符合条件的景点<br>If(Optionl. Value And p(i, 0) < = price) Or((5)) Then<br>(6)<br>result=result & "景点名称" &(3)& ",旺季票价:"&_<br>p(i, 0) & ",淡季票价:" & p(i, 1) & vbCrLf<br>End If<br>Next i<br>If flag Then<br>MagBox result<br>Else: Msgaox "没有找到符合条件的景点信息!"<br>End If<br>End Sub


问答题

阅读以下说明和C函数,将应填入(n)处对应栏内。<br>[说明]<br>基于管理的需要,每本正式出版的图书都有一个ISBN号。例如,某图书的ISBN号为“978-7-5606-2348-1”。<br>ISBN号由13位数字组成:前三位数字代表该出版物是图书(前缀号),中间的9个数字分为三组,分别表示组号、出版者号和书名号,最后一个数字是校验码。其中,前缀号由国际EAN提供,已经采用的前缀号为978和979;组号用以区别出版者国家、地区或者语言区,其长度可为1~5位;出版者号为各出版者的代码,其长度与出版者的计划出书量直接相关;书名号代表该出版者该出版物的特定版次;校验码采用模10加权的算法计算得出。<br>校验码的计算方法如下:<br>第一步:前12位数字中的奇数位数字用l相乘,偶数位数字用3相乘(位编号从左到右依次为13到2)。<br>第二步:将各乘积相加,求出总和S。<br>第三步:将总和S除以10,得出余数R。<br>第四步:将10减去余数R后即为校验码V。若相减后的数值为10,则校验码为0。<br>例如,对于ISBN号“978-7-5606-2348-1”,其校验码为1,计算过程为:<br>S=9×1+7×3+8×1+7×3+5×1+6×3+0×1+6×3+2×1+3×3+4×1+8×3=139<br>R=139mod 10=9<br>V=10-9=1<br>函数check(char code[])用来检查保存在code中的一个ISBN号的校验码是否正确,<br>若正确则返回true,否则返回false。例如,ISBN号“978-7-5606-2348-1”在code中的<br>存储布局如表3-1所示(书号的各组成部分之间用“-”分隔):<br>表3-1 数组code的内容示例<br>在函数check(char code[])中,先将13位ISBN号放在整型数组元素tarr[0]~tarr[12]中(如表3-2所示,对应ISBN号的位13~位1),由tarr[0]~tarr[11]计算出校验码放入变量V,再进行判断。<br>表3-2 数组tarr的内容示例<br>[C函数]<br>boo1 cheCk(char code[])<br>{<br>int i,k=0;<br>intS=0,temp=0;<br>int V;<br>int tarr[13]={0};<br>if (Strlen(code) <17} return falSe;<br>for(i=0; i<17; i++) /*将13位ISBN号存入tarr*/<br>if(code[i]!='-')<br>tarr (1)____ =code[i]-'0';<br>for(i=0; (2)_____ ; i++ ); {<br>if (i%2)<br>S+= (3)______ ;<br>else<br>S+= (4)______ ;<br>}<br>v=((5)______ ==C)?0:10-s%10;<br>if(tart[12]==v)<br>return true ;<br>return false;<br>}


火星搜题