河南农业大学2020-2021第一学期程序设计基础-实验2
7-1 数学函数调用 (10 分)
题目描述:

输入格式:
一个实数
输出格式:
计算并输出上述表达式的值,保留4位小数。
输入样例:
1.57
输出样例:
1.1243
实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
double x;
scanf("%lf",&x);
double r1,r2,r3,r4;
r1=sin(x)-cos(x/2);
r2=sqrt(x+168);
r3=fabs(r1+r2);
r4=log10(r3);
printf("%.4lf",r4);
return 0;
}
7-2 回文数 (10 分)
题目描述:
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。
输入格式:
直接输入一个5位数正整数。
输出格式:
输出“yes”或“no”。此处均为小写字母
输入样例:
12521
输出样例:
yes
输入样例:
65432
输出样例:
no
实现代码:
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int a,b,c,d;
a=x%10;
b=x%10000%1000%100/10;
c=x%10000/1000;
d=x/10000;
if(a==d&&b==c)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
7-3 判断一个三位数是否为水仙花数 (15 分)
题目描述:
本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
输入格式:
输入在一行中给出一个需要判断的整数 N(100≤N≤999)。
输出格式:
如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value.。
输入样例:
153
输出样例:
Yes
输入样例:
500
输出样例:
No
输入样例:
-2
输出样例:
Invalid Value.
实现代码:
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x>999||x<100)
{
printf("Invalid Value.");
return 0;
}
int a,b,c,d;
a=x/100;
b=x%100/10;
c=x%10;
if(x==a*a*a+b*b*b+c*c*c)
{
printf("Yes");
}
else
{
printf("No");
}
return 0;
}
7-4 计算符号函数的值 (10 分)
题目描述:

输入格式:
输入在一行中给出整数n。
输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值
输入样例:
10
输出样例:
sign(10) = 1
输入样例:
0
输出样例:
sign(0) = 0
输入样例:
-98
输出样例:
sign(-98) = -1
实现代码:
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x>0)
{
printf("sign(%d) = 1",x);
}
else if(x==0)
{
printf("sign(0) = 0");
}
else
{
printf("sign(%d) = -1",x);
}
return 0;
}
7-5 出租车计价 (15 分)
题目描述:

输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
输入样例:
2.6 2
输出样例:
10
输入样例:
5.1 4
输出样例:
14
输入样例:
12.5 9
输出样例:
34
实现代码:
#include<stdio.h>
int main()
{
double x,r,result;
int t;
scanf("%lf%d",&x,&t);
if(x<=3)
{
r=10;
//printf("sign(%d)=1",x);
}
else if(x>3&&x<=10)
{
r=10+(x-3)*2;
//printf("sign(0)=0");
}
else
{
r=24+(x-10)*3;
//printf("sign(%d)=-1",x);
}
//printf("%lf\n",r);
result=t/5*2+r;
printf("%.0lf",result);
return 0;
}
7-6 计算天数 (15 分)
题目描述:
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例:
2009/03/02
输出样例:
61
输入样例:
2000/03/02
输出样例:
62
实现代码:
#include<stdio.h>
int main()
{
int y,m,d;
scanf("%4d/%2d/%2d",&y,&m,&d);
if((y%4==0&&y%100!=0)||y%400==0)
{
switch(m)
{
case 12:d+=30;
case 11:d+=31;
case 10:d+=30;
case 9:d+=31;
case 8:d+=31;
case 7:d+=30;
case 6:d+=31;
case 5:d+=30;
case 4:d+=31;
case 3:d+=29;
case 2:d+=31;
case 1:d;
default:break;
}
}
else
{
switch(m)
{
case 12:d+=30;
case 11:d+=31;
case 10:d+=30;
case 9:d+=31;
case 8:d+=31;
case 7:d+=30;
case 6:d+=31;
case 5:d+=30;
case 4:d+=31;
case 3:d+=28;
case 2:d+=31;
case 1:d;
default:break;
}
}
printf("%d",d);
return 0;
}
7-7 成绩转换 (15 分)
题目描述:

输入格式:
输入在一行中给出一个整数的百分制成绩。
输出格式:
在一行中输出对应的五分制成绩。
输入样例:
90
输出样例:
A
实现代码:
#include<stdio.h>
int main()
{
int score,m;
scanf("%d",&score);
m=score/10;
switch(m)
{
case 10:printf("A");break;
case 9:printf("A");break;
case 8:printf("B");break;
case 7:printf("C");break;
case 6:printf("D");break;
}
if(score<60)
{
printf("E");
}
return 0;
}
7-8 输出三角形面积和周长 (15 分)
题目描述:

