问答题根据16位逻辑变量L的内容对内存单元中连续存放的十六个字符的数组SOURCE作如下处理: (1)若L的第i位为1,将SOURCE[i]的最高位置加偶校验位 (2)若L的第i位为0,SOURCE[i]不变 例如:L=0005 转换之前:67H,61H,4EH,38H…… 转换之后:E7H,61H,4EH,38H…… 部分程序已经在PROG1.ASM中给出,请填空BEGIN到END之间已经给出的源程序,使其完整(空白已经用横线标出,每行空白一般只需要一条指令,但功能相当的多条指令亦可)或删除BEGIN与END之间的原有代码并自行编写程序片段完成所需的功能。 原有数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由SAVE保存到OUTPUT1.DAT文件。 对程序必须进行汇编,并与IO.OBJ连接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。 部分源程序如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 16 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT L DW ? SOURCE DB N DUP(?) RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STAC START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX,DATA MOV DS, AX LEA DX,L ; 数据区起始地址 LEA SI, NAME0 ; 原始数据文件名 MOV CX,2 + N ; 字节数 CALL LOAD ; 从"INPUT1.DAT"中读取数据 **** BEGIN **** LEA SI, SOURCE LEA DI, RESULT MOV CX,N MOV DX, (1) LO: MOV AL, [SI] (2) L,DX JZ STORE AND AL,AL (3) STORE (4) STORE: MOV [DI],AL INC SI INC DI (5) LOOP LO ***** END ***** LEA DX,RESULT ; 结果数据区首地址 LEA SI, NAME1 ; 结果文件名 MOV CX,N ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START 相关知识: ●测试指令 指令格式:TEST R,R或TEST R,M或TEST M,R或TEST R,I或TEST M,R(其中R为寄存器,M为内存变量,I为立即数)。 测试指令将两个操作数进行逻辑乘操作,但并不把结果写回目的操作数,我们若需要知道某个寄存器中第i位是否为1,可以与一个立即数(这个立即数的第i位为1,其他位为0)进行TEST运算,结果为0,则被测试位为0,否则被测试位为1。 ●测试寄存器中1的个数的奇偶性。 可以将这个寄存器进行不改变其内容的逻辑乘运算,然后查看一下奇偶标志位即可。 ●对寄存器的内容进行位操作 利用“AND”、“OR”运算可对寄存器或某个内存单元中相应的清0或置1。 编程思路: 第一步:分析本程序要求完成的功能。 本程序要求完成以下功能: (1)从数据文件INPUT1.DAT中读取16个字符存放在SOURCE开始的内存单元中。 (2)将SOURCE开始的16个字符按逻辑尺L的内容决定是否在字符的最高位置1,然后依次放在RESULT开始的内存单元中。 (1)将处理之后的字符串存入到OUTPUT1.DAT。 第二步:用相应程序汇编实现其功能。 (1)数据的读取和存入题目中已经给出,只要完成16个字符的最高位置1操作即可。 (2)对于一个数组的排序操作可按下面的方法进行。从0到15依次取得逻辑尺L的第i位的值,若为0,则不对SOURCE[i]作操作;否则,计算SOURCE[i]中1的个数,若为奇数则在SOURCE[i]的最高位置1,否则不作操作,然后将其存放在RESULT开始的内存单元中。 这里我们仍然采用填空,而不重新编写程序,采用填空的方式解题对于我们阅读程序的能力会有所帮助。通过阅读程序我们发现程序是采用循环的方式测试一个数的第i位是否为1(要么将被测试数进行移位操作,然后与1进行TEST运算,要么将1进行移位操作,与被测试数进行TEST运算均可获得结果),然后根据第i位是否为1加偶校验位。
问答题己知数据文件IN57.DAT中存有300个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数不清jsValue(),其功能是:求出个位数上的数减千位数上数减百位数上的数减十位数上的数大于零的个数cnt,再把所有满足此条件的4位数依次存入数组b中,然后对数组b的4位数按从大到小的顺序进行排序,最后调用函数writeDat()把数组b中的数输出到OUT57.DAT文件中。 例如:1239,9-1-2-3>0,则该数满足条件,存入数组b中,且个数cnt=cnt+1。 8129,9-8-1-2<0,则该数不满足条件,忽略。 注意:部分源程序己给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> int a[300],b[300],cnt=0; jsValue() main() int i; readDat(); jsValue(); writeDat(); printf("cnt=%d/n",cnt); for(i=0;i<cnt;i++) printf("b[%d]=%d/n",i,b[i]); readDat ( ) FILE *fp; int i; fp=fopen("IN57.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); writeDat() FILE *fp; int i; fp=fopen("OUT57.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题函数ReadDat()的功能是实现从文件ENG51.IN中读取一篇英文文章,并存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组XX中的所有字符进行替代,结果仍存人数组xx的对应的位置上,最后调用函数WriteDat()把结果XX输出到文件PS51.DAT中。 替代关系:f(P)=P*11 mod 256(P是数组xx中某一个字符的ASCⅡ值,f(P)是计算后新字符的ASCⅡ值),如果计算后f(P)的值小于等于32或f(P)对应的字符是数字0至9,则该字符不变,否则将f(P)所对应的字符进行替代。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> unsigned char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void encryptchar() voidmain() system("CLS"); if(ReadDat()) printf("数据文件ENG51.IN不能打开!/n/007"); return; encryptchar(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; unsigned char * p; if((fp=fopen("ENG51.IN","r"))==NULL) return 1; while(fgets(xx[i],80,fp)!=NULL) P=strchr(XX[i],'in'); if(P)*P=0; i++; maxline=i; fclose(fp); return 0; void WriteDat(void) FILE*fp; int i; fp=fopen("PS51.DAT","W"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题请编制程序,其功能是:内存中连续存放的20个8位无符号数是一个自动抄表仪抄录的 20个用户某月天然气的使用量(立方米),天然气费用的计算公式如下(X表示天然气使用量; Y表示需交纳的天然气费用,单位为分): a) Y=X*70 X≤10 b) Y=10*70+(X-10)*120 X>10 例如: 天然气使用量(X)为04H,0FH,18H… 天然气费用(Y)为0118H,0514H,094CH… 试计算出这20个用户应缴纳的天然气费,结果用字(WORD)表示。 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD:FAR, SAVE:FAR N EQU 20 RATE1 EQU 70 RATE2 EQU 120 DELTA EQU 10 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DW N DUP(0) NAME0 DB 'INPUT 1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DATA ENDS CODE SEGMENT ASSUME CS :CODE,DS :DATA,SS: STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX LEA DX,SOURCE ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX,N ; 字节数 CALL LOAD ; 从INPUT1.DAT中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT CLD MOV CX,N MOV BL,RATE1 MOV BH,RATE2 AGAIN: (1) CMP AL,DELTA J (2) GREAT MUL BL JMP NEXT GREAT: (3) MUL BH (4) NEXT: (5) (6) INC SI LOOP AGAIN ;****END**** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N*2 ; 字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START
问答题请编制程序,其功能是:内存中连续存放着20个十进制数的ASCII字符,把它们转换成压缩型(组保型)BCD码。 例如: 内存中有:31H('1'),32H('2'),33H('3'),34H('4')...(共20个字节) 结果为:21H,43H,...(共十个字节) 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 10 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N*2 DUP(?) RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N*2 ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ; ******BEGIN****** LEA SI,SOURCE LEA DI,RESULT MOV CX,N CLD NEXT: LODS ______ AND AL,______ MOV BL,AL LODS ______ PUSH ______ MOV CL,______ SAL AL,CL POP ______ ADD AL,______ MOV [DI],AL INC DI LOOP NEXT ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
问答题已知数据文件IN37.DAT中存有200个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsVal(),其功能是:依次从数组a中取出一个4位数,如果该4位数连续大于该4位数以前的5个数且该数是偶数(该4位数以前不满5个数,则不统计),则统计出满足此条件的数个数cnt,并把这些4位数按从大到小的顺序存人数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到文件OUT37.DAT中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数wnteDat()的内容。 [试题程序] #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void writeDat(); void jsVal() void readDat() int i; FILE*fp; fp=fopen("in37.dat","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d", fclose(fp); void main() int i; readDat(); jsVal(); printf("满足条件的数=%d/n",cnt); for(i=0;i<cnt;i++) printf("%d",b[i]); printf("/n"); writeDat(); void writeDat() FILE*fp; int i; fp=fopen("out37.dat","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fP,"%d/n",b[i]); fclose(fp);
问答题已知数据文件IN89.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中。请编制一函数jsVal(),其功能是,如果一个4位数的千位数字上的值加个位数字上的值恰好等于百位数字上的值加上十位数字上的值,并且此4位数是奇数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的4位数输出到OUT89.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void jsva1( ) void readDat( ) int i; FILE *fp; fp=fopen("IN89.DAT","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d", fclose(fp); main() int i; readDat(); jsVal(); printf("满足条件的数=%d/n",cnt); for(i=0;i<cnt;i++) printf("%d",b[i]); printf("/n"); writeDat(); writeDat() FILE *fp; int i; fp=fopen("OUT89.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题请编制程序,其功能为:设由20个8位有符号数构成一个数组,试依次去掉其中负的奇数,生成一个新的数组(顺序不变)。结果存放在RESULT开始的内存单元中。 部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1.DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END之间补充使其完整。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。 部分程序如下: ; PROG1.ASM EXTRN LOAD:FAR,SAVE:FAR LEN EQU 20 DSEG SEGMENT SOURCE DW N DUP (?) RESULT DW N DUP (0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP (?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG, DS:DSEG;SS:SSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX, DSEG MOV DS,AX MOV ES, AX LEA DX, SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ; *** BEGIN *** ………… ………… ………… ; *** END *** LEA DX, RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START
问答题函数ReadDat()的功能是实现从文件IN74.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的ASCⅡ值左移4位,如果左移后,其字符的ASCⅡ值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCⅡ值再加上原字符的ASCⅡ值,得到的新字符仍存入到原字符串对应的位置。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数Wiltedat()把结果xx输出到文件OUT74.DAT中。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 请勿改动主函数main()、读函数ReadDat()和写函数Wiltedat()的内容。 试题程序:#include<stdio. h># inc lude<st ring. h>#include<conio. h>char xx[50] [80];int maxline=0;int ReadDat (void);void WriteDat (void);void StrCharJL (void)void main ( ) clrscr ( ); if (ReadDat ()) printf ( "数据文件IN74.DAT 不能打开/n/007"); return; StrCharJL ( ); WriteDat ( );int ReadDat (void) FILE *fp; int i=0; char *p; if ( (fp=fopen( "IN74.DAT", "r") ) ==NULL) return 1; while (fgets (xx[i], 80, fp) !=NULL) p=strchr (xx [i] , '/n' ); if(p) *p=0; i++; maxline = i; fclose (fp); return 0; void WriteDat (void FILE *fp; int i; clrscr ( ); fp=fopen ( "OUT74.DAT", "w" ); for (i=0; i<maxline; i++) printf ("%s/n" ,xx[i] ); fprintf (fp, "%s/n" ,xx[i] ); fclose (fp);
问答题请编制程序PROG1.ASM,其功能是;从SOURCE开始存放的21个8位有符号数(补码),相邻数的差距不超过-8~7,可采用差分压缩,其方法如下:第一个数据不变,其后数据取与前一数据之差值并用4位二进制补码表示,两个差值拼成一个字节,前一个差值放在高4位,后一个差值放在低4位。 例如: 原数据为:X[n]: 23H, 27H, 2AH, 29H, 22H... 压缩后为:Y[n]:23H, 43H, F9H... 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的一段源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD: FAR, SAVE: FAR N EQU 20 DSEG SEGMENT L DW ? SOURCE DW N DUP(?) RESULT DW N DUP(0) NAME0 DB 'INPUT1. DAT', 0 NAME1 DB 'OUTPUT1. DAT', 0 DSEG ENDS SSEG SEGMENT STACK DB 128 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, DS: DSEG, SS: SSEG START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DSEG MOV DS, AX LEA DX,L ; 数据区起始地址 LEA SI,NAME0 ; 输入文件名首址送SI MOV CX,2+N ; 输入字节数送CX CALL LOAD ; 从INPUT1.DAT中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT CLD MOVSB ;Y[0]=X[0] XOR BX, BX ; FLAG=0 MOV DX,N*2 ; 计数 ZTE: LODSB SUB (1) ; X [n]-X [n-1] (2) ; FLAG=NOT FLAG J (3) SWIM MOV 4, CL MOV AH, AL JMP NEXT SWIM: (4) OR AL, AH STOSB NEXT: (5) JNE ZTE ; ****END**** LEA DX, RESULT ; 结果数据区首址送DX LEA SI, NAME1 ; 结果文件名首址送SI MOV CX, N ; 结果字节数送CX CALL SAVE ; 保存结果到文件OUTPUT1.DAT RET START ENDP CSEG ENDS END START
填空题编译程序有的直接产生目标代码,也有的先产生______或汇编语言代码,最后产生可执行目标文件。
填空题把平均检索长度最小的二叉排序树称作【 】。
填空题每一种新版本的Windows都带有许多新功能,从总体上讲,Windows系统今后发展的主要趋势是______ 。
填空题当执行指令“SUB AX,BX”后,CF=1,说明______向高位无进位或有借位;对 _______数,操作结果溢出。
填空题可行性分析报告为{{U}} 【12】 {{/U}}的结果。
填空题父图和其所有子图的总输入和总输出应完全一致,且它们的处理功能也应完全一致。 这是数据流程图分解时应该遵循的一个基本原则,该原则称为【 】。
填空题在原型化的项目管理中,对控制重复周期最有效的因素是{{U}} 【3】 {{/U}}。
填空题决策支持系统的发展从技术层次上可以划分为: 【9】 ,DSS生成器和DSS工具。
填空题针式打印机由打印头与 【20】 、色带机构及控制器四部分组成。
填空题 【12】 设计的主要对象是屏幕和模板。