C语言作业.docx

上传人:b****7 文档编号:23328554 上传时间:2023-05-16 格式:DOCX 页数:15 大小:21.58KB
下载 相关 举报
C语言作业.docx_第1页
第1页 / 共15页
C语言作业.docx_第2页
第2页 / 共15页
C语言作业.docx_第3页
第3页 / 共15页
C语言作业.docx_第4页
第4页 / 共15页
C语言作业.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言作业.docx

《C语言作业.docx》由会员分享,可在线阅读,更多相关《C语言作业.docx(15页珍藏版)》请在冰豆网上搜索。

C语言作业.docx

C语言作业

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/折扣:

我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。

譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。

因此只要选择合适的进制,12和5就可以是相等的。

求出分别在2~36哪种进制下M和N相等。

若相等则输出相应的进制,若不等则输出错误信息。

当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。

信息的格式见测试用例。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.125

1.12(base3)=5(base6)

1秒

64M

0

测试用例2

1.123456

1.123isnotequalto456inanybase2..36

1秒

64M

0

测试用例3

1.10A

1.10(base10)=A(base11)

1秒

64M

0

测试用例4

1.12456

1.12isnotequalto456inanybase2..36

1秒

64M

0

#defineN50

#include""

#include""

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/折扣:

输入:

菱型起始字母和菱形的高度。

输出:

参看测试用例,打印空心的由字符组成的菱形。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.C4

1.C

2.DD

3.EE

4.FF

5.EE

6.DD

7.C

1秒

64M

0

#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/折扣:

这是非信息类今年出的题目,大家来看看,你会做吗

输入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.323

3.32123

4.323

5.3

无限制

64M

0

测试用例1

1.1

1.1

1秒

64M

0

测试用例2

1.2

1.2

2.212

3.2

无限制

64M

0

1.#include<>

2.intmain()

3.{inti,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,输入结束。

输出

列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.30003020

2.60406090

3.00

1.3012301430163018

2.counter=4

3.6042604860526054605860726074607860826084

4.counter=10

无限制

64M

0

测试用例2

1.9101

2.87-1

3.00

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/折扣:

有如下一组数字,其中每个数字都在1~63之间,

13579111315171921232527293133353739414345474951535557596163

236710111415181922232627303134353839424346475051545558596263

456712131415202122232829303136373839444546475253545560616263

89101112131415242526272829303140414243444546475657585960616263

1617181920212223242526272829303148495051525354555657585960616263

3233343536373839404142434445464748495051525354555657585960616263

现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。

输入:

程序的输入是一串以空白符分开的数字,当输入0时表示输入结束。

输出:

输出猜到的数字。

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.120

1.3

1秒

64M

0

测试用例2

1.210

1.3

1秒

64M

0

测试用例3

1.240

1.10

1秒

64M

0

允许迟交:

1.#include<>

2.#include<>

3.intmain()

4.{

5.inti,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.return0;

14.}

H4:

小蜜蜂(选作)

成绩:

5/折扣:

一只小蜜蜂在如下图所示的蜂窝上爬行。

它爬行时,只能从一个格爬到相邻的大号格子中。

例如,从1号格子可以爬到2号或者3号格子,从2号则可以爬到3号或者4号格子。

请问从一个格子a爬到一个格子b一共有多少种可行的路线。

输入:

分别是起始点a和终止点b的编号。

(a和b在1~100之间,且a

输出:

测试输入

期待的输出

时间限制

内存限制

额外进程

测试用例1

1.14

1.3

1秒

64M

0

测试用例2

1.15

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[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模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1