马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 6bingame 于 2024-11-28 15:19 编辑
用流程图表示算法
课本例题练习
题1:求区间[100,200]内10个随机整数中最大数、最小数
算法分析
求数据中的最大数和最小数主要采用“打擂”算法。以求最大数为例,可先用第1个数作为最大数,再用其与其他的数逐个比较,并用找到的较大数替换为最大数。
求最小数的方法与此类似。
流程图描述
(开始)
->[产生第一个随机数a1]
->[max<-a1 min<-a1]
->[产生一个随机数ai]
->[i<10?]
{当i小于10时}->[输出max,min]->(结束)
{当i不小于10时}
->[max<ai?]
{当max小于ai时}->[max<-ai]->[min>ai?]{当min大于ai时}->[min<-ai]->回到第四步继续做判断直到输出结束
{当max不小于ai时}->[min>ai?]{当min不大于ai时}->回到第四步继续做判断直到输出结束
解:#include<stdio.h>
#include<stdlib.h>
int main()
{
int a1,ai,i;
int max,min;
a1=rand()%101+100; //产生一个[100,200]之间的随机整数a1
printf("%d ",a1); //输出这个随机数
max=min=a1; //将产生的第1个随机数设为最大值和最小值
for(i=1;i<=10;i++) //再产生其余9个随机数,并计算出最大值和最小值
{
ai=rand()%101+100; //产生一个[100,200]
printf("%d",ai); //输出这个随机数
if(ai>max) //若产生的随机整数比之前的最大值还大,则将该值作为最大值
max=ai;
if(ai<min) //若产生的随机整数比之前的最小值还小,则将该值作为最小值
min=ai;
}
printf("\n最大值为:%d,最小值为:%d\n",max,min); //输出这10个数的最大值和最小值
return 0;
}
用N-S图表示算法
题2:求两个数的最大公约数
算法分析
求最大公约数通常“辗转相除法”
S1比较两数,并使m大于n
S2将m作被除数,相除后余数为r
S3将m<-n,n<-r
S4若r=0,则m为最大公约数,结束循环。若r不等于0,执行步骤2和3
解:#include<stdio.h>
int main()
{
int m,n,r,t;
int m1,n1;
printf("请输入第1个数:");
scanf("%d",&m); //由用户输入第1个数
printf("\n请输入第2个数:");
scanf("%d",&n); //由用户输入第2个数
m1=m; n1=n; //保存原始数据供输出使用
if(m<n)
{
t=m;
m=n;
n=t;
} //m,n交换值,使m存放大值,n存放小值
do //使用辗转相除法求得最大公约数
{
r=m%n;
m=n;
n=r;
}
while(r!=0);
printf("%d和%d的最大公约数是%d\n",m1,n1,m);
return 0;
}
|