计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机等级考试(NCRE)
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
计算机等级考试三级
计算机等级考试一级
网络工程师(计算机等级考试四级)
计算机等级考试二级
数据库工程师(计算机等级考试四级)
计算机等级考试三级
信息安全工程师(计算机等级考试四级)
嵌入式系统开发工程师(计算机等级考试四级)
软件测试工程师(计算机等级考试四级)
问答题请编制程序ex5.ASM,其功能是:内存中连续存放着20个十进制数字的ASCⅡ码字符,如果是小写字母a~z之间的字符(包括字母a和z),请把它们转换成相应的大写字母所对应的ASCⅡ码字符;若为其他字符,不作转换。 例如: 内存中有:61H('a'),62H('b'),31H('1'),41H('A'),42H('B'),…… 结果为:41H('A'),42H('B'),31H,41H,42H,…… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。 [试题程序] 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 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 ;从"INPUT.DAT"中读取数据 ; ******** BEGIN ******** LEA SI,SOURCE LEA DI,RESULT MOV CX,N NEXT: MOV AL,[SI] CMP AL,'a' JB (1) CMP AL, (2) J (3) UPPER2 SUB AL, (4) UPPER2: HOV [DI], (5) INC (6) INC (7) (8) NEXT ; ******** END ******** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着16个16位二进制数,在原16个数的第4和第5个数之间插入00FFH,在原16个数的第8和第9个数之间插入FF00H,在原16个数的第12和13个数之间插入55AAH,在原16个数的最后加入AA55H。将按上述方法插入4个数后得到的20个数存入内存中。 例如: 内存中有:1020H,2002H,3033H,4440H,5008H,...,8FF8H(共16个字) 结果为:1020H,2002H,3033H,4440H,00FFH,5008H,...,8FFH,AA55H(共20个字) 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入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 DW N DUP(?) INDATA DW 0AA55H,55AAH,0FF00H,00FFH RESULT DW N+4 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****** MOV SI,0 ______ MOV CX,4 MOV BX,8 CHAN: MOV AX,SOURCE[SI] ______ INC SI ______ ______ INC DI DEC CX JZ INSER1 JMP CHAN INSER1: PUSH SI MOV SI,BX MOV AX,INDATA[SI-2] MOV RESULT[DI],______ DEC BX ______ JZ EXIT MOV CX,______ POP SI INC DI ______ JMP CHAN EXIT: POP SI ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,(N+4)*2 ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题已知在文件in45.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中,金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存人数组sell中。请编制函数sonDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组seu中,最后调用函数writeDat()把结果输出到文件out45.dat中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include<stdio.h> #include<memory.h> #include<string.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 Wril;eDat(); void SortDat() void main() memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); void ReadDat() FELE*fp: char str[80].ch[11]; int i; fp=fopen("IN45.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("OUT45.DAT","W"); for(i=0;i<100;i++) fprintf(fp,"%s %s %4d %5d% 10ld/n",sell[i].dm,sell[i].mc, sell[i].dj,sell[i].sl,sell[i].je); fclose(fp);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:对一个由可打印ASCII字符(ASCII码20H-7FH)组成的字符串可采用下列方法进行压缩:从串首开始向后扫描,如某字符单独出现则该字符不变,如某字符连续出现n次,则该字符用ESC(1BH),n,〈原字符〉三个字节来代替(假定n不超过255)。 设内存中从SOURCE开始有一用上述方法压缩的字符串,其以00H结束,解压后长度不超过 100。试编程对其解压缩,结果存入RESULT开始的内存单元。 例如: 原串:41H,1BH,06H,43H,61H,00H 解压后:41H,43H,43H,43H,43H,43H,43H,61H,00H("ACCCCCCa") 部分程序已在PROG1.ASM中给出,请填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除BEGIN和 END之间原有的代码并自行编写程序片段来完成要求的功能。 原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 对程序必须进行汇编,并与IO.OBI链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。 PROG1.ASM文件内容如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 100 ESC_CODE EQU 27 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(0) 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 MOV ES,AX ;置附加段寄存器 LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'input1.DAT'中读取数据 ;* * * * BEGIN * * * * LEA SI,SOURCE LEA DI,RESULT CLD LO: LODSB CMP AL,0 JE QUIT CMP AL,ESC_CODE _____ EXPAND _____ _____ JMP LO EXPAND: _____ _____ ;解压 XOR CX,CX _____ _____ _____ _____ _____ _____ _____ _____ JMP LO QUIT: STOSB ;STORE THE '00H' ;* * * * END * * * * LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名起始地址 MOV CX,N ;字节数 CALL SAVE ;保存结果到'OUTPUT1.DAT'文件中 RET START ENDP CODE ENDS END START
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着10个二进制字节数,需对此组数进行加密,其方法为:将前一个字节数(两位十六进制数a1a2表示)的低位十六进制数a2与后一个字节数(两位十六进制数b1b2表示)的高位十六进制数b1进行交换;第一个字节数的高位十六进制数与最后一个字节数的低十六进制数进行交换,加密后的结果存入内存。 例如: 内存中有:50H,61H,72H,83H,94H,A5H,B6H,C7H,D8H,E9H 结果为:96H,07H,18H,29H,3AH,4BH,5CH,6DH,7EH,85H 部分程序已给出,其中原始数据由过程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(?) ; 顺序存放10个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,NAMEO ; 原始数据文件名 MOV CX,N ; 字节数 CALL LOAD ; 从INPUT1.DAT中读取数据 ;****BEGIN**** MOV DI,0 MOV SI,0 MOV CX,N AGN1: MOV AL,SOURCE[SI] MOV AH ,AL AND AL,0FH AND AH,0FOH INC SI CMP SI,N (1) MOV SI,0 LW: MOV BL,SOURCE[SI] MOV BH,BL AND BL,0FH AND BH,0FOH (2) CX MOV CX,4 L1: SHR BH,1 SHL AL,1 LOOP L1 (3) CX OR AH,BH OR AL,BL CMP DI,0 JNZ STORE1 MOV SOURCE[SI],AL DEC SI MOV SOURCE[SI],AH INC SI JMP NEXT STORE1: CMP DI,N-1 JL STORE2 MOV RESULT[DI],AH MOV DI,0 MOV RESULT[DI],AL JMP NEXT STORE2: MOV (4) ,AH MOV (5) ,AL NEXT: INC DI LOOP AGN1 ;****END**** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N ; 字节数 CALL SAVE ; 保存结果文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题已知数据文件IN35.DAT中存有300个4位数,并已调用函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数wfiteDat()把结果cnt、pjz1、pjz2输出到out35.dat文件中。 例如:6712,6+2=7+1,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1。8129,8+9≠1+2,则该数不满足条件,计算平均值pjz2。 注意:部分源程序已给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt,pjz1,pjz2。 请勿改动主函数main()、读函数readDat()和写函数wfiteDat()的内容。 [试题程序] #include<stdio.h> int a[300],cnt=0; double pjz1=0.0,pjz2=0.0; void readDat(); void writeDat(); void jsValue() voidmain() readDat(); jsValue(); writeDat(); printf("cnt=%d/n满足条件的平均值pjz1=%7.2lf/n不满足条件的平均值pjz2=%7.2lf/n",cnt,pjz1,pjz2); void readDat() FILE*fp; int i; fP=fopen("in35.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE*fP; fp=fopen("out35.dat","w"); fprintf(fp,"%d/n%7.2lf/n%7.2lf/n",cnt,pjz1,pjz2); fclose(fp);
进入题库练习
问答题请编制程序,其功能是:求I×J矩阵的转置矩阵(矩阵中元素为字节型),并计算转置矩阵的每一行元素之和,然后存放在每一行最后一个字单元中。例如:内存中有04H,05H,06H,(第一行)01H,02H,03H(第二行)结果为04H,01H,05H,00H,05H,02H,07H,00H,06H,03H,09H,00H部分程序已给出,其中原始数据由过程LOAD从文件1NPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。请填空BEGIN和END之间已经给出的一段源程序使其完整,需填空处已经用横线标出,每个空白一般只需要填一条指令或指令的一部分(指令助记符或操作数),也可以填入功能相当的多条指令,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。试题程序:
进入题库练习
问答题函数ReadDat()的功能是实现从文件ENG55.IN中读取一篇英文文章,并存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存人数组XX的对应的位置上,最后调用函数WfiteDat()把结果XX输出到文件PS55.DAT中。 替代关系:f(P)=P*11 mod 256(P是数组XX中某一个字符的ASCⅡ值,f(P)是计算后新字符的ASCⅡ值),如果计算后f(P)的值小于等于32或f(P)对应的字符是大写字母,则该字符不变,否则将f(P)所对应的字符进行替代。 注意:部分源程序已给出。 原始数据文件的存放格式是:每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WfiteDat()的内容。 [试题程序] #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() voidmain() system("CLS"); if(ReadDat()) printf("数据文件ENG55.IN不能打开!/n/007"); rettlrn; encryChar(); WriteDat(); int ReadDat(void) FILE*f13; int i=0; unsigned char*P; if((f13=fopen("ENG55.IN","r"))==NULL) return 1; while(fgets(mx[i],80,fp)!=NULL) p=strchr(xx[i],'in'); if(P) *P=0; i++: maxline=i; fclose(fp); return 0; void WriteDat() FILE*fp; int i; fP=fopen("ps55.dat","W"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
进入题库练习
问答题编制一个程序,实现如下功能:将内存中连续存放的10个八位二进制无符号数按照从大到小的顺序排列。 例如: 内存中有:3EH,0FEH,5DH……(假设后面的7个数都小于3EH) 结果为: 0FEH,5DH,3EH……(后面跟7个字,按照从大到小的顺序排列)。 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FAR N EQU 10 SSEG SEGMENT STACK DB 256 DUP (?) SSEG ENDS DSEG SEGMENT SOURCE DB N DUP (?) RESULT DB N DUP (0) NAME0 DB 'INPUT.DAT',0 NAME1 DB 'OUTPUT.DAT',0 DSEG 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 ******** MOV SI,OFFSET SOURCE MOV DI,OFFSET RESULT MOV CX,N AGAIN0: MOV AX, [SI] MOV [DI],AX ADD SI, (1) (2) LOOP AGAIN0 CLD MOV BX,N-1 AGAIN1: MOV SI,OFFSET RESULT MOV CX,BX AGAIN2: LODSB CMP [SI],AX (3) XCHG [SI],AX (4) NEXT: LOOP AGAIN2 (5) JNZ AGAIN1 ;******** END ******** LEA DX,RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START
进入题库练习
问答题函数ReadDat()的功能是实现从文件IN67.DAT中读取一篇英文文章并存入到字符串数组xx中。请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT67.DAT中。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include <stdio.h> #include <string.h> #include <stdlib.h> #include <memory.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("数据文件IN67.DAT不能打开! /n/007"); return; StrOL(); WriteDat(); int ReadDat(void) FILE * fp; int i = 0; char * p; if((fp = fopen("IN67.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("OUT67.DAT", "w"); for(i = 0; i < maxline; i + +) printf("% s /n", xx[i]); fprintf(fp, "% s /n", xx[i] fclose(fp) ;
进入题库练习
问答题下列程序的功能是:寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如121、676、94249等。满足上述条件的数如m=11、m2=121、m3=1331皆为回文数。请编制函数int jsValue(long n)实现此功能,如果是回文数,则函数返回1,反之则返回0。最后把结果输出到文件out93.dat中。 注意:部分源程序已给出。 请勿改动主函数main()的内容。 试题程序: #include <stdio.h> #include <string.h> #include <stdlib.h> int jsValue(long n) void main() long m; FILE * out; out=fopen("out93.dat","w"); for(m=11;m<1000;m + +) if(jsValue(m) && jsValue(m*m) && jsValue(m*m*m)) printf("m=% 41d,m*m=% 61d.m*m*m=% 81d/n",m,m*m,m*m*m); fprintf(out,"m=% 41d,m*m=% 61d,m*m*m=% 81d/n",m,m*m,m*m*m); fclose(out);
进入题库练习
问答题fclose(fp);
进入题库练习
问答题函数ReadDat()的功能是实现从文件ENG97.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件ps97.dat中。 替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是数字字符0至19或计算后f(p)的值小于等于32,则该字符不变,否则将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("数据文件ENG97.IN不能打开!/n/007"); return; encryChar(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; unsigned char *p; if((fp=fopen("ENG97.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("ps97.dat","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
进入题库练习
问答题函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数$ortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,捧序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。 例如,原文:dAe,BfC CCbbAA 结果:fedCBA, bbCCAA 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<stdio.h> #include<string.h> #include<conio.h> char xx[50] [80]; int maxline=0; int ReadDat(void); void WriteDat(void); void SortCharD() void main() clrscr(); if (ReadDat()) printf ("数据文件 IN35.DAT 不能打开!/n/007 "); return; SortCharD(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; char *p; if((fp=fopen("IN35.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() FILE *fp; int i; clrscr(); fp=fopen("OUT35.DAT","w"); for(i=0;i<maxline;i++) printf ("%s/n",xx[i]); fprintf(fp,"%s/n',xx[i]); fclose(fp);
进入题库练习
问答题试题要求如图10.7所示。部分源程序内容如下:#include<stdio.h>intcnt,sum;voidcountValue()voidmain()cnt=sum=0;countValue();printf("满足条件的自然数的个数=%d/n",cnt);printf("满足条件的自然数值的和=%d/n",sum);writeDAT();writeDAT()FILE*fp;fp=fopen("K://k06//35010007//OUT.DAT","w");fprintf(fp,"%d/n%d/n",cnt,sum);fclose(fp);
进入题库练习
问答题已知在文件IN95.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat()的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求是:(1)求出这个文件中共有多少个正整数totNum;(2)求出这些数中的各位数字之和是奇数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz。最后调用函数WriteDat()把所有结果输出到文件OUT95.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include <stdio.h> #include <stdlib.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; system("CLS"); for(i=0;i<MAXNUM;i + +) xx[i]=0; if(ReadDat()) printf("数据文件IN95.DAT不能打开! /007/n"); return; CalValue(); printf("文件IN95.DAT中共有正整数=% d个/n",totNum); printf("符合条件的正整数的个数=% d个/n",totCnt); printf("平均值=% .21f/n",totPjz); WriteDat(); int ReadDat(void) FILE * fp; int i=0; if((fp=fopen("IN95.DAT","r"))==NULL) return 1; while(! feof(fp)) fscanf(fp,"% d",&xx[i + +]); fclose(fp); return 0; void WriteDat(void) FILE * fp; fp=fopen("OUT95.DAT","w"); fprintf(fp,"% d/n% d/n% .21f/n",totNum,totCnt,totPjz); fclose(fp);
进入题库练习
问答题已知数据文件IN86.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是;把千位数字和十位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成的两个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同时两个新十位数字均不为0,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT86.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void jsVal( ) void readDat( ) int i; FILE *fp; fp=fopen("IN86.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("OUT86.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:对10个无符号字节数据排序(升序),然后剔除第一个数和最后一个数,并按四舍五入原则计算其余8个数据的算术平均值。将剩余的8个数据存入指定的内存区域中,其后存放平均值。 例如: 内存中有:1,5,4,0,7,9,2,6,8,3 结果为:1,2,3,4,5,6,7,8,5 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD:FAR, SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DB N-1 DUP(0) NAME0 DB 'INPUT1. DAT',0 NAME1 DB 'OUTPUT 1.DAT',0 TEMP DW 0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS: CSEG, SS: SSEG, DS: DSEG, ES: 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, NAME0 MOV CX, N CALL LOAD ;*** BEGIN *** MOV BX, (1) GOONI: (2) LEA SI, SOURCE GOONJ: MOV AL, [SI] CMP AL, [SI+1] JLE NEXT XCHG AL, [SI+1] MOV [SI], AL NEXT: ADD SI, 1 LOOP GOONJ (3) JNZ GOONI CLD LEA SI, SOURCE LEA DI, RESULT MOV CX, (4) INC SI LP2: LODSB CBW ADD TEMP, AX STOSB LP1: LOOP LP2 MOV AX, TEMP (5) DIV DL ADD AH, AH CMP AH, DL JB OFF (6) OFF: MOV [DI], AL ; *** END *** EXIT: LEA DX,RESULT LEA SI,NAME1 MOV CX,N-1 CALL SAVE RET` START ENDP CSEG ENDS END START
进入题库练习
问答题下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数重(I+10也是在100以内)的个数cnt,以及这些I之和sum。请编制函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件out64.dat中(数值1不是素数)。 注意:部分源程序已给出。 请勿改动主函数main()和输出数据函数writeDAT()的内容。 试题程序: #include<stdio.h> int cnt,sum; int isPrime (int number) int i,tag=l; if (number== 1 ) return 0; for(i=2;tag i++) if (number%i==0) tag=0; return tag; void countValue ( ) void main ( ) cnt=sum=0; countValue ( ); printf ("满足条件的整数的个数=%d/n", cnt); printf ("满足条件的整数的和值=%d/n", sum); writeDAT ( ); writeDAT ( ) FILE *fp; fp=fopen("out64.dat" , "w"); fprintf (fp, "%d/n%d/n", cnt, sum); fclose (fp);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:将内存中的20个有符号字节数据依次除以5,并按照四舍五入原则(即余数绝对值的2倍小于除数,则舍去)将商存入指定的内存区域。 例如: 内存中有:10H,01H,27H,00H,FFH,F8H,…… 结果为:03H,00H,08H,00H,00H,FEH,…… 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件 OUTPUT1.DAT中。 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD:FAR,SAVE:FAR N EQU 20 X EQU 5 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DB 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:CSEC, SS:SSEC, 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,NAME0 MOV CX,N CALL LOAD ; *** BEGIN *** LEA SI,SOURCE LEA DI,RESULT CONT: LODSB CBW MOV DL,X IDIV DL (1) ; 余数为负数吗 JNS PLUS (2) ; 求绝对值 ADD AH,AH CMP AH,DL JB (3) SUB AL,1 JMP NEXT PLUS: ADD (4) CMP AH,DL JB NEXT (5) NEXT: STOSB CMP SI,N JB CONT ; *** END *** LEA DX,RESULT LEA SI,NAME 1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START
进入题库练习