问答题

[说明]
为实现图书的国际统一编码,便于实现计算机化的图书管理,每本正式出版的图书都印有国际标准书号。标准书号由“ISBN”、10个数字(0-9)组成,其格式如下。
ISBN 组号-出版者号-书名号-校验码
其中,校验码是根据前面9个数字计算得到的,用于计算机自动校验。假设标准书号的10个数字依次是a(1),a(2),…,a(10),则校验码a(10)的设置应使S=1O*a(1)+9*a(2)+8*a(3)+…+1*a(10)能被11整除。如果校验码a(10)应设置成10,则规定以“X”表示之。
例如,《软件设计师考试考前冲刺预测卷及考点解析》的标准书号为:ISBN 7-121-05027-5。第1段上的数字“7”是国际ISBN中心分配给中国ISBN中心管理的组号;第2段上的“121”表示电子工业出版社。标准书号的校验过程如图3-16所示,计算校验码的过程如图3-17所示。其中,Mod(S,11)表示S除以 11得到的余数。


图3-16 标准书号的校验过程


图3-17 计算校验码的过程
1. [问题1]
请根据标准书号校验码的说明,将图3-16和图3-17程序流程图中(1)-(4)空缺处的内容填补完整。

【参考答案】

不使用求余计算符号“%”,求取被除数p和除数q之间的余数的C程序如下。
[C程序1]
static ......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
[说明] 以下[C程序]所完成的功能是在3X3方格中填入数字1~N(N≥10)内的某9个互不相同的整数,使所有相邻两个方格内的两个整数之和为质数。系统输出满足该要求的所有填法。系统的部分输出结果如图3-18所示。 图3-18 系统的部分输出结果 3×3方格从第1行左上角方格开始的序号分别为0、1、2,第2行左边方格开始的序号分别为3、4、 5,第3行左下角方格开始的序号分别为6、7、8。以下[C程序]采用试探法,即从序号为0的方格(左上角)开始,为当前方格寻找一个合理的可填整数,并在当前位置正确填入后,为下一方格寻找可填入的合理整数。如不能为当前方格寻找一个合理的可填整数,就要后退到前一方格,调整前一方格的整数。直至序号为8的方格(右下角)也填入合理的整数时,就找到了一个解,将该解输出,并调整序号为8的方格所填的整数,继续去找下一个解。 为了检查当前方格的填入整数的合理性,C程序引入二维数组checkMatrix,用于存放需要进行合理性检查的相邻方格的序号。 [C程序] #include <stdio.h> #define N 12 int a [9]; * 用于存储方格所填入的整数 * int b[N+1]; int pos; checkMatrix[][3] = -1,0,-1,1,-1,0,-1,1,3,-1,2,4,-1,3,-1 4,6,-1, 5,7,-1; void write(int a[]) int i, j; for ( i = 0; i < 3; i++) for ( j = 0; j < 3; j++) printf( %3d ,a[3*i+j]); printf( n ); int isPrime(int m) int i; if (m == 2) return 1; if (m == 1 || m % 2 == 0) return 0; for (i = 3; i * i <= m; ) if (m % i == O) return 0; i+ =2; return 1; int selectNum(int start) int j; for (j = start; j <= N; j++) if (b[j]) return j; return 0; int check ( ) * 检查填入pos位置的整数是否合理 * int i, j; for (i = 0; (j = (1) ) >= 0; i++) if (!isPrime(a[pos] + a[j])) (2) ; (3) ; extend () * 为下一方格找一个尚未使用过的整数 * a[ (4) ] = selectNum(1); b[a[pos]] = 0; void change() * 为当前方格找下一个尚未使用过的整数(找不到回溯) * int j; while (pos >= 0 && (j = selectNum( (5) )) == 0 (6) ; if (pos < 0) return; b[a[pos]] = 1; a[pos] = j; b[j] = 0; find ( ) int ok = 1; pos = 0; a[pos] = 1; b[a[pos]] = 0; de if (ok) if ( (7) ) write (a); change( ); else extend( ); else change( ); ok = check(pos); while (pos >=0); main( ) int i; for (i = 1; i <=N; i++) b[i] = 1; find( );
问答题
在Visual Basic应用程序中显示磁盘驱动器、目录和文件的有关信息(如设计资源管理器),除了使用对话框外,VB提供了文件系统内部控件:驱动器列表框(DriveListBox)、目录列表框(DirListBox)和文件列表框(FileListBox)。 驱动器列表框用于显示系统中所有的有效驱动器,它可以自动填写驱动器的名称和卷标。 目录列表框以目录树形式(分层缩进)显示当前目录的所有上级目录及下一级子目录。 文件列表框是一个特殊的ListBox控件,它以列表形式显示当前目录中的所有文件名,并可选择按文件名、扩展名或属性排列内容。 这些控件通常在一个窗体中工作,程序设计时必须保持三者之间的同步关系。当用户在驱动器列表框 (DriveListBox)中选择一个驱动器时,DirListBox控件就更新显示该驱动器上的目录树。当用户在目录列表框(DirListBox)中选择一条路径时,文件列表框(FileListBox)控件中的内容为该目录下的文件列表。这些活动自动地触发Change事件。但这些活动不能自动完成,需要为Change事件编写代码。 本案例程序中,改变当前驱动器时将触发drvFile_Change()事件,改变当前目录时将触发 dirFile_Change()事件。在drvFile_Change()事件过程中,需要通过代码将驱动器列表框的Drive属性(指明当前驱动器)赋值给目录列表框的Path属性,即(2)空缺处所选择的语句是选项B的“dirFile.Path= drvFile.Drive”,使目录列表框中显示当前驱动器上所有的一级目录。在dirFile_Change()事件过程中,需要将目录列表框的Path属性(指明当前路径)赋值给文件列表框的Path属性,即(3)空缺处所选择的语句是选项E的“filFile.Path=dirFile.Path”,从而使驱动器列表框、目录列表框和文件列表框的显示内容保持一致(同步)。 由于本案例程序是一个图片浏览器,应限制用户只能选择图形文件,因此需要通过组合框指定所要浏览的图片类型,使得文件列表框中只显示出所指定类型的相应文件。当用户更改文件类型组合框中的文件类型值时将触发cboFile Click()事件。 根据图3-19的显示结果可知,该图片浏览器支持包含*.bmp、*.ico、*.wmf、*.jpg及*.gif等多种文件类型。要将同一个表达式与不同的值进行比较,则需要用到“Select...Case”条件选择语句,即在 cboFile_Click()事件中,需要通过Select Case语句为文件列表框指定相应的filFile.Pattern属性值。其中, filFile.Pattern属性用于指定文件列表框中所显示的义件类型。因此(4)空缺处所选择的语句是选项G的“Select Case cboFile.Listlndex”。 由于在窗体Form_Load()过程中,通过语句“cboFile.Listlndex=0”间接要求在文件列表框中只显示出后缀为*.bmp的文件名,即(1)空缺处所选择的语句是选项D的filFile.Pattern= *.bmp 。 在filFile_Click()事件过程中,应判断文件所在目录是否为根目录,即(5)空缺处所选择的语句是选项C的Right(filFile.Path,1)= 。其中,filFile.Path属性用于说明所选文件的路径(目录)。如果文件所在目录是根目录,则直接通过语句“imgShow.Picture=LoadPicture(filFile.Path+filFile.FileName)”,在图像框中显示出相应的图片。其中,filFile.FileName属性用于说明所选文件的文件名。如果文件所在目录不是根目录,则需要通过语句“imgShow.Picture=LoadPicture(filFile.Path+ +filFile.FileName)”在图像框中显示出相应的图片。因此(6)空缺处所选择的语句是选项A的“filFile.Path”,(7)空缺处所选择的语句是选项F的 filFile.FileName 。