第6章 顺序代码(2014版)

合集下载

C语言程序谭浩强第四版 第六章课后习题解析

C语言程序谭浩强第四版 第六章课后习题解析

1.程序如下:#include "stdio.h"#include<math.h>void main(){ int i,j,n,a[101];for(i=1;i<=100;i++)a[i]=i;a[1]=0;for(i=2;i<=sqrt(100);i++)for(j=i+1;j<=100;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0;}printf("\n");for(i=2,n=0;i<=100;i++){if(a[i]!=0){printf("%5d",a[i]);n++;}if(n==10){printf("\n");n=0;}}printf("\n");}运行结果:2.程序如下:#include "stdio.h"void main(){ int i,j,min,temp,a[11];printf("enter data:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("\n");printf("The orginal numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\nThe sorted numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}运行结果:3.程序如下:#include "stdio.h"void main(){ int a[3][3],sum=0;int i,j;printf("enter data:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%3d",&a[i][j]);for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%6d\n",sum); }运行结果:4.程序如下:#include "stdio.h"void main(){ int a[11]={1,4,6,9,12,15,19,32,45,100}; int temp1,temp2,number,end,i,j;printf("arry a:\n");for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");printf("insert data:");scanf("%d",&number);end=a[9];if(number>end)a[10]=number;else{for(i=0;i<10;i++){if(a[i]>number){temp1=a[i];a[i]=number;for(j=i+1;j<11;j++){temp2=a[j];a[j]=temp1;temp1=temp2;}break;}}}printf("Now arry a:\n");for(i=0;i<11;i++)printf("%5d",a[i]); printf("\n");}运行结果:5.程序如下:#include "stdio.h"#define N 5void main(){ int a[N],i,temp;printf("enter arry a:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);printf("arry a:\n");for(i=0;i<N;i++)printf("%4d",a[i]);for(i=0;i<N/2;i++){ temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nNow,arry a:\n");for(i=0;i<N;i++)printf("%4d",a[i]);printf("\n");}运行结果:6.程序如下:#include "stdio.h"void main(){ int i,j,n=0,a[31][31]={0};while(n<1||n>30) /*最多可输出30行*/ {printf("请输入杨辉三角形的行数:");scanf("%d",&n);}for(i=0;i<n;i++)a[i][0]=1; /*第一列全置为一*/ for(i=1;i<n;i++)for(j=1;j<=i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; /*每个数是上面两数之和*/ for(i=0;i<n;i++) /*输出杨辉三角*/{ for(j=0;j<=i;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:7.程序如下:#include "stdio.h"void main(){ int a[15][15],i,j,k,p,n;p=1;while(p==1){printf("enter n(n=1--15):");scanf("%d",&n);if((n!=0)&&(n<=15)&&(n%2!=0))p=0;}//初始化for(i=1;i<=n;i++);for(j=1;j<=n;j++);a[i][j]=0;//建立魔方阵j=n/2+1;a[1][j]=1;for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i=i+2;j=j-1;}else{if(i<1) i=n;if(j>n) j=1;}if(a[i][j]==0)a[i][j]=k;else{i=i+2;j=j-1;a[i][j]=k;}}//输出魔方阵for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%5d",a[i][j]);printf("\n");}}运行结果:(错误)8.程序如下:#include "stdio.h"#define N 4#define M 5void main(){ int i,j,k,a[N][M],max,maxj,flag;printf("please input matrix:\n");for(i=0;i<N;i++)for(j=0;j<M;j++)scanf("%d",&a[i][j]);for(i=0;i<N;i++){max=a[i][0];maxj=0;for(j=0;j<M;j++)if(a[i][j]>max){max=a[i][j];max=j;}flag=1;for(k=0;k<N;k++)if(max>a[k][maxj]){flag=0;continue;}if(flag){printf("a[%d][%d]=%d\n",i,maxj,max);break;}}if(!flag)printf("It is not exist!\n");}运行结果:9.程序如下:#include "stdio.h"#define N 15void main(){ int i,number,top,bott,mid,loca,a[N],flag=1,sign;char c;printf("enter data:\n");scanf("%d",&a[0]);i=1;while(i<N){scanf("%d",&a[i]);if(a[i]>=a[i-1])i++;elseprintf("enter this data again:\n");}printf("\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");while(flag)printf("input number to look for:");scanf("%d",&number);sign=0;top=0;bott=N-1;if((number<a[0])||(number>a[N-1]))loca=-1;while((!sign)&&(top<=bott)){mid=(bott+top)/2;if(number==a[mid]){loca=mid;printf("Has found %d,its position is %d\n",number,loca+1);sign=1;}else if(number<a[mid])bott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)printf("cannot find %d.\n",number);printf("continue or not(Y/N)?");scanf("%c",c);if(c=='N'||c=='n')flag=0;}运行结果:(死循环)10.程序如下:#include "stdio.h"void main(){ int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for(i=0;i<3;i++){ printf("please input line %d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!=0;j++){ if (text[i][j]>='A'&&text[i][j]<='Z')upp++;else if (text[i][j]>='a'&&text[i][j]<='z')low++;else if (text[i][j]>='0'&&text[i][j]<='9')dig++;else if (text[i][j]==' ')spa++;elseoth++;}}printf("\nupper case:%d\n",upp);printf("lower case:%d\n",low);printf("digit :%d\n",dig);printf("space :%d\n",spa);printf("other :%d\n",oth); }14.#include<stdio.h>main(){int i,ans;char str1[100],str2[100];printf("input string 1:");gets(str1);printf("input string 2:");gets(str2);i=0;while((str1[i]==str2[i]) && (str1[i]!='\0')) i++;if((str1[i]=='\0') && (str2[i]=='\0'))ans=0;elseans=str1[i]-str2[i];printf("\nans:%d\n",ans);}15.#include<stdio.h>#include<string.h>main(){int i;char str1[100],str2[100];printf("input string 2:");scanf("%s",str2);for(i=0;i<=strlen(str2);i++)str1[i]=str2[i];printf("str1:%s\n",str1); }。

第六章 报关单基础习题1

第六章 报关单基础习题1

第六章报关单基础习题1一、单选题。

(每题1分)1、海关规定对在海关注册登记的企业给予10位数代码编号,称为“经营单位代码”。

在下列选项中指出10位数代码的正确组成规定()。

A.地区代码、企业性质代码和顺序代码B.企业详细地址代码、特殊地区代码、企业性质代码和顺序代码C. 企业所在省、直辖市代码特殊地区、代码、企业性质代码和顺序代码D.企业的属地行政区代码、经济区代码、企业性质代码和企业顺序代码答案:D解析:要熟悉报关单位经营单位的填写要求,经营单位由中文名称及经营单位编码组成。

为了海关管理需要,经营单位代码由10位数组成。

第5、第6位所代表的含义要掌握记忆。

2、下列关于报关单的提运号一栏填报叙述错误的是()。

A.水路运输填报进出口运单号,如有分提运单的,填“提运单号*分运单号”B.汽车运输填报进口运单号C.航空运输无分运单的填报总运单号D.无实际进出境的,本栏目为空答案:B解析:汽车运输免于填报。

