下面是某校2021届转专业计算机科学与工程学院笔试试题。

ISBN是由13位数字组成,最后一位是校验码。如图,校验码的计算方法是:用1分别乘ISBN的前12位中的奇数位(从左边开始数起),用3分别乘以偶数位,乘积之和以10为模,10与模值的差值再对10取模(即取个位的数字)即可得到校验位的值,其值范围应该为0~9。如9787302272786,前12位的奇数位之和:

9+8+3+2+7+7=36;前12位的偶数位之和乘以3: (7+7+0+2+2+8) *3=78; (36+78) %10=4, 10-4=6,最后一位校验位为6。编写程序,完成以下功能:

(1)输入一个字符,判断该字符是否为数字字符。(20分)

(2)输入一个字符串,判断该字符串是否仅由13位数字字符组成。 (20分)

(3)输入一个由13位数字字符组成的字符串,计算校验码(10分)

(4)输入一个字符串,判断该字符串符合ISBN规范情况。(10分)

a)如果仅由13位数字字符组成,且校验码正确(即计算得到的校验码与字符串中的校验码相等),输出OK;

b)如果数字位数错误,或存在其他字符,输出Error1。

c)如果校验码不正确,输出Error2。

下面是Java代码示例:

public class Main {public static boolean isDigit(char c) {// 判断字符c是否在'0'到'9'之间return c >= '0' && c <= '9';}public static boolean isISBN(String str) {// 判断字符串的长度是否为13if (str.length() != 13) {return false;}// 遍历字符串的每一位,判断是否为数字字符for (int i = 0; i < 13; i++) {if (!isDigit(str.charAt(i))) {return false;}}// 如果字符串的所有位都是数字字符,就返回truereturn true;}public static int calculateCheckDigit(String str) {int sum = 0;for (int i = 0; i < 12; i++) {// 将字符串中的每一位转换为数字int digit = str.charAt(i) - '0';// 奇数位上的数字乘以1,偶数位上的数字乘以3sum += (i % 2 == 0) ? digit : digit * 3;}// 计算校验码int checkDigit = 10 - (sum % 10);return checkDigit % 10;}public static void checkISBN(String str) {// 判断字符串是否仅由13位数字字符组成if (!isISBN(str)) {System.out.println("Error1");// 退出函数return;}// 计算校验码int checkDigit = calculateCheckDigit(str);// 判断字符串的最后一位是否等于计算出的校验码if (str.charAt(12) - '0' != checkDigit) {System.out.println("Error2");} else {System.out.println("OK");}}public static void main(String[] args) {checkISBN("9787302272786");}
}

在这段代码中,我们定义了四个函数:

  • isDigit:判断一个字符是否为数字字符。它接收一个字符参数c,并返回一个布尔值,表示该字符是否为数字字符。函数的实现很简单,只需要使用ASCII码表中数字字符的范围(即'0'到'9')来判断该字符是否在范围内即可。如果c的ASCII码值在'0'到'9'之间(包含'0'和'9'),则返回true,否则返回false
  • isISBN:判断一个字符串是否仅由13位数字字符组成。它首先判断字符串的长度是否为13,如果不是,就直接返回false。然后遍历字符串的每一位,如果字符串的任意一位不是数字字符,就直接返回false。如果字符串的所有位都是数字字符,就返回true
  • calculateCheckDigit:计算ISBN的校验码。首先定义一个变量sum用于保存所有位的乘积之和。然后遍历字符串的前12位,将每一位转换为数字,并根据奇偶性乘以1或3。最后计算出校验码,并返回结果。
  • checkISBN:判断一个字符串是否符合ISBN规范。首先调用isISBN函数判断字符串是否仅由13位数字字符组成,如果不是,就输出"Error1"并退出函数。然后调用calculateCheckDigit函数计算出校验码。最后判断字符串的最后一位是否等于计算出的校验码,如果相等,就输出"OK";否则输出"Error2"。

main函数中,我们调用了checkISBN函数来检查ISBN字符串是否符合规范。

下面是C++代码示例:

#include <iostream>
#include <string>using namespace std;// 判断字符是否为数字字符
bool is_digit(char c) {// 判断字符c是否在'0'和'9'之间return c >= '0' && c <= '9';
}// 判断字符串是否仅由13位数字字符组成
bool is_valid_isbn(string isbn) {// 如果字符串长度不为13,则直接返回falseif (isbn.length() != 13) return false;// 遍历字符串中的每一个字符for (char c : isbn) {// 如果存在非数字字符,则返回falseif (!is_digit(c)) return false;}// 如果字符串中的所有字符都是数字字符,则返回truereturn true;
}// 计算ISBN校验码
char calculate_check_digit(string isbn) {int sum = 0;// 循环遍历字符串的前12位for (int i = 0; i < 12; i++) {// 计算当前字符的乘积,累加到sum中sum += (is_digit(isbn[i]) - '0') * (i % 2 == 0 ? 1 : 3);}// 计算校验码int check_digit = 10 - sum % 10;// 将校验码转化为字符,并返回return check_digit == 10 ? '0' : (char)(check_digit + '0');
}// 判断ISBN是否符合规范
void check_isbn(string isbn) {// 判断字符串是否仅由13位数字字符组成if (!is_valid_isbn(isbn)) {// 如果不是,则输出Error1cout << "Error1" << endl;return;}// 计算校验码char check_digit = calculate_check_digit(isbn);// 判断校验码是否正确if (check_digit == isbn[12]) {// 如果校验码正确,则输出OKcout << "OK" << endl;} else {// 如果校验码不正确,则输出Error2cout << "Error2" << endl;}
}int main() {// 输入ISBN字符串string isbn;cin >> isbn;// 判断ISBN是否符合规范check_isbn(isbn);return 0;
}

在上述代码中,我们定义了四个函数:

  • is_digit 函数用于判断一个字符是否为数字字符。它接受一个字符作为输入,并返回一个布尔值表示该字符是否是数字字符。
  • is_valid_isbn 函数用于判断一个字符串是否仅由13位数字字符组成。它接受一个字符串作为输入,并返回一个布尔值表示该字符串是否符合条件。
  • calculate_check_digit函数用于计算ISBN校验码。它接受一个字符串作为输入,并返回计算得到的校验码。
  • check_isbn 函数用于判断ISBN是否符合规范。它接受一个字符串作为输入,并根据给定的规则输出对应的结果。

在main 函数中,我们从输入流中读入一个字符串,并调用 `check_isbn` 函数来判断该字符串是否符合ISBN规范。

在运行时,程序会提示用户输入一个字符串,如果该字符串符合ISBN规范,则输出 "OK";如果数字位数错误或存在其他字符,则输出 "Error1";如果校验码不正确,则输出 "Error2"。

下面是Python代码示例:

def is_digit(c):return c.isdigit()# 输入一个字符,判断该字符是否为数字字符。
c = input('请输入一个字符:')
if is_digit(c):print('输入的字符是数字字符')
else:print('输入的字符不是数字字符')def is_13_digit_string(s):return len(s) == 13 and s.isdigit()# 输入一个字符串,判断该字符串是否仅由13位数字字符组成。
s = input('请输入一个字符串:')
if is_13_digit_string(s):print('输入的字符串仅由13位数字字符组成')
else:print('输入的字符串不仅由13位数字字符组成')def calculate_check_digit(s):# 计算前12位的奇数位之和odd_sum = sum(int(s[i]) for i in range(0, 12, 2))# 计算前12位的偶数位之和乘以3even_sum = sum(int(s[i]) for i in range(1, 12, 2)) * 3# 计算校验码check_digit = 10 - ((odd_sum + even_sum) % 10) % 10return check_digit# 输入一个由13位数字字符组成的字符串,计算校验码。
s = input('请输入一个由13位数字字符组成的字符串:')
check_digit = calculate_check_digit(s)
print(f'计算得到的校验码为 {check_digit}')def check_isbn(s):if len(s) != 13:return 'Error1'if not s.isdigit():return 'Error1'calculated_check_digit = calculate_check_digit(s)if int(s[-1]) != calculated_check_digit:return 'Error2'return 'OK'# 输入一个字符串,判断该字符串符合ISBN规范情况。
s = input('请输入一个字符串:')
result = check_isbn(s)
print(result)

上述代码中

  • 函数 is_digit 用于判断输入的字符是否为数字字符,函数接收一个字符作为参数,并返回布尔值。在函数内部,使用字符串的 isdigit 方法判断输入字符是否为数字字符。如果是,则返回 True;否则,返回 False
  • 函数 is_13_digit_string 用于判断输入的字符串是否仅由13位数字字符组成,函数接收一个字符串作为参数,并返回布尔值。在函数内部,首先判断输入字符串的长度是否为13位,然后使用字符串的 isdigit 方法判断输入字符串是否仅由数字字符组成。如果两个条件均满足,则返回 True;否则,返回 False
  • 函数 calculate_check_digit 用于计算校验码,函数接收一个字符串作为参数,并返回计算出的校验码。在函数内部,使用列表推导式计算前12位的奇数位之和,使用列表推导式计算前12位的偶数位之和并乘以3,然后使用上述给出的公式计算校验码。最后,将校验码作为函数的返回值返回。
  • 函数 check_isbn 用于判断输入的字符串是否符合ISBN规范,函数接收一个字符串作为参数,并返回 'OK'、'Error1' 或 'Error2' 三种可能的结果之一。在函数内部,首先判断输入字符串的长度是否为13位,如果不是则返回 'Error1'。然后判断输入字符串是否仅由数字字符组成,如果不是则返回 'Error1'。接着,调用函数 calculate_check_digit 计算输入字符串的校验码,并与字符串的最后一位进行比较。如果不相等,则返回 'Error2';否则,返回 'OK'。

国际标准书号 (International Standard Book Number, ISBN)是专门为识别图书等文献而设计的国际编号相关推荐

