杭电OJ第11页地址
2000.ASCII码排序
Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qwe
asd
zxc
Sample Output
e q w
a d s
c x z
分析:此题是对字符的ASCII值进行排序,并且按照要求的格式进行输出。进行比较的方式与整数之间的大小比较一样。
#include<stdio.h>
void ASCIISort(){
char c1,c2,c3,temp;
while(scanf("%c%c%c",&c1,&c2,&c3)!=EOF){
//缓冲Enter产生的字符
getchar();
if(c1>c2){
temp=c1;
c1=c2;
c2=temp;
}
if(c1>c3){
temp=c1;
c1=c2;
c2=temp;
}
if(c2>c3){
temp=c2;
c2=c3;
c3=temp;
}
printf("%c %c %c\n",c1,c2,c3);
}
}
注:一些常见字符的ASCII值最好可以记住,例如A-Z,a-z,字符0-9。完整的ASCII编码对照表如下:
2001.计算两点间的距离
Problem Description
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
Input
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
Output
对于每组输入数据,输出一行,结果保留两位小数。
Sample Input
0 0 0 1
0 1 1 0
Sample Output
1.00
1.41
分析:此题直接使用两点的距离公式即可,此外需使用C语言中的sqrt()函数,即求正平方根。
#include <stdio.h>
#include <math.h>
void DisBtTP(){
double x1,y1,x2,y2,result;
while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF){
//double sqrt(double):计算一个非负实数的平方根,所在的头文件为math.h
result=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
printf("%.2lf\n",result);
}
}
2002.计算球体积
Problem Description
根据输入的半径值,计算球的体积。
Input
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。
Output
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。
Sample Input
1
1.5
Sample Output
4.189
14.137
分析:直接使用球体积公式V=4π/3*r^3即可,不过在标准的C语言中没有π这个符号及常量,一般在开发过程中是通过开发人员自己定义这个常量的,最常见的方式是使用宏定义:#define PI 3.1415927。
#include <stdio.h>
#include <math.h>
#define PI 3.1415927
void VolumeOfBall(){
double radius,result;
while(scanf("%lf",&radius)!=EOF){
//double pow(double x, double y):计算x的y次幂,所在的头文件为math.h
result=4/3*PI*pow(radius,3);
printf("%.3lf\n",result);
}
}
2003.求绝对值
Problem Description
求实数的绝对值。
Input
输入数据有多组,每组占一行,每行包含一个实数。
Output
对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。
Sample Input
123
-234.00
Sample Output
123.00
234.00
分析:此题可以直接使用C语言中的fabs()函数或者利用if语句来判断正负。
#include <stdio.h>
#include <math.h>
void FabsOfNum(){
double num;
while(scanf("%lf",&num)!=EOF){
//double fabs(double x):计算x的绝对值,所在的头文件为math.h
printf("%.2lf\n",fabs(num));
}
}
2004.成绩转换
Problem Description
输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
Input
输入数据有多组,每组占一行,由一个整数组成。
Output
对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:"Score is error!"。
Sample Input
56
67
100
123
Sample Output
E
D
A
Score is error!
分析:使用if语句或者switch语句即可,不过本题个人推荐使用switch,更加简洁明了。
#include <stdio.h>
void GradeConvert(){
int score;
while(scanf("%d",&score)!=EOF){
if(score<0 || score>100){
printf("Score is error!\n");
}else{
score/=10;
switch(score){
case 10:
case 9: printf("A\n"); break;
case 8: printf("B\n"); break;
case 7: printf("C\n"); break;
case 6: printf("D\n"); break;
default : printf("E\n"); break;
}
}
}
}