吉林大学967-高级语言程序设计-2014

2014-1
//验证哥德巴赫猜想
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//判断素数
bool isPrim(int n) {
	int i;
	for (i = 2; i <= sqrt(n); i++) {
		if (n%i == 0)
			return false;
	}
	return true;
}
void gdbh(int n) {
	int i,j;
	//创建数组存储区间内的所有素数
	int *Prim = (int *)malloc(n*sizeof(int *));
	//遍历判断并填充数组
	for (i = 2; i < n; i++) {
		if (isPrim(i))
			Prim[i - 2] = i;
		else
			Prim[i - 2] = 0;
	}
	//暴力方法,验证匹配哥德巴赫猜想
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			if (n == Prim[i] + Prim[j] && Prim[i] < Prim[j]) {
				printf("%d=%d+%d\n",n,Prim[i],Prim[j]);
			}
		}
	}
}
int main() {
	int n = 0;
	scanf("%d",&n);
	gdbh(n);
	system("pause");
	return 0;
}



2014-2
//输入ABCD四个坐标,假设ABC可以组成一个三角形,判断D不在ABC中
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 4
//定义点的结构体
struct Point {
	float x, y;
};
//计算p1-p2,并返回计算后的点
Point decPoint(Point p1, Point p2) {
	Point p;
	p.x = p1.x - p2.x;
	p.y = p1.y - p2.y;
	return p;
}
//计算2点叉乘p1*p2
float multiPoint(Point p1, Point p2) {
	float result;
	result = p1.x*p2.y - p1.y*p2.x;
	return result;
}
//计算3点叉乘p1*p2*p3
float multiPoint(Point p1, Point p2, Point p3) {
	float result;
	result = multiPoint(decPoint(p1,p2),decPoint(p3,p2));
	return result;
}
//精度控制
int sign(float x) {
	float eps = 1e-8;
	if (fabs(x) < eps)
		return 0;
	if (x > 0)
		return 1;
	return -1;
}
int main() {
	Point p[N];
	int sgn[N - 1];
	int i;
	p[0].x = 0.0; p[0].y = 1.0;
	p[1].x = 3.0; p[1].y = 3.0;
	p[2].x = 4.0; p[2].y = 4.0;
	p[3].x = 5.0; p[3].y = 5.0;
	//for (i = 0; i < N; i++) {
	//	scanf("%f,%f",&p[i].x,p[i].y);
	//}
	sgn[0] = sign(multiPoint(p[0],p[1],p[3]));
	sgn[1] = sign(multiPoint(p[1], p[2], p[3]));
	sgn[2] = sign(multiPoint(p[2], p[0], p[3]));
	if (sgn[0] == 0 || sgn[1] == 0 || sgn[2] == 0)
		printf("Point of D is on the triangle");
	else if (sgn[0] == sgn[1] == sgn[2])
		printf("Point of D in on the triangle");
	else
		printf("Point of D in out of the triangle");
	system("pause");
	return 0;
}


2014-3
//为了进行高精度的计算,我们可以用一个数组表示一个整数,一个数组元
//素表示整数一位,396可以用数组A表示,即A[1]=6,A[2]=9,A[3]=3.编写一
//个函数计算这样表示的两个整数,和存放在C中.注:假设不会超过100位.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define M 100
//大整数加法
void BigSum(char *A, char *B,char *C) {
	int la = strlen(A), lb = strlen(B);	//获取大整数的长度
	int lmax = la > lb?la:lb;
	int i, j,k=M;
	int r=0;	//进位数
	int temp;
	//char *C = (char*)malloc((lmax+ 1)*sizeof(char*));
	//char C[M + 1] = { 0 };
	for (i = la-1, j = lb-1; i >=0&&j >=0; i--, j--) {
		temp = (A[i] - '0') + (B[j] - '0') + r;
		C[k--] = temp % 10;
		r = temp / 10;
	}
	if (la > lb) {
		for (; i >= 0; i--) {
			temp = A[i] - '0' + r;
			C[k--] = temp % 10;
			r = temp / 10;
		}
	}
	else if (la < lb) {
		for (; j >= 0; j--) {
			temp = B[j] - '0' + r;
			C[k--] = temp % 10;
			r = temp / 10;
		}
	}
	else {
		C[k--] = r;
	}

}
int main() {
	int i, j;
	char A[M], B[M], C[M + 1] = { 0 };
	gets_s(A);
	gets_s(B);
	BigSum(A, B,C);
		for (i =0; i <M-1; i++)
			if (C[i])
				break;
		//输出
		for (j = i; j<M+1; j++)
			printf("%d", C[j]);
	system("pause");
	return 0;
}



2014-4
//已知平面有100个点,假设任意三个可以组成三角形,输入100个点,输出最大
//的三角形的面积
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 4
struct Point {
	double x, y;
};
Point decPoint(Point p1,Point p2) {
	Point p;
	p.x = p1.x - p2.x;
	p.y = p1.y - p2.y;
	return p;
}
double multiPoint(Point p1,Point p2) {
	double result;
	result = (p1.x - p2.y)*(p2.x - p1.y);
	return result;
}
double area(Point p1, Point p2, Point p3) {
	double area;
	area = fabs(multiPoint(decPoint(p1,p2),decPoint(p1,p3)));
	return area;
}

int main() {
	int i, j, k;
	double maxArea=0;
	Point p[N];
	p[0].x = 0.0; p[0].y = 1.0;
	p[1].x = 3.0; p[1].y = 3.0;
	p[2].x = 4.0; p[2].y = 4.0;
	p[3].x = 5.0; p[3].y = 5.0;
	for (i = 0; i < N; i++)
		for (j = i+1; j < N; j++)
			for (k = j+1; k<N;k++){
			if (area(p[i], p[j], p[k])>maxArea)
				maxArea = area(p[i], p[j], p[k]);
		}
	printf("maxArea:%f",maxArea);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36109528/article/details/86231522