函数和递归(组合数,孪生素数,用指针实现变量交换,求解二院一次方程组)

来源:互联网 发布:第三方数据平台 编辑:程序博客网 时间:2024/05/21 01:53

组合数

组合数

刚开真的被骗了。嗯,书上说。及时最终答案在我们选择的数据范围内,计算的中间结果仍然可能溢出。

#include <stdio.h>double f(int x){    double k=1;    int i;    for(i=1;i<=x;i++)        k*=i;    return k;}int main() {    double m,n;    scanf("%f%f",&m,&n);    printf("%f\n",f(n)/(f(m)*f(n-m)));    return 0;}
输入:
201
输出:
1.000000

孪生素数

  • 谓词_predicata,用来判断某事物是否具有某种特性,通常命名为“is_xxx”。返回int,非0为真,0为假。
  • assert.h中的assert的宏来限制非法函数的调用。
输入m,输出两个数均不超过m的最大孪生素数。
#include <stdio.h>#include<assert.h>#include<math.h>int is_prime(int x){    int i,m;    assert(x>=0);    if(x==1) return 0;    m=floor(sqrt(x)+0.5);    for(i=2;i<=m;i++){        if(x%i==0)return 0;    }    return 1;}int main() {    int i,m;    scanf("%d",&m);    for(i=m-2;i>=3;i--){        if(is_prime(i)&&is_prime(i+2)){            printf("%d %d\n",i,i+2);            break;        }    }    return 0;}
输入:
1000
输出:
881 883

用指针实现变量交换

重点在于细节掌握
#include <stdio.h>int swap(int *a,int *b){    int t;//注意没有‘*’    t=*a;*a=*b;*b=t;}int main() {    int a=3,b=4;    swap(&a,&b);    printf("%d %d\n",a,b);    return 0;}

求解二元一次方程组

查了一下判断解的方法

100分 考点名称:二元一次方程组的解法

code:
#include <stdio.h>#include<assert.h>int main() {    double a,b,c,d,e,f;    scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f);//  assert(a*d!=b*c);    if(a*e==d*b) printf("no answer!");    else if(a/d==b/e) printf("many answer!");    else{        printf("%lf %lf",(e*c-b*f)/(a*e-b*d),(a*f-d*c)/(a*e-b*d));//手算的手算的    }    return 0;}
输入:
1 1 56 13 89
输出:
 -3.428571 8.428571
阅读全文
0 0
原创粉丝点击