Go: package main

import (
	"fmt"
	"math"
)

func main() {
	n := scanInt()
	for i := 0; i < n; i++ {
		circleTriangle()
	}
}

func scanInt() int {
	var n int
	fmt.Scanf("%d", &n)
	return n
}

func circleTriangle() {
	var x1, y1, x2, y2, x3, y3 float64
	fmt.Scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3)
	a := 2 * (x1 - x2)
	b := 2 * (y1 - y2)
	c := 2 * (x1 - x3)
	d := 2 * (y1 - y3)
	e := x1*x1 - x2*x2 + y1*y1 - y2*y2
	f := x1*x1 - x3*x3 + y1*y1 - y3*y3

	px := (d*e - b*f) / (a*d - b*c)
	py := (a*f - c*e) / (a*d - b*c)

	r := math.Sqrt((x1-px)*(x1-px) + (y1-py)*(y1-py))
	fmt.Printf("%.3f %.3f %.3f\n", px, py, r)
}

C++: #include<iostream>
#include<vector>
#include<complex>
using namespace std;    

typedef complex<double> P;

double cross(P a, P b){
  return (a.real()*b.imag() - a.imag()*b.real());
}

int main()
{
  int i,j;
  int n;
  P point[3],ans;

  cin >> n;
  for(i=0;i<n;i++){

    for(j=0;j<3;j++){
      cin >> point[j].real() >> point[j].imag();
    }

    P p01 = point[0] + point[1];
    P p12 = point[1] + point[2];
    P p012 = P(p01.real()/2 , p01.imag()/2);
    P p122 = P(p12.real()/2 , p12.imag()/2);
    P n1 = (point[0] - p012) * P(0,1) + p012;
    P n2 = (point[1] - p122) * P(0,1) + p122;

    ans = n1 + (p012-n1) * cross(p122-n2,n2-n1) / cross(p122-n2,p012-n1);
    cout.precision(4);
    cout << showpoint << real(ans) << " " << imag(ans) << " " << abs(point[0]-ans) << endl;
  }
  return 0;
}

C++: #include <iostream>
#include <vector>
//#include <math.h>
//#include <string>
#include <cmath>
#include <iomanip>

int main();
double round(double dSrc, int iLen);

int main(){
	int cnt = 0;		//データセットの個数
	double x1, y1, x2, y2, x3, y3;
	std::vector<double> p;		//外接円の中心のx座標
	std::vector<double> q;		//外接円の中心のy座標
	std::vector<double> r;		//外接円の半径
	
	std::cin >> cnt;
	for (int i = 0; i < cnt; i++){
		std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
		p.push_back(((y1 - y3) * (pow(y1, 2) - pow(y2, 2) + pow(x1, 2) - pow(x2, 2)) - (y1 - y2) * (pow(y1, 2) - pow(y3, 2) + pow(x1, 2) - pow(x3, 2))) / (2 * (y1 - y3) * (x1 - x2) - 2 * (y1 - y2) * (x1 - x3)));
		q.push_back(((x1 - x3) * (pow(x1, 2) - pow(x2, 2) + pow(y1, 2) - pow(y2, 2)) - (x1 - x2) * (pow(x1, 2) - pow(x3, 2) + pow(y1, 2) - pow(y3, 2))) / (2 * (x1 - x3) * (y1 - y2) - 2 * (x1 - x2) * (y1 - y3)));
		r.push_back(sqrt((pow((p[i] - x1), 2) + pow((q[i] - y1), 2))));
		
		/*
		int temp = p[i];
		if (p[i] - temp != 0){
			p[i] = round(p[i], 3);
		}

		temp = q[i];
		if (q[i] - temp != 0){
			q[i] = round(q[i], 3);
		}
		
		temp = r[i];
		if (r[i] - temp != 0){
			r[i] = round(r[i], 3);
		}

		std::cout << std::fixed << std::setprecision(3) << p[i] << " ";
		std::cout << std::fixed << std::setprecision(3) << q[i] << " ";
		std::cout << std::fixed << std::setprecision(3) << r[i] << std::endl;
		*/
	}
	///*
	for (int i = 0; i < cnt; i++){
		int temp = p[i];
		if (p[i] - temp != 0){
			p[i] = round(p[i], 3);
		}

		temp = q[i];
		if (q[i] - temp != 0){
			q[i] = round(q[i], 3);
		}
		
		temp = r[i];
		if (r[i] - temp != 0){
			r[i] = round(r[i], 3);
		}

		std::cout << std::fixed << std::setprecision(3) << p[i] << " ";
		std::cout << std::fixed << std::setprecision(3) << q[i] << " ";
		std::cout << std::fixed << std::setprecision(3) << r[i] << std::endl;
	}
	//*/
	//while (1);
	return 0;
}

