PAT《C语言程序设计》题目集参考答案上.docx

上传人:b****6 文档编号:7908160 上传时间:2023-05-12 格式:DOCX 页数:12 大小:37.72KB
下载 相关 举报
PAT《C语言程序设计》题目集参考答案上.docx_第1页
第1页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第2页
第2页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第3页
第3页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第4页
第4页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第5页
第5页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第6页
第6页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第7页
第7页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第8页
第8页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第9页
第9页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第10页
第10页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第11页
第11页 / 共12页
PAT《C语言程序设计》题目集参考答案上.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

PAT《C语言程序设计》题目集参考答案上.docx

《PAT《C语言程序设计》题目集参考答案上.docx》由会员分享,可在线阅读,更多相关《PAT《C语言程序设计》题目集参考答案上.docx(12页珍藏版)》请在冰点文库上搜索。

PAT《C语言程序设计》题目集参考答案上.docx

PAT《C语言程序设计》题目集参考答案上

PAT浙大版(C语言程序设计

(第3版)》题目集参考答案

练习5-1求m至1Jn之和Q0分)1

练习5-2找两个数中最大者(10分)2

练习5-3数字金字塔(15分)2

习题5-1符号函数(10分)3

习题5-2使用函数求奇数和(15分)3

习题5-4使用函数求素数和(20分)4

习题5-5使用函数统计指定数字的个数(15分)..5

习题5-6使用函数输出水仙花数(20分)6

习题5-7使用函数求余弦函数的近似值(15分)..8

习题6-1分类统计字符个数(15分)8

习题6-2使用函数求特殊a串数列和(20分).......9习题6-3使用函数输出指定范围内的完数(20分)

10

习题6-4使用函数输出指定范围内的Fibonacci数

(20分)11

习题6-5使用函数验证哥德巴赫猜想(20分)….13

练习5-1求m到n之和(10分)

