Language: C++

/**計算幾何学の問題を解く際に利用するクラス******/
//http://skyblueryu.blog54.fc2.com/blog-entry-27.html
#define _USE_MATH_DEFINES
#include <cmath>
#include <vector>
#define EPS (pow(M_E,(double)-10))
//マクロの書式については 
//http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01030.html
#define equals(a, b) (fabs((a) - (b)) < EPS)
using namespace std;

class Point{
public:
	double x,y;

	//以下の記法に関しては
	//http://ameblo.jp/nana-2007-july/entry-10037680575.html
	Point(double x = 0,double y = 0): x(x), y(y) {};

	/***演算子のオーバーロード***********/
	Point operator + (Point p) { return Point(x + p.x,y + p.y);}
	Point operator - (Point p) { return Point(x - p.x,y - p.y);}
	Point operator * (double a) { return Point(a*x,a*y);}//スカラー倍
	Point operator / (double a) { return Point(x/a,y/a);}//スカラー倍
	/***********************************/

	double norm() { return x*x+y*y;}//ベクトルのノルムを返す
	double abs() { return sqrt(norm());}//ベクトルの長さを返す

	/***演算子のオーバーロード2***********/
	//Pointはクラスオブジェクトなのでサイズが大きく値渡しは適さない
	//Point &pという記法は参照渡しでポインタでない変数
	//に対してアドレスを引数にとりたい場合に使う．
	//参照渡しとポインタ渡しについては以下
	//http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1320144958
	//http://homepage2.nifty.com/well/Reference.html#PASS_BY_REFERENCE
	//
	//Point &pの前のconst修飾子は関数内で引数のオブジェクトの内容を
	//勝手に書き換えないようにするために付けている．(const Point &p)
	//の後のconstはこの関数がconstメンバ関数であることを意味する．
	//constメンバ関数に関して詳しくは以下
	//http://www.s-cradle.com/developer/sophiaframework/tutorial/Cpp/const.html

	bool operator < (const Point &p) const{
		//(条件)?(処理1):(処理2)
		//条件が真なら処理1，偽なら処理2が実行される
		return x != p.x ? x < p.x :y < p.y;
	}

	bool operator == (const Point &p) const{
		return fabs(x - p.x) < EPS && fabs(y - p.y) < EPS;
	}
	/*************************************/

};

typedef Point Vector;

//ベクトルaとbの内積を計算する関数
//これは参照渡しじゃなくていいんかいという疑問は正直ある
double dot(Vector a,Vector b){
	//double dot(const Vector& a,const Vector& b){
	return a.x*b.x + a.y*b.y;
}

//ベクトルaとbの外積を計算する関数
double cross(Vector a,Vector b){
	//double cross(const Vector& a,const Vector& b){
	return a.x*b.y - a.y*b.x;
}



//線分を表す構造体
struct Segment{
	Point p1, p2;
};
typedef Segment Line;

//円を表すクラス
class Circle {
public:
	Point c;
	double r;
	Circle(Point c = Point(),double r = 0.0):c(c), r(r) {}
};

//多角形の表現(多角形は点の列で表現できる)
typedef vector<Point> Polygon;


int main(){
	Point p1,p2;
	int Q;
	scanf("%lf %lf",&p1.x,&p1.y);
	scanf("%lf %lf",&p2.x,&p2.y);
	scanf("%d",&Q);//クエリ数

	Vector d((p2.x-p1.x),(p2.y-p1.y));//方向ベクトル
	double abs = d.abs();
	d.x = d.x/abs;
	d.y = d.y/abs;

	Point p;
	Vector v;//p1→p
	Vector proj;
	for(int q = 0;q < Q;q++){
		scanf("%lf %lf",&p.x,&p.y);

		v.x = p.x - p1.x;
		v.y = p.y - p1.y;
		proj.x = d.x * dot(v,d);
		proj.y = d.y * dot(v,d);
		
		printf("%lf %lf\n",proj.x + p1.x,proj.y + p1.y);
	}
	return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:95:9: error: 'scanf' was not declared in this scope
   95 |         scanf("%lf %lf",&p1.x,&p1.y);
      |         ^~~~~
a.cc:115:17: error: 'printf' was not declared in this scope
  115 |                 printf("%lf %lf\n",proj.x + p1.x,proj.y + p1.y);
      |                 ^~~~~~
a.cc:6:1: note: 'printf' is defined in header '<cstdio>'; this is probably fixable by adding '#include <cstdio>'
    5 | #include <vector>
  +++ |+#include <cstdio>
    6 | #define EPS (pow(M_E,(double)-10))