问答题在文件IN6.DAT中有200个正整数,且每个数均在1000~9999之间。函数readDat()的功能是读取这200个数并存放到"数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的后3位的大小进行降序排列,将排序后的前10个数存人数组b中,如果数组b中出现后3位相等的数,则对这些数按原始4位数据进行升序排列。最后调用函数writeDat()把结果bb输出到文件0UT6.DAT中。 例如:处理前9012 5099 6012 7025 8088 处理后5099 8088 7025 6012 9012 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容. [试题程序] #include <stdio.h> #include <string.h> #include <stdlib.h> int aa[200],bb[10]; void readDat(); void writeDat(); void jsSort() void main() readDat(); jsSort(); writeDat(); void readDat() FILE*in; int i; in=fopen("IN6.DAT","r"); for(i=0;i<200;i++)fscanf(in,"%d,", fclose(in); void writeDat() FILE *out; int i; out=fopen("OUT6.DAT","w"); system("CLS"); for(i=0;i<10;i++) printf("i=%d,% d/n",i+1,bb[i]); fprintf(out,"%d/n",bb[i]); fclose(out);
问答题函数ReadDat()实现从文件in.dar中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 0 1 2 3 4 5 6 7 8 源字符串 a b c d h g f e 1 2 3 4 9 8 7 6 5 则处理后字符串 h g f e d c b a 8 7 6 5 9 4 3 2 1 部分源程序已经给出。 请勿改动主函数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("in.dat","r"); while(i<20 if(p)*p=0; i++; fclose(in); WriteDat() FILE *out; int i; clrscr(); out=fopen("out.dar","w"); for(i=0;i<20;i++) printf("%s/n",xx[i]); fprintf(out,"%s/n",xx[i]); fclose(out);
问答题已知在文件IN65.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat()是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求是: (1)求出这个文件中共有多少个正整数totNum。 (2)求出这些数中的各位数字之和是奇数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz。最后调用函数WriteDat()把所有结果输出到文件 OUT65.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<stdio. h> #include<conio. h> #define MAXNUM 200 int xx [MAXNUM]; int totNum=0; int totCnt=0; double totPjz=0.0; int ReadDat (void); void WriteDat (void) void CalValue (void) void main ( ) int i; clrscr ( ); for ( i=0; i<MAXNUM; i++ ) xx[i]=0; if (ReadDat ( ) ) printf ("数据文件IN65.DAT不能打开! /007/") return; CalValue ( ); printf ( "文件IN65.DAT中共有正整数=%d个/n",totNum); printf ( "符合条件的正整数的个数=%d个/n", totCnt) printf ( "平均值=%. 21f/n", totPjz); WriteDat (); int ReadDat (void) FILE *fp; int i=0; if ( ( fp= fopen ( "IN65. DAT", "r" ) ) ==NULL) return 1; while ( ! feof (fp)) fscanf (fp, "%d", fclose (fp); return 0; void WriteDat (void) FILE *fp; fp=fopen ("OUT65. DAT", "w" ); fprint f (fp, "%d/n%d/n%. 21f/n", totNum, totCnt,totPjz); fclose (fp);
问答题编制一个程序,其实现的功能为:内存中连续的10个无符号字节数,对其执行(X×7-5)÷8操作(X为内存中的数据,且X不等于0),将结果存入指定的内存区中。 例如: 内存中为:4FH,83H,34H… 则结果为:26H,40H,18H… 部分程序已经给出,原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从 RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空缺处已经用横线标出,空缺处一般只需要一条指令,但采用功能相当的多条指令也可以,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DB N DUP(0) NAME0 DB 'INPUT.DAT',0 NAME2 DB 'OUTPUT.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 LEA DX,SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ; ******** BEGIN ******** LEA SI,SOURCE LEA DI,RESULT MOV BX,N AGAIN: MOV AL,[SI] MOV DX,0 MOV DL,AL AND AX, (1) MOV CL,3 (2) AX,CL (3) SUB AX,5 MOV CL,3 (4) AX,CL MOV [DI],AL INC SI INC DI DEC BX (5) ; ****+**** END ******** LEA DX,RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START
问答题请编制程序,其功能是:内存中连续存放着9个ASCII字符(8位二进制数表示,最高位为零),把它们转换成串行通讯中的偶校验码,并计算9个偶校验码的累加码(累加值的低8位二进制数),将9个偶校验码按原序存入内存,累加码存放在此序最后。 例如: 内存中有:37H,38H,39H... 结果为:B7H,B8H,39H...累加码 部分程序已给出,其中原始数据由过程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 9 DUP(?) ;顺序存放9个ASCII字符 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-1 ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ; ******BEGIN****** MOV DI,OFFSET RESULT MOV SI,OFFSET SOURCE MOV DX,N-1 MOV AL,0 LP0: MOV BL,[SI] MOV CX,8 ______ AX MOV AL,0 LP1: ______ BL,1 ______ AL,0 LOOP LP1 AND AL,01H ROR AL,1 OR ______,______ MOV [DI],BL ______ AX ADD AL,BL INC DI INC SI DEC ______ JNZ LP0 ______ ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
问答题请编制程序,其功能是:对经常上下波动的数据可采用只记录峰值的数据压缩方法。即每次将采样到的当前值和前一次值比较,如数据变化方向改变(原变大现变小或原变小现变大),说明已过峰值,这时就将前一值(峰值)记录下来。 例如(下例数据均为无符号数): 原数据:23H,45H,89H,67H,5CH,36H,3CH… 压缩后:23H,89H,36H… 内存中从SOURCE连续存放着48个八位无符号数,假定无相邻两数相等的情况,编程按上述方法进行压缩,结果保存在 RESULT开始的内存单元中。 部分程序已给出,请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。 原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程 SAVE保存到文件OUTPUT.DAT中。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 40 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N DUP(0) NAME0 DB 'INPUT.DAT',0 NAME1 DB 'OUTPUT.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 ;从'INPUT.DAT'中读取数据 ; ******** BEGIN ******** LEA SI,SOURCE LEA DI,RESULT CLD MOVSB ;Y[0]=X[0] XOR AX,AX XOR BX,BX LODSB MOV BL,[SI-2] SUB AX,AX ;X[1]-X[0] MOV DX,AX MOV CX,N-2 FILTER: XOR AX,AX XOR BX,BX LODSB ;X[n] MOV BL,[SI-2] ;X[n-1] SUB AX,BX ;X[n]-X[n-1] (1) ;相邻两差值(Ax,Dx)符号位是否相同 (2) J (3) SKIP ;相同,数据方向未变 (4) ;不同,方向变化,保存峰值 STOSB SKIP: (5) LOOP FILTER ; ******** END ******** LEA DX,RESULT ;数据区起始地址 LEA SI,NAME1 ;结果文件名起始地址 MOV CX,N ;字节数 CALL SAVE ;保存结果到 'OUTPUT.DAT' 文件中 RET START ENDP CODE ENDS END START
问答题已知在文件IN46.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金过额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用写函数WriteDat()把结果输出到文件 OUT46.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("IN46.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("OUT46.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); fclose(fp);
问答题函数readDat()的功能是从文件IN75.DAT中读取20行数据并存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),该函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT75.DAT中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后,左边部分与右边部分按例子所示进行交换。 如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include <stdio.h> #include <string.h> #include <stdlib.h> char xx[20][80]; void readDat(); void writeDat(); void jsSort() void main() readDat(); jsSort(); writeDat(); void readDat() FILE * in; int i=0; char * p; in=fopen("in75.dat","r"); while(i<20 && fgets(xx[i],80,in)!=NULL) p=strchr(xx[i],'/n'); if(p)*p=0; i + +; fclose(in); void writeDat() FILE * out; int i; system("CLS"); out=fopen("out74.dat","w"); for(i=0;i<20;i + +) printf("% s/n",xx[i]); fprintf(out,"% s/n",xx[i]); fclose(out);
问答题请编制函数ReadDat()实现从文件IN84.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中奇数的个数odd、奇数的平均值ave1、偶数的平均值ave2及所有奇数的方差totfc的值。最后调用函数WriteDat()把结果输出到OUT84.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("IN84.DAT","r"))==NULL)return1;fclose(fp);return0;voidCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN84.DAT不能打开!/007/n");return;Compute();printf("ODD=%d/nAVE1=%f/nAVE2=%f/nTOTFC=%f/n",odd,ave1,ave2,totfc);WriteDat();voidWriteDat(void)FILE*fp;fp=fopen("OUT84.DAT","w");fprintf(fp,"%d/n%1f/n%1f/n%1f/n",odd,ave1,ave2,totfc);fclose(fp);
问答题下列程序的功能是:利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。xn+l=cos(xn) 迭代步骤如下: (1)取x1初值为0.0。 (2)x0=x1,把x1的值赋给x0。 (3)x1=cos(x0),求出一个新的x1。 (4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2)。 (5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。 请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果输出到文件out9.dat中。 注意:部分源程序已给出。 请勿改动主函数main()和写函数writeDAT()的内容。 [试题程序] #include<stdlib.h> #include<math.h> #include<stdio.h> void writeDAT(); float countValue() voidmain() system("CLS"); printf("实根=% f/n",countValue()); printf("% f/n",cos(countValue())-countValue()); writeDAT(); void writeDAT() FILE *wf; wf=fopen("out9.dat","W"); fprintf(wf,"% f/n",countValue()); fclose(wf);
问答题试题要求如下: 请编制程序,其功能是:统计20个学生成绩中得分在100~90,89~80,79~70、69~ 60和低于60分的人数,并计算20个学生的平均成绩(取整数),结果依次存放在指定的区域内。 例如: 内存中有5个分数:50H,40H,5EH,64H,48H 结果为 02H,01H,01H,01H,00H,52H(平均成绩) 部分程序己给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算的结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。补充BEGIN和END之间已给出的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD: FAR, SAVE: FAR N EQU 20 L EQU 5 DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N+1DUP(0) NAME0 DB 'INPUT 1.DAT', 0 NAME1 DB 'OUTPUT1.DAT', 0 DATA ENDS SSEG SEGMENT STACK DB 256DUP (?) SSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, SS: SSEG, DS: DATA 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 XOR BX, BX (1) MOV CX, N GOON: LODSB (2) ADD BX, AX (3) JAE P1 CMP AL, 80 JAE P2 CMP AL, 70 JAE P3 CMP AL, 60 JAE P4 INC (4) (5) P4: INC BYTE PTR[DI+3] JMP NEXT P3: INC BYTE PTR[DI+2] JMP NEXT P2: INC BYTE PTR[DI+1] JMP NEXT P1: INC BYTE PTR[DI] NEXT: LOOP GOON MOV AX, BX MOV DL, (6) DIV DL MOV [DI+5], AL ; *** END **** LEA DX, RESULT ; 结果数据区首址 LEA SI, NAME1 ; 结果文件名 MOV CX, L+1 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START
问答题请编制程序,要求;将文件IN91.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数),结果cnt1,cnt2,pj输出到out91.dat中, 部分程序、读函数read_dat(int xx[200]及输出格式已给出。 试题程序: #include<conio.h> #include<stdio.h> #define N 200 void read_dat(int xx[N]) int i,j; FILE *fp; fp=fopen("IN91.DAT","r"); for(i=0;i<20;i++) for(j=0;j<10;j++) fscanf(fp,"%d,", printf("%d",xx[i*10+j]); printf("/n"); fclose(fp); void main() int cnt1,cnt2,xx[N]; float pi; FILE *fw; int i,k=0: long j; clrscr(); fw=fopen("out91.dat","w"); read_dat(xx); printf("/n/ncnt1=%d,cnt2=%d,pj=%6.2f/n",cnt1,cnt2,pj); fprintf(fw,'%d/n%d/n%6.2f/n",cnt1,cnt2,pj); fclose(fw);
问答题下列程序的功能是:把s字符串中所有的字符左移一个位置,串中的第一个字符移到最后。请编制函数chg(char*s)实现程序要求,最后调用函数readwriteDat()把结果输出到out63.dat文件中。 例如:s字符串中原有内容为Mn,123xyZ,则调用该函数后,结果为n,123xyZM。 注意:部分源程序已给出。 请勿改动主函数main()和输入输出函数IeadwriteDAT()的内容。 试题程序: #include<conio. h> #include<stdio, h> #define N 81 void readwriteDAT ( ); void chg(char *s) main ( ) char a [N]; clrscr ( ); 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]; unsigned char *p; FILE *rf,*wf; rf=fopen ( "in63. dar", "r" ); wf= fopen ( "out 63. dat" , "w" ); for (i=0; i<10; i++) fgets(a,80,rf); p=strchr (a, '/n' ); if (p) *p=0; chg (a); fprintf (wf, "%s/n" ,a); fclose (rf); fclose (wf);
问答题函数ReadDat()的功能是实现从文件ENG58.IN中读取一篇英文文章,并存入到字符串数组xx中。请编制函数encryChat(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存人数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件ps58.dat中。 替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCⅡ值,f(p)是计算后新字符的ASCⅡ值),如果计算后f(p)的值小于等于32或其ASCⅡ值是奇数,则该字符不变,否则将f(p)所对应的字符进行替代。 注意:部分源程序已给出。 原始数据文件的存放格式是:每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include<stdlib.h> #include<stdio.h> #include<string.h> #include<ctype.h> unsigned char xx[50][80]; int maxline=0; int ReadDat(void); void WriteDat(void); void encrychar() void main() system("CLS"); if(ReadDat()) printf("数据文件ENG58.IN不能打开!/n/007"); return; encryChar(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; unsigned char*P; if((fp=fopen("ENG58.IN","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() FILE*fp; int i; fp=fopen("ps58.dat","W"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题请编制程序,其功能是:内存中连续存放着两个由8位有符号整数组成的序列Ai和Bi(i=0,…,9;下同),Ai在前,Bi在后。求序列Ci,Ci=Ai+Bi。结果Ci用字单元按C0,…,C9的顺序存放。 例如: 序列Ai为:80H(-128D),31H(+49D),61(+97D),7FH(+127D),… 序列Bi为:80H(-128D),01(+1D),F1H(-15D),7FH(+127D),… 部分程序已经给出,其中原始数据由过程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(?) ; 顺序存放A0,L,A9,B0,L,B9 RESULT DW N DUP(0) ; 顺序存放C0,L,C9 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 ******** MOV DI,OFFSET RESULT ;结果从RESULT开始存放 MOV BX,0 MOV CX,N PRO: MOV AH,0 MOV AL, (1) ;序列Bi中的一个整数 MOV DL,AL ;暂存Bi (2) AL,SOURCE[BX] ;Ci=Bi+Ai JNO STAY ;无溢出转STAY JUMP1: MOV AH,00 ;有溢出 ADD DL,0 JNS JUMP ;Bi是正数(为一个正数加上一个正数, ;结果为负数的溢出情况)转JUNP(AH ;已为00H) MOV AH, (3) ;Bi是负数(为一个负数加上一个负数, ;结果为正数的溢出情况)将结果变为 ;负数 JMP (4) STAY: (5) ;AL中数的符号扩展到 AH JUMP: MOV [DI],AX ADD DI,2 INC BX DEC CX JNZ PRO ******** END ******** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAMEl ; 结果文件名 MOV CX,N*2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START
问答题已知数据文件IN28.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:把千位数字和十位数字重新组合成一个新的2位数ab(新2位数的十位数字是原4位数的千位数字,新2位数的个位数字是原4位数的十位数字),以及把个位数和百位数组成另一个新的2位数cd(新2位数的十位数字是原4位数的个位数字,新2位数的个位数字是原4位数的百位数字),如果新组成的两个2位数ab 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 [试题程序] #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("IN28.DAft","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d", fclose(fp); voidmain() int i; readDat(); jsVal(); printf("满足条件的数=%d/n",cnt); for(i=0;i<cnt;i++) printf("%d/n",b[i]); printf("/n"); writeDat(); void writeDat() FILE*fp; int i; fp=fopen("OUT28.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题函数ReadDat()的功能是实现从文件ENG95.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS95.DAT中。 替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCCII,f(p)是计算后新字符的ASCII值),如果计算后f(p)的值小于等于32或f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。 注意;部分源程序已给出。 原始数据文件的存放格式是每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<conio.h> #include<stdio.h> #include<string.h> #include<ctype.h> unsigned char xx[50][80]; int maxline=0; int ReadDat(void); void WriteDat(void); void encryChar() void main() clrscr(); if(ReadDat()) printf("数据文件ENG95. IN不能打开!/n/007"); return; encryChar(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; unsigned char *p; if((fp=fopen("ENG95.IN","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() FILE *fp; int i; fp= fopen("ps95.dat","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题请编制程序,其功能是:内存中连续存放着10个十六位二进制数,每个数的序号依次定义为0,1,…,9。统计每个数中位为0的个数N0,N1,…,N9(均用一个字节表示),然后按序将N0至N9存入内存中,最后再用一个字节表示这10个数中为0的位的总数n(n=N0+N1+…+N9)。 例如: 内存中有:0000H,000FH,FFFFH… 结果为: 10H,0CH,00H…最后为n 部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白己用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FARN EQU 10STAC SEGMENT STACK DB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DW N DUP(?)RESULT DB N+1 DUP(0)NAME0 DB 'INPUT.DAT',0NAME1 DB 'OUTPUT.DAT',0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACSTART 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 ; 从'INPUT.DAT'中读取数据; ******** BEGIN ******** MOV DI,OFFSET RESULT MOV CL,N MOV BX,0 MOV DR,0PRO: MOV DL,0 MOV AX, SOURCE[BX] MOV CH, (1) COUNT: (2) (3) JUMPINC DLJUMP: DEC CH JNZ (4) MOV [DI], DL ADD DH,DL INC DI ADD (5) DEC CL JNZ PRO MOV (6) ; ******** END ******** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字节数 CALL SAVE ; 保存结果到文件 RETSTART ENDPCODE ENDS END START
问答题函数ReadDat()的功能是实现从文件IN62.DAT中读取一篇英文文章,并存入到字符串数组XX中;请编制函数StrCharJP(),该函数的功能是:以行为单位把字符串中的所有字符的ASCII值右移4位,然后把右移后的字符的ASCⅡ值再加上原字符的ASCⅡ值,得到新的字符,并存入原字符串对应的位置上。最后把已处理的字符串按行重新存入字符串数组xx中,并调用函数WriteDat()把结果xx输出到文件OUT62.DAT中。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 请勿改动主函数main()、读函数ReadDat()和写函数WfiteDat()的内容。 [试题程序] #include<stdio.h> #include<string.h> #include<stdlib.h> char XX[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void StrCharJR(void) void main() system("CLS"); if(ReadDat()) printf("数据文件IN62.DAT不能打开!/n/007"); return; StrCharJR(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; char*P; if((fp=fopen("IN62.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("OUT62.DAT","W"); for(i=0;i<maxline;i++) printf("%S/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题已知数据文件IN12.DAT中存有300个4位数,并已调用读函数readDat()把这些数存人数组a中。请编制函数jsValue(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再把所有满足此条件的4位数依次存入数组b中,然后对数组b中的4位数按从小到大的顺序进行排序,最后调用写函数wnteDat()把数组b中的数输出到OUT12.DAT文件中。 例如:6712,6+2=7+1,则该数满足条件,存人数组b中,且个数cnt=cnt+1。8129,8+9≠1+2,则该数不满足条件,忽略。 注意:部分源程序已给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数wfiteDat()的内容。 [试题程序] #include<stdiO.h> int a[300],b[300],cnt=0; void readDat(); void writeDat(); void jsValue() voidmain() int i; readDat(); jsValue(); writeDat(); printf("cnt=%d/n",cnt); for(i=0;i<cnt;i++) printf("b[%d]=%d/n",i,b[i]); void readDat() FILE*fp; int i; fp=fopen("IN12.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE*fp; int i; fP=fopen("OUT12.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d,/n",b[i]); fclose(fp);