3、海关规定进口货物的进口日期是指()。

A.申报货物办结海关进口手续的日期B.向海关申报货物进口的日期C.运载货物的运输工具申报进境的日期D.所申报货物进入海关监管场地或仓库的日期答案:C解析:进口日期为运载所申报货物的运输工具申报进境的日期。

4、中国某公司自新加坡购买一批英国生产的货物,从新加坡起运经香港转运至中国,填写报关单时起运国(地区)为()。

A.英国B.新加坡C.中国香港D.不用填答案:B解释:本题进口的货物发生中转,但在香港中转的时候并没有发生买卖关系,因为货物是由新加坡的公司卖给我国的企业的,起运国为新加坡,不是中国香港,香港为装货港,英国为原产国。

5、我国某进出口公司(甲方)与新加坡某公司(乙方)签订一出口合同,合同中订明,甲方向乙方出售5000件衬衫,于2010年4月10日在上海装船,途经香港运往新加坡。

在签订合同时甲方得知乙方还要将该批货物从新加坡运往智利。

根据上述情况填写报关单时,以下哪种填写正确。

第6章 系统设计

第6章  系统设计

(5)物理系统配置方案设计 ● 系统工作模式设计 ● 硬件配置 ● 软件设计 ● 网络设计方案 (6)系统实施方案及说明

真题1.模块结构图中,表示模块的符号是(
A)
A.矩形框
B.箭头 C.空心圆
D.实心圆
真题2.如果数据流程图呈束状结构,则称它为( B )
A.变换型数据流程图 B.事务型数据流程图
D.可变性原则,经济性原则,可操作性原则,可扩展性原则
真题1. 为提高模块的独立性,应通过低___耦合___和高内聚的原则
、运行和维护阶段】

真题1. 从开发内容的角度看,系统设计可以划分为___逻辑___设计和物理 设计两个层面。
真题2. 模块的导出类型分事务型和___变换___型。
真题3. 数据库设计的全过程包括用户需求分析、概念结构设计、___逻辑 结构___设计、物理结构设计、数据库的实施、数据库实施、运行与维护等 六个阶段。
一种度量。也就是说,内聚是对模块内各处理动作组合强度的一
种度量。一个模块的内直接调用同一个低层模块的模 块的个数。 扇出系数是指直接隶属于一个模块的模块个数,即一个模 块直接调用其它模块的个数。
(3)作用范围与控制范围。判断的作用范围是指所有受该判断 影响的模块;模块的控制范围是指模块本身及其所有下属模块 。作用范围应在控制范围之内。
次输入得到多次利用,保证系统的一致性和完整性。 (2)灵活性和可维护性原则。系统应灵活,对环境的变化有很
强的适应性。因此要求尽量采用模块化结构,提高各部分的独 立性,尽量减少各个子系统之间的数据依赖性,可维护性是灵 活性的一个方面。 (3)可靠性原则。是指系统受外界干扰时的抵御力与恢复能力。 衡量系统可靠性的指标有平均故障时间、平均维护时间、安全 保密性和抗病毒能力等。 (4)经济性原则。提高效益、降低成本。硬件上不必过分追求 先进。

C程序设计第六章答案

C程序设计第六章答案

