收藏 分享(赏)

北理工C语言编程网上作业答案.doc

上传人:精品资料 文档编号:8509037 上传时间:2019-06-30 格式:DOC 页数:25 大小:66.70KB
下载 相关 举报
北理工C语言编程网上作业答案.doc_第1页
第1页 / 共25页
北理工C语言编程网上作业答案.doc_第2页
第2页 / 共25页
北理工C语言编程网上作业答案.doc_第3页
第3页 / 共25页
北理工C语言编程网上作业答案.doc_第4页
第4页 / 共25页
北理工C语言编程网上作业答案.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、H1:计算通用产品代码(UPC) 的校验位(选作)成绩: 5 / 折扣: 0.8背景许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写 UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为 26 盎司的 Morton 牌碘化盐所用条码下的数字是:0 24600 01003 0第一个数字表示商品的种类(0 表示大部分的食品杂货,2 表示需要称量的货品,3 表示药品或和健康相关的商品,而 5 表示优惠券)。接

2、下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位” ,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以 3 后再加上第二次加法的结果。随后,再把上述结果减去 1。减法后的结果除以 10 取余数。最后,用 9 减去上一步骤中得到的余数。现在以 Morton 碘盐为例,第一组数字的加法是

3、0+4+0+0+0+3=7,而第二组数字的加法是 2+6+0+1+0=9。把第一组加法值乘以 3 后再加上第二组加法值得到的结果是 30。再减去 1,结果变为 29。再把这个值除以 10 取余数为 9。9 在减去余数结果 9,最终值为 0。输入每次输入三行数据,第一行是 UPC 的第一位数字,第二行是 UPC 的第一组五位数字,第三行是 UPC 的第二组五位数字。输出UPC 的校验位提示本题有隐藏测试用例。如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。1. #include 2. main() 3. 4. int a,b,c; 5. int b1,b2,b3,b4,b

