C语言PTA平台知识题与答案解析.docx
《C语言PTA平台知识题与答案解析.docx》由会员分享,可在线阅读,更多相关《C语言PTA平台知识题与答案解析.docx(58页珍藏版)》请在冰豆网上搜索。
C语言PTA平台知识题与答案解析
第二章作业1
①.本题要求编写程序,输出一个短句“WelcometoYou!
”
#include
intmain()
{
printf("WelcometoYou!
\n");
return0;
}
②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。
计算公式:
C=5×(F−32)/9,式中:
C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
fahr=100,celsius=计算所得摄氏温度的整数值
#include
intmain()
{
intfahr=100;
intcelsius=5*(fahr-32)/9;
printf("fahr=100,celsius=%d\n",celsius);
return0;
}
第二章作业2
①求整数均值本题要求编写程序,计算4个整数的和与平均值。
题目保证输入与输出均在整型范围内。
在一行中按照格式“Sum=和;Average=平均值”顺序输出和与平均值,其中平均值精确到小数点后一位
#include
intmain()
{
inta,b,c,d,Sum;
doubleAverage;
scanf("%d%d%d%d",&a,&b,&c,&d);
Sum=a+b+c+d;
Average=(a+b+c+d)/4.0;
printf("Sum=%d,Average=%.1f\n",Sum,Average);
return0;
}
②整数四则运算本题要求编写程序,计算2个正整数的和、差、积、商并输出。
题目保证输入和输出全部在整型范围内
输入在一行中给出2个正整数A和B。
在4行中按照格式“A运算符B=结果”顺序输出和、差、积、商。
#include
intmain()
{
inta;
intb;
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d",a,b,a/b);
return0;
}
③整数152的各位数字本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值
152=个位数字+十位数字*10+百位数字*100
#include
intmain()
{
inta=152/100;
intc=152%10;
intcount=152%100;
intb=count/10;
printf("152=%d+%d*10+%d*100",c,b,a);
return0;
}
第二章作业3
①求奇数分之一序列前N项和
计算序列1+1/3+1/5+...的前N项之和
输入在一行中给出一个正整数N。
在一行中按照“sum=S”的格式输出部分和的值S,精确到小数点后6位。
题目保证计算结果不超过双精度范围
#include
intmain()
{
intn;
inti=1;
doubles=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{s+=1.0/(2*i-1);}
printf("sum=%.6f",s);
return0;
}
②计算序列1-1/4+1/7-1/10+...的前N项之和在一行中按照“sum=S”的格式输出部分和的值S,精确到小数点后三位。
题目保证计算结果不超过双精度范围
#include
intmain()
{
intfm=1,N,b=1;
doubleitem,sum=0,i;
scanf("%d",&N);
for(i=1.0;i<=N;i++)
{
item=b*(i/fm);
sum=sum+item;
b=-b;
fm=fm+2;
}
printf("%.3f\n",sum);
return0;
}
③求平方根序列前N项和
计算平方根序列√1+√2+√3+⋯的前N项之和
#include
#include
intmain()
{
intn,i;
doublex,s=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
x=sqrt(i);
s=s+x;
}
printf("sum=%.2f\n",s);
return0;
}
④特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
#include
#include
intmain()
{
intn,a,i,j;
doublenum=0,sum=0;
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
num=num+a*pow(10,j-1);
}
sum=sum+num;
num=0;
}
printf("s=%d",sum);
return0;
}
第二章作业4
①本题目要求计算下列分段函数f(x)的值:
输入在一行中给出实数x
在一行中按“f(x)=result”的格式输出,其中x与result都保留一位小数。
输入样例1:
10
输出样例:
1
f(10.0)=0.1
输入样例2:
234
输出样例2:
f(234.0)=234.0
#include
intmain()
{
doublex;
scanf("%lf",&x);
if(x==10){printf("f(%0.1f)=0.1",x);}
else{printf("f(%0.1f)=%0.1f",x,x);}
return0;
}
②计算分段函数
本题目要求计算下列分段函数f(x)的值:
注:
可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
#include
intmain()
{
doublea;
scanf("%lf",&a);
if(a>=0){printf("f(%0.2f)=%0.2f",a,sqrt(a));}
else{printf("f(%0.2f)=%0.2f",a,(a+1)*(a+1)+2*a+1/a);}
return0;
}
③新胖子公式输入在一行中给出两个正数,依次为一个人的体重(以kg为单位)和身高(以m为单位),其间以空格分隔。
其中体重不超过1000kg,身高不超过3.0m。
首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后1位。
如果这个数值大于25,就在第二行输出 PANG,否则输出 HaiXing。
#include
intmain()
{
doublea,b;
scanf("%lf%lf",&a,&b);
doublec=a/(b*b);
printf("%0.1f\n",c);
if(c>25){printf("PANG");}
else{printf("HaiXing");}
return0;
}
第三章作业2
①求奇数和输入在一行中给出一系列正整数,其间以空格分隔。
当读到零或负整数时,表示输入结束,该数字不要处理
在一行中输出正整数序列中奇数的和。
87437056101-1
116
#include
intmain()
{
intn=0;
intsum=0;
do
{
scanf("%d",&n);
if(n%2==1){sum+=n;}
}
while(n>0);
printf("%d",sum);
return0;
}
②求整数的位数及各位数字之和
输入在一行中给出一个不超过109的正整数N
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开
321
36
#include
intmain()
{
intn,h,i,sum=0;
scanf("%d",&n);
do
{
h=n%10;
n/=10;
sum+=h;
i++;
}
while(n>0);
printf("%d%d",i,sum);
return0;
}
③简单的猜数字游戏
#include
intmain()
{
intx;
constintM=38;
scanf("%d",&x);
if(x>38){printf("Toobig!
");}
if(x==38){printf("GoodGuess!
");}
if(x<38){printf("Toosmall!
");}
return0;
}
第四章作业1
①奇偶分家输入第一行给出一个正整N(≤1000);第2行给出N个非负整数,以空格分隔。
在一行中先后输出奇数的个数、偶数的个数。
中间以1个空格分隔。
9
887410126150342277
36
#include
intmain()
{
inti,n,N;
inta=0,b=0;
scanf("%d",&n);
for(i=0;i{
scanf("%d",&N);
if(N%2==0){a++;}
else{b++;}
}
printf("%d%d",b,a);
}
②A除以B定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果
在一行中输出结果:
如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error
#include
intmain()
{
inta,b;
scanf("%d%d",&a,&b);
if(b>0)printf("%d/%d=%.2f",a,b,a*1.0/b);
elseif(b<0)printf("%d/(%d)=%.2f",a,b,a*1.0/b);
elseprintf("%d/%d=Error",a);
return0;
}
③高速公路超速处罚
在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
在一行中输出处理意见:
若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceedx%.Ticket200”;若应吊销驾驶证,则输出“Exceedx%.LicenseRevoked”。
其中x是超速的百分比,精确到整数。
110100
Exceed10%.Ticket200
#include
intmain()
{
inta,b;
intx;
scanf("%d%d",&a,&b);
x=round(1.0*(a-b)/b*100);
if(x<10){printf("OK\n");}
elseif(x<50){printf("Exceed%d%%.Ticket200\n",x);}
elseprintf("Exceed%d%%.LicenseRevoked\n",x);
return0;
}
④输出三角形面积和周长
根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
注意:
在一个三角形中,任意两边之和大于第三边。
三角形面积计算公式:
area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
area=面积;perimeter=周长Thesesidesdonotcorrespondtoavalidtriangle
553
area=7.15;perimeter=13.00
#include
#include
intmain()
{
doublea,b,c,s;
doublearea,perimeter;
scanf("%lf%lf%lf",&a,&b,&c);
area=0;
perimeter=0;
if((a+b)>c&&(a+c)>b&&(b+c)>a){
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area=%.2f;perimeter=%.2f",area,perimeter);
}else{
printf("Thesesidesdonotcorrespondtoavalidtriangle");
}
return0;
}
⑤输出闰年
输入在一行中给出21世纪的某个截止年份。
逐行输出满足条件的所有闰年年份,即每个年份占一行。
输入若非21世纪的年份则输出"Invalidyear!
"。
若不存在任何闰年,则输出“None”。
闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除
#include
intmain()
{
intyear,i,count=0;
scanf("%d",&year);
if(year<=2000||year>2100)
printf("Invalidyear!
\n");
else{
for(i=2001;i<=year;i++){
if(i%4==0&&i%100!
=0||i%400==0){
printf("%d\n",i);
count++;
}
}
if(count==0)
printf("None\n");
}
return0;
}
⑥逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。
注意:
当输入的数字含有结尾的0时,输出不应带有前导的0。
比如输入700,输出应该是7。
#include
intmain()
{
inta,b,c,n;
scanf("%d",&a);
b=a/100;c=(a/10)%10;n=a%10;
if(n==0&&c==0)printf("%d",b);
if(n==0&&c!
=0)printf("%d%d",c,b);
if(n!
=0)printf("%d%d%d",n,c,b);
return0;
}
第四章作业2
①.统计学生成绩
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
7
77549273606569
10231
#include
intmain()
{
intn,score;
inti;
intA,B,C,D,E;
A=B=C=D=E=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&score);
if(score>=90)
A++;
elseif(score>=80)
B++;
elseif(score>=70)
C++;
elseif(score>=60)
D++;
else
E++;
}
printf("%d%d%d%d%d",A,B,C,D,E);
return0;
}
②计算油费。
(本题编程不完全对)现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。
为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m-自助,e-协助),计算并输出应付款。
4097m
301.34
#include
intmain()
{
floatr1,r2;
inta,b;
charc;
doubles;
scanf("%d%d%c",&a,&b,&c);
switch(b)
{
case90:
r1=6.95;break;
case93:
r1=7.44;break;
case97:
r1=7.93;break;
}
switch(c)
{
case'm':
r2=0.95;break;
case'e':
r2=0.97;break;
}
s=a*r1*r2;
printf("%.2lf",s);
return0;
}
③分别是薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),单价分别对应为3.0元/公斤、2.5元/公斤、4.0元/公斤、3.5元/份。
首先在屏幕上显示以下菜单:
[1]crisps
[2]popcorn
[3]chocolate
[4]cola[0]exit
用户可以输入编号1~4查询对应食品的单价。
当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0
首先在屏幕上显示菜单。
然后对应用户的每个输入,在一行中按格式“price=价格”输出查询结果,其中价格保留一位小数。
当用户连续查询次数超过5次、或主动输入0时,程序结束,显示“Thanks”。
1702
[1]crisps
[2]popcorn
[3]chocolate
[4]cola
[0]exit
price=3.0
price=0.0
Thanks
【程序】
#include
intmain()
{
inti,a;
printf("[1]crisps\n"
"[2]popcorn\n"
"[3]chocolate\n"
"[4]cola\n"
"[0]exit\n");
for(i=1;i<=5;i++){
scanf("%d",&a);
if(a==0)
break;
else
switch(a){
case1:
printf("price=3.0\n");break;
case2:
printf("price=2.5\n");break;
case3:
printf("price=4.0\n");break;
case4:
printf("price=3.5\n");break;
default:
printf("price=0.0\n");break;
}
}
printf("Thanks\n");
return0;
}
④读入一个实数、一个操作符(仅限于+-*/)、一个实数,求该表达式的值。
若除数为0,输出“Thedivisoris0
#include
intmain()
{
inta,b;
charop;
doublec;
scanf("%d%c%d",&a,&op,&b);
if(b==0)
switch(op){
case'+':
c=a+b;printf("%.2f",c);break;
case'-':
c=a-b;printf("%.2f",c);break;
case'*':
c=a*b;printf("%.2f",c);break;
case'/':
printf("Thedivisoris0.");break;
}
else
switch(op){
case'+':
c=a+b;printf("%.2f",c);break;
case'-':
c=a-b;printf("%.2f",c);break;
case'*':
c=a*b;printf("%.2f",c);break;
case'/':
c=1.0*a/b;printf("%.2f",c);break;}
return0;
}
第四章作业3
①.有重复,本题略
②对于给定的正整数N,求它的位数及其各位数字之和
321
36
#include
intmain()
{
intn,h,i=0,sum=0;
scanf("%d",&n);
do
{
h=n%10;
n/=10;
sum+=h;
i++;
}
while(n>0);
printf("%d%d",i,sum);
return0;
}
③找出给定一系列整数中的最小值。
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
在一行中按照“min=最小值”的格式输出n个整数中的最小值。
4-2-1231000
min=-123
#include
intmain()
{
intn,i,m,min;
scanf("%d",&n);
scanf("%d",&m);
min=m;
for(i=1;iscanf("%d",&m);
if(min>m)
min=m;
}
printf("min=%d",min);
return0;
}
④输入一个整数,输出每个数字对应的拼音。
当整数为负数时,先输出fu字。
十个数字对应的拼音如下:
0:
ling1:
yi2:
er3:
san