每日一学5
本帖最后由 6bingame 于 2024-11-28 15:19 编辑用流程图表示算法
课本例题练习
题1:求区间内10个随机整数中最大数、最小数
算法分析
求数据中的最大数和最小数主要采用“打擂”算法。以求最大数为例,可先用第1个数作为最大数,再用其与其他的数逐个比较,并用找到的较大数替换为最大数。
求最小数的方法与此类似。
流程图描述
(开始)
->[产生第一个随机数a1]
->
->[产生一个随机数ai]
->
{当i小于10时}->[输出max,min]->(结束)
{当i不小于10时}
->
{当max小于ai时}->->{当min大于ai时}->->回到第四步继续做判断直到输出结束
{当max不小于ai时}->{当min不大于ai时}->回到第四步继续做判断直到输出结束
解:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a1,ai,i;
int max,min;
a1=rand()%101+100; //产生一个之间的随机整数a1
printf("%d ",a1); //输出这个随机数
max=min=a1; //将产生的第1个随机数设为最大值和最小值
for(i=1;i<=10;i++) //再产生其余9个随机数,并计算出最大值和最小值
{
ai=rand()%101+100;//产生一个
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;
}
在算法设计中,流程图是一种常用的工具,用于形象化地表示算法的步骤和流程。流程图使用特定的图形符号来表示不同的操作和流向。以下是一些常用的流程图符号及其意义:
- **椭圆形(起止框)**:表示开始和结束。
- **矩形(处理框)**:表示一个处理步骤,例如计算、赋值等。
- **菱形(判断框)**:表示一个判断或条件分支,通常有"是"和"否"两条路径。
- **平行四边形(输入输出框)**:表示算法中的输入和输出操作。
- **箭头(流程线)**:表示流程的方向。
一个简单的流程图示例:
[开始] --> [输入两个数] --> [判断第一个数是否大于第二个数]
是 --> [输出第一个数] --> [结束]
否 --> [输出第二个数] --> [结束]
整体思路:
1. 从"开始"开始。
2. 按照流程图的指示执行步骤。
3. 遵循箭头指向进行下一步操作。
4. 遇到判断框时,根据条件结果选择不同的路径继续。
5. 最后到达"结束"。
通过这种图形化的方式,流程图可以帮助我们更直观地理解算法的逻辑和流程。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]