ISBN号由13位数字组成:前三位数字代表该出版物是图书(前缀号),中间的9个数字分为三组,分别表示组号、出版者号和书名号,最后一个数字是校验码。其中,前缀号由国际EAN提供,已经采用的前缀号为978和979;组号用以区别出版者国家、地区或者语言区,其长度可为1~5位;出版者号为各出版者的代码,其长度与出版者的计划出书量直接相关;书名号代表该出版者该出版物的特定版次;校验码采用模10加权的算法计算得出。
校验码的计算方法如下:
第一步:前12位数字中的奇数位数字用l相乘,偶数位数字用3相乘(位编号从左到右依次为13到2)。
第二步:将各乘积相加,求出总和S。
第三步:将总和S除以10,得出余数R。
第四步:将10减去余数R后即为校验码V。若相减后的数值为10,则校验码为0。
例如,对于ISBN号“978-7-5606-2348-1”,其校验码为1,计算过程为:
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
R=139mod 10=9
V=10-9=1
函数check(char code[])用来检查保存在code中的一个ISBN号的校验码是否正确,
若正确则返回true,否则返回false。例如,ISBN号“978-7-5606-2348-1”在code中的
存储布局如表3-1所示(书号的各组成部分之间用“-”分隔):
表3-1 数组code的内容示例
在函数check(char code[])中,先将13位ISBN号放在整型数组元素tarr[0]~tarr[12]中(如表3-2所示,对应ISBN号的位13~位1),由tarr[0]~tarr[11]计算出校验码放入变量V,再进行判断。
表3-2 数组tarr的内容示例
{
int i,k=0;
intS=0,temp=0;
int V;
int tarr[13]={0};
if (Strlen(code) <17} return falSe;
for(i=0; i<17; i++) /*将13位ISBN号存入tarr*/
if(code[i]!='-')
tarr (1)____ =code[i]-'0';
for(i=0; (2)_____ ; i++ ); {
if (i%2)
S+= (3)______ ;
else
S+= (4)______ ;
}
v=( (5)______ ==C)?0:10-s%10;
if(tart[12]==v)
return true ;
return false;
}
[主观题]阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]本程序实现对指定文件内的单词进行计数。其中使用二叉树结构来保存已经读入的不同单词,并对相同单词出现的次数进行计数。此二叉树的左孩子结点的字符串值小于父结点的字符串值,右孩子结点的字符串值大于父结点的字符串值。函数getword(char*filename,char*word)是从指定的文件中得到单词。char*strdup(char*S)是复制S所指向的字符串,并返回复制字符串的地址。[C程序]include <stdio
[试题]阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。(说明)实现矩阵(3行3列)的转置(即行列互换)。例如,输入下面的矩阵:100 200 300400 500 600700 800 900程序输出:100 400 700200 500 800300 600 900(函数)int fun(int array[3][3]){int i,j,t;for(i=0;(1);i++)for(j=0;(2);j++){t=array[i][j];(3);(4);}}}main(){int i,j
[主观题]阅读以下说明和C语言函数,将应填入(n)处的字句写在答题纸的对应栏内。[说明]求树的宽度,所谓宽度是指在二叉树的各层上,具有结点数最多的那一层的结点总数。本算法是按层次遍历二叉树,采用一个队列q,让根结点入队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。[函数]int Width ( BinTree *T{int front=-1, rear=-1; /*队列初始化*/int flag=0, count=0, p; /*p用于指向树中层的最右边的结点, flag 记录层中结点
[试题]阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。[说明]Kruskal算法是一种构造图的最小生成树的方法。设G为一无向连通图,令T是由G的顶点构成的于图,Kmskal算法的基本思想是为T添加适当的边使之成为最小生成树:初始时,T中的点互相不连通;考察G的边集E中的每条边,若它的两个顶点在T中不连通,则将此边添加到T中,同时合并其两顶点所在的连通分量,如此下去,当添加了n-1条边时,T的连通分量个数为1,T便是G的一棵最小生成树。下面的函数void Kruskal(EdgeType e
[主观题]阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。(函数2.1说明)函数palindrome(char s[])的功能是,判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。(函数2.1)int palindrome( char s[ ] ){ char * pi, * pj;pi=s; pj=s+strlen(s)-1;while( pi<pj&&
[试题]阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。(说明)函数DeleteNode(Bitree*r,inte)的功能是:在树根节点指针为r的二叉查找(排序)树上删除键值为e的节点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树节点的类型定义为:typedef struct Tnode{int data;/*节点的键值*/struct Tnode *Lchild,*Rchiid;/*指向左、右子树的指针*/}*Bitree;在二叉查找树上删除一个节点时,要考虑3种情况。①若待删
[试题]阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。(说明)函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:typedef struct Tnode{int data; /*结点的键值*/struct Tnode *Lchild, *Rchild; /*指向左、右子树的指针*/}*Bitree:在二叉查找树上删除一个结点时,要考虑3种
[试题]阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。(说明)某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8时所形成的文件如下:01011000100101001001100011111111000000000011100
[主观题]阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]如图所示的一圆圈上分布6个环,请在每个环中填一个数字,使得从任一环开始按顺时针所得的六位数与按逆时针所得的6位数都为素数。[函数]main ( ){int i, j, a, b, k;long m,m1,n,t,u,v;for ( n=100001;n<999999;n+2 ) /* n穷举所有 6位奇数*/{a=0;(1); /* 设 m 为一个顺转6 位数*/for ( i=1; i<=6; i++ ){t=-m/1000
[主观题]阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[函数2.1说明]将一个正整数分解质因数。例如:输入90,打印出90=2×3×3×5。[函数2.1]fun 1 ( int n ){int i;for ( i=2;i<=n; i++){while (((1)){if (n %i==0 ){ printf ( "%d*",i );(2)}elsebreak;}}printf ( "%d",n ) ;}[函数2.2说明]下面程序的功能是:海滩上有一堆桃子,5只猴子来分。第1只