c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode

  1 #include <stdio.h>
  2 #include <math.h>
  3 #include <string.h>
  4
  5 char explode( char * str , char symbol );
  6
  7
  8 double distance ( int x1 , int y1 , int x2 , int y2 );                    // 求平面上2个坐标点的直线距离
  9 double circle_area( double radius );                                    // 求圆面积。 radius 半径
 10 double two_point_cacl_circle_area ( int x1 , int y1 , int x2 , int y2 );// 从两点坐标,求圆的面积
 11
 12 // 阶乘,递归方式实现。
 13 int jiecheng( int N );
 14
 15 // 递归方式,求2数的最大公约数
 16 int digui_gongyueshu( int a , int b );
 17 // 菲波那次数列
 18 int fibonacci( int N );
 19
 20 int main( int argc , char ** argv ){
 21     char * str = "4;5;6;18;26;31;42;57;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;89;90;91;93;94;95;96;97;98;99;100;101;102;103;104;105;1051;1052;1310;1023;1041;1203;1256;1259;1260;1270;1210;1209;1279;1282;1278;1211;1276;1275;1240;1236;1235;1234;1239;1281;1028;1026;1231;1232;1277;1042;1050;1019;1267;1266;1268;1295;1265;1264;1258;1289;1219;1218;1217;1216;1016;1252;1251;1250;1249;1245;1244;1215;1243;1242;1302;1255;1287;1241;1253;1230;1271;1272;1054;1283;1284;1285;1286;";
 22     char * result = "";
 23     char list = {};
 24     int x1 = 3 , y1 = 7 , x2 = 7 , y2 = 9; // 2个坐标
 25
 26     printf( "\n求阶乘的结果是:%d \n" , jiecheng( 4 ) );
 27
 28     printf( "\n平面上2个坐标x1( %d , %d ) , x2(  %d , %d ),的直线距离是:%f \n" , x1 , y1 , x2 , y2 ,  distance( x1 , y1 , x2 , y2 ) );
 29
 30     printf( "\n平面上2个坐标x1( %d , %d ) , x2(  %d , %d ),的直线距离作为圆的半径时,这个圆的面积是:%f \n" , x1 , y1 , x2 , y2 ,  two_point_cacl_circle_area( x1 , y1 , x2 , y2 ) );
 31
 32
 33     printf( "\n 8和5 的最大公约数是: %d " , digui_gongyueshu(  8 , 5 ) );
 34     printf( "\n 8和15 的最大公约数是: %d \n" , digui_gongyueshu(  8 , 15 ) );
 35
 36     int i = 0;
 37     for( ; i <= 8 ; ++i ){
 38         printf( "\n %d 的菲波那次数列 值是: %d " , i , fibonacci( i ) );
 39     }
 40
 41     //printf( "%s \n" , str );
 42     return 0;
 43 }
 44
 45 char explode( char * str , char symbol ){
 46     char list = {};
 47     int i = 0 , j = 0;
 48     int len = strlen( str ) ;
 49     // int len = sizeof( list ) / sizeof( int ); // 如果是int,float,double型, 通过sizeof()来计算list的长度
 50
 51     /*
 52     for( ; i < len ; ++i ){
 53         if( str[ i ] != symbol ){
 54             list[ j ] += str[i];
 55         }
 56         else{
 57             ++ j;
 58         }
 59     }
 60     */
 61
 62     return list;
 63 }
 64
 65
 66
 67 // 通过画勾股定理直角三角形 ,求平面上2个坐标点之间的巨鹿
 68 double distance ( int x1 , int y1 , int x2 , int y2 )  {
 69     int x = 0 , y = 0;
 70     double res = 0.0;
 71
 72     x = abs( x2 - x1 ); // 直角三角形的 勾
 73     y = abs( y2 - y1 ); // 直角三角形的 股
 74
 75     res = sqrt( x * x + y * y ) ; // 勾股定理 求 斜线
 76     return res;
 77 }
 78
 79 // 求圆面积。 radius 半径
 80 double circle_area( double radius ){
 81     double pi = 3.1416 ;
 82     return pi * radius * radius;
 83 }
 84
 85 // 从两点坐标,求圆的面积
 86 double two_point_cacl_circle_area ( int x1 , int y1 , int x2 , int y2 ){
 87     return circle_area( distance( x1 , y1 , x2 ,  y2 ) );
 88 }
 89
 90 // 阶乘,递归方式实现。
 91 int jiecheng( int N ){
 92     int res = 0 ;
 93
 94     // 先写1个,参数最小的情况的返回值
 95     if( N == 0 ){
 96         res = 1;
 97     }
 98     // 再写1个递归调用的情况。
 99     else{
100         res = N * jiecheng( N - 1 );
101     }
102     printf( "%d阶乘的结果:%d \n" , N , res );
103     // 完成递归。
104     return res;
105
106     /*
107         我们从数学上严格证明一下factorial函数的正确性。
108         刚才说了,factorial(n)的正确性依赖于factorial(n-1)的正确性,
109         只要后者正确,在后者的结果上乘个n返回这一步显然也没有疑问,那么我们的函数实现就是正确的。
110
111         因此要证明factorial(n)的正确性就是要证明factorial(n-1)的正确性,
112         同理,要证明factorial(n-1)的正确性就是要证明factorial(n-2)的正确性,
113
114         依此类推下去,最后是:要证明factorial(1)的正确性就是要证明factorial(0)的正确性。
115
116
117         而factorial(0)的正确性不依赖于别的函数,它就是程序中的一个小的分支return 1;,
118         这个1是我们根据阶乘的定义写的,肯定是正确的,因此factorial(1)也正确,
119         因此factorial(2)也正确,
120         依此类推,最后factorial(n)也是正确的。
121
122         其实这就是中学时讲的数学归纳法(Mathematical Induction),
123         用数学归纳法来证明只需要证明两点:Base Case正确,递推关系正确。
124     */
125 }
126
127
128 // 递归方式,求2数的最大公约数
129 int digui_gongyueshu( int a , int b ){
130     int res = 0 ;
131     if( a % b == 0 ){
132         res = b;
133     }
134     else{
135         res = digui_gongyueshu( b , a % b );
136     }
137     return res;
138
139     /*
140         1、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:
141
142           1. 如果a除以b能整除,则最大公约数是b。
143           2.否则,最大公约数等于b和a%b的最大公约数。
144
145         Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。
146     */
147 }
148
149 // 菲波那次数列
150 int fibonacci( int N ){
151     int res = 0 ;
152
153     if( N == 1 || N == 0 ){
154         res = 1;
155     }
156     else{
157         res = fibonacci( N - 1 ) + fibonacci( N - 2 );
158     }
159     return res;
160 }
161
162     