实验六数组练习6.2代码如下:#include <iostream>using namespace std;int main(){int num, max = 0, count = 1;//user input 6 numbersfor (int i = 0; i < 6; i++){cout << "Enter a number: ";cin >> num;//if number entered > max, max = num, count = 1 again.if (num > max){max = num;count = 1;}else if (num == max){count++;}}//displaycout << "The largest number is " << max <<endl;cout << "The largest number appears " << count << " times\n";return 0;}练习6.4代码如下:#include <iostream>using namespace std;int main (){int score[40];int upcount = 0, downcount = 0, equalcount = 0, count = 0,i = 0, j = 0, sum = 0;//input the arrays, and when user enter a minus, stop inputingdo{cout << "Please enter less than 40 students' score, if you want to stop entering you can enter a minus.\n";cout << "You have entered " << count << " scores\n";cin >> j;if ((j >= 0) && (j <= 100)){score[i] = j;j++;count++;i++;}else if (j > 100){cout << "You should enter a correct score";}}while (j >= 0);//compute the sum of the arraysfor (i = 0; i < count; i++){sum += score[i];}//compute the averageint average = sum / count;for (i = 0; i < count; i++){if (score[i] > average){upcount++;}else if (score[i] == average){equalcount++;}else if (score[i] < average){downcount++;}}//display the resultcout << "The summer scores among " << count << " students is " << sum << endl;cout << "The average scores among " << count << " students is "<< average << endl;cout << "There are(is) " << upcount << " student's(s') scores are(is) higher than average.\n";cout << "There are(is) " << equalcount << " student's(s') scores are(is) equal to average.\n";cout << "There are(is) " << downcount << " student's(s') scores are(is) lower than average.\n";return 0;}练习6.6代码如下:#include <iostream>#include <iomanip>using namespace std;bool isPrime (int num);int main (){int prime[50];for (int i = 0, num = 2; i < 50; num++){if ( isPrime(num) ){prime[i] = num;i++;}}for (int i = 0, count = 0; i < 50; i++){cout << setw(6) << prime[i];count++;if (10 == count){cout << endl;count = 0;}}system("pause");return 0;}//this function called isPrime is used to judge an integer is prime or not... bool isPrime (int num){bool isPrime = true;for (int i = 2; i <= sqrt( (double)num ); i++){if (0 == num %i){isPrime = false;break;}}return isPrime;}练习6.8代码如下:#include <iostream>using namespace std;int average(int array[], int size);double average(double array[], int size);int main (){int array1[6] = {1,2,3,4,5,6};double array2[7] = {6.0,4.4,1.9,2.9,3,4,3.5};//display the resultcout << average(array1,6) << endl << average(array2,7) << endl;return 0;}//the kind of integerint average(int array[], int size){double sum = 0;for (int i = 0; i < size; i++){sum += array[i];}return sum / size;}//the kind of integerdouble average(double array[], int size) {double sum = 0;for (int i = 0; i < size; i++){sum += array[i];}return sum / size;}练习6.10代码如下:#include <iostream>using namespace std;void min (int array[], int size);int main (){int array[8] = {2,2,4,5,10,100,2,2};min(array,8);return 0;}//打印最小元的下标void min (int array[], int size){int min = array[0];int xiabiao[10];int j = 0;for (int i = 0; i < size; i++){if ( array[i] <= min ){min = array[i];xiabiao[j] = i;j++;}}int k = j;j = 0;//保存最小元下标的个数cout << "The min of the array(s) is " << min << endl;cout << "The subscript of the minnest number is(are) ";for (; j < k; j++){cout << xiabiao[j] << endl;}}练习6.12代码如下:#include <iostream>using namespace std;void reverse (int soure[], int size);//swapvoid reverse (int soure[], int size){for (int i = 0; i < (size / 2); i++){swap ( soure[i], soure[size-1-i] );}}//check the void reverse is right or notint main (){int array[6] = {1,2,3,4,5,6};reverse (array, 6);for (int i = 0; i < 6; i++){cout << array[i] << endl;}return 0;}练习6.14代码如下:#include <iostream>#include <ctime>using namespace std;int main (){int num[100000];srand ( time(0) );for (long i = 0; i < 100000; i++){num[i] = rand();}//生成关键字int key = rand();cout << "关键字是" << key << endl;//开始计时long startTime1 = time(0);for (int i = 0; i < 100000; i++){if (key == num[i]){cout <<"关键字的下标是"<< i <<endl;}}long endTime1 = time(0);long time1 = endTime1 - startTime1;cout << "顺序搜索时间是" << time1 <<"秒\n\n";//二分搜索int low = 0;int high = 99999;//对数组进行排序,现在开始第二次计时long startTime2 = time(0);for (long i = 9999;i >= 1; i--){int xiabiao = 0, lagest = num[0];for (long j = 1;j <= i; j++){if ( num[j] > lagest ){lagest = num[j];xiabiao = j;}}//swapif ( xiabiao != i){num[xiabiao] = num[i];num[i] = lagest;}}while (high >= low){int mid = (low + high) / 2;if (key < num[mid]){high = mid - 1;}else if (key == num[mid]){cout << "关键字下标是" << mid << endl;break;}else{low = mid + 1;}}long endTime2 = time(0);long time2 = endTime2 - startTime2;cout << "排序和二分搜索花费时间是" << time2 << "秒\n\n";system("pause");return 0;}练习6.16代码如下:#include <iostream>using namespace std;void turn ( double arrays[], int size);int main (){double arrays[7] = {6.0,4.4,1.9,2.9,3.4,2.9,3.5};turn(arrays, 7);for (int i = 0; i < 7; i++){cout << arrays[i] << " ";}system("pause");return 0;}//起泡排序void turn ( double arrays[], int size){bool changed = true;do{changed = false;for (int i = 0; i < size - 1; i++){if (arrays[i] > arrays[i+1]){swap(arrays[i], arrays[i+1]);changed = true;}}} while (changed);}练习6.18代码如下:#include <iostream>using namespace std;int main (){int arrays[4][4] = {{1,2,4,5},{6,7,8,9},{10,11,12,13},{14,15,16,17}};int sum = 0;for (int i = 0, j = 0; i < 4; i++,j++){sum += arrays[i][j];}cout << "主对角线之和为" << sum << endl;system("pause");return 0;}练习6.20代码如下:#include <iostream>using namespace std;void turn ( int arrays[], int size);int main(){int time[8][7] = {{2,4,3,4,5,8,8},{7,3,4,3,3,4,4},{3,3,4,3,3,2,2},{9,3,4,7,3,4,1},{3,5,4,3,6,3,8},{3,4,4,6,3,4,4},{3,7,4,8,3,8,4},{6,3,5,9,2,7,9}};int sumofRow[8] = {0,0,0};for (int row = 0; row < 8; row++){for (int i = 0; i < 7; i++){sumofRow[row] += time[row][i];}}turn(sumofRow, 8);for (int i = 7; i >= 0; i--){cout << sumofRow[i] << endl;}system("pause");return 0;}//排序void turn ( int arrays[], int size){bool changed = true;do{changed = false;for (int i = 0; i < size - 1; i++){if (arrays[i] > arrays[i+1]){swap(arrays[i], arrays[i+1]);changed = true;}}} while (changed);}练习6.22代码如下:#include <iostream>using namespace std;//compute the sumvoid mutiplyMatrix (int a[][5],int b[][5],int c[][5],int rowsize){for (int i = 0; i < rowsize; i++){for (int j = 0; j < rowsize; j++){for (int k = 0; k < rowsize; k++){c[i][j] += (a[i][k] + b[k][j]);}}}}int main (){int a[5][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};int b[5][5] = {{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}};int c[5][5] = {{0,0,0,0,0},{0},{0},{0},{0}};mutiplyMatrix(a,b,c,5);for (int i = 0; i < 5; i++){for (int j = 0; j < 5; j++){cout << c[i][j] << endl;}}system("pause");return 0;}练习6.24代码如下:#include <iostream>#include <ctime>using namespace std;int main(){srand( time(0) );int chess[8][8];//随机输入0和1,并输出8*8列表for (int i = 0; i < 8; i++){for (int j = 0; j < 8; j++){chess[i][j] = rand() % 2;cout << chess[i][j];}cout << endl;}//计算每行的和for (int row = 0; row < 8; row++){int sumofrow = 0;for (int column = 0; column < 8; column++){sumofrow += chess[row][column];}if (0 == sumofrow){cout << "All 0s on row" << row + 1 << endl;}else if (8 == sumofrow){cout << "All 1s on row" << row + 1 << endl;}}//计算每列的和for (int column = 0; column < 8; column++){int sumofcolumn = 0;for (int row = 0; row < 8; row++){sumofcolumn += chess[row][column];}if (0 == sumofcolumn){cout << "All 0s on column" << column + 1 << endl;}else if (8 == sumofcolumn){cout << "All 1s on column" << column + 1 << endl;}}//计算两个对角线的和int sumofsubdiagonal1 = 0, sumofsubdiagonal2 = 0;for (int row = 0, column = 0; row < 8; row++,column++){sumofsubdiagonal1 += chess[row][7 - column];sumofsubdiagonal2 += chess[row][column];}if ( 0 == sumofsubdiagonal1 ){cout << "All 0s on subdiagonal1" << endl;}else if ( 8 == sumofsubdiagonal1 ){cout << "All 1s on subdiagonal1" << endl;}if ( 0 == sumofsubdiagonal2 ){cout << "All 0s on subdiagonal2" << endl;}else if ( 8 == sumofsubdiagonal2 ){cout << "All 1s on subdiagonal2" << endl;}system("pause");return 0;}练习6.26代码如下:#include <iostream>using namespace std;int factors(int num, int table[][2]){/*从i=2开始除,若不能被i整除则i++;若能被i整除则输出i,且num变成num除以i的商,重新把2赋值给i,循环。

Visual FoxPro程序设计实例教程第6章 结构化程序设计基础

