2算法----程序设计的灵魂

本文介绍了算法的基本特性,包括有穷性、确定性、输入输出等,并通过C语言展示了计算阶乘、排序、累加、判断整除等多个实例。讨论了流程图的结构化改造,如顺序、选择和循环结构,并提出了自顶向下、逐步细化等设计方法。此外,还涉及最大公约数的辗转相除法实现和数组中最大值的查找。
摘要由CSDN通过智能技术生成

算法的特性

1.有穷性 包含有限的步骤
2.确定性 每一个步骤都是确定的
3.有0个或多个输入 输入是指在执行算法时需要从外界取得的必要信息
4.有1个或者多个输出
5.有效性
怎样表示一个算法
1.用自然语言表示
2.流程图

计算5!

#include<stdio.h>
int main()
{
	int sum=1;
	for(int i =1;i<6;i++)
	{
	sum=sum*i;
	}
	printf("%d",sum);
	return 0;
 }

三种基本结构和改进的流程图
1.传统流程图的弊端
BS型算法 可靠性和可维护性难以保证
2.三种基本结构
(1)顺序结构
(2)选择结构
(3)循环结构
1当型循环结构
While型
直到型循环结构
Until型

得到结构化程序的方法:
(1)自顶而下
(2)逐步细化
(3)模块化设计
(4)结构化编码

输入a,b,c由小到大排序

#include<stdio.h>
int  main()
{
	int a,b,c,d;
	scanf("%d%d%d",&a,&b,&c);
	int max(int x,int y,int z, int m);
	max(a,b,c,d);
} 
int max(int x,int y,int z, int m)
{
if(x<y)
m=x;
x=y;
y=m;
if(y<z)
m=y;
y=z;
z=m;
if(x<y)
m=x;
x=y;
y=m;
printf("%d%d%d",x,y,z);
}

求1-100的累加和

#include<stdio.h>
int  main()
{
	int sum =0;
	for(int i=1;i<101;i++)
	{
		sum=sum+i;
	}
	printf("%d",sum);
}

判断一个数能否同时被3和5整除

#include<stdio.h>
int  main()
{
	int n;
	scanf("%d",&n);
	if(n%3 ==0)
	   if(n%5==0)
	   printf("%d能同时被3和5整除", n);
	   else
	   printf("%d不能同时被3和5整除", n);
	return 0;
}

求方程ax^2+bx+c=0的解(好像有点问题)

#include<stdio.h>
int  main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	float p,q,m;
	m = (b*b) - (4*a*c);
	float sqrt(float m);
	if(m>=0)
	{
	p =( -1*b + sqrt(m))/2*a;
	q =( -1*b - sqrt(m))/2*a;
	printf("%f%f",p,q);
}
else
{
	printf("无解");
} 
	return 0;
}
float sqrt(float m)
{
	float n;
	if(n*n == m)
	return(n);
}

求m n的最大公约数没写出来
网上示例 辗转相除法
能整除正整数m,n的任何数一定能整除m-qn=r(证明如下),因此整除n和r的任何数必定整除qn+r=m;所以{m,n}的公因子集合和{n,r}的公因子集合是一样的.特别地,{m,n}的最大公因子和{n,r}的最大公因子是一样的.

#include<stdio.h>
int  main()
{
    int m=119,n=544;
    int key=1,mod=0;
    if(m<=0||n<=0){
        printf("m或n只能为正整数!\n");
        return 0;
    }
    while(true){
        mod=m%n;
        if(mod==0){
            key=n;
            break;
        }
        m=n;
        n=mod;
    }
    printf("最大公约数:%d\n",key); 
	return 0;
}

输出10个数字里最大的数

#include<stdio.h>
int main()
{
	int a[10] = {1,5,0,7,555,4,777,22,43,15};
	int t,i;
	for(i=0;i<10;i++)
	{
		if(a[i] > a[i+1])
		{
			t = a[i];
			a[i] = a[i+1];
			a[i+1] = t;
		}
	}
	printf("%d",a[9]);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值