4、5; 6. int c1,c2,c3,c4,c5; 7. int d1,d2,d3,d4; 8. scanf(“%dn%dn%d“, 9. b1=b/10000,b2=(b/1000)%10,b3=(b/100)%10,b4=(b/10)%10,b5=b%10; 10.c1=c/10000,c2=(c/1000)%10,c3=(c/100)%10,c4=(c/10)%10,c5=c%10; 11.d1=a+b2+b4+c1+c3+c5,d2=b1+b3+b5+c2+c4,d3=(3*d1+d2-1)%10,d4=9-d3; 12.printf(“%dn“,d4); 13. H2:数制转换(选作

5、)成绩: 5 / 折扣: 0.8我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进

6、制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。21. 零钱换整钱成绩: 5 / 折扣: 0.8小明手中有一堆硬币,小红手中有若干张 10 元的整钱。已知 1 角的硬币厚度为 1.8mm,5 角的硬币厚 1.5mm, 1 元的硬币为 2.0mm 。小明和小红一起玩游戏,小红拿出若干张 10 元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。输入

7、: 小红希望交换几张 10 元的纸币输出: 1 角的数量,5 角的数量,1 元的数量1. #include 2. main() 3. 4. int n,a,b,c,s,j=0; 5. scanf(“%d“, 6. for(a=1;a 2. main() 3. 4. int a,b,c,M,N,s; 5. scanf(“%d%d“, 6. for(a=1;amain()int a10=0,i,max=0;for(i=0;i 2. main() 3. 4. int a,b,counter,i,number1,number2,number3,number4; 5. do 6. 7. scanf(“%

8、d%d“, 8. if(a=0) 10.if(a=b) printf(“Errorn“); 11.else 12. 13.if(a 2. int main() 3. 4. int op=0; 5. int max=0; 6. int min=99; 7. int mark=0; 8. int n1=-1,n2=-1,n=0; 9. for(;1;) 10. 11.char c; 12.scanf(“%c“, 13.if(c=,) 14. 15.if(mark=1) 16.n=n1; 17.else if(mark=2) 18.n=n1*10+n2; 19.if(nmax) 20.max=n;

9、21.if(n=0) 40. 41.if(mark=0) 42.n1=c-0;mark=1; 43.else if(mark=1) 44.n2=c-0;mark=2; 45.46. 47. 48.switch (op) 49. 50.case 1: 51. 52.printf(“%d + %d = %dn“,max,min,max+min); 53.break; 54. 55.case 2: 56. 57.printf(“%d - %d = %dn“,max,min,max-min); 58.break; 59. 60.case 3: 61. 62.printf(“%d * %d = %dn“

10、,max,min,max*min); 63.break; 64. 65.case 4: 66. 67.if(min=0) 68.printf(“Error!n“); 69.else 70. 71.printf(“%d / %d = %dn“,max,min,max/min); 72. 73.break; 74. 75.case 5: 76. 77.if(min=0) 78.printf(“Error!n“); 79.else 80. 81.printf(“%d % %d = %dn“,max,min,max%min); 82. 83.break; 84. 85. 86. 27 等值数列段成绩:

11、 10 / 折扣: 0.8如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由 N 个元素组成的整数数列 A(其中 N 2. int main() 3. 4.5. for(;1;) 6. 7. int num50=0; 8. int n=0; 9.10.scanf(“%d“, 11.for(int i=0;icount) 27.b=a;count=counttemp; 28.continue; 29. 30.else 31. 32.counttemp=1; 33. 34.35. 36.if(a=-1) 37. pri

12、ntf(“No equal number list.n“);break; 38.else 39.printf(“The longest equal number list is from %d to %d.n“,b+1-count,b); break; 40. 41. 28 大家一起做游戏成绩: 15 / 折扣: 0.8幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下

13、的那位。现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。输入:小朋友的个数( 2. void main() 3. 4. int N,n,i,s=0,a; 5. scanf(“%d %dn“, 6. for(i=2;i 2. #include 3. int main() 4. 5. char a100000,c; 6. int i,j,k; 7. scanf(“%s“, 8. i=strlen(a); 9. for(j=0;j 2.3. #include 4.5. int alread_saved(char lastchar, char newstr, i

14、nt j) 6.7. 8.9. int i=0; 10.11.while(i 2.3. #include 4.5. void MergeList(char str1,char str2,char str3); 6.7. void main() 8.9. 10.char str1100; char str2100; char str3100; gets(str1); gets(str2); 11.12.MergeList(str1,str2,str3); 13.14.printf(“%sn“,str3); 15.16. 17.18.void MergeList(char str1,char st

15、r2,char str3) 19.20. 21.22.int i,j,k; 23.24.i=0;j=0;k=0; 25.int lengthOfStr1,lengthOfStr2; lengthOfStr1=strlen(str1); lengthOfStr2=strlen(str2); 26.while(i 2. #include 3. int main() 4. 5. char a80; 6. char b80; 7. gets(a); 8. gets(b); 9.10.int l=strlen(a); 11.12.for(int i=0;bi!=0;i+) 13. 14.for(int

16、j=0;j 2.3.4. int main() 5. 6. int dragon,hero; 7. scanf(“%d%d“, 8. int dragonhead100=0; 9. int herohight100=0; 10./input 11.for(int i=0;idragonheadj+1) 22. 23.temp=dragonheadj; 24.dragonheadj=dragonheadj+1; 25.dragonheadj+1=temp; 26. 27. 28. 29.30.for(int i=0;iherohightj+1) 35. 36.temp=herohightj; 3

17、7.herohightj=herohightj+1; 38.herohightj+1=temp; 39. 40. 41. 42.43./arrange hero to kill the dragon 44.int start=0; 45.for(int i=0;i=dragonheadi) 50. 51.dragonheadi=0; 52.start+; 53.break; 54. 55.else 56. 57.herohightj=0; 58.start+; 59. 60. 61.if (starthero) 62.break; 63. 64.for(int i=start;i 2. int

18、 sum(int n,int m) 3. 4. return n=m?n:sum(n,m-1)+m; 5. 6. int main() 7. int n,m; 8. scanf(“%d%d“, 9. printf(“The sum from %d to %d is %d.n“,n,m,sum(n,m); 10.return 0; 11. 36 科学记数法成绩: 10 / 折扣: 0.8对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3106 (计算机中的科学记数法表示为:2.3E6 ),或者 9.1810-5 (科学记树法表示:9.18E-5)这种

19、类型的数据。 输入:用科学记数法表示的数据。即为符合 C 语言表示的科学记数法表示。输出:该数据的双精度表示说明:输入数据的精度不高于小数点后 50 位。输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。结果保留到小数点后 8 位,如不足 8 位用 0 补足,超过 8 位则截断,不进行四舍五入的处理。1. #include “stdio.h“ 2. int main() 3. 4. int p=-1,n,i=0,j,sign=0,flag=0;char c,s100; 5. while(scanf(“%c“, 7. else if(c=0)si=c,i+; 8. else if(c=-)

20、sign=1; 9. else if(p 2. void main() 3. int n,i; 4. scanf(“%d“, 5. for(i=2;n1;) 6. if(n%i=0) 7. printf(“%dn“,i);n/=i; 8. 9. else i+; 10. 11. 38 回文字符串递归成绩: 5 / 折扣: 0.8有一种特殊形式的字符串,其正反序相同,被称为“回文字符串” 。例如 LeveL 就是一个回文字符串。输入:字符串输出:Yes 或者 No说明:如输出 Yes,说明输入的字符串是一个回文字符串输出 No,说明输入的字符串不是一个回文字符串请使用递归算法实现。1. #inc

21、lude 2. #include 3. int fun(char str,int a,int b) 4. 5. if(stra!=strb) return 0 ; 6. else if(a=b|a+1=b 7. else if(stra=strb) return 1 8. 9. void main() 10.char str100; scanf(“%s“,str); int n; n=strlen(str); 11.switch(fun(str,0,n-1) 12. 13.case 1:printf(“Yesn“);break; 14.case 0:printf(“Non“);break; 1

22、5. 16. 39 求最大公约数 递归成绩: 5 / 折扣: 0.8请使用递归算法计算正整数 n 和 m 的最大公约数 GCD(n,m)。= m 当 m 2. int gcd(int m,int n) 3. int r; 4. r=m%n; 5. return r=0?n:gcd(n,r); 6. 7. int main() 8. int m,n; 9. scanf(“%d%d“, 10.printf(“%dn“,gcd(m,n); 11.return 0; 12. 40 求序列之和递归成绩: 5 / 折扣: 0.8请使用递归算法求下列序列的前 n 项之和。1 + 1/2 - 1/3 + 1/

23、4 -1/5 输入:n输出:序列的前 n 项和(精确到小数点之后第 6 位)1. #include“stdio.h“ 2. int main() 3. int n; 4. double SUM(int); 5. scanf(“%d“, 6. n=1?printf(“1n“):printf(“%lfn“,SUM(n); 7. return 0; 8. 9. double SUM(int n) 10.if(n=2) return 1+1.0/n; 11.else if(n%2) return -1.0/n+SUM(n-1); 12.else return SUM(n-1)+1.0/n; 13. 4

24、4. 函数递归成绩: 10 / 折扣: 0.8编写一个函数,使用递归算法求满足下述定义的整数序列的第 n 项。1 当 n = 0 且 n 4 且 n 为偶数 时 f(n-2) + f(n-4) 当 n 4 且 n 为奇数 时 -1 其他 函数原型如下:int findf(int n);参数说明:n 项数;返回值是第 n 项值。例如输入:10,输出:8 预设代码前置代码view plaincopy to clipboardprint?1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ 2.3. #include 4.5. int main() 6. int n,s, findf( int ); 7. scanf(“%d“, 8. s = findf(n); 9. printf(“%dn“, s); 10.return 0; 11. 12.13./* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 1. int findf(int n) 2. 3. int i; 4. if(n=0 6. if(n4 7. if(n0) i=-1; 8. return i; 9.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报