|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|