计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机等级考试(NCRE)
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
计算机等级考试三级
计算机等级考试一级
网络工程师(计算机等级考试四级)
计算机等级考试二级
数据库工程师(计算机等级考试四级)
计算机等级考试三级
信息安全工程师(计算机等级考试四级)
嵌入式系统开发工程师(计算机等级考试四级)
软件测试工程师(计算机等级考试四级)
问答题编制一个程序,其实现的功能为:将内存中从SOURCE开始的区域里存放的20个字节的压缩BCD码转换为ASCⅡ码,每个压缩的BCD码转换为两个ASCⅡ码,并在最高位加上奇校验位,结果存放到RESULT开始的内存区域。 例如: 内存中有:73H,45H…… 则结果为:37H,B3H,34H,B5H…… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FARN EQU 20DSEG SEGMENTSOURCE DB N DUP(?)RESULT DB N*2 DUP(0)NAME0 DB 'INPUT.DAT',0NAME1 DB 'OUTPUT.DAT',0DSEG ENDSSSEG SEGMENT STACK DB 256 DUP(?)SSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART 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 CX,NAGAIN: MOV AL,[SI] MOV AH,AL (1) AND AH,0FOH (2) MOV CL,4 (3) POP CX ADD AL,30H (4) NEXT OR AL,80HNEXT: MOV [DI],AL INC DI ADD AH,30H (5) NEXT1 OR AH,80HNEXT1: MOV [DI],AH INC DI INC SI LOOP AGAIN; ******** END ******** LEA DX,RESULT LEA SI,NAME1 MOV CX,N*2 CALL SAVE RETSTART ENDPCSEG ENDS END START
进入题库练习
问答题函数readDat()是从文件in71.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSon(),其功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中。最后调用函数 writeDat()把结果xx输出到文件out71.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCⅡ值降序排序,右边部分按字符的ASCⅡ值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。 例如: 位置 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 处理后的字符串 d c b a e f g h 4 3 2 1 9 5 6 7 8 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio. h> # inc lude< st ring. h> #inc lude<conio, h> char xx[20] [80]; void jsSort() void main ( ) readDat (); jsSort (); writeDat ( ); readDat ( ) FILE *in; int i=0; char *p; in=fopen ( "in71.dat", "r"); while (i<20 if(p) *p=0; i++; fclose (in); writeDat ( ) FILE *out; int i; clrscr ( ); out=fopen ( "out71.dat", "w" ); for (i=0; i<20; i++) printf("%s/n",xx[i]); fprintf (out, "%s/n" ,xx[i] ); fclose (out);
进入题库练习
问答题在文件IN70.DAT中有200组数据,每组有3个数,每个数均是3位数。函数readDat()的功能是读取这200组数据并存放到结构数组aa中。请编制函数jsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第二个数大于第一个数加第三个数之和,其中满足条件的个数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对结构数组bb中的数据按照每组数据的第二个数加第三个数之和的大小进行降序排列,排序后的结果仍重新存入结构数组bb中,最后调用函数writeDat()把结果bb输出到文件OUT70.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct int x1,x2,x3; Data; Data aa[200],bb[200]; void readDat(); void writeDat(); int jsSort() void main() int count; readDat(); count=jsSort();/*返回满足条件的个数*/ writeDat(count); void readDat() FILE * in; int i; in=fopen("IN70.DAT","r"); for(i=0;i<200;i + +) fscanf(in,"% d % d % d",&aa[i].x1,&aa[i].x2,&aa[i].x3); fclose(in); void writeDat(int count) FILE * out; int i; out=fopen("OUT70.DAT","w"); system("CLS"); for(i=0;i<count;i + +) printf("% d,% d,% d 第二个数+第三个数=% d/n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x2+bb[i].x3); fprintf(out,"% d,% 5d,% d/n",bb[i].x1,bb[i].x2,bb[i].x3); fclose(out);
进入题库练习
问答题请编制程序,其功能是:内存中连续存放的20个八位无符号数是一个自动抄表示抄录的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从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FARN EQU 20RATE1 EQU 70RATE2 EQU 120DELTA EQU 10STAC SEGMENT STACK DB 128 DUP(?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?)RESULT DW N 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 NOV AX, DATA MOV DS,AX LEA DX,SOURCE ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名起始地址 NOV CX,N ; 字节数 CALL LOAD ; 从'INPUT.DAT'中读取数据; ******** BEGIN ******** LEA SI, SOURCE LEA DI, RESULT CLD MOV CX,N MOV BL,RATE1 MOV BH,RATE2NEXT: (1) CMP AL,DELTA J (2) GREAT MUL BL JMP STOREGREAT: (3) MUL BH (4) STORE: (5) (6) INC SI LOOP NEXT; ******** END ******** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名起始地址 MOV CX,N*2 ; 字节数 CALL SAVE ; 保存结果到'OUTPUT.DAT'文件 RETSTART ENDPCODE ENDS END START
进入题库练习
问答题已知在文件IN5.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量s1(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相等,则按产品代码从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5.DAT中。 注意:部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题程序] #include #include #include #include #include #define MAX 100 typedef struct chardm[5]; /*产品代码*/ charmc[11]; /*产品名称*/ int dj; /*单价*/ int s1; /*数量*/ 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("IN5.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].s1=atoi(ch); sell[i].je=(long)sell[i].dj*sell[i].s1; fclose(fp); void WriteDat(void) FILE *fp; int i; fp=fopen("OUT5.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].s1,sell[i].je); fclose(fp);
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着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 ******** (1) OV DI,0 OV CX,4 OV BX,4 CHAN: (2) OV RESULT[GI],AH (3) NC DI EC CX Z INSER1 MP CHAN INSER1:PUSH SI MOV SI,BX MOV AX,WORD PTR INDATA[SI-2] MOV RESULT[DI], (4) DEC BX JZ (5) MOV CX,04H (6) INC DI JMP (7) EXIT: POP SI ; ******** END ********* LEA DX,RESULT 结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+4 ;结果字节数 CALL SAVE 保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题函数ReadDat()的功能是实现从文件ENG96.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件ps96.dat中。 替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是小写字母或计算后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("数据文件ENG96.IN不能打开!/n/007"); return; encryChar(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; unsigned char *p; if((fp=fopen("ENG96.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("ps96.dat","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp)
进入题库练习
问答题请编制程序,其功能为:将一个ASCII字符串中所有大写字母全部变成小写字母,其他字母不变。字符串以00H结束,长度不超过20个字节。 部分程序已经给出,其中原始数据由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 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 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
进入题库练习
问答题已知数据文件in33.dat中存有300个4位数,并已调用函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于0的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt、pjz1、pjz2输出到out33.dat文件中。 例如:1239,9-1-2-3>0,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1;8129,9-8-1-2<0,则该数不满足条件,计算平均值pjz2。 注意:部分源程序已给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt,pjz1,pjz2。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 [试题程序] #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() FILEfp; int i; fp=fopen("in33.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE%fp; fp=fopen("out33.dat","w"); fprintf(fp,"%d kn%7.21f kn%7.21f/n",cnt,pjz1,pjz2); fclose(fP);
进入题库练习
问答题已知数据文件IN11.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中。请编制一个函数jsValuc(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把数组b中的数输出到OUT11.DAT文件。 例如:6712,6+2=7+1,则该数满足条件存入数组bb中,且个数cnt=cnt+1。 8129,8+9≠1+2.则该数不满足条件,忽略。 注意:部分源程序已给出。程序中已定义数组:a[300],b[300];已定义变量:cnt。请勿改动主函数main()、读函数 readDat()和写函数writeDat()的内容。 [试题程序] #include<stdio.h> int a[300],b[300],cnt=0; void jsValue() main() int i; readDat(); jsValue(); writeDat(); for(i=0;i<cn;i++)printf("b[%d]=%d\n",i,b[i]); readDat() FILE *fp; int i; fp=open("IN11.DAT","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",i<cnt;i++)fPrIntf(fp,"%d\n",b[i]); fclose(fp);
进入题库练习
问答题内存单元连续存放的20个8位有符号数(补码)是由一个8位A/D转换器采集的双极性值的双极性信号(Xn),现有要求对该信号作如下限幅处理(处理后的信号记做Yn)。 a.Yn=-100 Xn<-100 b. Yn=Xn |Xn|<100 c.Yn=100 Xn>100 例如:Xn=68H,8EH,38H… Yn:64H,60H,9CH,38H… 部分程序已经在PROG1.ASM中给出,请填空BEGIN到END之间已经给出的源程序,使其完整(空白已经用横线标出,每行空白一般只需要一条指令,但功能相当多条指令亦可)或删除BE GIN到END之间的原有代码并自行编写程序片段完成所需的功能。 原有数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从 RESULT开始存放,由SAVE保存到OUT1.DAT文件。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终产生运行结果(无结果或结果不正确均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 PROG1.ASM源程序如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 20 MAX-VAL EQU 100 STAG SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N DUP(?) NAME0 DB INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0, DATA ENDS CODE SEGMENT ASSUMEME CS:CODE,DS:DATA,SS:STAC START PROC FAR PUSH DS XOR AX,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 _____ NEXT: MOV AL, [SI] CMP AL, - MAX - VAL ______ LESS CMP AL, MAX - VAL ______ MOV AL, MAX - AL JMP STORE LESS: MOV AL, - MAX - VAL STORE: MOV [DI], AL ______ ______ ______ * * * * END * * * * LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名起始地址 MOV CX,N ; 字节数 CALL SAVE ; 保存结果到“output1. dat" 文件中 RET START ENDP CODE ENDS END START
进入题库练习
问答题函数readDat()的功能是从文件in74.dat中读取20行数据存放到字符串数组xx中(每行字符串的长度均小于80)。请编制函数jsSort(),该函数的功能是:以行为单位对字符串变量的下标为奇数位置上的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件out74.dat中。 注意:部分源程序已给出。 请勿改动主函数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("in74.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; out=fopen("out74.dat","w"); system("CLS"); for(i=0;i<20;i + +) printf("% s/n",xx[i]); fprintf(out,"% s/n",xx[i]); fclose(out);
进入题库练习
问答题请编制函数ReadDat()实现从文件IN93.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中奇数的个数odd、偶数的个数even、平均值aver及方差totfc的值,最后调用函数WfiteDat()把结果输出到OUT93.DAT文件中。计算方差的公式如下:原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。注意;部分源程序已给出。请勿改动主函数main()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleaver=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void)FILE*fp;if((fp=fopen("IN93.DAT","r"))==NULL)return1;fclose(fp);return0;voidCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN93.DAT不能打开!/007/n");return;Compute();printf("ODD=%d/nEVEN=%d/nAVER=%1f/nTOTFC=%lf/n",odd,even,aver,totfc);WriteDat();voidWriteDat(void)FILE*fp;inti;fp=fopen("OUT93.DAT","w");fprintf(fp,"%d/n%d/n%lf/n%lf/n",odd,even,aver,totfc);fclose(fp);
进入题库练习
问答题已知在文件in.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()读取这100个销售记录并存人结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存人结构数组sell中,最后调用函数WriteDat()把结果输出到文件out.dat中。 注意:部分源程序给出如下。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题源程序] #include<stdio 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 sen[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:if((fp=fopen("IN.DAT","r"))==NULL) return; 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=(10ng)sell[i].dj*sell[i].sl; fclose(fp); void WriteDat() FILE*fp; int i; if((fp:fopen("OUT.DAT","w"))==NULL) return; for(i=0;i<100;i++) printf("%S%S%4d%5d%5d/n",sell[i].dln,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fprintf(fp."%S%S%4d%5d%lOld/n". sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fclose(fp);
进入题库练习
问答题已知在文件in70.dat中存有若干个(个数<200)4位数字的正整数,函数ReadDat()是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求是:(1)求出这个文件中共有多少个正整数totNum。 (2)求这些数右移一位后,产生的新数是奇数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz。最后调用函数WriteDat()把所有结果输出到文件out70.dat中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数Wiltedat()的内容。 试题程序: # inc lude<stdio, h> # inc lude<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 ( "数据文件IN70. DAT 不能打开! /007/n" ); return; CalValue ( ); printf ( "文件IN70.DAT中共有正整数=%d个/n", totNum); printf ( "符合条件的正整数的个数=%d个/n", totCnt ); printf ( "平均值=%.21f/n", totPjz); WriteDat ( ); int ReadDat (void) FILE *fp; int i=0; if((fp=fopen("IN70.DAT","r"))==NULL) return 1; while ( !feof (fp) ) fscanf ( fp, "%d", fclose (fp); return 0; void WriteDat (void) FILE *fp; fp=fopen("OUT70.DAT", "w"); fprintf (fp, "%d/n%d/n%. 21f/n", totNum, totCnt, totPj z); fclose (fp);
进入题库练习
问答题已知数据文件IN1.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果4位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的数的个数cnt,并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT1.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include #define MAX 200 int a[MAX], b[MAX], cnt = 0; void jsVal() { } void readDat() { int i; FILE *fp; fp = fopen("IN1.DAT", "r"); for(i = 0; i
进入题库练习
问答题fclose(out);
进入题库练习
问答题已知数据文件IN14.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中。请编制一个函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到OUT14.DAT文件。 例如:5591是素数,则该数满足条件存入数组b中,且个数cnt=cnt+1。 9812是非素数,则该数不满足条件,忽略。 注意:部分源程序已给出。程序中已定义数组:a[300]、b[300];已定义变量:cnt。请勿改动主函数main()、读函数 readDat()和写函数writeDat()的内容。 [试题程序] #include<stdio.h> int a[300],b[300],cnt=0; int isP(int m) int i; for(i=2;i<m;i++) if(m%i==0)return 0; return 1; void jsValue() main() int i; readDat(); jsValue(); writeDat(); for(i=0;i<cnt;i++)printf("b[%d]=%d\n",i,b[i]); readDat() FILE *fp; int i; fp=fopen("IN14.DAT","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",i<cnt;i++)fprintf(fp,"%d\n",b[i]); fclose(fp);
进入题库练习
问答题请编制程序ex6.ASM,其功能是:将内存中从SOuRCE开始的区域里存放的20字节的压缩BCD码转换为ASCⅡ码,每个压缩的BCD码转换为两个ASCⅡ码,并在最高位加上奇校验位,结果存放到RESULT开始的内存区域。 例如: 内存中有:73H,45H…… 则结果为:B3H,37H,B5H,34H…… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入s0URCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 20 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DB N*2 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 LEA DX,SOURCE LEA SI,NAME0 MOV CX,N CALL LOAD ;******** BEGIN ******** LEA SI,SOURCE LEA DI,RESULT MOV CX,N AGAIN: MOV AL,[SI] MOV AH,AL (1) AND AH,0F0H (2) MOV CL,4 (3) POP CX ADD AL,30H (4) NEXT OR AL,80H NEXT: MOV [DI],AL INC DI ADD AH,30H (5) NEXT1 OR AH,80H NEXT1: MOV [DI],AH INC DI INC SI LOOP AGAIN ; ******** END ******** LEA DX,RESULT LEA SI,NAMEI MOV CX,N*2 CALL SAVE RET START ENDP CSEG ENDS END START
进入题库练习
问答题函数ReadDat()的功能是实现从文件ENG50.IN中读取一篇英文文章,并存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,替代的结果仍存人数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS50.DAT中。 替代关系:f(P)=P%11 mod 256(P是数组xx中某一个字符的ASCⅡ值,f(P)是计算后新字符的ASCⅡ值),如果原字符的ASCⅡ值是偶数或计算后f(P)的值小于等于32,则该字符不变,否则将f(P)所对应的字符进行替代。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include<stdio.h> #include<string.h> #include<stdlib.h> #include<ctype.h> unsigned char xx[50][80]; int maxllne=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void encryptChar() voidmain() system("CLS"); if(ReadDat()) printf("数据文件ENG50.IN不能打开!/n/007"); return; encryptChar(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; unsigned char*P; if((fP=fopen("ENG50.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(void) FILE*fp:int i; fp=fopen("PS50.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
进入题库练习