  1. ISBN是国际标准书号的简称,10位ISBN的最后一位为校验位python

    ISBN是国际标准书号的简称,10位ISBN的最后一位为校验位(由前9位计算得到),校验方法为,前9位数字从左到右分别与10到2相乘,然后求和,得到的和再对11进行整除,得到余数(即对11进行取模运算 ...

  2. 编程练习 P124 6.2 java国际标准书号ISBN是由13位数字组成,分为5段,如978-7-111-50690-4是一个合法的书号。编写程序,用户输入一个字符串书号,检查该书号是否合法。

    import java.util.Scanner;public class ISBNValidator {public static void main(String[] args) {Scanner ...

  3. 国际标准刊号,国内统一刊号,刊号的标准格式 分类

    国际标准刊号ISSN ,国内统一刊号CN (中国的简称) ISSN(国际标准连续出版物编号,International Standard Serial Number)是根据国际标准ISO3297制定的 ...

  4. 国际标准分类法ICS

    国际标准分类法(International ClassificationforStandards,简称ICS)是由国际标准化组织编制的标准文献分类法. 它主要用于国际标准.区域标准和国家标准以及相关标 ...

  5. 地区和语言的国际标准码

    最近在做国际化时,就想起要找下语言的国际标准码,花了自己不少时间,其实百科搜索关键字"ISO 639-1"就可以了,如果要搜索地区简称的国际标准码,则关键字是"ISO 3 ...

  6. 引进软件国际标准,培养高级软件人才

    引进软件国际标准,培养高级软件人才 --海淀园与IEEE-CS共同启动"千人百家软件工程国际标准测试"活动 4月18日,海淀园管委会在世纪金源大饭店举办"海淀园与IEEE ...

  7. RFID学习(二)国际标准

    如果你只是智能卡的用户,通常可以不必关注国际标准,但作为智能卡的专业开发人员,则至少也要对相关标准有所了解.国际标准一般都是西方人制定的,原版都是英文的,而所谓中文版往往是对原版的直译,许多情况下并未 ...

  8. C++0x完成最终草案国际标准(FDIS)

    C++0x完成最终草案国际标准(FDIS),剩下的应该就是等待ITTF和ISO的批准了. 原址:http://herbsutter.com/2011/03/25/we-have-fdis-trip-r ...

  9. 【2017年第4期】ISO/IEC JTC1/WG9大数据国际标准研究及对中国大数据标准化的影响...

    光亮1,张群2 1.华为技术有限公司,北京 100085:2. 中国电子技术标准化研究院,北京 100007 摘要:ISO/IEC JTC1/WG9是制定大数据基础性国际标准的官方组织,WG9在研的大 ...

最新文章

  1. vmware虚拟化(二)安装vsphere5.1
  2. dubbo官方文档中文_Pandas中文官方文档:基础用法5
  3. 企业对网站空间的抉择有可能影响着网站日常运营水平
  4. html做app的切换效果,Vue-router结合transition实现app动画切换效果实例分享
  5. 【转载】Gradle命令行黑魔法
  6. Linux iptables防火墙详解(二)——iptables基本配置
  7. autocad锐龙英特尔_4千左右预算,2020年CAD/SU/犀牛/Revit轻薄本推荐/选购指南
  8. BZOJ1059 [ZJOI2007]矩阵游戏
  9. 【华人学者风采】孙怡舟,加州大学洛杉矶分校
  10. 2018计算机cpu调研,2018最新电脑处理器天梯图,进来了解下
  11. mgo.v2无法连接MongoDB 5.0.x
  12. @Around环绕增强
  13. 特种设备制造许可证多少钱
  14. 【牛客】链表的回文结构
  15. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs初始化的一些样式处理
  16. fooview辅助功能 shell_列出所有Bash Shell内置命令的方法示例
  17. CTS fail 问题总结
  18. React第一次的笔记整理
  19. 如何正确学习并提高学习效率?
  20. 时变电磁场 工程电磁场 P24

热门文章

  1. 6.4.1 借贷账户信息
  2. Android Drawable设计圆角
  3. 2020秋招 C++软件开发/游戏开发 面试知识整理汇总
  4. 4.16Day21垃圾回收机制、re模块正则
  5. Vue视频播放组件(Video)
  6. solr整合paoding分词注意的一些细节
  7. 主宰互联网的超强10大算法!
  8. Verilog设计4位CLA加法器电路,并仿真测试
  9. AVR单片机与C语言的一些入门简要概述
  10. sn0int - 半自动化 OSINT 框架和包管理器