时间: 2024-08-05 02:27:36

c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode的相关文章

求菲波那契数列的第n个数

1,2,3,5,8,13..... 求第n个数 def get_num(n): if n == 1: return 1 if n == 2: return 2 return get_num(n - 1) + get_num(n - 2) def get_num(n): if n == 1: return 1 if n == 2: return 2 a = 1 b = 2 for i in range(n - 2): a, b = b, a + b return b分为递归和循环两个求法

求菲波拉契数列第n项的值

public int Solution(int n) { if(n < 3) { return 1; }else { int[] arr = new int[n]; arr[0] = 1; arr[1] = 1; for(int i = 3;i <= n;i++) { arr[i] = arr[i-1] + arr[i-2]; } return arr[n]; } }

菲波那契数列,求第k个数的值

题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子成长到第三个月后每个月又生一对兔子,假如兔子不死,问每个月兔子的总数是多少? 1 //菲波那契数列,输出第k个数的值 2 #define _CRT_SECURE_NO_WARNINGS 3 #include <stdio.h> 4 5 int FibonacciNum(int n){ 6 if (n < 0){ 7 return -1; 8 } 9 if (n == 0){ 10 return 0; 11 } 12 else

已知空间三点组成的面求该面上某点的Z值

已知空间三点,那么可以就可以确定空间三点组成的平面.此时可以根据某一点的X值和Y值,来求取该点在平面上的Z值.这个过程对于求三角面片上某点的高程或者权值特别有用,其本身也可以看作一种线性插值. 其算法思路也特别简单,首先算出其三点组成的平面法向量(可参看<已知三点求平面法向量>);然后根据平面法向量\(n=(A,B,C)\)和平面上某点\(m=(x0,y0,z0)\),有平面的点法式方程: \[ A(X-x0)+B(Y-y0)+C(Z-z0)=0 \] 最后根据欲求点的X.Y值,代入公式解算Z

(hdu step 6.1.2)Eddy&#39;s picture(在只给出二维坐标点的情况下,求让n个点连通的最小费用)

题目: Eddy's picture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 172 Accepted Submission(s): 126   Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to be

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <

【c语言】求斐波那契数列的前40个数。特点,第1,2个数为1,从第三个数开始,该数是前面两个数之和

// 求斐波那契数列的前40个数.特点,第1,2个数为1,从第三个数开始,该数是前面两个数之和 #include <stdio.h> int main() { int a = 1; int b = 1; int c,i; printf("%d\t%d\t",a,b); for(i = 3; i <= 40; i++) { c = a + b; printf("%d\t",c); a = b; b = c; } printf("\n&quo

算法导论-求(Fibonacci)斐波那契数列算法对比

目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 .自底向上算法(Bottom-up) 5. 递归平方算法(Recursive squaring) 6.完整代码(c++) 7.参考资料 内容 1.斐波那契数列(Fibonacci)介绍 Fibonacci数列应该也算是耳熟能详,它的递归定义如上图所示. 下面2-6分别说明求取Fibonacci数列的

c++入门第一天(求圆的面积)

看了一会书,发现C++和C虽然于发上相似,但是解决问题的方式还是不一样的,毕竟面向对象和面向过程是两种不同的思维方式.下面就通过一个求圆的面积的例子,比较C和C++的不同. 需求:输入圆的半径,求解圆的面积 使用C语言来解决:1.定义两个变量半径r.面积s;  2.输入半径;  3.打印结果. 以下是源代码: #include <stdio.h> int main01() { double r, s; //定义变量圆和半径 printf("请输入圆的半径:"); scanf