问答题请编制函数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);
问答题已知数据文件IN23.DAT中存有200个4位数,并已调用读函数readDat()把这些数存人数组a中。请编制一函数jsVal(),其功能是:如果一个4位数的千位数字加个位数字恰好等于百位数字加上十位数字,并且此4位数是奇数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存人数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT23.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 [试题程序] #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void writeDat(); void jsVai() void readDat() int i; FILE*fp; fp=fopen("IN23.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("OUT23.DAT","W"); fprintf(fp,"% d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"% d/n",b[i]); 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 <stdio.h> #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 <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("OUT1.DAT", "w"); fprintf(fp, "%d/n", cnt); for(i = 0; i < cnt; i++) fprintf(fp, "%d/n", b[i]); fclose(fp);
问答题已知数据文件IN58.DAT中存有300个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数JsValue(),其功能是:求出这些4位数是素数的个数cnt,再把所有满足此条件的4位数依次存入数组b中,然后对数组b的4位数按从小到大的顺序进行排序,最后调用函数writeDat()把数组b中的数输出到OUT58.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; 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("IN58.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); writeDat() FILE *fp; int i; fp=fopen("OUT58.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题请编写一个函数is Value(int m,int k,int xx[]),该函数的功能是:将小于整数m且紧靠m的k个素数存入数组xx传回。最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。 注意:部分源程序给出如下。 例如:若输入17,5,则应输出:13,11,7,5,3。 请勿改动主函数main和输出数据函数readwriteDat()的内容。 [试题源程序] #include<conio.h> #include<stdio.h> void readwriteDat(); void num(int m,int k,int xx[]) main() int m,n,xx[1000]; system("cls"); printf("/nPlease enter two integers;"); scanf("%d%d",&m,&n); num(m,n,xx); for(m=0;m<n;m++) printf("%d",xx[m]); printf("/n"); readwriteDat(); void readwriteDat() int m,n,xx[1000],i; FILE*rf,*wf; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i++) fscanf(rf,"%d%cr,&m,&n); num(m,n,xx); for(m=0;m<n;m++)fprintf(wf,"%d",xx[m]); fprintf(wf,"/n"); fclose(rf); fclose(wf);
问答题请编制程序PROG1.ASM,其功能是:内存中连续存放着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从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果 (无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处,请加以修改。 PROG1.ASM文件内容如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 10 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DW N DUP(?) RESULT DB N+1 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 DI,OFFSET RESULT MOV CL,N MOV BX,0 MOV DH,0 PRO: MOV DL,0 MOV AX,SOURCE[BX] MOV CH,______ COUNT: _____ _____ _____ JUMP INC DL JUMP: DEC CH JNZ _____ MOV [DI],DL ADD DH,DL INC DI ADD _____ DEC CL JNZ PRO MOV _____ ;* * * * END * * * * LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+1 ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
问答题已知在文件IN7.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价山(整型)、数量s1(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT7.DAT中。 注意:部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题程序] #include #include #include #include #include #include #include #define MAX 100 typedef struct char dm[5]; /*产品代码*/ char mc[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("IN7.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=atot(ch); memcpy(ch,str+18,5);ch[5]=0; sell[i].s1=atm(ch); sell[i].je=(long)sell[i].dj*sell[i].s1; fclose(fp); void WriteDat(void) FILE *fp; int i; fp=fopen("OUT7.DAT","w"); for(i=0;i<100;i++) fprintf(fp,"%s%s%4d%5d%101d/n",sell[i].dm,sell[i].me,sell[i].dj;sell[i].s1,sell[i].je); fclose(fp);
问答题已知数据文件IN53.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数JsVal(),其功能是:依次从数组a中取出一个4位数,如果该4位数连续大于该4位数以前的5个数且该数是偶数,则统计出满足此条件的数个数cnt并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到文件OUT53.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("in53.dat","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d", fclose(fp); void main() int i; readDat(); jsVal(); print f ( "满足条件的数=%d/n", cnt); for(i=0;i<cnt;i++) printf("%d",b[i]); printf("/n"); writeDat ( ); writeDat () FILE *fp; int i; fp=fopen("out53.dat","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题下列程序的功能是:计算500~800之间素数的个数cnt,并按所求素数的值从小到大的顺序,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件OUT66.DAT中。 注意:部分源程序已给出。 请勿改动主函数mam()和写函数writeDAT()的内容。 试题程序: #include<stdio. h> int cnt, sum; void countValue ( ) void main () cnt= sum=0; countValue(); printf ("素数的个数=%dkn", cnt ); printf ("按要求计算得值=%d/n", sum ); writeDAT ( ); writeDAT ( ) FILE *fp; fp=fopen ( "OUT66. DAT", "w" ); fprintf (fp, "%d/n%d/n", cnt, sum); fclose (fp);
