C语言作业2.docx
- 文档编号:11141844
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:17
- 大小:31.45KB
C语言作业2.docx
《C语言作业2.docx》由会员分享,可在线阅读,更多相关《C语言作业2.docx(17页珍藏版)》请在冰豆网上搜索。
C语言作业2
H1:
计算通用产品代码(UPC)的校验位(选作)
许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。
这种被称为通用产品代码(UniversalProductCode,缩写UPC)的条码可以识别生产商和产品。
超市可以通过扫描产品上的条码来确定支付此项商品的费用。
每一个条码由十二位数字构成,通常这些数字会显示在条码下面。
例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:
024600010030
第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。
接下来的一组五位数字用来识别生产商。
而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。
最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。
如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。
下面是一种计算校验位的方法:
首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。
然后把第二位、第四位、第六位、第八位和第十位数字相加。
接着把第一次加法结果乘以3后再加上第二次加法的结果。
随后,再把上述结果减去1。
减法后的结果除以10取余数。
最后,用9减去上一步骤中得到的余数。
现在以Morton碘盐为例,第一组数字的加法是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
以文本方式显示
1.0↵
2.24600↵
3.01003↵
以文本方式显示
1.0↵
1秒
64M
0
解法:
#include
main()
{
inta,b,c,q,e,f,g,h,i,j,k,m,n,p,x,y,z;
scanf("%1d",&a);
scanf("%1d%1d%1d%1d%1d",&b,&c,&q,&e,&f);
scanf("%1d%1d%1d%1d%1d",&g,&h,&i,&j,&k);
x=a+c+e+g+i+k;
y=b+q+f+h+j;
m=x*3+y;
n=m-1;
z=n%10;
p=9-z;
printf("%d\n",p);
}
H2:
数制转换(选作)
成绩:
5/折扣:
0.8
我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。
这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。
譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。
因此只要选择合适的进制,12和5就可以是相等的。
程序的输入是两个数字M和N(其十进制的值不超过1000000000),它们的进制在2~36之间。
对于十以下的数字,用0~9表示,而十以上的数字,则使用大写的A~Z表示。
求出分别在2~36哪种进制下M和N相等。
若相等则输出相应的进制,若不等则输出错误信息。
当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。
信息的格式见测试用例。
测试输入
期待的输出
时间限制
内存限制
额外进程
测试用例1
以文本方式显示
1.12 5↵
以文本方式显示
1.12 (base 3) = 5 (base 6)↵
1秒
64M
0
测试用例2
以文本方式显示
1.123 456↵
以文本方式显示
1.123 is not equal to 456 in any base 2..36↵
1秒
64M
0
测试用例3
以文本方式显示
1.10 A↵
以文本方式显示
1.10 (base 10) = A (base 11)↵
1秒
64M
0
测试用例4
以文本方式显示
1.12 456↵
以文本方式显示
1.12 is not equal to 456 in any base 2..36↵
1秒
64M
0
#defineN50
#include"string.h"
#include"stdio.h"
main()
{chara[N],b[N],d[N],e[N],d0[N];
inti,j,o,r,g,h,w,t,l,k,max1,max2;
doublep[N],q[N]={0},u[N],v[N]={0},c[N],f[N],m,n;
for(i=0;i {scanf("%c",&a[i]); if(a[i]=='\x20') {l=i;break; }} gets(d); if(d[0]! ='\x20') {k=strlen(d); gotoC;} if(d[0]=='\x20') {strcpy(d0,d); g=strlen(d0); for(i=0;d0[i]=='\x20';i++); j=i; for(i=0;i k=g-j;} C: for(i=0;i {b[i]=a[l-i-1]; if(b[i]<='\x39'&&b[i]>='\x30')c[i]=b[i]-'0'; if(b[i]<='\x5A'&&b[i]>='\x41')c[i]=b[i]-'7';} for(i=0;i {e[i]=d[k-i-1]; if(e[i]<='\x39'&&e[i]>='\x30')f[i]=e[i]-'0'; if(e[i]<='\x5A'&&e[i]>='\x41')f[i]=e[i]-'7';} max1=c[0]; for(i=1;i {if(max1 if(max1==0)max1=1; max2=f[0]; for(i=1;i {if(max2 if(max2==0)max2=1; for(i=max1+1;i<=36;i++) {for(j=0;j {m=c[j]; for(g=0;g {m=m*i;} q[i]=q[i]+m; }} for(i=max2+1;i<=36;i++) {for(j=0;j {n=f[j]; for(g=0;g {n=n*i;} v[i]=v[i]+n;}} for(g=max1+1;g<=36;g++) for(h=max2+1;h<=36;h++) {if(q[g]==v[h]) {w=g,t=h; gotoout; } }for(i=0;i printf("isnotequalto"); for(i=0;i printf("inanybase2..36\n"); gotoouts; out: for(i=0;i printf("(base%d)=",w); for(i=0;i printf("(base%d)\n",t); outs: ;} 16.空心字符菱形 成绩: 5/折扣: 0.8 输入: 菱型起始字母和菱形的高度。 输出: 参看测试用例,打印空心的由字符组成的菱形。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.C 4↵ 以文本方式显示 1. C↵ 2. D D↵ 1秒 64M 0 3. E E↵ 4.F F↵ 5. E E↵ 6. D D↵ 7. C↵ #include voidmain() { charletter; inti,j,k,l,n; scanf("%c%d",&letter,&n); for(i=0;i { if(i==0) {for(j=0;j elseif(i>0) { for(j=0;j printf("%c",letter+i); for(j=0;j<2*i-1;j++)printf(""); printf("%c",letter+i); } printf("\n"); } for(i=n-2;i>=0;i--) { if(i==0) {for(j=0;j elseif(i>0) { for(j=0;j printf("%c",letter+i); for(j=0;j<2*i-1;j++)printf(""); printf("%c",letter+i); } printf("\n"); } } 17.数字菱形 成绩: 5/折扣: 0.8 这是非信息类今年出的题目,大家来看看,你会做吗? 输入n的值,输出如下例(n=4)所示的数字菱形。 4 434 43234 4321234 43234 434 4 输入: n 输出: 数字菱形 友情提示: 同学们总结一下打印星号组成的实心图形程序的编程思路: 第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。 现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将printf("*");改为printf("%2d",x);当然,原来输出一个*号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是%3d或%4d了。 x是多少呢? 则要寻找其规律,就是该输出位置与所在行列的关系。 注意给出的测试用例,输出的数字是左对齐啊。 不用数组就可以完成。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例3 以文本方式显示 1.3↵ 以文本方式显示 1. 3 ↵ 2. 3 2 3 ↵ 3.3 2 1 2 3 ↵ 4. 3 2 3 ↵ 5. 3 ↵ 无限制 64M 0 测试用例1 以文本方式显示 1.1↵ 以文本方式显示 1.1 ↵ 1秒 64M 0 测试用例2 以文本方式显示 以文本方式显示 无限制 64M 0 1.2↵ 1. 2 ↵ 2.2 1 2 ↵ 3. 2 ↵ 1.#include 2.int main() 3. {int i,j,k,n,t; 4. scanf("%d",&n); 5. for(i=1;i<=n;i++) 6. {for(j=1;j<=n+i-1;j++) 7. {if(j<=n-i) printf(" "); 8. else 9. {for(k=n;k>=n-i+1;k--,j++) printf("%-2d",k); 10. for(k=n-i+2;k<=n;k++,j++) printf("%-2d",k);} 11. } 12. printf("\n");} 13. for(i=n+1;i<=2*n-1;i++) 14. {for(j=1;j<=3*n-i-1;j++) 15. {if(j<=i-n) printf(" "); 16. else 17. {for(t=n;t>=i-n+1;t--,j++) printf("%-2d",t); 18. for(t=i-n+2;t<=n;t++,j++) printf("%-2d",t);} 19. } 20. printf("\n");} 21. } 18.寻找特殊偶数 成绩: 5/折扣: 0.8 背景 有一种特殊偶数,它每一位上的数字都两两不相同。 我们现在需要找出四位数中某一区间内的这类偶数。 输入 所要寻找的四位偶数的范围。 每组输入有两个数字: 第一个数字是最小范围;第二个数字是最大范围。 如果输入遇到0,输入结束。 输出 列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.3000 3020↵ 2.6040 6090↵ 3.0 0↵ 以文本方式显示 1.3012 3014 3016 3018 ↵ 2.counter=4↵ 3.6042 6048 6052 6054 6058 6072 6074 6078 6082 6084 ↵ 4.counter=10↵ 无限制 64M 0 测试用例2 以文本方式显示 1.9 101↵ 2.87 -1↵ 3.0 0↵ 以文本方式显示 1.Error↵ 2.Error↵ 无限制 64M 0 #include #include main() { inti,j,k,a,b,c,d,m=0,e; for(e=0;e>=0;e++) {scanf("%d%d",&i,&j); if((i==0)||(j==0))break; elseif((i>9999||i<1000)||(j>9999||j<1000))printf("Error\n"); else{for(k=i;k<=j;k++) {if(k%2==1)continue; a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10; if((((a==b)||(b==c))||(c==d))||((d==a)||((a==c)||(d==b))))continue; printf("%d",k);m+=1;} printf("\ncounter=%d\n",m);m=0;}} } H3: 猜数字(选作) 成绩: 5/折扣: 0.8 有如下一组数字,其中每个数字都在1~63之间, 1 3 5 7 9111315171921232527293133353739414345474951535557596163 2 3 6 710111415181922232627303134353839424346475051545558596263 4 5 6 712131415202122232829303136373839444546475253545560616263 8 9101112131415242526272829303140414243444546475657585960616263 1617181920212223242526272829303148495051525354555657585960616263 3233343536373839404142434445464748495051525354555657585960616263 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。 输入: 程序的输入是一串以空白符分开的数字,当输入0时表示输入结束。 输出: 输出猜到的数字。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.1 2 0↵ 以文本方式显示 1.3↵ 1秒 64M 0 测试用例2 以文本方式显示 1.2 1 0↵ 以文本方式显示 1.3↵ 1秒 64M 0 测试用例3 以文本方式显示 1.2 4 0↵ 以文本方式显示 1.10↵ 1秒 64M 0 允许迟交: 是 1.#include 2.#include 3.int main() 4.{ 5.int i,n=0; 6.while (1) 7.{ 8.scanf("%d",&i); 9.if(i==0)break; 10.n+=pow(2,i-1); 11.} 12.printf("%d\n",n); 13.return 0; 14.} H4: 小蜜蜂(选作) 成绩: 5/折扣: 0.8 一只小蜜蜂在如下图所示的蜂窝上爬行。 它爬行时,只能从一个格爬到相邻的大号格子中。 例如,从1号格子可以爬到2号或者3号格子,从2号则可以爬到3号或者4号格子。 请问从一个格子a爬到一个格子b一共有多少种可行的路线。 输入: 分别是起始点a和终止点b的编号。 (a和b在1~100之间,且a ) 输出: 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例1 以文本方式显示 1.1 4↵ 以文本方式显示 1.3↵ 1秒 64M 0 测试用例2 以文本方式显示 1.1 5↵ 以文本方式显示 1.5↵ 1秒 64M 0 #include #defineN3 intmain() { inta,b,i,k;longc[N]={0,0,0},d[N]={1,0,0},e[N]={0,0,0}; scanf("%d%d",&a,&b); for(;a {for(i=0;i {e[i]=c[i]+d[i]; c[i]=d[i]; d[i]=e[i];} for(k=0;k if(d[k]>=100000000) {d[k+1]+=d[k]/100000000; d[k]%=100000000;} } if(d[2]>0)printf("%d%08d%08d\n",d[2],d[1],d[0]); elseif(d[1]>0)printf("%d%08d\n",d[1],d[0]); elseprintf("%d\n",d[0]); return0; } 如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 作业