山东大学23强基班计算机导论第三次习题答案
山东大学23强基班计算机导论第三次习题答案
7-1 计算分段函数[1]
分数 10
作者 颜晖
单位 浙大城市学院
本题目要求计算下列分段函数f(x)的值:
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。
输入样例1:
10
输出样例1:
f(10.0) = 0.1
输入样例2:
0
输出样例2:
f(0.0) = 0.0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <stdio.h>
int main()
{
double n;
scanf("%lf",&n);
if(n == 0)
{
printf("f(0.0) = 0.0");
} else {
printf("f(%.1lf) = %.1lf",n,1.0/n);
}
return 0;
}
7-2 比较大小
分数 10
作者 杨起帆
单位 浙大城市学院
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
操作有点骚,可忽略
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
st:
if(a > b)
{
a^=b;
b^=a;
a^=b;
}
if(b > c)
{
b^=c;
c^=b;
b^=c;
goto st;
}
printf("%d->%d->%d",a,b,c);
}
7-3 判断一个三位数是否为水仙花数
分数 10
作者 颜晖
单位 浙大城市学院
本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出一个需要判断的整数 N(100≤N≤999)。
输出格式:
如果N是水仙花数,则在一行中输出Yes
,否则输出No
。如果N不是三位数,则输出Invalid Value.
。
输入样例1:
153
输出样例1:
Yes
输入样例2:
500
输出样例2:
No
输入样例3:
-2
输出样例3:
Invalid Value.
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if (n >= 1000 || n < 100){
cout<<"Invalid Value.";
return 0;
}
int a,b,c;
c = n % 10;
b = n % 100 - c;
a = n - b;
b /= 10;
a /= 100;
if (a*a*a + b*b*b + c*c*c == n)
cout<<"Yes";
else
cout<<"No";
return 0;
}
7-4 计算分段函数[2]
分数 10
作者 陈建海
单位 浙江大学
本题目要求计算下列分段函数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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double f(double x)
{
if(x >= 0)
return sqrt(x);
else
return (x+1)*(x+1) + 2*x + 1/x;
}
int main()
{
double x;
cin>>x;
printf("f(%.2lf) = %.2lf",x,f(x));
}
7-5 阶梯电价
分数 10
作者 陈建海
单位 浙江大学
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。
输入样例1:
10
输出样例1:
cost = 5.30
输入样例2:
100
输出样例2:
cost = 55.50
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
using namespace std;
double f(double x)
{
if( x <= 50)
return x * 0.53;
else
return 50*0.53 + (x-50)*0.58;
}
int main()
{
double x;
cin >> x;
if(x < 0)
printf("Invalid Value!");
else
printf("cost = %.2lf",f(x));
return 0;
}
7-6 计算符号函数的值
分数 10
作者 C课程组
单位 浙江大学
对于任一整数n,符号函数sig**n(n)的定义如下:
请编写程序计算该函数对任一输入整数的值。
输入格式:
输入在一行中给出整数n。
输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。
输入样例1:
10
输出样例1:
sign(10) = 1
输入样例2:
0
输出样例2:
sign(0) = 0
输入样例3:
-98
输出样例3:
sign(-98) = -1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
if(n==0)
printf("sign(%d) = %d",n,n);
else{
int sign = n & (1 << 31);
if(sign)
printf("sign(%d) = -1",n);
else
printf("sign(%d) = 1",n);
}
}
7-7 谁是赢家
分数 10
作者 陈越
单位 浙江大学
某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。
输入格式:
输入第一行给出 2 个不超过 1000 的正整数 Pa 和 Pb,分别是艺人 a 和艺人 b 得到的观众票数。题目保证这两个数字不相等。随后第二行给出 3 名评委的投票结果。数字 0 代表投票给 a,数字 1 代表投票给 b,其间以一个空格分隔。
输出格式:
按以下格式输出赢家:
The winner is x: P1 + P2
其中 x
是代表赢家的字母,P1
是赢家得到的观众票数,P2
是赢家得到的评委票数。
输入样例:
327 129
1 0 1
输出样例:
The winner is a: 327 + 1
鸣谢安阳师范学院软件学院李栋同学完善测试数据。
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
using namespace std;
int main()
{
int pa,pb;
cin>>pa>>pb;
int a,b,c;
cin>>a>>b>>c;
int p[2] = { 0 };
p[a] ++;
p[b] ++;
p[c] ++;
if((pa + p[0] > pb + p[1] || p[0] == 3) && (p[1] !=3))
{
cout<<"The winner is a: "<< pa << " + "<<p[0];
} else {
cout<<"The winner is b: "<< pb << " + "<<p[1];
}
}
7-8 12-24小时制
分数 10
作者 翁恺
单位 浙江大学
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入格式:
输入在一行中给出带有中间的:
符号(半角的冒号)的24小时制的时间,如12:34
表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6
表示5点零6分。
提示:在scanf
的格式字符串中加入:
,让scanf
来处理这个冒号。
输出格式:
在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM
或表示下午的字符串PM
。如5:6 PM
表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00
就是12小时制的12:0 PM
;而0点被认为是第二天的时间,所以是0:0 AM
。
输入样例:
21:11
输出样例:
9:11 PM
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码
#include <iostream>
using namespace std;
int main()
{
int a,b;
scanf("%d:%d",&a,&b);
if(a >= 12)
{
if(a > 12)
a %= 12;
printf("%d:%d PM",a,b);
} else {
printf("%d:%d AM",a,b);
}
}
7-9 C程序设计 实验2-1求绝对值
分数 10
作者 王群芳
单位 合肥师范学院
计算并输出一个实数的绝对值。从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值。
输入格式:
输入任一实数。
输出格式:
输出的绝对值包含两位小数。
输入样例:
-2.5
输出样例:
2.50
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码
全是骚操作,具体原理可以看看IEEE对浮点的定义
#include <stdio.h>
int main()
{
union {float f;unsigned int u} x;
scanf("%f",&x.f);
x.u &= 0x7fffffff;
printf("%.2f\n",x.f);
}
7-10 成绩处理
分数 10
作者 王群芳
单位 合肥师范学院
编写程序,根据输入的成绩score(整型),输出及格与否的信息。
当 60≤ score≤100
时, 输出P
;
当0≤ score<60时,输出F
;
如果输入成绩 score<0或 score>100,则输出Input error!
。
输入格式:
输入在一行中给出一个整数,表示成绩。
输出格式:
输出对应信息。
输入样例:
86
输出样例:
P
输入样例:
48
输出样例:
F
输入样例:
125
输出样例:
Input error!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码
#include <iostream>
using namespace std;
int main()
{
int x;
cin>> x;
if(60 <= x && x <= 100)
cout<<'P'<<endl;
else if(0<= x && x <60)
cout<<'F'<<endl;
else
cout<<"Input error!"<<endl;
}