本题要求实现一个计算m~n(m

函数接口定义:

intsum(intm,intn);

其中m和n是用户传入的参数,保证有m

intsum(intm,intnX

inta=0;

while(m<=n){

a=m+a;

练习5-2找两个数中最大者(10分)

本题要求对两个整数a和b,输出其中较大的数。

函数接口定义:

intmax(inta,intb);

其中a和b是用户传入的参数,函数返回的是两者中较大的数,

intmax(intajntbXintc;

if(a>b)

c=a;

else

returnc;

练习5-3数字金字塔(15分)

本题要求实现函数输出n行数字金字塔。

函数接口定义:

voidpyramid(intn);

其中n是用户传入的参数,为[1,9]的正整数。

要求函数按照如样例所示的格式打印出n行数字金字塔。

意每个数字后面跟一个空格。

voidpyramid(intn){for(inti=l;i<=n;i++Xfor(intz=n-i;z>0;z--)printff”);

for(mtj=r,j<=i;j++Xprintf(^d",i);

printf("\n")

习题5-1符号函数QO分)

本题要求实现符号函数sign(x)o函数接口定义:

intsign(intx);

其中x是用户传入的整型参数。

符号函数的定义为:

若x大于0,sign(x)二1;若x等于

0,sign(x)=0;否则,sign(x)=-1。

intsign(intxX

inta;

if(x>0){if(x==OXa=0;

3

if(x<0){

0

I

returna;

习题5-2使用函数求奇数和(15分)

本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。

函数接口定义:

inteven(intn);

intOddSum(intListO,intN);

其中函数even将根据用户传入的参数n的奇偶性返回相应值:

当n为偶数时返回1,否则返回0o函数OddSum负责计算并返回传入的N个整数List口中所有奇数的和。

inteven(intnXinta:

if(nW2==OXelseif(n%2!

=0)

a=0;

returna:

g

intOddSum(intListQ,intN){intsum=0;

for(inti=0;i

if(List[i]H2!

=O)sum=Listfi]+sumreturnsum

习题5-3使用函数计算两点间的距离(10分)

本题要求实现一个函数,对给定平面任意两点坐标(xl,yl)和(x2,y2),求这两点之间的距离。

函数接口定义:

doubledist(doublexl,doubleyl,doublex2,doubley2);

其中用户传入的参数为平面上两个点的坐标(xLyl)和仅2,y2),函数dist应返回两点间的距离。

doubledist(doublexl,doubleyl,doublex2,doubley2X

doublem;

m二sqrt((xl-x2)*(xl-x2)+(yl-y2)*(yl-y2));

returnm;

习题5-4使用函数求素数和(20分)

本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。

素数就是只能被1和自身整除的正整数。

注意:

1不是素数,2是素数。

函数接口定义:

intprime(intp);

intPrimeSum(intm,intn);

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m,n]内所有素数的和。

题目保证用户传入的参数mWn。

intprime(intp)

{

if(P<=lX

return0;

}e>seif(p==2X

return1;

}dse(

for(i=2;i<=p/2;i++X

return0;

}elseif(i>p/2){return1;

return1intPrimeSum(intm,intn){inti,sum=0;

for(i=m;i<=n;i++){

if(prime(i)!

=0)sum+=i;

returnsum;

习题5-5使用函数统计指定数字的个数(15分)

本题要求实现一个统计整数中指定数字的个数的简单函数。

函数接口定义:

intCountDigit(intnumber,intdigit);

其中number是不超过长整型的整数,digit为[0,9]区间内的整数。

函数CountDigit应返回number中digit出现的次数。

intCountDigitfintnumber,intdigit)

intcount=0,x,if(number<0Xnumber*=-l;

I

while(number>10Xx=number^lO;

number=number/10;if(x==digitXcount=count+l;

if(number==digitX

count=count+l;

returncount;

习题5-6使用函数输出水仙花数(20分)

水仙花数是指一个N位正整数(NN3),它的每个位上的数字的N次熹之和等于它本身。

例如:

153=13+53+33。

本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。

函数接口定义:

intnarcissistic(intnumber);

voidPrintN(intm,intn);

函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。

函数PnntN则打印开区间(m,n)内所有的水仙花数,每个数字占一行。

题目保证

100这mWnWIOOOO。

intnarcissistic(intnumber)

I

intremainder,sum=1,allsum=0;

intx,count=0,end=l;

x=number;

while(x>=0)

count++;

x=number;

while(x!

=0)

]

remainder=xHlO;

for(end:

end<二count;end++)

I

sum*二remainder;

I

allsum+=sum:

x=x/10;

end=l;

sum=l;

I

if(allsum==number)

I

return1;

}else

{

return0;

I

voidPrintN(intm,intn)

I

m=m+l;

for(m;m

if(narcissistic(m)-1)printfC^d\n",m);

习题5-7使用函数求余弦函数的近似值(15分)

本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:

cos(x)=x0/0!

-x2/2!

+x4/4!

一x6/6!

+…

函数接口定义:

doublefuncos(doublee,doublex);

其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值;输入输出均在双精度范围内。

doublefuncos(doublee,doublexX

intflag="l:

doubleitem=l,m=2,sum=l:

doublefenmu=l,fenzi

while(item>eXfor(inti=l;i<=m;i++Xfenmu=fenmu*i;

]

fenzi=pow(xtm);

item=fenzi/fenmu;

sum=sum+flag*item:

m=m+2;

fenmu=l;

flag=-flag;

]

returnsum;

习题6-1分类统计字符个数(15分)

本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。

函数接口定义:

voidStringCount(chars[]);

其中chars口是用户传入的字符串。

函数StnngCount须在一行内按照

letter=英文字母个数,blank二空格或回车个数,digit二数字字符个数,other二其他字符个数

的格式输出。

voidStringCount(chars[])

I

intletter,blank.digit.other;

letter=blank=digit=other=0;

intn;

n=strlen(s);

for(inti=0;i

if((s|j]>='a,&&s[i]<二>=7V&&s[i卜='Z')X

}elseif(s[i]>=O&&s[i]<=9){digit++

}elseif(s[i]==

blank++;

}else{

other++;

I

I

printfC'letter二%d,blank二%d,digit二%d,other二%dM,letterfblank,digit,other);

习题6-2使用函数求特殊a串数列和(20分)

给定两个均不超过9的正整数a和n,要求编写函数求a+aa+aaa++…+aa…a(n个a)之和。

函数接口定义:

intfn(inta,intn);

intSumA(inta,intn);

其中函数fn须返回的是n个a组成的数字;SumA返回要求的和。

intfn(inta,intnX

intlast=a;

for(inti=l;i

a=a*10;

last+=a;

I

returnlast;

I

intSumA(inta,intnX

intsum=a;

intlast=a;

for(inti=l;i

a=a*10;

last+=a;

sum=sum+last;

returnsum

习题6-3使用函数输出指定范围内的完数(20分)

本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0

例如:

6=1+2+3,其中1、2、3为6的因子。

函数接口定义:

intfactorsum(intnumber);voidPrintPN(intm,intn);

其中函数factorsum须返回intnumber的因子和;函数PrintPN要逐行输出给定范围[m,n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数二因子1+因子2+…+因子k”,其中完数和因子均按递增顺序给出。

如果给定区间内没有完数,则输出一行“Noperfectnumber.

intfactorsum(intnumberXintx=0;

for(inti=l;i

returnx;

voidPrintPN(intm,intnXinta=0;

for(inti=m;i<=n:

i++X

if(factorsum(i)==i){printf("%d=l",i);

for(intj=2;j

制僵明

printff+

pnntf(AnM);

I

if(a==OX

printf(MNoperfectnumber*")

习题6-4使用函数输出指定范围内的Fibonacci数(20分)

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0

所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

函数接口定义:

intfib(intn);

voidPrintFN(intm,intn);

其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m,n]内的所有Fibonacci数,相邻数字间有一个空格,行末不得有多余空格。

如果给定区间内没有Fibonacci数,则输出一行“NoFibonaccinumber”。

intfib(intn)

intf[1000];

for(i=3;i<=n;i++)

I

F(l)=l,F

(2)=l,F(n)=F(n-1)+F(n-2)

(nN3,n£N*)♦/

returni[n]

voidPrintFN(intm,intn)

I

int=0,count=0j

while(fib(i)>0)

I

if(fib(i)>二m&&fib(i)<=n)

count++

while(fib(i)>0)

I

if(fib(i)>=m&&fib(i)<=n)

I

count--;

if(count>0)

I

pnntf("");

I

flag4

I

I

if(flag==O)

t

printf(MNoFibonaccinumber");

习题6-5使用函数验证哥德巴赫猜想(20分)

本题要求实现一个判断素数的简单函数、并利用该函数验证哥德巴赫猜想:

任何一个不小于6的偶数均可表示为两个奇素数之和。

素数就是只能被1和自身整除的正整数。

注意不是素数,2是素数。

函数接口定义:

intprime(intp);

voidGoldbach(intn);

其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中pWq均为素数。

又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。

intprime(intp)

{

if(p<=0||p==lX

return0;

)elseif(p==2||p==3X

return1;

}elseif(p%6!

=1&&pH6!

=5儿

return0;

}else(

inttmp=(int)sqrt(p);

for(i=5;i<=tmp;i+=6X

if(p%i==0||pH(i+2)==0X

return0;

I■)

return1;

]

voidGoldbach(intnX

intb,i;

inta=0;

for(i=l;i<=n;i++X

if(prime(i)==lX

if(prime(b)==lX

if(0

printf”d=%d+Hd:

nj,b);

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2