PTA和MOOC上的编程题目答案
C实验—编程题答案(PTA)
2020年秋- C实验1 顺序结构
-
交换a和b的值 (10分)
交换变量a,b的值,如输入a的值为1,b的值为5,则输出a的值为5,b的值为1。
输入格式:
输入两个整数,之间用一个空格间隔。
输出格式:
在一行中按照“a=x,b=y”的格式输出,其中x和y均是原样输出,不加宽度控制。
输入样例:1 5
输出样例:
a=5,b=1
# include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("a=%d,b=%d",b,a);
return 0;
}
2. 程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。 输入格式: 每个测试是一个3位的正整数。 输出格式: 输出按位逆序的数。
输入样例:
123
输出样例:
321
#include<stdio.h>
int main()
{
int num,a,b,c;
scanf("%d",&num);
a = num / 100;
b = (num / 10) % 10;
c = num % 10;
printf("%d",a+ b*10 + c*100);
return 0;
}
3. 本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。 输入格式: 输入在一行中给出4个整数,其间以空格分隔。 输出格式: 在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。
输入样例:
1 2 3 4
输出样例:
Sum = 10; Average = 2.5
# include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("Sum = %d; Average = %.1lf",a+b+c+d,(a+b+c+d)/4.0);
return 0;
}
4. 世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。 输入格式: 输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。 输出格式: 在一行中按照“yyyy-mm-dd”的格式给出年、月、日。
输入样例:
03-15-2017
输出样例:
2017-03-15
# include<stdio.h>
int main()
{
int a,b;
long int c;
scanf("%d-%d-%ld",&a,&b,&c);
printf("%ld-%02d-%02d",c,a,b);
return 0;
}
5. 本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。 输入格式:输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。 输出格式:在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。
输入样例:
2.12 88 c 4.7
输出样例:
c 88 2.12 4.70
# include<stdio.h>
int main()
{
int a;
char b;
double c,d;
scanf("%lf %d %c %lf",&c,&a,&b,&d);
printf("%c %d %.2lf %.2lf",b,a,c,d);
return 0;
}
6.如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:输入在一行中给出1个正整数,单位是厘米。
输出格式:在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:
170
输出样例:
5 6
# include<stdio.h>
int main()
{
int cm,foot,inch;
scanf("%d",&cm);
foot=cm/30.48;
inch=(cm/30.48-foot)*12;
printf("%d %d",foot,inch);
return 0;
}
7.有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
# include<stdio.h>
int main()
{
int time,h,m,xt,mt;
scanf("%d %d",&time,&mt);
h = time / 100;
m = time % 100;
xt = h * 60 + m;
xt = xt + mt;
h = xt / 60;
m = xt % 60;
printf("%d%02d",h,m);
return 0;
}
8.本题目要求计算存款利息,计算公式为interest=money×(1+rate)year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。
输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。
输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。
输入样例:
1000 3 0.025
输出样例:
interest = 76.89
# include<stdio.h>
# include<math.h>
int main()
{
float a,b;
double c,d;
scanf("%f %f %lf",&a,&b,&c);
d = a * pow((1+c),b) - a;
printf("interest = %.2lf",d);
return 0;
}
2020年秋- C实验2 选择结构
1.本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h
,并调用sqrt
函数求平方根,调用pow
函数求幂。
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。
输入样例1:
10
输出样例1:
f(10.00) = 3.16
输入样例2:
-0.5
输出样例2:
f(-0.50) = -2.75
# include<stdio.h>
# include<math.h>
int main()
{
double x;
scanf("%lf",&x);
if (x >= 0)
printf("f(%.2lf) = %.2lf",x,pow(x,0.5));
else
printf("f(%.2lf) = %.2lf",x,(x+1)*(x+1)+2*x+1/x);
return 0;
}
2.中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
输入格式:
输入在一行中给出一个不超过1000的正整数N。
输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例1:
103
输出样例1:
Fishing in day 103
输入样例2:
34
输出样例2:
Drying in day 34
# include<stdio.h>
# include<math.h>
int main()
{
int N,x;
scanf("%d",&N);
x = N % 5;
if(x > 0 && x <= 3)
printf("Fishing in day %d",N);
else
printf("Drying in day %d",N);
return 0;
}
3.本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
#include <stdio.h>
int main()
{
int a,b,c,fl;
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
fl = a;a = b;b = fl;
}
if(a>c)
{
fl = a;a = c;c = fl;
}
if(b>c)
{
fl = b;b = c;c = fl;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
4.运输公司对用户计算运费。路程(s)越远,每千米运费就越低。标准如下:
s<250km ,没有折扣;
250km≤s<500km, 2%的折扣;
500km≤s<1000km, 5%的折扣;
1000km≤s<2000km,8%的折扣;
2000km≤s<3000km,10%的折扣;
3000km≤s,15%的折扣。
设每千米每吨货物的基本运费为p,货物重为 w,距离为s,折扣为d,则总运费f的计算公式为: f=p×w×s×(1-d)
输入格式:
在一行中以小数形式输入基本运费、货重和距离,以空格作为分隔符。
输出格式:
在一行输出计算出来的运费,精确到小数点后2位的值。
输入样例:
在这里给出一组输入。例如:
100 20 300
输出样例:
在这里给出相应的输出。例如:
freight=588000.00
# include<stdio.h>
int main()
{
float s,p,w;
float d,f;
scanf("%f %f %f",&p,&w,&s);
if(s <= 250)
d = 0;
else if(s < 500 && s >= 0)
d = 0.02;
else if(s < 1000 && s >= 500)
d = 0.05;
else if(s < 2000 && s >= 1000)
d = 0.08;
else if(s < 3000 && s >= 2000)
d = 0.1;
else if(s >= 3000)
d = 0.15;
f = p*w*s*(1-d);
printf("freight=%.2f",f);
return 0;
}
5.本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
输入样例:
1201 1530
输出样例:
03:29
# include<stdio.h>
int main()
{
int time1,time2,h1,m1,h2,m2,p1,p2,xt;
scanf("%d %d",&time1,&time2);
h1 = time1 / 100;
m1 = time1 % 100;
h2 = time2 / 100;
m2 = time2 % 100;
p1 = h1 * 60 + m1;
p2 = h2 * 60 + m2;
xt = p2 - p1;
printf("%02d:%02d",xt / 60,xt % 60);
return 0;
}
6.通过键盘输入一个字符,编程判断并输出用户输入的是什么类型的字符。
输入格式:
输入一个字符。
输出格式:
在一行中输出该字符是哪种类型的字符。
若用户输入字符为'0'和'9'之间,输出This is a digit.
若用户输入字符在'A'和'Z'之间,输出This is a capital letter.
若用户输入字符在'a'和'z'之间,输出This is a small letter.
其他情况,输出Other character.
输入样例:
6
输出样例:
This is a digit.
C编程方法学—编程题答案(MOOC)
【编程作业1】 顺序结构编程题
1、 已知华氏温度F,计算相应的摄氏温度C。(5分)
题目内容:
已知华氏温度F,根据转换公式计算相应的摄氏温度C(保留小数点后一位小数)。
输入格式:
输入1个代表华氏温度整数。
输出格式:
输出一个代表摄氏温度的实数,保留1位小数。
输入样例:
80
输出样例:
26.7
#include<stdio.h>
int main()
{
double f ;
scanf( "%lf" , &f ) ;
printf( "%.1f\n" , ( f - 32 ) * 5.0 / 9 ) ;
return 0 ;
}
2、 输入一个三位正整数,反向输出,比如输入123,输出321。(5分)
题目内容:
输入一个三位正整数,将其反向输出,比如输入123,输出321。
输入格式:
一个三位正整数
输出格式:
反向输出该数,如果反向后是0开头,则0不输出。
输入样例1:
103
输出样例1:
301
输入样例2:
120
输出样例2:
21
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num,a,b,c;
scanf("%d",&num);
a = num/100;
b = (num/10)%10;
c = num%10;
printf("%d",a+b*10+c*100);
return 0;
}
【编程作业2】 选择结构编程题
1、 目前它总说我四舍五入不对,所以没放出来。
2、 从键盘上输入税前收入,根据以下公式及规则,计算个人所得税税额。(10分)
题目内容:
从键盘上输入税前收入,根据以下公式及规则,计算个人所得税税额并输出。
应纳个人所得税税额=(税前收入 - 起征点额度)适用税率 - 速算扣除数
其中,起征点额度是3500元,其他如下:
应纳税所得额 税率 速算扣除数
不超过1500元的部分 3% 0
超过1500元至4500元的部分 10% 105
超过4500元至9000元的部分 20% 555
超过9000元至35000元的部分 25% 1005
超过35000元至55000元的部分 30% 2755
超过55000元至80000元的部分 35% 5505
超过80000的部分 45% 13505
如:某人月收入5000元,则应纳个人所得税税额为(5000-3500) 10% - 105 = 45元。
提示:输入及输出应选择实数类型。
输入格式:
输入税前收入
输出格式:
如果收入少于3500显示“不用交税”,否则输出应缴纳的税额(注意:精确到小数点后两位)
输入样例:
5150
输出样例:
60.00元
# include<stdio.h>
int main()
{
double o_tax,miner_tax,f_tax;
scanf("%lf",&o_tax);
miner_tax = o_tax-3500.0;
if(miner_tax <= 0)
{printf("不用交税");goto end;}
else if(miner_tax <= 1500 && miner_tax > 0)
f_tax = miner_tax * 0.01;
else if(miner_tax <= 4500 && miner_tax > 1500)
f_tax = miner_tax * 0.1 - 105;
else if(miner_tax <= 9000 && miner_tax > 4500)
f_tax = miner_tax * 0.2 - 555;
else if(miner_tax <= 35000 && miner_tax > 9000)
f_tax = miner_tax * 0.25 -1005;
else if(miner_tax <= 55000 && miner_tax > 35000)
f_tax = miner_tax * 0.3 -2755;
else if(miner_tax <= 80000 && miner_tax > 55000)
f_tax = miner_tax * 0.35 - 5505;
else
f_tax = miner_tax * 0.45 - 13505;
printf("%.2lf元",f_tax);
end :
return 0;
}