Visual FoxPro程序设计实例教程第6章  结构化程序设计基础
在程序设计过程中,一般要完成数据的输入、 处理和输出3个部分的设计,有些数据是需要程序 在执行过程中用户输入的。VFP提供了此类命令, 常用的有3 1)INPUT 格式:INPUT [<提示信息>] TO <内存变量 名> 功能:在屏幕上输出[<提示信息>],并等待 用户通过键盘输入表达式,再将表达式的值赋给指 定的<内存变量>
30
分支结构体现了程序运行过程中的自我判断能 力,分支结构能够根据指定条件的当前值在两条或
31
图6.8 IF支结构
32
1)IF 格式:(IF<条件表达式> <语句序列1> ELSE <语句序列2> ENDIF
33
2 多分支结构即根据多个条件表达式的值,选 (1)用IF...ENDIF语句的嵌套实现多分支 (2)
34
图6.9
DO CASE分支结构
35
使用分支语句应注意以下几点: ①IF...ENDIF、DO CASE...ENDCASE 必须配 对使用,DO CASE与第一个CASE<条件表达式> ②<条件表达式>可以是各种表达式或函数的
第6章 结构化程序设计基础
VFP程序设计包括结构化程序设计和面向对象 程序设计。前者是传统的程序设计方法,但在设计 用户界面上难度很大,而后者则可以很方便的实现 ,但仍需用户编写一些过程代码,因此,结构化程
1
第一节 结构化程序设计通常采用“自顶向下、逐步求 精”的方法,简单地说就是把一个模块的功能逐步 分解,细化为一系列具体的步骤,进而编写成一系
2
程序是能够完成某一特定任务的有序命令集合 。这些命令按照一定的逻辑顺序有机地结合在一起 ,并以文件形式存储在磁盘上,这种文件称为程序 文件。程序设计是计算机用户为解决某一实际问题 而编制程序,并以文件的形式存放于磁盘的过程。

第6章(486)

第6章(486)

第6章 VHDL程序设计实验 图6.3 工程属性参数
第6章 VHDL程序设计实验
2.逻辑门的RTL描述 编写MY_AND2实体的VHDL代码。 (1) 选择菜单栏中的 Project→New Source。 (2) 在 Select Source Type 窗口中,选择左侧VHDL Module,在右侧 File Name栏中填入文件名MY_AND2,单 击Next按钮后弹出Define Module窗口,如图6.4所示。
entity MY_AND2 is port ( A: in STD_LOGIC; B: in STD_LOGIC; C: out STD_LOGIC);
end MY_AND2;
architecture BEHAVIORAL of MY_AND2 is begin
C <= A and B; end BEHAVIORAL;
(2) 将AND_OR.VHD的输入定义为一个总线,即STD_ LOGIC_VECTOR类型。
(3) 在AND_OR模块中,必须声明和例化被调用的下层 模块MY_AND2和MY_OR2。
(4) 在AND_OR模块中,必须显式地定义用于下层模块 互联的连线信号。
(5) MY_OR2和AND_OR模块的代码可以参照本实验后 面给出的代码实例。
本实验中会用到3个文件,文件对应的代码分别下:
MY_AND2.VH D
library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_ARITH. all; use IEEE.STD_LOGIC_UNSIGNED. all;
第6章 VHDL程序设计实验
end MY_AND2;
第6章 VHDL程序设计实验

第6章 matlab多维数组

第6章 matlab多维数组

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。

2.利用标准数组函数创建多维数组A=zeros(4,3,2) 生成一个4行3列2页的三维全0数组,ones,rand和randn 等函数有相似的用法。

3.利用直接索引方式生成多维数组A=zeros(2,3)A(:,:,2)=ones(2,3)A(:,:,3)=4上面的代码先生成一个二维数组作为三维数组的第一页,然后通过数组直接索引,添加第二页、第三页。

4.利用函数reshape和repmat生成多维数组B=reshape(A,2,9)B=[A(:,:,1) A(:,:,2) A(:,:,3)] %结果与上面一样。

reshape(B,2,3,3)reshape(B,[2 3 3]) %结果与上面一样。

提示:reshape函数可以将任何维数的数组转变成其他维数的数组。

5.利用repmat函数生成多维数组C=ones(2,3)repmat(C,[1 1 3]) % repmat写出类似reshape的repmat(C,1,1,3)将显示出错提示:repmat是通过数组复制创建多维数组的,上面的代码即是将数组C在行维和列维分别复制一次,然后再页维复制三次得到2×3×3的三维数组。

6.利用cat函数创建多维数组a=zeros(2);b=ones(2);c=repmat(2,2,2);D=cat(3,a,b,c)%创建三维数组D=cat(4,a,b,c) %创建4维数组。

D(:,1,:,:) %查看第一列的数据。

size(D) %可以知道数组D的具体维数。

6.数组运算与处理数组之间的运算要求两个数组在任何一维都必须具有相同的大小。

(1)squeeze函数用于删除多维数组中的单一维(即大小为1的那些维)E=squeeze(D)size(D) E的数据和D一样,但比D少了一维,只有2行、2列和3页。

(2)reshape函数可以将一个三维向量变成一维向量。

第6章程序设计语言习题与答案

第6章程序设计语言习题与答案

第六章习题(1)复习题1、简述自然语言与形式语言的概念以及区别、汇编语言与机器语言的概念及区别。

自然语言是某一社会发展中形成的一种民族语言,而形式语言是进行形式化工作的元语言,它是以数学和数理逻辑为基础的科学语言。

用机器指令形式编写的程序称为机器语言,用带符号或助记符的指令和地址代替二进制代码成为语言进化的目标。

这些使用助记符语言的语言后来就被称之为汇编语言。

(P135P136)2、什么是高级程序设计语言?它有什么特点?高级语言是汇编语言的一种抽象。

高级语言的设计目标就是使程序员摆脱汇编语言细节的繁琐。

高级语言同汇编语言都有一个共性,那就是:它们必须被转化为机器语言,这个转化的过程称为解释或编译。

(1)高级语言接近算法语言,易学、易掌握;(2)高级语言设计出来的程序可读性好,可维护性强,可靠性高;(3)高级语言与具体的计算机硬件关系不大,其程序可移植性好,重用率高;(4)高级语言自动化程度高,开发周期短,利于提高程序的质量。

(P138)3、列举程序设计语言的几种范型。

程序语言大致分为命令式程序设计语言、面向对象的程序设计语言、函数式程序设计语言和逻辑型程序设计语言等范型。

(P138-140)4、简述语言虚拟机。

提示:语言虚拟机是某种语言的解释器。

语言虚拟机是建立在硬件和操作系统之上,针对不同的硬件和操作系统有不同的虚拟机,通过语言虚拟机屏蔽掉硬件的差异。

这样使得硬件系统能够支持这种语言编写的程序的有效执行。

目前最流行的语言虚拟机是Java虚拟机。

(P147)5、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?提示:主要有编译、解释等方式,也有两种方式的混合使用的形式。

编译是使用编译器将高级语言编写的源程序转换成计算机可以执行的机器语言可执行程序,也可以理解为用编译器产生可执行程序的动作。

编译方式是一次编译,然后执行程序可以反复多次执行。

解释是另一种将高级语言转换为可执行程序的方式。

精品文档-编译原理基础(第二版)(刘坚)-第6章

精品文档-编译原理基础(第二版)(刘坚)-第6章

第6章 代 码 生 成
【例6.3】 图6.1(b)中有三个循环: (1) B3自身是一个循环。 (2) B6自身是一个循环。 (3) { B2,B3,B4}是一个循环。 前两个循环仅有一个节点和一条指向自身的边。例如 B3构成一个以B3为入口节点的循环。根据定义6.3的第(2) 条性质,循环中必须有一条非空的指向入口节点的路径, 此处是从B3到B3。因为,单一节点B2没有一条从B2到B2的 边,所以它不是循环,因为在{B2}中没有从B2到其自身的 非空路径。
பைடு நூலகம்
第6章 代 码 生 成
为每个基本块构造一个节点,并且若B是C的前驱(或 者说C是B的后继),则从B到C有一条边,最终得到流图如 图6.1(b)所示。
入口指向基本块B1,因为B1包含程序的第一条指令。 B1的唯一后继是B2,因为B1不以无条件跳转结束且B2的头 指令紧随B1的结束之后。
第6章 代 码 生 成
定义6.1 一段顺序执行的语句序列被称为一个基本块, 其中,第一条语句被称为基本块的入口,最后一条语句被称为基本 块的出口。
由于基本块中的语句是被顺序执行的,因此基本块的控制 流总是从入口进入,从出口退出。任何一个复杂的程序控制流,均 可以划分为若干个基本块;极端情况下,一条语句构成一个基本块。 因此可以将一段完整的程序表示为一个程序流图。
候被使用。如果一个变量的值当前在寄存器中并且以后再也 不被使用,则该寄存器就可以分配给其他变量。
第6章 代 码 生 成
定义6.4 在形如(i) x := y op z的三地址码中,出现在 “:=”左边和右边的变量分别被称为对变量的定值和引用,i 被称为变量的定值点或引用点。若变量的值在i之后的代码序 列中被引用,则称变量在i点是活跃的。若变量x在i点被定值, 在j点被引用,且从i到j没有x的其他定值,则称j是i中变量x 的下次引用信息,所有这样的下次引用信息jk(k = 1, 2, …) 构成一个下次引用链。

第六章进出口货物报关单的填制

第六章进出口货物报关单的填制
(2)经营单位编码第六位数为“8”的单位,不得作为 经营单位填报
(3)境外企业不得作为经营单位填报。例如:上海汽车 进出口公司委托香港大兴汽车进出口公司进口汽车,其经 营单位应为上海汽车进出口公司。
(4)合同的签订者和执行者不是同一企业,经营单位应 按执行合同的企业填报。例如:中国化工进出口公司对外 统一签约,而由辽宁省化工进出口公司负责合同的具体执 行,则经营单位应为:辽宁省化工进出口公司。
八、提运单号 (重要程度:很重要)
运输单证编号有以下几类:
水路运输-----海运提单号 江海运输
其他运输-----提单号(海运提单号) 直接委托航空公司运输--------航空总运单号 航空运输 委托航空货运代理人运输-------航空分运单号 铁路运输 -------- 铁路运单号 汽车运输(无)
第七章 进出口货物报关单的填制
第一节 进出口货物报关单概述
一、进出口货物报关单的含义
进出口货物报关单是指进出口货物的收发货人或其 代理人,按照海关规定的格式对进出口货物的实际情 况作出书面申明,以此要求海关对其货物按适用的海 关管理制度办理通关手续的法律文书。进出口货物报 关单可分为进口货物报关单和出口货物报关单,也可 分为电子数据报关单和纸质报关单。电子数据报关单 和纸质报关单均具有法律效力。
3、运输方式判断的考核:题目中没有明确给出提单或 航空运单,要求大家根据发票或装箱单等单证上的信息判 断。
七、运输工具名称(重要程度:很重要)
水路运输:填船名(vessel)及船次(voy)。 例:ABCD/123
注意:不要将船名翻译为中文,一份报关单 只能填报一个运输工具名称。
航空运输:填报航班号,注:CZ为南方航空; CA
常见考点:

第6章(5课时)

第6章(5课时)

概要设计主要方法是面向数据,详细设计和程序设计主要方 法是面向对象。 所有的设计都面向模块(部件/构件) 。
*6.2
软件设计原理
“设计”在IEEE中的定义是:“定义一个系统或部
件的架构、组成、接口或其它特征的过程”。
架构设计有时也称为概要设计,用于描述系统最顶
的结构和组织形式,标识出软件的各个组成部分。
B1
计算平均分
B2
计算最高分
(3)共用耦合(高级别耦合)
如果两个模块都和同一个公共数据域有关,则称 Nhomakorabea公用耦合。
公用联结是一种不良的联结关系,在模块设计
时,一般不允许有公共联结关系的模块存在。
A 公用 数据
B
C
例:
Global : V1 V2 Global : V1 V2
A: ………… ………… A1=V1+V2 ………… …………
(2) 过程抽象
将数据处理抽象成函数或方法,获得最终的执行结果, 而不必去关心它们的内部实现细节。
(3) 数据抽象
在数据库建模和面向对象建模时,使用数据抽象,设 计出数据库的表及字段,或设计出类及类的属性。
原理2:分解
将一个软件分解成许多小模块(代码行在200~400之间),不
同模块负责不同的功能。
详细设计
覆盖《概要设计说明书》的全部内容 作为指导程序设计的依据
注重于微观上和框架内的设计,它是各子系统的公用部件实现
设计、专用模块实现设计、存储过程实现设计、触发器实现设
模块实现设计包括:登录注册模块设计、信息发布模块设计、 菜单模块设计、录入修改模块设计、查询统计模块设计、业务 逻辑处理模块设计、报表输出模块设计、前台网站模块设计、 后台数据处理模块设计、数据传输与接收模块设计等等。

计算机软件工程第六章 详细设计

计算机软件工程第六章 详细设计

PAD图的基本符号
SOFTWARE ENGINEERING
PAD图的基本符号
输入框 输出框 处理框 选择框
重复框(先判 定,再重复) 或 子程序框
重复框(先执行, 后判定,再重复)
定义框
使用PAD图提供的定义功能来逐步求精的例子
• 作业:判定一个数是不是素数的PAD图
SOFTWARE ENGINEERING
SOFTWARE ENGINEERING
盒图的基本符号
SOFTWARE ENGINEERING
§6.2 详细设计的工具
6.2.4 PAD图(Problem Analysis Diagram) 用二维树形结构的图来表示程序的控制流。 优点: ①设计出的程序是结构化程序; ②描绘程序结构清晰; ③表示程序逻辑,易读、易懂、易记;(自上而下, 从左向右顺序执行,遍历所有结点); ④易转换成 语言源程序,可用软件工具自动完成; ⑤也可用于描绘数据结构; ⑥支持自顶向下、逐步求精方法的使用。
例题 根据伪码画出程序流程图、盒图、 PAD图
Start If p1 then while q2 do x end do Else block y z end block End if stop
SOFTWARE ENGINEERING
作业:根据伪码画出程序流程图、盒图、PAD图
Begin Input(a,b,c) i=0 While i<=6 do Begin If a>6 or b>=0 Then c=c+a Else b=c+a End if i=i+1 End End do Print(a,b,c) End
PAD图(问题分析图)
(4)PAD是二维树形结构的图形,程序从图中 最左竖线上端的结点开始执行,自上而下,从 左向右按顺序执行,遍历所有结点; (5)容易将PAD转换成高级语言源程序,该转 换可由软件自动完成,有利于提高软件可靠性 和软件生产; (6)既可用于表示程序逻辑,也可用于描绘数 据结构; (7)PAD的元素支持自顶向下、逐步求精方法 的使用。

第6章习题答案

第6章习题答案

习题6一、单项选择题1、系统设计阶段主要目的是( D )。

A.设计新系统的目标B.程序设计C.代码设计D.将系统的逻辑方案换成物理方案2、输出设计应由( A )完成。

A.系统分析员根据用户需要B.系统设计员根据用户的需要C.程序设计员根据输入数据D.系统设计员根据输入数据3、描述模块层次结构,而不关心模块内部结构的工具是( A )。

A.层次结构图B.HIPO图C.系统流程图D.数据流程图4、系统设计报告的主要作用是作为( C )的依据。

A.系统规划B.系统分析C.系统实施D.系统评价5、为保证数据输入的正确性,通常在代码设计中加入( B )。

A.十进制编码B.校验位C.专用代码D.组合编码6、代码的功能不包括( D )。

A.唯一识别B.便于存储检索C.提高处理效率和精度D.位数较少7、系统设计时应( C )。

A.按用户要求划分子系统B.按领导要求划分子系统C.按逻辑功能划分子系统D.按职能划分子系统8、在控制结构图中,应要求模块具有凝聚度和耦合度分别为( A )。

A.最高和最小B.最高和最高C.最低和最高D.最低和最低9、IPO图是( D )。

A.系统结构图B.数据流程图C.组织结构图D.模块展开的输入处理输出图10、系统设计过程中应( B )。

A.先进行输入设计,后进行输出设计B.先进行输出设计,后进行输入设计C.同时进行输入输出设计D.只进行输出设计,不进行输入设计11、系统开发中,系统的物理设计是( B )阶段的工作。

A.系统分析B.系统设计C.系统实施D.系统调查12、下面哪项工作不属于系统设计阶段内容?( A )。

A. 程序设计B. 文件设计C. 处理过程设计D. 编写程序设计说明书二、填空题1、系统设计阶段,是根据系统分析阶段得出的逻辑模型,设计新系统的物理模型。

2、系统设计分为总体设计和详细设计两个部分3、系统的总体设计包括划分子系统、系统的总体结构设计、系统物理配置案设计。

4、耦合类型主要包括五种它们是数据耦合、特征耦合、控制耦合、公共耦合、内容耦合。

编译原理第6章代码优化

编译原理第6章代码优化

合并已知量 删除公共子表达式(删除多余的运算)
删除无用赋值
第6部分 代码优化
循环优化
是指对循环中的代码进行优化。
循环优化包括:

代码外提 删除归纳变量 强度削弱
第6部分 代码优化
全局优化
是在整个程序范围内进行的优化, 需 进行数据流分析, 花费代价很高。
第6部分 代码优化
第6部分 代码优化
6.1.2 基本块的DAG表示
DAG(Directed Acyclic Graph)是一种有向图,
常常用来对基本块进行优化。 一个基本块的DAG是一种其结点带有下述标记 或附加信息的DAG:
第6部分 代码优化
(1) 图的叶结点(无后继的结点)以一标识符(变量名)或 常数作为标记,表示该结点代表该变量或常数的值。 如果叶结点用来表示一变量A的地址,则用addr(A) 作为该结点的标记。通常把叶结点上作为标记的标 识符加上下标0,以表示它是该变量的初值。 (2) 图的内部结点(有后继的结点)以一运算符作为标记, 表示该结点代表应用该运算符对其直接后继结点所 代表的值进行运算的结果。 (3) 图中各个结点上可能附加一个或多个标识符,表 示这些变量具有该结点所代表的值。 一个基本块由一个四元式序列组成,且每一个 四元式都可以用相应的DAG结点表示。
(1) G中四元式(2)和(6)都是已知量和已知量的 运算,G'已合并;
(2) G中四元式(5)是一种无用赋值,G'已将它 删除; (3) G中四元式(3)和(7)的R+r是公共子表达 式, G'只对它们计算了一次,即删除了多余的R+r 运算。 因此,G‘是对G实现上述三种优化的结果。
第6部分 代码优化
第6部分 代码优化

第6章 顺序图和协作图

第6章 顺序图和协作图

6.2 顺序图元素
寻获消息(found message):缺少了发送事件, 只有接收事件的消息称为寻获消息。对于寻获消 息,在表示时需要在消息的非箭头端加上一个实 心的小圆。 未知消息( unknown message ):既没有发送事 件,也没有接收事件的消息称为未知消息。对于 未知消息,UML中也没有详细说明这种消息,也 许这个消息在实际应用时并不真实存在。
最常见的实现异步消息的方式是使用线程。当系 统发送异步消息时,需要启动一个线程在后台运 行。异步调用的图符如下图所示。 异步信号(asynchSignal):同步信号消息和异 步信号消息的区别在于,消息发送对象是否等待 目标执行结束才继续往下执行。异步信号消息类 似于最常用的简单消息,一般情况下,如果不必 强调消息的性质,则可以使用异步信号消息代表 其他性质的消息。它的图符如下图所示。
6.2 顺序图元素
激活在顺序图中不能够单独存在必须与生命线连 在一起使用,当一条消息被传递给对象的时候, 该消息将触发该对象的某个行为,此时该对象就 被激活了。 通常情况下,表示激活的矩形的顶点是消息和生 命线交汇的地方,表示对象从此时起开始获得控 制权,而矩形的底部则表示该次交互已经结束, 或对象的已经交控制权交出。
简单消息在发送线程c的第2 个消息之前,必须 带返回值的嵌套消息 先发送线程a的第3 个消息和线程 b的第 条件消息 在发送消息 1.2之前 4个消息 必须已经同时发送 循环消息 并发消息给线程a和 线程同步 b 带前缀消息
第6章 前缀(predecessor)
顺序图元素
•语法:消息序列号,消息序列号, ... / •前缀是一个用来同步线程或路径(path)的表达式 •意思是在发送当前消息之前指定序列号的消息被 处理(必须连续执行) •消息序列号之间用逗号隔开,用斜杠结束 •例如 1.1a, 1.1b/1.2: continue() ,在发送消 息1.2之前必须已经同时发送并发消息给线程a和b

JAVA程序设计教程 第6章

JAVA程序设计教程 第6章

//最终异常处理代码
}
21
第6章
异常处理
1) try语句
在try语句后边有一对花括号,括起一个程序段,该程 序段指出了该程序段后面的catch( )方法所捕获的异常的范围。 该程序段中,调用了一个或多个可能产生异常的方法。
22
第6章
异常处理
2) catch( )方法
在try语句后面通常要跟有一个或多个catch( )方法,用 来处理try块内生成的异常事件。该方法只有一个参数:某 异常类的对象。这种异常类应是Throwable的子类。catch( ) 方法的方法体中给出了处理异常的语句。处理异常时常用下
27
第6章
异常处理
catch(ArrayIndexOutOfBoundsException e2) {
System.out.println(“Exception2:”+e2); } finally{ System.out.println(“Program is end\n”);
(Exception)。
5
第6章
异常处理
Java作为一个完全面向对象的语言,异常处理也是采用
面向对象的方法。所有的异常都是以类的形式存在的,除了 内置的异常类之外,Java也允许自己定义异常类。如果在一
个方法的运行过程中发生了异常,则这个方法将生成一个代
表该异常的对象,并把它提交给正在运行这个方法的系统, 这个过程称为抛出异常。系统在运行的时候查找处理异常的 方法,这个过程称为捕获异常。异常对象中包含有重要的信 息,包括发生异常事件的类型和异常发生时的程序运行状态。 对待异常通常不是简单地结束程序,Java语言的异常处理方 法有下列主要优点:
问题以统一的方式进行处理,不仅增加了程序的稳定性和可

第6章_S7-200顺序逻辑控指令及应用

第6章_S7-200顺序逻辑控指令及应用


开关 东西向绿灯 东西向黄灯 东西向红灯 南北向绿灯 南北向黄灯 南北向红灯
代 码 输入信号 SA 输出信号 HL1 HL2 HL3 HL4 HL5 HL6
地址编号 I0.0 Q0.0 Q0.1 Q0.2 Q0.3 Q0.4 Q0.5
22
顺序功能图的编程步骤: (2)PLC端子接线
23
(3)编制控制系统的功能图
9
6.1.3 功能图的构成规则
(1)状态与状态不能直接相连,必须用转移分开; (2)转移与转移不能直接相连,必须用状态分开; (3)状态与转移、转移与状态之间的连线采用有向线段, 画功能图的顺序一般是从上向下或从左到右,正常顺序 时可以省略箭头,否则必须加箭头。 (4)一个功能图至少应有一个初始状态。如果没有初始步, 无法表示初始状态,系统也无法返回等待其动作的停止 状态。 (5)功能图一般来说是由状态和有向线段组成的闭环,即 在完成一次工艺过程的全部操作之后,应从最后一步返 回到初始步,系统停在初始状态,在连续循环工作方式 时,应从最后一步返回下一工作周期开始运行的第一步。
单流程结构的功能图
15
单流程结构举例1
例6-1:三台电动机MA1、MA2、MA3 按启动按钮后,MA1立即启动,随后MA2、MA3按时间 顺序自动启动。 停止时,按停止按钮,MA3立即停止,随后MA2、 MA1按时间顺序自动停止。 顺序功能图的编程步骤: ①分析控制要求,找出控制设备现场的实际输入和输出 点,选择PLC型号并分配I/O 地址 ②PLC端子接线 ③编制控制系统的顺序功能图 ④将顺序功能图转化成梯形图或语句表
(a)
转移条件
转移条件
(b)
8
6.1.2 功能图的基本概念(续)
送料小车往复运动的功能图 运货小车的工作过程: 循环开始时,小车处于两电机之间,按 下启动按钮SF1,接触器QA1得电,左电 机MA1启动;小车此时处在中间位置处 开始向左快速运行,行至BG1处,行程开 关BG1动作,QA1失电,QA2得电,小车向 左慢速运行;当到达BG2处时,BG2动 作,QA2失电,小车静止,此时定时器T43 开始通电延时,同时给小车装货,1分钟装 货结束,QA3得电,小车开始向右快速运 行;当碰到行程开关BG3时,QA3断电,同 时QA4得电,小车开始向右慢速运行;当 到达BG4时,小车静止,QA4断电,此时 定时器T44开始延时,同时给小车卸货,1 分钟后,定时器T44动作,小车开始向左 快速运行,如此周而复始。

第六章 顺序代码

第六章 顺序代码

Begin
进程的功能描述部分,有顺 序语句组成 End process;
例1:设计简单的组合电路
库声明;实体; Architeture bhv of and_or is Begin Process(a,b) Begin X<=a and b; Y<=a or b;
End process;
End bhv;
6.3、case语句
Case语句是分支语句,根据表达式不同的 取值,实现多路分支 语法:case 表达式
is
When 选择值1=>顺序语句1; When 选择值2=>顺序语句2; end case;
6.3、case语句
注意:
1、选择值应包含表达式所有的值,使用when others
2、选择值有多种表达方式:单个值:如4等等
Architecture bhv of and_or is
Begin
Process(a,b) Variable temp1,temp2:std_logic;
Begin
Temp1:=a and b; Temp2:=a or b; X<=temp1; Y<=temp2;
End process;
End bhv;
y:out std_logic_vector(6 downto 0));
End disp; Architecture bhv of disp is begin process(a)
Case a is when“0000”=>y<=“1111110”; when“0001”=>y<=“0110000”; when“0010”=>y<=“1101101”; when“0011”=>y<=“1111001”; when“0100”=>y<=“0110011”; when“0101”=>y<=“1011011”; when“0110”=>y<=“1011111”; when“0111”=>y<=“1110000”; when“1000”=>y<=“1111111”; when“1001”=>y<=“1111011”; when others>=null; End case; End process; End bhv;

