zl程序教程

您现在的位置是:首页 >  后端

当前栏目

杭电OJ第11页2000~2004算法题(C语言)

C语言算法 11 2000 OJ 杭电
2023-09-27 14:25:46 时间


杭电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;
			}
		}
	}
} 

杭电OJ第11页2005~2009算法题(C语言)