/**
* 指定桁で四捨五入を行う
* args:数値, 四捨五入する桁数
* return:結果
* 参考:http://oresi.hatenablog.com/entry/2014/06/23/【C%2CC%2B%2B】指定桁数で端数処理%EF%BC%88切り上げ、切り下げ
*/
double round(double dSrc, int iLen)
{
	double	dRet;

	dRet = dSrc * pow(10.0, iLen);
	dRet = (double)(int)(dRet + 0.5);

	return dRet * pow(10.0, -iLen);
}

C++: #include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
using namespace std;
typedef vector <double> vd;
typedef vector <vd> vvd;

vvd inverse(vvd &x){
	vvd tmp(2, vd(2));
	if (x.size()!=2) return tmp;
	double a, b, c, d, e;
	a = x[0][0];
	b = x[0][1];
    c = x[1][0];
	d = x[1][1];
    e = 1.0 / (a*d-b*c);
	tmp[0][0] = d * e;
	tmp[0][1] = -b * e;
	tmp[1][0] = -c * e;
	tmp[1][1] = a * e;
	return tmp;
}

vvd Mmult(vvd &A, vvd &B){
    int n1=A.size();
    int n2=A[0].size();
	int n3=B[0].size();
	vvd C(n1, vd(n3));
	for (int i=0; i<n1; i++)
		for (int j=0; j<n3; j++)
			C[i][j] = 0;

    for (int i=0; i<n1; i++)
		for (int j=0; j<n2; j++)
			for (int k=0; k<n3; k++)
				C[i][k] += A[i][j] * B[j][k];
    return C;
}

int main(void){
    int n;
	double x1, y1, x2, y2, x3, y3, dx1, dy1, dx2, dy2;
	vvd A(2, vd(2)), B(2, vd(1));
	cin>>n;
	for (int i=1; i<n+1; i++){
		cin>>x1>>y1>>x2>>y2>>x3>>y3;
		dx1 = x2 - x1;
		dy1 = y2 - y1;
		dx2 = x3 - x1;
		dy2 = y3 - y1;
		A[0][0] = -dx1;
		A[0][1] = dy1;
		A[1][0] = -dx2;
		A[1][1] = dy2;
		B[0][0] = -dx1*(x1+x2)/2 + dy1*(y1+y2)/2;
		B[1][0] = -dx2*(x1+x3)/2 + dy2*(y1+y3)/2;
		B = Mmult(inverse(A), B);

		double r = pow(pow(B[0][0]-x1,2)+pow(B[1][0]-y1,2), 0.5);
	    cout<<fixed<<setprecision(3);
		cout<<B[0][0]<<" "<<B[1][0]<<" "<<r<<endl;
	}
    return 0;
}

C++: #include <stdio.h>
#include <math.h>