输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长的格式输出,保留两位小数。否则,输出These sides do not correspond to a valid triangle
输入样例:
5 5 3
输出样例:
area = 7.15; perimeter = 13.00
输入样例:
1 4 1
输出样例:
These sides do not correspond to a valid triangle
实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double area,s,C;
scanf("%d%d%d",&a,&b,&c);
s=(double)(a+b+c)/2;
//printf("%.2lf\n",s);
if(a+b>c&&a+c>b&&b+c>a)
{
area=sqrt(s*(s-a)*(s-b)*(s-c));
C=a+b+c;
printf("area = %.2lf; perimeter = %.2lf",area,C);
}
else
{
printf("These sides do not correspond to a valid triangle");
}
return 0;
}
7-9 三天打鱼两天晒网 (15 分)
题目描述:
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
输入格式:
输入在一行中给出一个不超过1000的正整数N。
输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。
输入样例:
103
输出样例:
Fishing in day 103
实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
int d;
scanf("%d",&d);
if(d%5==0||d%5>3)
{
printf("Drying in day %d",d);
}
else
{
printf("Fishing in day %d",d);
}
return 0;
}
7-10 新胖子公式 (10 分)
题目描述:
根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。
输入格式:
输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。
输出格式:
首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出 PANG,否则输出 Hai Xing。
输入样例:
100.1 1.74
输出样例:
33.1 PANG
输入样例:
65 1.70
输出样例:
22.5 Hai Xing
实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
double h,l,v;
scanf("%lf%lf",&h,&l);
v=h/(l*l);
if(v>25)
{
printf("%.1lf\nPANG",v);
}
else
{
printf("%.1lf\nHai Xing",v);
}
return 0;
}
7-11 强迫症 (10 分)
题目描述:
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。
输入格式:
输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。
输出格式:
在一行中按标准格式 年年年年-月月 将输入的信息整理输出。
输入样例:
9808
输出样例:
1998-08
输入样例:
0510
输出样例:
2005-10
输入样例:
196711
输出样例:
1967-11
实现代码:
#include<stdio.h>
#include<math.h>
int main()
{
int y,a,b,c,d,e,f;
scanf("%d",&y);
if(y>10000)
{
printf("%d%d%d%d-%d%d",y/100000,y%100000/10000,y%100000%10000/1000,y%100000%10000%1000/100,y%100000%10000%1000%100/10,y%10);
}
else
{
a=y/100;
if(a>=22)
{
printf("19%d-%d%d",a,y%1000%100/10,y%10);
}
else if(a<10)
{
printf("200%d-%d%d",a,y%1000%100/10,y%10);
}
else
{
printf("20%d-%d%d",a,y%1000%100/10,y%10);
}
}
return 0;
}
7-12 比较大小 (10 分)
题目描述:
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
实现代码:
#include <stdio.h>
int main( )
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
int q=a;
a=b;
b=q;
}
if(b>c)
{
int y=b;
b=c;
c=y;
}
if(a>b)
{
int q=a;
a=b;
b=q;
}
if(b>c)
{
int y=b;
b=c;
c=y;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
7-13 用天平找小球 (10 分)
题目描述:
三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。
输入格式:
输入在一行中给出3个正整数,顺序对应球A、B、C的重量。
输出格式:
在一行中输出唯一的那个不一样的球。
输入样例:
1 1 2
输出样例:
C
实现代码:
#include <stdio.h>
int main( )
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a==b&&a!=c)
{
printf("C");
}
else if(a==c&&a!=b)
{
printf("B");
}
else
{
printf("A");
}
return 0;
}
7-14 日K蜡烛图 (15 分)
题目描述:

输入格式:
输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。
输出格式:
在一行中输出日K蜡烛的类型。如果有上、下影线,则在类型后加上with 影线类型。如果两种影线都有,则输出with Lower Shadow and Upper Shadow。
输入样例:
5.110 5.250 5.100 5.105
输出样例:
BW-Solid with Lower Shadow and Upper Shadow
输入样例:
5.110 5.110 5.110 5.110
输出样例:
R-Cross
输入样例:
5.110 5.125 5.112 5.126
输出样例:
R-Hollow
实现代码:
#include <stdio.h>
int main( )
{
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
if(a>d)
{
printf("BW-Solid");
if(b>a&&b>d&&c<a&&c<d)
{
printf(" with Lower Shadow and Upper Shadow");
}
else
{
if(c<a&&c<d)
{
printf(" with Lower Shadow");
}
if(b>a&&b>d)
{
printf(" with Upper Shadow");
}
}
}
else if(a<d)
{
printf("R-Hollow");
if(b>a&&b>d&&c<a&&c<d)
{
printf(" with Lower Shadow and Upper Shadow");
}
else
{
if(c<a&&c<d)
{
printf(" with Lower Shadow");
}
if(b>a&&b>d)
{
printf(" with Upper Shadow");
}
}
}
else
{
printf("R-Cross");
if(b>a&&b>d&&c<a&&c<d)
{
printf(" with Lower Shadow and Upper Shadow");
}
else
{
if(c<a&&c<d)
{
printf(" with Lower Shadow");
}
if(b>a&&b>d)
{
printf(" with Upper Shadow");
}
}
}
return 0;
}
题目描述:
科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。

