小算法集结

1.计算一元二次方程。

注意事项  a必须大于0

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
    //b方减去4倍的ac赋值给 变量d 规则:d>0则有俩实数根 d<0则没有 d=0则有一个
    double a, b, c, d, x1, x2;
    //输入三个数空格隔开
    scanf("%lf %lf %lf", &a, &b, &c);
    if (a) {
        d = b * b - 4 * a * c; 
        if (d > 0) {
            x1 = (-b + sqrt(d)) / (2 * a);
            x2 = (-b - sqrt(d)) / (2 * a);
            printf("x1=%.2lf,x2=%.2lf", x1, x2);
        }
        else if (d == 0)
        {
            x1 = x2 = (-b) / 2;
            printf("x1=%.2lf,x2=%.2lf", x1, x2);
        }
        else {
            printf("无实数根");
        }
 
    }
    else {
        printf("请输入a大于0的数");
    }
    return 0;
}

2.判断闰年

#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{	
	int year;
	//请输入年份         口诀:跟4取余等于0 "且" 跟100取余不等于0 "或" 跟400取余等于0
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		printf("%d是闰年", &year);
	else
		printf("%d不是闰年", year);
 
	return 0;
}

3.斐波那契数列。

#define _CRT_SECURE_NO_WARNINGS
#include 
 
void main() {
    //输出0到n的斐波那契数
	int t1 = 0, t2 = 1, n, nextNum;
	//请输入n
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		printf("%-4d", t1);
		nextNum = t1 + t2;
		t1 = t2;
		t2 = nextNum;
	}
 
}

4.最大公约数

 

#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
//辗转相除法
int main()
{
    int a, b;
    int t;
    scanf("%d %d", &a, &b);
    while (b != 0) {
        t = a % b;
        a = b;
        b = t;
        printf("a=%d b=%d t=%d\n", a, b, t);
    }
    printf("最大公约数是%d\n", a);
    return 0;
}
#include 
int gys(int,int);
//递归方法
int main()
{
   int n1, n2;
   printf("输入两个正整数: ");
   scanf("%d %d", &n1, &n2);
 
   printf("%d 和 %d 的最大公约数为 %d", n1, n2, gys(n1,n2));
   return 0;
}
 
int gys(int n1, int n2)
{
    if (n2 != 0)
       return hcf(n2, n1%n2);
    else 
       return n1;
}

5.最小公倍数

#include "stdio.h"

int gys(int m, int n){   //定义函数 
    if(m % n == 0)    return n;
    else  return gcd(n, m%n);   //辗转相除法 
}
void main() {
    int a,b, t,zxgbs;     
    printf("请输入两个数:");
    scanf("%d%d",&a,&b);
    if(a < b)  {t=a, a=b, b=t; }  //确保 a>b 
    
    t = gys(a, b);  // 递归调用 
    printf("%d和%d的最大公约数是:%d\n",a,b,t); 
    
    zxgbs = (a * b)/ t;  // 两个数的乘积除最大公约数就是最小公倍数
    printf("%d和%d的最小公倍数是:%d",a,b,lcm);    
}
#include 
int main()
{
    int n1, n2, minMultiple;
    printf("输入两个正整数: ");
    scanf("%d %d", &n1, &n2);
 
    // 判断两数较大的值,并赋值给 minMultiple
    minMultiple = (n1>n2) ? n1 : n2;
 
    // 条件为 true
    while(1)
    {
        if( minMultiple%n1==0 && minMultiple%n2==0 )
        {
            printf("%d 和 %d 的最小公倍数为 %d", n1, n2,minMultiple);
            break;
        }
        ++minMultiple;
    }
    return 0;
}

6.阶乘

#include 
long int multiplyNumbers(int n);
//递归阶乘
int main()
{
    int n;
    printf("输入一个整数: ");
    scanf("%d", &n);
    printf("%d! = %ld", n, multiplyNumbers(n));
    return 0;
}
long int multiplyNumbers(int n)
{
    if (n > 1)
        return n*multiplyNumbers(n-1);
    else
        return 1;
}

7.计算一个数的n次方

#include 
int main()
{
    int base, exponent;
 
    long long result = 1;
 
    printf("基数: ");
    scanf("%d", &base);
 
    printf("指数: ");
    scanf("%d", &exponent);
 
    while (exponent != 0)
    {
        result *= base;
        --exponent;
    }
    printf("结果:%lld", result);
 
    return 0;
}
#include 
#include 
 //使用pow()函数
int main()
{
    double base, exponent, result;
 
    printf("基数: ");
    scanf("%lf", &base);
 
    printf("指数: ");
    scanf("%lf", &exponent);
 
    // 计算结果
    result = pow(base, exponent);
 
    printf("%.1lf^%.1lf = %.2lf", base, exponent, result);
 
    return 0;
}
//递归
#include 
 
int power(int n1, int n2);
 
int main()
{
    int base, powerRaised, result;
 
    printf("基数: ");
    scanf("%d",&base);
 
    printf("指数(正整数): ");
    scanf("%d",&powerRaised);
 
    result = power(base, powerRaised);
 
    printf("%d^%d = %d", base, powerRaised, result);
    return 0;
}
 
int power(int base, int powerRaised)
{
    if (powerRaised != 0)
        return (base*power(base, powerRaised-1));
    else
        return 1;
}

8.判断回文数

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;

#include 
 
int main()
{
    int n,num,newnum = 0, item;
 
    printf("输入一个整数: ");
    scanf("%d", &n);
    num = n;
 
    // 翻转
    while( n!=0 )
    {
        item = n%10;
        newnum = newnum*10 + item;
        n /= 10;
    }
 
    // 判断
    if (num == newnum)
        printf("%d 是回文数。", num);
    else
        printf("%d 不是回文数。", num);
    
    return 0;
}

9.判断素数

质数又称素数,有无限个。质数定义为在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数,这样的数称为质数。(只能被1和它本身整除的数是素数)

#include 
 
int main()
{
    int n, i, flag = 0;
 
    printf("输入一个正整数: ");
    scanf("%d",&n);
 
    for(i=2; i<=n/2; ++i)  {
        // 符合该条件不是素数
        if(n%i==0)  {
            flag = 1;
            break;
        }
    }
    if (flag==0)
        printf("%d 是素数",n);
    else
        printf("%d 不是素数",n);
    
    return 0;
}
#include 
 //判断两个数之间的素数
int checkPrimeNumber(int n);
int main()
{
    int n1, n2, i, flag;
 
    printf("输入两个正整数: ");
    scanf("%d %d", &n1, &n2);
    printf("%d 和 %d 间的素数为: ", n1, n2);
 
    for(i=n1+1; i

你可能感兴趣的:(C语言简单算法,算法)