问答题已知数据文件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);
问答题已知数据文件IN22.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果一个4位数的千位数字加十位数字恰好等于百位数字加上个位数字,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到0UT22.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 jsVal() void readDat() int i; FILE*fp; fp=fopen("IN22.DAT","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",b[i]); printf("/n"); writeDat(); void writeDat() FILE*fP; int i; fP=fopen("OUT22.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"% d/n",b[i]); fclose(fp);
问答题已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)5部分组成。其中:金额=单价×数量。函数ReadDat()读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.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 ("IN.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(void) FILE *fp; int i; fp=fopen("OUT10.DAT","w"); for(i=0;i<100;i++) printf("%s %s %4d %5d %5d/n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i],je); fprintf(fp,"%s %s %4d %5d %5d/n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je); fclose(fp);
问答题已知数据文件IN77.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果一个4位数的千位数字上的值加十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT77.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void jsVa1( ) void readDat( ) int i; FILE *fp; fp=fopen("IN77.DAT","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d", fclose(fp); main() int i; readDat(); jsVa1(); printf("满足条件的数=%d/n",cnt); for(i=0;i<cnt;i++) printf("%d",b[i]); printf("/n"); writeDat(); writeDat() FILE *fp; int i; fp=fopen("OUT77.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fP);
问答题编制一个程序,其实现的功能为:求出内存中连续存放的20个无符号数序列的最大值和最小值,并将结果按要求存入。结果的存放形式为:按原序列存放20个需要处理的无符号数,后跟该序列的最小值和最大值(最小值在前,最大值在后)。 例如: 内存中有:23H,45H,61H…… 结果为: 23H,45H,61H…… (20个需要处理的原来的无符号数),后面跟该序列的最小值和最大值(最小值在前,最大值在后)。 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FARN EQU 20SSEG SEGMENT STACK DB 256 DUP (?)SSEG ENDSDSEG SEGMENTSOURCE DB N DUP (?)RESULT DB N+2 DUP (0)NAME0 DB 'INPUT.DAT',0NAME1 DB '0UTPUT.DAT',0DSEG 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 DL,[SI] MOV DH,DL MOV [DI],DL INC SI INC DI MOV CX, (1) AGAIN: MOV AL,[SI] CMP (2) JBE MIN (3) JMP NEXTMIN: CMP (4) JAE NEXT MOV DL,ALNEXT: MOV [DI],AL INC SI INC DI LOOP AGAIN MOV [DI],DL MOV (5) ; ******** END ******** LEA DX,RESULT LEA SI,NAME1 MOV CX,N+2 CALL SAVE RETSTART ENDPCSEG ENDS END START
问答题请编制程序,其功能是:内存中连续存放着20个无符号字节数序列请将它们按升序排列(从小到大)。 例如: 内存中有:01H,04H,02H,...(假设后17个字节均大与04H) 结果为:01H,02H,04H,...(后跟17个字节,按从小到大的顺序排列) 部分程序已给出,其中原始数据由过程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 ;从'INPUT1.DAT'中读取数据 ; ******BEGIN****** LEA SI,SOURCE LEA DI,RESULT MOV CX,N NEXT: MOV AL,[SI] MOV [DI],AL INC SI ______ LOOP ______ CLD MOV BX,______ NEXT1: LEA SI,RESULT MOV CX,BX NEXT2: LOD ______ CMP [SI],AL JAE ______ XCHG [SI],______ MOV [SI-1],AL NEXT3: LOOP ______ DEC ______ JNZ ______ ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
问答题某级数的前两项A1=1,A2=1,以后各项具有如下关系: An=An-2+2An-1 下列序的功能是:要求依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn<M且Sn+1≥M,这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0]、b[1]、b[2]中,请编制jsValue()函数来实现此功能,最后调用函数writeDat()把数组b的值输出到out81.dat文件中。 注意:部分源程序已给出。 请勿改动主函数main()和输出函数writeDat()的内容。 试题程序: #include <stdio.h> int b[3]; void writeDat(); void JsValue() void main() jsValue(); printf("M=100,n=% d/nM=1000,n=% d/nM=10000,n=% d/n",b[0],b[1],b[2]); writeDat(); void writeDat() FILE * fp; fp=fopen("out81.dat","w"); fprintf(fp,"% d/n% d/n% d/n",b[0],b[1],b[2]); fclose(fp);
问答题试题要求如下: 请编制程序,其功能是:内存中连续存放着30个无符号字节数,求它们的和。和值形式按字存放,此前按顺序存放参加运算的30个字节。 例如: 内存中有01H,02H,03H,…… 结果为01H,02H,03H,……(30个参加运算的字节),后跟一个字(为前面30个字节的和)。 部分程序已给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算的结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。补充BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中发现整个程序中存在错误之处,请加以修改。 试题程序: EXTRN LOAD: FAR, SAVE: FAR N EQU 30 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N +2DUP(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 ; 从'INPUT1.DAT'中读取数据 ; **** BEGIN **** LEA SI, SOURCE LEA DI, RESULT MOV CX, N MOV BX, 0 NEXT: MOV AL, [SI] (1) (2) MOV [DI], (3) INC SI (4) LOOP NEXT MOV [DI], (5) ; **** END **** LEA DX, RESULT ; 结果数据区首址 LEA SI, NAME1 ; 结果文件名 MOV CX, N+2 ; 结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START
问答题已知在文件IN1.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量s1(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组.sell中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT1.DAT中。 注意:部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题程序] include #include #include #include #include #define MAX 100 typedef struct char dm[5]; /*产品代码* / char mc[11]; /*产品名称*/ int dj; /*单价* / int si; /*数量*/ long je; /*金额*/ PRO; PRO sell[-MAX]; void ReadDat() ; void WriteDat() ; void SortDat() main() memset(sell,0,sizeof(sell)); ReadDat(); SortDat(); WriteDat(); void ReadDat() FILE *fp; char str[80],ch[11]; int i; fp=fopen("IN1.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() FILE * fp; int i; fp=fopen("OUT1.DAT","w"); for(i=0;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);
问答题已知在文件IN9.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中,金额=单价X数量。函数ReadDat()的功能是读取这100个销售汜录并存入数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从小到大进行排列,排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT9.DAT中。 注意:部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题程序] include<stdio.h> #include<memory.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; PR()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[ll]; int i; fp=fopen("IN9.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; fclosc(fp); void WriteDat() FILE *fP; Int i; fp=fopen("OUT9.DAT","w"); for(i=0;i<100;i++) fprintf(fp,"%s %s %4d %5d %101d\n",sell[i].dm,sell[i].mc,sell[i].sl,sell[i].sl,sell[i].je); fclose(fp);
问答题fctose(fp);
问答题试题要求如图10.8所示。部分源程序内容如下:#include<stdio.h>#defineMAX200inta[MAX],b[MAX],cnt=0;voidjsVal()voidreadDat()inti;FILE*fp;fp=fopen("K://k06//35010008//in.dat","r");for(i=0;i<MAX;i++)fscanf(fp,"%d",&a[i]);fclose(fp);voidmain()inti;readDat();jsVal();printf("满足条件的数=%d/n",cnt);for(i=0;i<cnt;i++)printf("%d",b[i]);printf("/n");writeDat();WriteDat()FILE*fp;inti;fp=fopen("K://k06//35010008//out.dat","w");fprintf(fp,"%d/n",cnt);for(i=0;i<cnt;i++)fprintf(fp,"%d/n",b[i]);fclose(fp);
问答题设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去直到所有的人都出圈为止。先要求按出圈次序,每10个人为一组,给出这n个人的顺序表。请编制函数Josegh()实现此功能并调用函数WriteDat()把编号按照出圈顺序输出到文件OUT86.DAT中。 设n=100,s=1,m=10进行编程。 注意:部分源程序已给出。 请勿改动主函数main()和写函数WriteDat()的内容。 试题程序: #include <stdio.h> #define N 100 #define S 1 #define M 10 int P[100],n,s,m; void WriteDat(void); void Josegh(void) void main() m=M;n=N;s=S; Josegh(); WriteDat(); void WriteDat(void) int i; FILE * fp; fp=fopen("OUT86.DAT","w"); for(i=N-1;i>=0;i - -) printf("% 4d",p[i]); fprintf(fp,"% 4d",p[i]); if(i%10==0) Printf("/n"); fprintf(fp,"/n"); fclose(fp);