某岛

… : "…アッカリ~ン . .. . " .. .
November 12, 2010

C 语言讲稿 … [编辑中…]

C 语言讲稿 —— 各种有启发性的 C 语言阅读用小例子…

  • Day 1 “Hello, Rukata … “
  • Day 2 “Print Snow Pattern. … …”
  • 一组打印图形的例子。主要用于熟悉 For 循环 和 if 条件语句。

  • Day 3 “A problem in ACM..”
  • 介绍 “乐学网” 的一个练习,一步步优化到 O(n)。

  • Day 4 “Between the Circles …”
  • 引导设计一些几何结构,在编码过程中,提供尽可能多的 “最佳实践” 方面的建议,开始偏向 “设计” 和 “表达” 的部分而暂跳过所有语言细节的部分… 等待时间。

    4-1 : 设计一个结构用以描述圆,具有一个成员变量描述半径,返回周长和面积的函数。[演示]

    4-2 :
    (1) 设计一个结构描述三角形,记录三边长,返回周长和面积。
    (Point:面积函数的设计。)
    (2)追加bool isRtTriangle() 函数返回是否是直角三角形。
    增加 int type() 成员函数判断三角形的类型。
    (Point:规则化与对用户的输入做要求?… 三值函数的设计。)

    4-3:继续圆,在习题4-1的基础上增加成员函数描述圆心坐标,增加函数 int f(Circle C1, Circle C2) 返回两个圆之间的位置关系(。#)…
    (Point:函数返回值具有某种神秘属性?…)

#include 
using namespace std;

const double PI = 3.14;

double sqr(double r){
	return r*r;
}

struct Circle{
	double r;
	double f(){
		return 2*PI*r;
	}
	double g(){
		return PI*sqr(r);
	}
};

Circle C;

int main(){
	while (cin >> C.r){
		cout << C.f() << " " << C.g() << endl;
	}
}
#include 
#include 
using namespace std;

struct Triangle{
	double a, b, c;
	double f(){
		return a + b + c;
	}
	double g(){
		double p = f() / 2;
		return sqrt(p*(p-a)*(p-b)*(p-c));
	}
};

Triangle T;

int main(){
	while (cin >> T.a >> T.b >> T.c){
		cout << T.f() << " " << T.g() << endl;
	}
}
#include 
#include 
using namespace std;

int sign(double x){
	if (x<0) return -1;
	else if (x>0) return 1;
	return 0;
}

struct Triangle{
	double a, b, c;
	
	Triangle(): a(0), b(0), c(0){
	}
	
	Triangle(double _a, double _b, double _c): a(_a), b(_b), c(_c){
		if (a < b) swap(a, b);
		if (a < c) swap(a, c);
		if (b < c) swap(b, c);
	}
	
	double f(){
		return a+b+c;
	}
	double g(){
		double p = (a+b+c) / 2;
		return sqrt(p*(p-a)*(p-b)*(p-c));
	}
	int type(){
		return sign(a*a - (b*b+c*c));
	}
	
	bool isRtTriangle(){  // . @
		return type()==0;
	}
	// -1 : Ruijiao..
	// 0 : Zhijiao
	// 1 : Dunjiao..
};


int main(){
	double a, b, c;
	while (cin >> a >> b >> c){
		Triangle T(a, b, c);
		cout << T.type() << endl;
	}
}
#include 
#include 
using namespace std;

const double PI = 3.14;


int sign(double x){
	if (x<0) return -1;
	else if (x>0) return 1;
	return 0;
}

double dist(double x1, double y1, double x2, double y2){
	return	sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
}


struct Circle{
	double r;
	double x0, y0;
	double f(){
		return 2*r*PI;
	}
	double g(){
		return PI*r*r;
	}
};


int f(Circle C1, Circle C2){
	double d1 = dist(C1.x0, C1.y0, C2.x0, C2.y0);  // 圆心距。@
	double d2 = C1.r + C2.r;   // 半径和...
	double d3 = fabs(C1.r - C2.r); //半径差的绝对值..
	

	if (d1 > d2) return 2;		  // 相离.
	else if (d1 < d3) return -2;  // 内含...
	else if (d1 == d2) return 1;  // 外切..
	else if (d1 == d3) return -1; // 内切...
	return 0; //相交.. Orz
}


Circle C1, C2;

int main(){
	while (cin >> C1.x0 >> C1.y0 >> C1.r){
		cin >> C2.x0 >> C2.y0 >> C2.r;
		cout << f(C1, C2) << endl;
	}
}