算法的特性
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;
}