㈠ 程序流程图与ns图区别和这两个的优缺点
程序流程图:优点:形象直观、容易理解;缺点:书写占空间大。
ns:优点:简洁易懂、修改容易;缺点:不直观、错误不容易排查。
㈡ ns结构流程图是什么
NS图是用于取代传统流程图的一种描述方式。 以 SP方法为基础,NS图仅含有下图 的5种基本成分,它们分别表示SP方法的几种标准控制结构。
NS图的优点:
首先,它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量;第二,NS图形象直观,具有良好的可见度。例如循环的范围、条件语句的范围都是一目了然的,所以容易理解设计意图,为编程、复查、选择测试用例、维护都带来了方便;第三,NS图简单、易学易用,可用于软件教育和其他方面。
NS图的缺点:
手工修改比较麻烦,这是有些人不用它的主要原因。
㈢ 用传统流程图表示该算法:依次将10个数输入,要求将其中最大的数输出
1、传统流程图如下图所示:
2、流程图思路详解:
(1)定义三个变量,分别是i(用于循环计数)、m(保存相对较大的数值)、a(输入的数值)。
(2)给循环变量i赋值。
(3)输入第一个数a,将a的值赋给m,初始化m的值
(4)进入循环,在循环中首先判断是否复合循环条件,如果符合条件,则输入新值a,用a的值和之前m的值进行比较,较大的值赋给m,循环变量i+1;不符合条件则输出存放保存相对较大的数值的变量m,得到结果
简单点说就是两数比较取大值保存,最后输出。
(3)ns流程图能描述简单算法吗扩展阅读:
流程图(Flow Chart):使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。流程图在汇编语言和早期的BASIC语言环境中得到应用。相关的还有一种PAD图,对PASCAL或C语言都极适用。
流程图是揭示和掌握封闭系统运动状况的有效方式。作为诊断工具,它能够辅助决策制定,让管理者清楚地知道,问题出在哪里,从而确定出可供选择的行动方案。
流程图的基本结构有:顺序结构,条件结构(又称选择结构),循环结构,分支结构。
㈣ 软件设计中,N-S图、PAD图、程序流程图、E-R图,这四种图分别表示什么意思,有什么区别
N-S图:也叫盒图,这种流程图将全部算法写在一个矩形框内,而且在框内还可以包含其它的从属于它的框。
PAD图:也叫问题分析图,用二维树形结构的图表示程序的控制流。
程序流程图:也叫程序框图,用统一规定的标准符号描述程序运行具体步骤的图形表示。
E-R图:也叫实体-联系图,用实体类型、属性和联系等方法,描述现实世界的概念模型。
1、表示方式的不同:
N-S图:用矩形框,将全部算法写入;PAD图:用二维树形结构表示;
程序流程图:用统一规定的标准符号表示;E-R图:用实体类型、属性和联系等方法表示。
2、优点不同:
N-S图:功能域明确,一眼就可以看出来;PAD图:程序结构十分清晰;
程序流程图:对控制流程的描绘很直观;E-R图:表达能力强,易于理解。
3、缺点不同:
N-S图:不能任意转移控制;PAD图:不如流程图易于执行;
程序流程图:不易表示数据结构;E-R图:数据和应用分离,ER仅分析数据及其联系。
(4)ns流程图能描述简单算法吗扩展阅读
N-S图特点:
1)NS图形象直观,功能域明确,具有良好的可见度;
2)很容易确定局部和全局数据的作用域;
3)不可能任意转移控制;
4)很容易表示嵌套关系及模块的层次关系;
5)复杂度接近代码本身,修改需要重画整个图;
6)它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量。
㈤ 排序算法的N-S流程图
我敲代码敲了一年都未做过流程图啊,上机考试时老师甚至都不让我们带草稿纸,说用不着(真正的程序员是不需要流程图的)
以下是我以前敲过的代码,随便复制了一些
//直接插入排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=1;i<=n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
int main(){
int i,j,*ar,n;
cin>>n;
ar=new int[n+1];
for(i=1;i<=n;i++)
cin>>ar[i];
for(i=2;i<=n;i++){
if(ar[i-1]>ar[i]){
ar[0]=ar[i];
for(j=i-1;ar[0]<ar[j];j--)
ar[j+1]=ar[j];
ar[j+1]=ar[0];
}
Print(ar,n);
}
cout<<endl;
return 0;
}
//折半插入排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=1;i<=n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
int main(){
int i,n,*ar,h,l,m;
cin>>n;
ar=new int[n+1];
for(i=1;i<=n;i++)
cin>>ar[i];
for(i=2;i<=n;i++){
ar[0]=ar[i];
l=1;
h=i-1;
while(l<=h){
m=(l+h)/2;
if(ar[0]<ar[m])
h=m-1;
else
l=m+1;
}
for(m=i;m>h+1;m--)
ar[m]=ar[m-1];
ar[h+1]=ar[0];
Print(ar,n);
}
return 0;
}
//希尔排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=1;i<=n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
void ShellInsert(int *ar,int n,int dk){
int i,j;
for(i=1+dk;i<=n;i++){
if(ar[i-dk]>ar[i]){
ar[0]=ar[i];
for(j=i-dk;j>0&&ar[0]<ar[j];j-=dk)
ar[j+dk]=ar[j];
ar[j+dk]=ar[0];
}
}
}
void ShellSort(int *ar,int n){
int i;
for(i=n/2;i>0;i/=2){ //以n/2为dk
ShellInsert(ar,n,i);
Print(ar,n);
}
}
int main(){
int n,*ar,i;
cin>>n;
ar=new int[n+1];
for(i=1;i<=n;i++)
cin>>ar[i];
ShellSort(ar,n);
return 0;
}
//冒泡排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=0;i<n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
int main(){
int n,*ar,t,i,j;
bool b=0;
cin>>n;
ar=new int[n];
for(i=0;i<n;i++)
cin>>ar[i];
for(i=1;i<n;i++){
b=0;
for(j=0;j<n-i;j++){
if(ar[j]>ar[j+1]){
t=ar[j];
ar[j]=ar[j+1];
ar[j+1]=t;
b=1;
}
}
Print(ar,n);
if(b==0)
break;
}
return 0;
}
//快速排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=0;i<n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
int Por(int *ar,int l,int h){
int k=ar[l];
while(l<h){
while(l<h&&k<=ar[h])
h--;
ar[l]=ar[h];
while(l<h&&k>=ar[l])
l++;
ar[h]=ar[l];
}
ar[l]=k;
return l;
}
void QSort(int *ar,int l,int h,int n){
if(l<h){
int m=Por(ar,l,h);
Print(ar,n);
QSort(ar,l,m-1,n);
QSort(ar,m+1,h,n);
}
}
int main(){
int i,*ar,n;
cin>>n;
ar=new int[n];
for(i=0;i<n;i++)
cin>>ar[i];
QSort(ar,0,n-1,n);
return 0;
}
//简单选择排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=0;i<n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
int main(){
int i,j,t,*ar,n,max;
cin>>n;
ar=new int[n];
for(i=0;i<n;i++)
cin>>ar[i];
for(i=0;i<n-1;i++){
max=i;;
for(j=i+1;j<n;j++){
if(ar[max]>ar[j])
max=j;
}
t=ar[max];
ar[max]=ar[i];
ar[i]=t;
Print(ar,n);
}
return 0;
}
//堆排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=1;i<=n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
void HeapAdjust(int *ar,int i,int n){
int j,t=ar[i];
for(j=i*2;j<=n;j*=2){
if(j<n&&ar[j]<ar[j+1])
j++;
if(t>ar[j])
break;
ar[i]=ar[j];
i=j;
}
ar[i]=t;
}
void HeapSort(int *ar,int n){
int i;
for(i=n/2;i>=1;i--)
HeapAdjust(ar,i,n);
Print(ar,n);
for(i=n;i>1;i--){
ar[0]=ar[i];
ar[i]=ar[1];
ar[1]=ar[0];
HeapAdjust(ar,1,i-1);
Print(ar,n);
}
}
int main(){
int *ar,i,n;
cin>>n;
ar=new int[n+1];
for(i=1;i<=n;i++)
cin>>ar[i];
HeapSort(ar,n);
return 0;
}
//非递归归并排序
#include<iostream>
using namespace std;
void Print(int *ar,int n){
int i;
for(i=0;i<n;i++)
cout<<ar[i]<<" ";
cout<<endl;
}
void MergeSort(int *ar,int n){
int i,*ar2,p,q,t,l,h,m;
ar2=new int[n];
for(i=1;i<n;i*=2){
l=0;
while(l<n){
p=t=l;
q=m=l+i;
if(m>=n)
break;
h=m+i;
if(h>n)
h=n;
while(p<m||q<h){
if(q>=h||(p<m&&ar[p]<=ar[q]))
ar2[t++]=ar[p++];
else
ar2[t++]=ar[q++];
}
l=h;
}
for(t=0;t<h;t++)
ar[t]=ar2[t];
Print(ar,n);
}
}
int main(){
int i,n,*ar;
cin>>n;
ar=new int[n];
for(i=0;i<n;i++)
cin>>ar[i];
MergeSort(ar,n);
return 0;
}
//基数排序
#include<iostream>
using namespace std;
typedef struct{
int num[10];
int next;
}Node;
Node sq[100];
int e[100];
int f[100];
void Distribute(int i,int n){
int t,j,k=sq[0].next;
for(j=0;j<n;j++){
t=sq[k].num[i];
if(f[t]==0)
f[t]=k;
else
sq[e[t]].next=k;
e[t]=k;
k=sq[k].next;
}
}
void Collect(){
int i,j;
for(i=0;i<10;i++){
if(f[i]!=0){
sq[0].next=f[i];
j=e[i];
break;
}
}
for(i++;i<10;i++){
if(f[i]!=0){
sq[j].next=f[i];
j=e[i];
}
}
}
void Print(int max,int n){
int i,j,k=sq[0].next;
for(i=0;i<n;i++){
for(j=max-1;j>=0;j--)
cout<<sq[k].num[j];
cout<<" ";
k=sq[k].next;
}
cout<<endl;
}
void RadixSort(int max,int n){
int i,j;
for(i=0;i<=n;i++)
sq[i].next=i+1;
for(i=0;i<max;i++){
for(j=0;j<10;j++)
e[j]=f[j]=0;
Distribute(i,n);
Collect();
Print(max,n);
}
}
int main(){
int i,j,imp,n,max=0;
cin>>n;
for(i=1;i<=n;i++){
cin>>imp;
for(j=0;j<10&&imp!=0;imp/=10)
sq[i].num[j++]=imp%10;
if(max<j)
max=j;
while(j<10)
sq[i].num[j++]=0;
}
RadixSort(max,n);
return 0;
}
㈥ )流程图是描述算法()的常用方式a.程序b.算法c.数据结构d.计算规则
流程图是描述算法数据结构的常用方式;答案选择C;
数据结构作为计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
(6)ns流程图能描述简单算法吗扩展阅读:
数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。
数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。
㈦ ns流程图的介绍
流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程。
㈧ 什么是N-S结构化流程图
用NS图作为详细设计的描述手段时,常需用两个盒子:数据盒和模块盒,前者描述有关的数据,包括全程数据、局部数据和模块界面上的参数等,后者描述执行过程。
NS图的优点:
首先,它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量;第二,NS图形象直观,具有良好的可见度。例如循环的范围、条件语句的范围都是一目了然的,所以容易理解设计意图,为编程、复查、选择测试用例、维护都带来了方便;第三,NS图简单、易学易用,可用于软件教育和其他方面。
NS图的缺点:
手工修改比较麻烦,这是有些人不用它的主要原因。
㈨ 算法的流程图描述
a
>
b
|
|
yes
no
|
|
a-b>c
a,b对调(该步箭头指向左边,即从a-b>c继续)
|
|
yes
no
|
|
输出不能
a+b>c
|
|
yes
no
|
|
输出不能
输出能
㈩ ns流程图的简介
N-S流程图
在使用过程中,人们发现流程线不一定是必需的,随着结构化程序设计方法的出现,1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式,这种流程图完全去掉了流程线,算法的每一步都用一个矩形框来描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。这种流程图同两位学者名字的第一个字母来命名,称为N-S流程图。