C 语言讲稿 —— 各种有启发性的 C 语言阅读用小例子…
- Day 1 “Hello, Rukata … “
- Day 2 “Print Snow Pattern. … …”
- Day 3 “A problem in ACM..”
- Day 4 “Between the Circles …”
…
一组打印图形的例子。主要用于熟悉 For 循环 和 if 条件语句。
介绍 “乐学网” 的一个练习,一步步优化到 O(n)。
引导设计一些几何结构,在编码过程中,提供尽可能多的 “最佳实践” 方面的建议,开始偏向 “设计” 和 “表达” 的部分而暂跳过所有语言细节的部分… 等待时间。
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;
}
}