int main () {
	int n;
	float x1, x2, x3, y1, y2, y3;
	float m1, m2, b1, b2;
	float x, y, r, hx, hy;
	scanf("%d", &n);
	while (n--) {
		scanf("%f %f %f %f %f %f" , &x1, &y1, &x2, &y2, &x3, &y3);
		if (y1 == y2) {
			x = (x1 + x2) / 2.0;
			m2 = (y3 == y1) ? 0 : (y3 - y1) / (x3 - x1);
			hx = (x1 + x3) / 2.0;
			hy = (y1 + y3) / 2.0;
			b2 = m2 * hx + hy;
			y = -m2 * x + b2;
		} else if (y1 == y3) {
			x = (x1 + x3) / 2.0;
			m1 = (y2 == y1) ? 0 : (y2 - y1) / (x2 - x1);
			hx = (x1 + x2) / 2.0;
			hy = (y1 + y2) / 2.0;
			b1 = m1 * hx + hy;
			y = -m1 * x + b1;
		} else {
			m1 = (x2 == x1) ? 0 : (y2 - y1) / (x2 - x1);
			m2 = (x3 == x1) ? 0 : (y3 - y1) / (x3 - x1);
			hx = (x1 + x2) / 2.0;
			hy = (y1 + y2) / 2.0;
			b1 = m1 * hx + hy;
			hx = (x1 + x3) / 2.0;
			hy = (y1 + y3) / 2.0;
			b2 = m2 * hx + hy;
			x = (b1 - b2) / (m1 - m2);
			y = -m1 * x + b1;
		}
		printf("%.3f %.3f %.3f\n", x, y, sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1)));
	}
	return 0;
}

C++: #include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
    int k;
	double x[3],y[3],a,b,c,d,e,f,l,m,n;
    cin>>k;
	while(k-->0){
        cin>>x[0]>>y[0]>>x[1]>>y[1]>>x[2]>>y[2];
        a=2*(x[1]-x[0]);
        b=2*(y[1]-y[0]);
        c=(x[1]*x[1])+(y[1]*y[1])-(x[0]*x[0])-(y[0]* y[0]);
        d=2*(x[2]- x[0]);
        e=2*(y[2]- y[0]);
        f=(x[2]*x[2])+(y[2]*y[2])-(x[0]*x[0])-(y[0]*y[0]);
        l=(c*e-f*b)/(a*e-d*b);
        m=(c*d-f*a)/(b*d-e*a);
        n=sqrt((l-x[0])*(l-x[0])+(m-y[0])*(m-y[0]));
        printf("%.3f %.3f %.3f\n",l,m,n);
    }
    return 0;
}

C++:  /*
Write a program which prints the central coordinate (px, py) and the radius r of a circumscribed circle of a triangle which is constructed by three points (x1, y1)(x2, y2)(x3, y3) on the plane surface.
 */

void solve(double a, double b, double c, double d, double e, double f) {
	double px,py,r;
	// ¼ñªüñÂÌð_ y-y1 = y2-y1 / x2-x1 * x-x1 -> y2-y1=a, x2-x1=b, y = a/b*x - a/b*x1-y1 -> y = -b/a*x + c
	double sl1 = -1*(c-a)/(d-b);			// (x1, y1)-(x2, y2)Ì¼ñªüÌX«
	double sl2 = -1*(e-c)/(f-d);			// (x2, y2)-(x3, y3)Ì¼ñªüÌX«
	double mid1x = (a+c)/2; double mid1y = (b+d)/2;
	double mid2x = (c+e)/2; double mid2y = (d+f)/2;
	double t1 = mid1y-sl1*mid1x;
	double t2 = mid2y-sl2*mid2x;
	// y = sl1*x - t1 Æ y = sl2*x - t2 ðA§B -> sl1*x - t1 = sl2*x - t2 -> (sl1-sl2)*x = t1 - t2
	px = (t1-t2)/(sl1-sl2);
	py = sl1*px - t1;
	r = sqr(px,py,a,b);
	printf("%4.3f %4.3f %4.3f",px,py,r);
}

double sqr(double a, double b, double c, double d) {
	// ñÂÌ_Ì£ðßé\bh
	double s = sqrt(pow(max(a,c)-min(a,c), 2) + pow(max(b,d)-min(b,d), 2));
	return s;
}

int main() {
	int n; cin >> n;
	double x1, y1, x2, y2, x3, y3;
	for (int i=0; i<n; i++) {
		cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
		solve(x1,y1,x2,y2,x3,y3);
	}
	return 0;
}