北理C语言作业及答案2Word格式.docx

上传人:b****6 文档编号:19121780 上传时间:2023-01-04 格式:DOCX 页数:23 大小:47.57KB
下载 相关 举报
北理C语言作业及答案2Word格式.docx_第1页
第1页 / 共23页
北理C语言作业及答案2Word格式.docx_第2页
第2页 / 共23页
北理C语言作业及答案2Word格式.docx_第3页
第3页 / 共23页
北理C语言作业及答案2Word格式.docx_第4页
第4页 / 共23页
北理C语言作业及答案2Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

北理C语言作业及答案2Word格式.docx

《北理C语言作业及答案2Word格式.docx》由会员分享,可在线阅读,更多相关《北理C语言作业及答案2Word格式.docx(23页珍藏版)》请在冰豆网上搜索。

北理C语言作业及答案2Word格式.docx

%d"

a[i]);

=n-1;

b[i]);

if(m>

n)

printf("

bitisdoomed!

\n"

);

else

for(j=i;

j<

j++)

{if(a[i]>

a[j])

{t=a[i],a[i]=a[j],a[j]=t;

}}

{if(b[i]>

b[j])

{t=b[i],b[i]=b[j],b[j]=t;

t=0;

for(j=0;

if(a[i]<

=b[j])

{c[t]=b[j];

t++;

b[j]=0;

break;

}

if(t<

m)

printf("

else

{for(i=0;

=t;

s=s+c[i];

%d\n"

s);

35杀鸡用牛刀——要用递归啊!

5/折扣:

哈哈!

我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!

来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。

功能:

求整数n到m区间的累加和,其中n<

=m。

区间的起始点n区间的终止点m

累加和

要求:

使用递归算法完成。

如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。

1.110↵

1.Thesumfrom1to10is55.↵

1.1015↵

1.Thesumfrom10to15is75.↵

intsum(intm,intn)

inti;

if(n==m)

i=n;

i=n+sum(m,n-1);

return(i);

intm,n;

Thesumfrom%dto%dis%d.\n"

m,n,sum(m,n));

H13:

安全的密码(选做)

随着电子设备的广泛运用,密码也渐渐融入每个人的生活。

保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。

一个安全的密码,最好由大小写字母、数字或符号组成。

包含越多种类的字符,其安全性就越高。

同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。

并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。

任务

林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。

现在他向你求助,请你帮忙设计一个程序来解决这个问题。

应当按照以下的规则来判断密码是否安全:

1.如果密码长度小于6位,则不安全

2.如果组成密码的字符只有一类,则不安全

3.如果组成密码的字符有两类,则为中度安全

4.如果组成密码的字符有三类或以上,则为安全

通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。

输入

输入的第一行是一个整数N,表明后面有多少组密码。

随后的N行输入包括N个密码,每个密码的长度均小于20个字符。

输出

针对每一个密码判断并输出它是否安全。

对于不安全的密码输出"

NotSafe"

,对于中度安全的密码输出"

MediumSafe"

,对于安全的密码输出"

Safe"

输入样例

41234abcdefABC1231#c3Gh

输出样例

NotSafeNotSafeMediumSafeSafe

1.10↵

2.abcDEF↵

3.ABC↵

4.qw↵

5.`↵

6.ABCDEFGHIJKLMNOPQRST↵

7.4567890↵

8.1aB↵

9.1B↵

10.aX↵

11.qwe123%^&

ABC↵

1.MediumSafe↵

2.NotSafe↵

3.NotSafe↵

4.NotSafe↵

5.NotSafe↵

6.NotSafe↵

7.Safe↵

8.NotSafe↵

9.Safe↵

10.Safe↵

charcheck(chars[])

{

intstrlength;

strlength=strlen(s);

intn[4]={0,0,0,0};

intkind=0,i;

if(strlength<

6)return'

n'

;

.,16,先对前17位数字的权求和Ai:

表示第i位置上的身份证号码数字值Wi:

表示第i位置上的加权因子Wi:

7910584216379105842

(2)计算模

Y=mod(S,11)

(3)通过模得到对应的校验码

Y:

012345678910校验码:

10X98765432

四、举例如下:

北京市朝阳区:

1002X广东省汕头市:

440524

15位的身份证号升级办法:

15位的身份证号:

ddddddyymmddxxp

18位的身份证号:

ddddddyyyymmddxxpy

∙其中dddddd为地址码(省地县三级)

∙yyyymmddyymmdd为出生年月日

∙xx顺号类编码

∙p性别

15位的yy年升为18位后,变成19yy年,但对于百岁以上老人,则为18yy年,此时,他们的最后三位顺序码为996,997,998或999来标记。

输入

输入n组身份证号码,第一行为个数,以后每行为身份证号码。

输出

如果输入的身份证号码为15位,则将其升级为18位后显示输出;

否则判断其是否为合法身份证号,并逐行输出。

1.4↵

2.350622↵

3.1002X↵

4.02↵

5.96↵

1.Invalid↵

2.Valid↵

4.19965↵

voidshengji(charstr[])

intn=strlen(str);

S+WiS+Wi

1.

1.e-3↵

1.↵

测试用例3

1.e20↵

1.9.↵

测试用例4

1.1E0↵

测试用例6

1.E1↵

1.22.↵

#include"

"

intmain()

intp=-1,n,i=0,j,sign=0,flag=0;

charc,s[100];

while(scanf("

%c"

c)&

&

c!

='

e'

E'

if(c=='

.'

)p=i-1;

elseif(c<

9'

c>

0'

)s[i]=c,i++;

elseif(c=='

-'

)sign=1;

elseif(p<

0)p=i-1;

=60;

j++)

s[j]='

p+=n;

if(sign)printf("

-"

if(p<

0)

{

p=-p-1;

0."

for(i=1;

=p&

=8;

i++)

0"

=8-p;

s[i-1]);

}

else

i=0;

while(i<

=p)

if(s[i]=='

!

flag&

p)i++;

else{flag=1;

s[i++]);

}

."

for(j=1;

return0;

37大数分解

2007级在“计算机科学导论”的期末考试中有一道试题。

下面请你看看那题目应该如何编写。

从键盘输入的一个大于1的整数,通过算法将该整数分解为若干因子的乘积。

一个正整数。

分解后的各个因子。

1.24↵

1.2↵

2.2↵

3.2↵

4.3↵

1.17↵

1.15↵

1.3↵

#include<

voidmain()

{intn,i;

for(i=2;

n>

1;

){

if(n%i==0){

i);

n/=i;

elsei++;

38回文字符串——递归

有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。

例如LeveL就是一个回文字符串。

字符串

Yes或者No

说明:

如输出Yes,说明输入的字符串是一个回文字符串输出No,说明输入的字符串不是一个回文字符串请使用递归算法实现。

1.LeveL↵

1.Yes↵

intfun(charstr[],inta,intb)

if(str[a]!

=str[b])return0;

if(a==b||a+1==b&

str[a+1]==str[b])return1;

else

if(str[a]==str[b])return1&

fun(str,a+1,b-1);

charstr[100];

%s"

str);

intn;

n=strlen(str);

switch(fun(str,0,n-1))

case1:

Yes\n"

break;

case0:

No\n"

39求最大公约数——递归

请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。

=m当m<

=n且nmodm=0GCD(N,M)=GCD(m,n)当n<

m时=GCD(m,nmodm)其他

n和m

n和m的最大公约数

1.2448↵

1.1315↵

1.1↵

intgcd(intn,intm)

if(m<

=n&

n%m==0)

returnm;

if(n<

m)returngcd(m,n);

returngcd(m,n%m);

intn,m;

n,&

m);

gcd(n,m));

40求序列之和——递归

请使用递归算法求下列序列的前n项之和。

1+1/2-1/3+1/4-1/5......

n

序列的前n项和(精确到小数点之后第6位)

doublefun(intn)

if(n==1)return1;

if(n%2==0)returnfun(n-1)+n;

if(n%2==1)returnfun(n-1)n;

if(n==1)

printf("

1\n"

%\n"

fun(n));

42子串反向——递归

请编写一个递归函数reverse(charstr[],intstart,intend),该函数的功能是将串str中下标从start开始到end结束的字符颠倒顺序。

假设start和end都在合理的取值范围。

例如:

执行前:

str[]="

0123456"

start=1;

end=4

执行后:

strr[]="

0432156"

要求在该函数中不使用新的数组,没有循环。

注意:

只需要编写递归函数reverse,系统中已经设置好了main函数。

预设代码

前置代码

1./*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/

2.

3.#include<

4.intmain()

5.{charstr[100];

6.intstart,end;

7.gets(str);

8.scanf("

&

start,&

end);

9.reverse(str,start,end);

10.printf("

%s\n"

str);

11.return0;

12.}

13.

14./*PRESETCODEEND-NEVERTOUCHCODEABOVE*/

1.0123456↵

2.14↵

1.0432156↵

2.610↵

测试用例7

2.010↵

1.6543210↵

/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/

intmain()

{charstr[100];

intstart,end;

gets(str);

reverse(str,start,end);

/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/

voidreverse(charstr[],intstart,intend)

inti=start,j=end,p=0;

chartemporary;

while(str[p]!

\0'

p++;

if(start<

p&

end<

p)

for(;

=j;

i++,j--)

{

temporary=str[i];

str[i]=str[j];

str[j]=temporary;

}

elseif(start<

end>

=p)

{

j=p-1;

for(;

{

}

}

H17:

高精度加减法(选作)

计算机所能完成的一个基本功能就是完成数据的计算,譬如加法、减法等等。

但是在任何一种计算机上,计算中能够使用的数字都是有一定范围的,超过了范围,就没法得到精确的结果。

你现在接受了一个任务,要编写一个高精度计算器的核心部分。

所谓高精度计算器,就是可以计算很大很大的数据的计算器。

输入的第一行是一个正整数,表示下面有几组数据需要计算。

之后的每一行是两个十进制的正整数和一个运算符,每个整数可以由最多500个数字组成。

运算符可以是加号或者减号。

对应着输入的每一行数据,输出计算的结果,每个结果占一行。

2.213914+↵

3.-↵

2.9381691↵

2.48329+735123↵

3.-6↵

4.9+1↵

1.466354↵

2.↵

3.00↵

2.56789+56789↵

3.45555+44445↵

4.1+12345↵

5.12345+1↵

6.98765-98760↵

7.12345-9876↵

8.↵

9.↵

10.1-54321↵

11.0-0↵

12.0+0↵

1.113578↵

2.90000↵

3.12346↵

4.12346↵

5.5↵

6.2469↵

7.0↵

8.-1↵

9.-54320↵

10.0↵

11.0↵

intn=0,i=0,j=0,k=0,b=0;

chara[3][500]={0};

intn1=0,n2=0;

chars[500]={0};

intn3=0;

intc=0,c1=0;

inttemp=0;

charop;

charstr[1001]={0};

char*result;

result=(char*)malloc(501*n);

//根据输入的n申请内存空间

*result='

/*每次循环都要初始化*/

n;

{

//gets(str);

500;

a[0][j]='

a[1][j]='

a[2][j]='

str[j]='

str[1000-j]='

}

c=0;

c1=0;

k=0;

n1=0;

n2=0;

n3=0;

/*分离输入的字符串*/

str);

for(j=0;

str[j];

j++)

if(str[j]!

+'

&

str[j]!

a[k][j-n1]=str[j];

op=str[j];

k=1;

n1=strlen(a[0])+1;

}//forj

n1-=2;

n2=strlen(a[1])-1;

n3=n1>

n2?

n1:

n2;

/*计算加法*/

if(op=='

n1>

=0&

n2>

=0;

n1--,n2--,n3--)

temp=a[0][n1]+a[1][n2]-96;

temp+=c;

if(temp>

=10)

s[n3]=t

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

当前位置:首页 > PPT模板 > 可爱清新

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

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