计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机等级考试(NCRE)
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
计算机等级考试三级
计算机等级考试一级
网络工程师(计算机等级考试四级)
计算机等级考试二级
数据库工程师(计算机等级考试四级)
计算机等级考试三级
信息安全工程师(计算机等级考试四级)
嵌入式系统开发工程师(计算机等级考试四级)
软件测试工程师(计算机等级考试四级)
问答题函数ReadDat()的功能是实现从文件IN2.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT2.DAT中。 例如,原文:You He Me I am a student. 结果:Me He You student a am I 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include #include #include #include char xx[50][80]; int maxline = 0;/* 文章的总行数 */ int ReadDat(void); void WriteDat(void); void StrOL(void) { } main() { clrscr(); if (ReadDat ()) { printf("数据文件 IN2.DAT不能打开!/n/007"); return; } StrOL(); WriteDat(); } int ReadDat(void) { FILE *fp; int i = 0; char *p; if((fp = fopen("IN2.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("OUT2.DAT", "w"); for(i = 0; i < maxline; i++) { printf("%s/n", xx[i]); fprintf(fp, "%s/n", xx[i]); } fclose(fp); }
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着16个12位无符号二进制数DB11DB10…DB0,其存放格式均为DB11DB10DB9DB8DB7DB6DB5DB4DB3DB2DB1DB00000请判别这16个12位二进制数是否大于800H:若大于800H,则相应地在内存中存入01H;否则,存入00H。最后存放这16个12位二进制数中大于800H的数的个数n(n用一个字节表示)。例如:内存中有12H,30H,84H,50H,80H,00H…结果为00H,01H,00H…(共16个字节),后跟n部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:
进入题库练习
问答题编制一个程序,其功能是:计算内存中连续存放的20个字节无符号数据的相邻两个数据之间的和,并找出和的最大值,和的最大值存放在结果的最后一个字单元,和为字数据。 例如: 内存中有:20H,04H,58H,34H,35H,4DH……, 则结果为:0024H,008CH,0082H…… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要—条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 TRN OAD:FAR,SAVE:FARN EQU 10SSEG SEGMENT TACK B 256 DUP (?)SSEG NDSDSEG EGMENTSOURCE DB N*2 DUP (?)RESULT DW N+1 DUP (0)NAME0 DB 'INPUT.DAT',0NAME1 DB 'OUTPUT.DAT',0DSEG DSCSEG EGMENT SSUME CS:CSEG,DS:DSEG,SS:SSEGSTART PROC FAR USH S OR AX,AX USH X OV AX,DSEG OV DS,AX EA DX,SOURCE EA SI,NAME0 OV CX,N*2 ALL GAD; ******** BEGIN ******** EA SI, SOURCE EA DI,RESULT OV CX,NAGAIN0: (1) OV AL,[SI] DD AL,[SI+1] DC AH,0 OV [DI],AX DD SI, (2) (3) OOP GAIN0 OV BX,N-1 OV SI,OFFSET RESULT OV AX,[SI]AGAIN1: ADD SI, 2 MP AX,[SI] (4) OV AX,[SI]NEXT: DEC BX NZ AGAIN1 (5) ; ******** END ******** EA DX,RESULT EA SI,NAME1 OV CX,N+1 ALL AVE ETSTART ENDPCSEG ENDS END START
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:内存中连续存放着由20个无符号字节组成的一个序列,请将它们排成升序(从小到大)。 程序中,COUNT为序列元素个数,OFFL为序列偏移量,BX为交换标志寄存器(BX =1,说明此趟排序扫描后未发生交换操作,表示序列中的元素已排好序)。 例如:内存中有01H,04H,02H,…(假设后十七个字节均大于04H) 结果为01H,02H,04H,…(后跟十七个字节,按从小到大的顺序排列) 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请编写BEGIM到END之间代码。对程序必须进行汇编,并与IO.OBJ连接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分); 部分源程序如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 20 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N DUP (?) RESULT DB N DUP (0) NAME0 DB 'INPUT1. DAT', 0 NAME1 DB 'OUTPUT1. DAT', 0 COUNT DW ? OFFL DW ? 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,NAMEO ; 原始数据文件名 MOV CX,N ; 字节数 CALL LOAD ; 从'INPUT1.DAT'中读取数据 **** BEGIN **** ***** END ***** LEA DX,RESULT ; 结果数据区首地址 LEA SI,NAME1 ; 结果文件名 MOV CX,N ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START 相关知识: ●无符号数比较大小。 有符号数和无符号数比较大小采用的是不同的指令,本题目要求将无符号数进行排序,这里仅介绍无符号数的比较指令。 (1)“高于”或“不低于等于”条件转移指令 指令格式:JA/JNBE短标号地址 (2)“高于等于”或“不低于”条件转移指令 指令格式:JAE/JNB短标号地址 (3)“等于”条件转移指令 指令格式:JE 短标号地址 (4)“不等于”条件转移指令 指令格式:JNE 短标号地址 (5)“低于等于”或“不高于”条件转移指令 指令格式:JBE/JNA 短标号地址 (6)“低于”或“不高于等于”条件转移指令 指令格式:JB/JNAE 短标号地址 ●数组的排序 数组的排序的方法有很多种,可以采用“冒泡排序”、“直接插入排序”、“简单选择排序”等算法复杂度为O(n2)的简单排序算法,也可采用那些算法复杂度为O(nlog2n)或O(d (n+rd))的算法,但简单排序算法比较容易理解,编程比较方便。通过阅读我们发现出题者的意愿就是采用冒泡排序方法,因为它要多次扫描数组,而且有一个标志指明一趟扫描是否发生数据交换,这是典型冒泡排序方法。当然大家也可采用别的排序算法,作为题目的分析者我们就不采用别的方法了。 ●串的移动 冒泡排序是在原地进行的排序方法,所以需要事先将数据移到结果地址中,或将排序后的结果移到结果地址中。 (1)串的移动 我们可以考虑使用字符串传送指令和无条件重复前缀。 (i)字符串传送指令 指令格式:MOVSB或MOVSW 需要设置源地址寄存器SI和目的地址寄存器DI中的地址内容,还需要设置传送字符的个数到寄存器CX中,以及方向标志位D以决定地址变换方向,D=0时,SI和DI内容加1,D=1时,SI和DI内容减1。 (ii)无条件重复前缀 指令格式:REP 字符串操作指令 此条指令根据CX中的内容决定重复操作的次数。 (2)如果对于串的传送指令不熟悉的话,也可用循环的方式,用MOV命令,从源地址将数据传送到目的地址。 编程思路: 第一步:分析本程序要求完成的功能。 本程序要求完成以下功能: (1)从数据文件INPUT1.DAT中读取20个8位无符号整数存放在SOURCE开始的内存单元中。 (2)将SOURCE开始的20个内存单元中的无符号整数进行排序后依次放在RESULT开始的内存单元中。 (3)将排序结果存入到OUTPUT1.DAT。 第二步:用相应汇编程序来实现其功能。 ①数据的读取和存入题目中已经给出,只要完成20个有符号整数的排序操作即可。 ②对于一个数组的排序操作可按下面的方法进行。 (i)依次将相邻的两个数比较,每次将较小的数调换到前面。那么经过一趟比较后,最大的数排在第n个位置;再将剩下的n-1个数两两进行比较,排在第n-1个位置上的为次大数;重复比较共n-1趟,完成排序操作。 (ii)第i趟比较,进行n-i次两两比较,得到第i大的数。 (iii)可能对数组扫描若干次后,数组已经成为有序状态,再对数组进行扫描,就不会出现数据交换的现象。为节约程序运行时间,用一个标志来指明当前的扫描是否发生数据交换,若无数据交换,则结束排序过程。
进入题库练习
问答题下列程序的功能是:把s字符串中的所有字母改成该字母的下一个字母,字母Z改成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT()读取in60.dat中的字符串,并把结果输出到文件out60.dat中。 例如:s字符串中原有的内容为Mn 123Zxy,则调用该函数后,结果为No 123Ayz。 注意:部分源程序已给出。 请勿改动主函数main()和输入输出函数readwriteDAT()的内容。 [试题程序] #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #define N 81 void readwriteDAT(); void chg(char*s) voidmain() char a[N]; system("CLS"); printf("Enter a string:"); gets(a); printf("The original string is:"); puts(a); chg(a); printf("The string after modified:"); puts(a); readwriteDAT(); void readwriteDAT() int i; char a[N]; FILE*f,*wf; rf=fopen("in60.dat","r"); wf=fopen("out60.dat","w"); for(i=0;i<10;i++) fgets(a,81,rf); chg(a); fprintf(wf,"%s",a); fclose(rf); fclose(wf);
进入题库练习
问答题函数ReadDat()实现从文件in.dat中读取一篇英文文章并将其存入到字符串数组xx中。请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组XX中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 例如:原文:You He Me I am s student. 结果:Me He You student a am I 原是数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序给出如下: 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题源程序] #include<stdio h> #include<string.h> #include<conio.h> #include<ctype h> char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void StrOL(void) void main() system("cls"); if(ReadDat()) printf("数据文件IN.DAT不能打开!/n/007"); return; StrOL(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; char*P; if((fp=fopen("IN 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; system("cls"); fp=fopen("OUT.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:以SOURCE开始的内存区域存放着N个字节的压缩BCD码,将每个压缩BCD码转换成两个ASCII码,并在最高位增加偶校验位,结果存放到RESULT指示的内存区域内。 例如: 原压缩BCD码:26H,75H,91H,33H,…… 结果为:B2H,36H,B7H,35H,39H,B1H,33H,33H,…… 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD:FAR, SAVE:FAR N EQU 10 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(0) RESULT DB 2*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 MOV ES,AX ; 置附加段寄存器 LEA DX,SOURCE ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX,N ; 字节数 CALL LOAD ; 从INPUT1.DAT中读取数据 ; **** BEGIN **** LEA SI,SOURCE MOV DI,OFFSET RESULT MOV CX,N SERCHI: MOV (1) MOV AH,AL AND AH,0FH AND AL,0FOH PUSH CX MOV CL,4 (2) (3) ADD AL,30H (4) OR AL,80H SERCH2: MOV [DI],AL INC DI (5) JP SERCH3 OR AH,80H SERCH3: MOV [DI],AH INC DI INC SI (6) SERCH1 ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名起始地址 MOV CX,2*N ; 字节数 CALL SAVE ; 保存结果到OUTPUT1.DAT文件中 RET START ENDP CODE ENDS END START
进入题库练习
问答题下列程序的功能是:设A,B,C为三个不为零的正整数,计算并输出下列不定方程组解的个数cnt以及满足此条件的所有A,B,C之和sum。不定方程组为: A+B+C=13 A-C=5 请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。 [试题源程序] #include<stdio.h> void WriteDat(); int cnt,sum: void countvalue() void main() cnt=sum=0: countvalue(); printf("cnt=%d/n",cnt); printf("sum=%d/n",sum); WriteDat(); void WriteDat() FILE*fp; fp=fopen("out.dat","w"); fprintf(fp,"%d/n%d/n",cnt,sum); fclose(fp);
进入题库练习
问答题START
进入题库练习
问答题函数ReadDat()实现从文件IN47.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中偶数的个数even、奇数的平均值avel、偶数的平均值ave2及所有偶数的方差toffc的值,最后调用函数WriteDat()把结果输出到OUT47.DAT文件中。计算方差的公式如下:设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleavel=0.0,ave2=0.0,totfc=0,0voidWriteDat(void);intReadDat(void)FILE*fp;inti,j;if((fp=fopen("IN47.DAT","r"))==NULL)return1;for(i=0;i<100;i++)for(j=0;j<10;j++)fscanf(fp,"%d,",fscanf(fp,"/n");if(feof(fp))break;fclose(fp);viodCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN47.DAT不能打形式!/007/n");return;Compute();printf("EVEN=%d/nAVE1=%f/nAVE2=%f/nTOTFC=%f/n",even,avel,ave2,totfc);WriteDat();voidWriteDat(void)FILE*fp;inti;fp=fopen("OUT47.DAT","w");fprintf(fp,"%d/n%lf/n%lf/n%lf/n",even,ave1,ave2,totfc);fclose(fp);
进入题库练习
问答题请编制程序ex1.ASM,其功能是:内存中连续存放着20个十进制数字的ASCⅡ字符,把它们转换成10个字节的压缩型(组合型)BCD码。 例如: 内存中有:31H('1'),32H('2'),33H('3'),34H('4')…(共20个字节) 结果为:21H,43H,…(共10个字节) 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ连接产生ex1.exe可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 10 STAC SEGMENT STACK DB 128 DUB(?) STAC ENDS DATA SEGMENT SOURCE DB N*2 Dup(?) RESULT DB N DUP(0) NAME0 DB 'INPUT1.DAT',0 NAMEl DB 'OUTPUT1.DAT',0 DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XORAX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N*2 ;字节数 CALL LOAD ;从'INPUT.DAT'中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT MOV CX,N CLD NEXT:LODS ______ ANDAL, ______ MOVBL,AL ______ LODS ______ PUSH ______ MOV CL, ______ SAL AL,CL POP ______ ADDAL, ______ STOS ______ LOOP NEXT ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题请编制函数ReadDat()实现从文件IN83.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中奇数的个数odd、奇数的平均值ave1、偶数的平均值ave2及所有奇数的方差totfc的值。最后调用函数WriteDat()把结果输出到OUTB3.DAT文件中。计算方差的公式如下:设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。原始数据的存放格式是:每行存放10数,并用逗号隔开(每个数均大于0且小于等于2000)。注意:部分源程序已给出。请勿改动主函数main()和输写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleave1=0.0,ave2=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void)FILE*fp;if((fp=fopen("IN83.DAT","r"))==NULL)return1;fclose(fp);return0;voidCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN83.DAT不能打开!/007/n");return;Compute();printf("ODD=%d/nAVE1=%f/nAVE2=%f/nTOTFC=%f/n",odd,ave1,ave2,totfc);WriteDat();voidWriteDat(void)FILE*fp;inti;fp=fopen("OUT83.DAT","w");fprintf(fp,"%d/n%lf/n%lf/n%lf/n",odd,ave1,ave2,totfc);fclose(fp);
进入题库练习
问答题下列程序的功能是:选出100~1000间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数cnt,以及这些素数值的和sum。请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT17.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()和写函数writeDAT()的内容。 试题程序: #include <stdio.h> int cnt, sum; void countValue() main() cnt=sum=0; countValue(); print f ("素数的个数=%d/n", cnt); printf("满足条件素数值的和=%d", sum); writeDAT(); writeDAT() FILE *fp; fp=fopen("OUT17.DAT", "w"); fprintf(fp, "%d/n%d/n", cnt, sum); fclose(fp);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:计算10×3矩阵中每一行元素(八位二进制数)之和,并将其存放在指定的内存区中。 例如: 内存中有0,0,0,(第1行),1,1,1,(第2行),……,9,9,9(第10行) 结果为0000H,0003H,…,001BH 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存元中,转换结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已经给出的一段源程序使其完整,填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),考生也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。 PROG1.ASM文件内容如下: EXTRN LOAD: FAR, SAVE: FAR N EQU 30 DSEG SEGMENT SOURCE DB N DUP( ? ) RESULT DW N/3 DUP(0) I EQU 10 J EQU 3 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, SS: SSEG, DS: DSEG START PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DSEG MOV DS, AX MOV ES, AX LEA DX, SOURCE LEA SI, NAMEO MOV CX, N CALL LOAD ; * * * BEGIN * * * LEA SI, SOURCE LEA DI, RESULT MOV BX, 1 LPI: MOV DX,O MOV CX, 1 LPJ: MOV AL, [SI] _____ ADD DX, AX INC _____ INC CX CMP CX,_____ JBE LPJ MOV [DI],_____ ADD DI,_____ INC BX CMP BX, I JBE LPI ; * * * END * * * LEA DX, RESULT LEA SI, NAME1 MOV CX, N/3 CALL SAVE RET START ENDP CSEG ENDS END START
进入题库练习
问答题请编制程序,其功能为:将一个字符串中连续相同的字符仅用一个字符代替,生成一个新的字符串。字符串以00H结束,长度不超过20个字节。 例如: 原字符串为:4EH,4EH,4EH,42H,1AH,31H,31H,00H: 新字符串为:4EH,42H,1AH,31H,00H 部分程序已经给出,其中原始数据由LOAD过程从文件INPUT1. DAT中读入从SOURCE开始的内存单元,运算结果要求从RESULT开始存放,由SAVE过程保存到OUTPUT1.DAT文件中。请在BEGIN和END 之间补充一段源程序,完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果。 部分程序如下: ; PROG1. ASM EXTRN LOAD:FAR,SAVE:FAR LEN EQU 20 N EQU 10 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
进入题库练习
问答题对10个候选人进行选举,现有一个100条记录的选票文件IN79.DAT,其数据存放格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位候选人的记录内容均为字符0或1,1表示此人被选中,0表示此人未被选中,若一张选票选中人数大于5个人时被认为是无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CoutRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中,最后调用函数WriteDat()把结果yy输出到文件OUT79.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include <memory.h> #include <stdio.h> char xx[100][11]; int yy[10]; int ReadDat(void); void WriteDat(void); void CoutRs(void) void main() int i; for(i=0;i<10;i + +) yy[i]=0; if(ReadDat()) printf("数据文件IN79.DAT不能打开! /n/007"); return; CoutRs(); WriteDat(); int ReadDat(void) FILE * fp; int i; char tt[13]; if((fp=fopen("IN79.DAT","r"))==NULL) return 1; for(i=0;i<100;i + +) if(fgets(tt,13,fp)==NULL) return 1; memcpy(xx[i],tt,10); xx[i][10]=0; fclose(fp); return 0; void WriteDat() FILE * fp; int i; fp=fopen("OUT79.DAT","w"); for(i=0;i<10;i + +) fprintf(fp,"% d/n",yy[i]); printf("第% d个人的选票数=% d/n",i+1,yy[i]); fclose(fp);
进入题库练习
问答题请编制程序PROG1,ASM,其功能是:内存中连续存放着12个字节的数字ASCII码字符串,将它们转换成相应无符号数字,并在原第1、5、9个数字前插入一个24H数值。将这20个数值存入 RESULT指示的区域。 例如: 源数:30H,31H,32H,33H,34H,35H,36H,… 结果:24H,00H,01H,02H,03H,24H,04H,… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令也可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 PROG1.ASM文件内容如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 16 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N +4DUP(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,NAMEO ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从INPUT1.DAT文件中读取数据 ; * * * * BECIN * * * * ___________ MOV DI,0 MOV CX,4 MOV BX,_ INSER1: DEC BX JZ EXIT MOV RESULT[DI),0FFH ___________ MOV CX,4 CHAN: MOV AL,SOURCE[SI] ___________ MOV RESULT[DI],AL ___________ INC DI DEC CX JZ ______ JMP CHAN EXIT: NOP ;* * * * END * * * * LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+4 ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着16个二进制字节数,在原16个数的第4和第5个数之间插入00H,在原16个数的第8和第9个数之间插入55H,在原16个数的第12和第13个数之间插入AAH,在原16个数的最后加入FFH。将按上述方法插入4个字节数后得到的20个字节数存入内存中。 例如: 内存中有: 10H,20H,30H,40H,50H,…,8FH(共16今字节) 结果为:10H,20H,30H,40H,00H,50H, …,8FH,FFH(共20个字节) 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DA了中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放, 由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已经给出的源程序使其完整,需填空处已经用横线标出,每个空白一般只需一条指令,也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 16 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) INDATA DB 0FFH,0AAH,55H,00H RESULT DB N+4 DUP(0) NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DATA ENDS CODE SECMENT ASSUME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX EA DX,SOURCE ;数据区起始地址 EA SI,NANE0 ;原始数据文件名 OV CX,N ;字节数 ALL LOAD ;从'INPUT1.DAT'中读取数据 ; ******** BEGIN ******** {{U}} (1) {{/U}} OV DI,0 OV CX,4 OV BX,4 CHAN: {{U}} (2) {{/U}} OV RESULT[GI],AH {{U}} (3) {{/U}} NC DI EC CX Z INSER1 MP CHAN INSER1:PUSH SI MOV SI,BX MOV AX,WORD PTR INDATA[SI-2] MOV RESULT[DI],{{U}} (4) {{/U}} DEC BX JZ {{U}} (5) {{/U}} MOV CX,04H {{U}} (6) {{/U}} INC DI JMP {{U}}(7) {{/U}} EXIT: POP SI ; ******** END ********* LEA DX,RESULT 结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+4 ;结果字节数 CALL SAVE 保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题已知在文件in37.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型 10位),单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件 out37.dat中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<stdio.h> #include<mem.h> #include<string.h> #include<conio.h> #include<stdlib.h> #define MAX 100 typedef struct char dm[5]; char mc[11]; int dj; int sl; long je; PRO; PRO sell[MAX]; void ReadDat(); void WriteDat(); void SortDat () void main() memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); void ReadDat ( ) FILE *fp; char str[80],ch[11]; int i; fp=fopen("IN37.DAT","r"); for(i=0;i<100;i++) fgets(str,80,fp); memcpy(sell[i].dm, str,4); memcpy(sell[i].mc,str+4,10); memcpy(ch, str+14, 4); ch[4]=0; sell[i].dj=atoi(ch); memcpy(ch, str+18,5); ch[5]=0; sell[i].sl=atoi(ch); sell[i].je=(long)sell[i].dj*sell[i].sl; fclose(fp); void WriteDat() FILE *fp; int i; fp=fopen("OUT37.DAT","w"); for(i=0;i<100;i++) fprintf(fp,"%s %s %4d %5d %101d/n",sell[i].dm, sell[i] .mc, sell[i] .dj,sell[i].sl, sell[i].je); fctose(fp);
进入题库练习
问答题函数readDat()的功能是从文件in52.dat中读取20行数据存放到字符串数组xx中(每行字符串的长度均小于80)。请编制函数JsSort(),该函数的功能是:以行为单位对字符串变量的下标为奇数位置上的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out52.dat中。 例如: 位置 0 1 2 3 4 5 6 7 源字符串 h g f e d c b a 则处理后字符串 h a f c d e b g。 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat和写函数writeDat()的内容。 试题程序: #include<stdio.h> #include<string.h> #include<conio.h> char xx[20] [80]; void jsSort() void main() readDat(); jsSort(); writeDat(); readDat() FILE *in; int i=0; char *p; in=fopen("in52.dat","r"); while(i<20 if(p) *p=0; i++; fclose(in); writeDat () FILE *out; int i; out=fopen("out52.dat","w"); clrscr(); for(i=0;i<20;i++) printf("%s/n",xx[i]); fprintf(out,"%s/n",xx[i]); fclose(out);
进入题库练习