洛希极限(Roche limit)是一个天体自身的引力与第二个天体造成的潮汐力相等时的距离。当两个天体的距离少于洛希极限,天体就会倾向碎散,继而成为第二个天体的环。它以首位计算这个极限的人爱德华·洛希命名。(摘自百度百科)
大天体密度与小天体的密度的比值开 3 次方后,再乘以大天体的半径以及一个倍数(流体对应的倍数是 2.455,刚体对应的倍数是 1.26),就是洛希极限的值。例如木星与地球的密度比值开 3 次方是 0.622,如果假设地球是流体,那么洛希极限就是 0.622×2.455=1.52701 倍木星半径;但地球是刚体,对应的洛希极限是 0.622×1.26=0.78372 倍木星半径,这个距离比木星半径小,即只有当地球位于木星内部的时候才会被撕碎,换言之,就是地球不可能被撕碎。 本题就请你判断一个小天体会不会被一个大天体撕碎。
输入格式:
输入在一行中给出 3 个数字,依次为:大天体密度与小天体的密度的比值开 3 次方后计算出的值(≤1)、小天体的属性(0 表示流体、1 表示刚体)、两个天体的距离与大天体半径的比值(>1 但不超过 10)。
输出格式:
在一行中首先输出小天体的洛希极限与大天体半径的比值(输出小数点后2位);随后空一格;最后输出 ^_^ 如果小天体不会被撕碎,否则输出 T_T。
输入样例:
0.622 0 1.4
输出样例:
1.53 T_T
实现代码:
#include <stdio.h>
int main( )
{
double a,c;
int b;
scanf("%lf%d%lf",&a,&b,&c);
switch(b)
{
case 0:if(a*2.455>c)
{
printf("%.2lf T_T",a*2.455);
}
else
{
printf("%.2lf ^_^",a*2.455);
}break;
case 1:if(a*1.26>c)
{
printf("%.2lf T_T",a*1.26);
}
else
{
printf("%.2lf ^_^",a*1.26);
}break;
}
return 0;
}
7-16 两个数的简单计算器 (10 分)
题目描述:
本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。
输出格式:
当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR。
输入样例:
-7 / 2
输出样例:
-3
输入样例:
3 & 6
输出样例:
ERROR
实现代码:
#include <stdio.h>
int main( )
{
int a,b;
char c;
scanf("%d %c %d",&a,&c,&b);
if(c=='+')
{
printf("%d",a+b);
}
else if(c=='-')
{
printf("%d",a-b);
}
else if(c=='*')
{
printf("%d",a*b);
}
else if(c=='/')
{
printf("%d",a/b);
}
else if(c=='%')
{
printf("%d",a%b);
}
else
{
printf("ERROR");
}
return 0;
}
7-17 A除以B (10 分)
题目描述:
真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。
输入格式:
输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。
输出格式:
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。
输入样例:
-1 2
输出样例:
-1/2=-0.50
输入样例:
1 -3
输出样例:
1/(-3)=-0.33
输入样例:
5 0
输出样例:
5/0=Error
实现代码:
#include <stdio.h>
int main( )
{
int a,b;
scanf("%d %d",&a,&b);
if(a==0)
{
if(b>0)
{
printf("%d/%d=0.00",a,b);
}
else if(b<0)
{
printf("%d/(%d)=0.00",a,b);
}
else
{
printf("%d/0=Error",a);
}
}
else
{
if(b>0)
{
printf("%d/%d=%.2lf",a,b,(double)(a)/b);
}
else if(b<0)
{
printf("%d/(%d)=%.2lf",a,b,(double)(a)/b);
}
else
{
printf("%d/0=Error",a);
}
}
return 0;
}

河南农业大学2020-2021第一学期程序设计基础-实验2
浙公网安备 33010602011771号