PAT《C语言程序设计》题目集参考答案上.docx
《PAT《C语言程序设计》题目集参考答案上.docx》由会员分享,可在线阅读,更多相关《PAT《C语言程序设计》题目集参考答案上.docx(12页珍藏版)》请在冰点文库上搜索。
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是用户传入的参数,保证有mintsum(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;iif(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;mif(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;iif((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;ia=a*10;
last+=a;
I
returnlast;
I
intSumA(inta,intnX
intsum=a;
intlast=a;
for(inti=l;ia=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;ireturnx;
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(0printf”d=%d+Hd:
nj,b);