Python程序设计第6章 习题解答

Python程序设计第6章  习题解答

6.5 习题6.1 将一个列表的数据复制到另一个列表中。

程序分析:使用列表[:]。

程序源代码:a = [1, 2, 3]b = a[:]print(b)6.2 写代码,有如下列表,利用切片实现每一个功能。

li = [1, 3, 2, "a", 4, "b", 5,"c"]1)通过对li列表的切片形成新的列表l1,l1 = [1,3,2]2)通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]3)通过对li列表的切片形成新的列表l3,l3 = ["1,2,4,5]4)通过对li列表的切片形成新的列表l4,l4 = [3,"a","b"]5)通过对li列表的切片形成新的列表l5,l5 = ["c"]6)通过对li列表的切片形成新的列表l6,l6 = ["b","a",3]l1=li[0:3]l2=li[3:6]l3=li[::2]l4=li[1:-2:2]l5=li[-1]print(l1,l2,l3,l4,l5)6.3 使用while和for循环分别打印字符串s="asdfer"中每个元素。

#while循环s="asdfer"count=0while count<len(s):print(s[count])count+=1#for循环for i in s:print(i)1216.4 利用for循环和range从100~10,倒序将所有的偶数添加到一个新列表中,然后对列表的元素进行筛选,将能被4整除的数留下来。

li = []for i in range(100,9,-1):if i%4==0:li.append(i)print(li)6.5 利用for循环和range,将1-30的数字一次添加到一个列表中,并循环这个列表,将能被3整除的数改成*。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21
ARCHITECTURE counter of counter IS begin count: process(clk) variable temp: integer range 0 to 24; begin if (clk’event AND clk=‘1’) then temp:=temp+1; if (temp=25) then temp:=0; end if; end if; digit<=temp; end process count; end counter;
2
语法结构: [标记:] process [( 敏感信号表)] [variable name: type[range][:=初始值]]
可选, 增强代码可读性, 命名规则:非关键字
begin { 顺序描述语句} end process [标记];
对临时连线的 赋值,不可综 合
3
•敏感信号表:进程内要读取的所有敏感信号(包括端口)的 列表。每一个敏感信号的变化,都将启动进程。 格式:
1
6.1、进程(process) 进程(process)内部的语句是一种顺序描述语句,其内 部经常包括if,wait,case或loop语句。 特点: 1、进程与进程,或其它并发语句之间的并发性; 2、进程内部的顺序性; 3、要么使用敏感信号列表(sensitivity list),要么使 用wait语句,二者不可同时使用。 4、进程必须包含在主代码段中,当敏感信号列表中的某个 信号发生变化,或者wait语句的条件满足时,process内部 的代码就顺序执行一次;
信号名称 {,信号名称 }
•注意:若电路模块对某输入信号不“敏感”,则该输入信号 不必放入敏感信号列表中。 •如同步时序电路中只对clk和rst这两个输入信号敏感,而 对data,addr等输入信号不敏感,则敏感信号列表中只需放 入clk和rst即可; •在纯组合逻辑电路中,电路模块对任意一个输入信号都是 敏感的,所以如果要使用process来实现一段组合逻辑,则 4 必须将所有的输入信号都放入敏感信号列表中。
//后
10
6.2 信号和变量的基本知识
VHDL中两种动态的传递数值的方法:信号与变量。 两者的差异:
有效范围的不同: 信号:程序包、实体、结构体;全局量。 变量:进程、子程序;局部量。 赋值方式的不同: 变量:= 表达式; 信号 < = 表达式; 赋值行为的不同: 信号赋值延迟更新数值、时序电路(得等process敏感信 号的再次变化之后才能更新,见第7章); 变量赋值立即更新数值、组合电路。
第6章 顺序代码
VHDL本质上是一种并发执行的代码,但是出于设计同步时序电 路的需要,需要使用一些能够顺序执行的语句块,包括: PROCESS、FUNCTION、PROCEDURE。 这些语句块之间仍然是并发 执行的,但内部是顺序执行的,称为顺序代码,又称行为描述代 码。 使用顺序代码不但可以实现时序逻辑,还可以实现组合逻辑。
不是latch, 而是二选 一的选择 器
4bit位宽
未赋初值,因为5位宽,所以可能>24而 <=31:周期的浪费! 另,不能从0开始计数!可加复位信号
if (temp=25) then temp:=0; end if; end if; digit<=temp;
常数比较电路,代价较大,如何优化? 与常数0进行比较Байду номын сангаас递减计数,一个简 单的“与”即可,不必构建复杂的全比 较器!
见第7章《信号与变量》
begin if (clk’event AND clk=‘1’) then temp:=temp-1; end if; digit<=temp; if (temp=0) then temp:=25; end if; end process count; end counter;
13
注意:用if或者case语句做逻辑电路的时候,
必须为信号设置默认值,避免生成latch电路。 有两种方法:
①在if, case语句之前对目标信号进行赋值,采
用这种方法,就不必专门写else或者when others语句对信号进行默认赋值。
②在else或者when others语句中对信号进行默
第一条
6.5 CASE语句
语法结构:
CASE 表达式 IS WHEN 条件表达式=>顺序执行语句; WHEN 条件表达式=>顺序执行语句; ........ END CASE;
注意:在每个测试条件下case语句允许执行多个 赋值操作,而with/select语句只允许执行一个 赋值操作。
11
6.3 IF语句(对比并发代码中的 when/with语句)
只能用于顺序代码,只能在process、function 和procedure中出现。 语法结构: if (表达式) then 语句1; 语句2; … elsif (表达式) then … end if;
12
--可以多个语句,不必使用{}
23
end process count; end counter;
ARCHITECTURE counter of counter IS begin count: process(clk) variable temp: integer range 0 to 25:25; //可以功能仿真,但不能综合,
variable temp: integer range 0 to 10; begin wait until (clk’event AND clk=‘1’); temp:=temp+1; if (temp=10) then temp:=0; end if; digit<=temp; end process; end counter; 26
认条件下的赋值。 如果违反了上述规则,那么会在综合电路 的时候形成一个transparent latch,也就是电 平触发的锁存器,这对电路的时序分析等会造 14 成很大的麻烦。
条件改为时钟沿,则生成 D触发器:
15 or 此时不必else防止latch,因为与clk同步变化,无控制死角(clk
注意:在时序电路中,如果没有在else语句 或者when others语句中对信号赋值, 那么综合工具会认为寄存器保持当前输入。
在使用顺序代码实现一个同步时序电路 时,必须对某些信号边沿的跳变进行监 视(典型的是时钟信号clock的上升沿或 下降沿) 通常使用EVENT来监视一个信号是否发生 了边沿跳变 通常在process中使用敏感信号clk来实 现同步时序电路。
5
例1:带有异步复位端的D触发器
rst data_in clk q
20
例6.2 模25计数器 功能描述:循环累加clk 上升沿的次数,输出到5 位的digit。
clk
计数器
digit(4:0)
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY counter IS port ( clk: IN std_logic; digit: OUT integer range 0 to 24); END counter;
22
模25计数时,该段代码有哪些 缺陷?有奖竞答!
ARCHITECTURE counter of counter IS begin count: process(clk) variable temp: integer range 0 to 25; begin if (clk’event AND clk=‘1’) then temp:=temp+1;
或者
else
1)if 语句的门闩控制
if 条件 then 顺序处理语句; end if ;
例:if (ena = ‘1’) then q <= d; end if;---没有else描述! 综合后生成锁存器(latch)
注意:latch会导致控制死角,复位信号影响不到。而且不 与clk同步变化,难以分析时序。
24
6.4 WAIT语句
•用法与IF语句类似,且形式更加多样。 •如果在process内部使用了wait语句,则process就不能再 使用敏感信号列表。并且wait语句是process内部的第一条 语句。 •wait条件满足时,process内部代码就执行一次。 •常用的三种语法: wait on 单个或多个信号; -- 敏感信号量变化 wait until 单个信号条件;-- 条件满足(可综合) wait for time; -- 时间到(只能仿真, 不可综合)
16
2)if 语句的二选择控制 格式:
if 条件 then 顺序处理语句; else 顺序处理语句; end if ;
用条件来选择两条不同程序执行的路径。 注意: 区别顺序代码中的三态门,三态控制与不同的程 序路径是不同的,没有优先级!
17
3)if 语句的多选择控制 if 语句的多选择控制又称为 if 语句的 嵌套。 格式: if 条件 then 顺序处理语句; elsif 条件 then 顺序处理语句; ┇ elsif 条件 then 顺序处理语句; else 顺序处理语句; end if;
18
典型电路是多选一(四选一)电路。
19
if_then_elsif 语句中隐含了优先级别的判断, 最先出现的条件优先级最高,可用于设计具有优 先级的电路,如8-3优先级编码器。 如果不希望出现优先级的情况,则可使用CASE 语句,或者在并发代码中用with select等实现。 如果希望有优先级,也可以用逻辑表达式体现 出来!
7
敏感信号表的特点: 1、同步进程的敏感信号表中只有时钟信号。 如: process(clk) begin if(clk’event and clk = ‘1’) then if reset = ‘1’ then data <= “00”; else data <= in_data; end if; end if; end process;
相关文档
最新文档