问答题已知数据文件IN82.DAT中存有300个4位数,并已调用函数readDat()把这些数存入数组a中,请编制一函敞jsValue(),其功能是:求出这些4位数是素数的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt,pjz1,pjz2,输出到out82.dat文件中。 例如:5591是素数,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1。 9812是非素数,则该数不满足条件,计算平均值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; 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(); printf("cnt=%d/n满足条件的平均值pjz1=%7.2lf/n不满足条件的平均值 pjz2=%7.2lf/n",cnt,pjz1,pjz2); readDat() FILE *fp; int i; fp=fopen( "in82.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); writeDat() FILE *fp; int i; fp=fopen("out82.dat","w"); fprintf(fp,"%d/n%7.2lf/n%7.2lf/n",cnt ,pjz1,piz2); fclose(fp);
问答题下列程序的功能是:利用以下所示的简单迭代方法求方程: cos(x)-x=0的一个实根。 xn+1=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()把结果输出到文件out41.dat中。 注意;部分源程序已给出。 请勿改动主函数main()和写函数writeDAT()的内容。 试题程序: #include<conio.h> #include<math.h> #include<stdio.h> float countValue( ) main ( ) clrscr( ); printf("实根=%f/n",countValue( )); printf("%f/n",cos(countValue( ))-countValue( )); writeDAT( ); writeDAT( ) FILE *wf; wf=fopen("out41.dat","w"); fprintf(wf,"%f/n",countValue( )); fclose(wf);
问答题已知数据文件IN25.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中。请编制一函数jsVal(),其功能是:把千位数字和个位数字重新组成一个新的2位数(新2位数的十位数字是原4位数的千位数字,新2位数的个位数字是原4位数的个位数字),把百位数字和十位数字组成另一个新的2位数(新2位数的十位数字是原4位数的百位数字,新2位数的个位数字是原4位数的十位数字),如果新组成的两个2位数均是奇数并且两个2位数中至少有一个数能被5整除,同时两个新2位数的十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存人数组b中,并要求计算满足上述条件的4位数的个数cnt,最后调用写函数wnteDat()把结果cnt及数组b中符合条件的4位数输出到OUT25.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("IN25.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("OUT25.DAT","w"); fprintf(fp,"% d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"% d/n",b[i]); fclose(fp);
问答题已知数据文件IN87.DAT中存有300个4位数,并已调用函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的4位数平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt,pjz1,pjz2,输出到out87.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()和写函数writedat()的内容。 试题程序: #include<stdio.h> int a[300], cnt=0; double pjz1=0.0,pjz2=0.0; void jsValue() main() int i; readDat(); jsValue(); writeDat(); printf("cnt=%d/n满足条件的平均值pjz1=%7.2lf/n不满足条件的平均值pjz2=% 7,2lf/n",cnt,pjz1,pjz2); readDat() FILE *fp; int i; fp=fopen( "in87.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); writeDat() FILE *fp; int i; fp=fopen("out87.dat","w"); fprintf(fp,"%d/n%7.2lf/n%7.2lf/n",cnt ,pjz1,pjz2); fclose(fp);
问答题下列程序的功能是:计算500~800之间素数的个数cnt,并按所求素数存入数组yy中,再计算其间隔加、减之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum输出到文件OUT89.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()和写函数writeDAT()的内容。 试题程序: #include <stdio.h> int cnt,sum; void writeDAT(); void countValue() void main() cnt=sum=0; countValue(); printf("素数的个数=% d/n",cnt); printf("按要求计算的值=% d/n",sum); writeDAT(); void writeDAT() FILE * fp; fp=fopen("OUT89.DAT","w"); fprintf(fp," % d/n% d/n",cnt,sum); fclose(fp);
问答题已知数据文件INl5.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中。请编制函数jsVal(),其功能是:依次从数组a中取出一个4位数,如果该4位数连续小于该4位数以后的5个数且该数是偶数,则统计出满足此条件的数的个数cnt,并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT15.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('IN15.DAT", "r"); for(i = 0; i < MAX; i++) fscanf(fp, "%d", fclose (fp); main ( ) int i; readDat ( ); j sVal ( ); printf("满足条件的数=%d/n", cnt); for(i = 0; i < cnt; i++) printf("%d ", b[i]); printf ( "/n" ); writeDat ( ); writeDat ( ) FILE *fp; int i; fp = fopen("OUT15.DAT", "w") fprintf(fp, "%d/n", cnt); for(i = 0; i < cnt; i++) fprintf(fp, "%d/n", b[i] fclose (fp);
问答题已知在文件IN48.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中,金额:单价x数量。函数ReadDat()的功能是读取这100个销售记录并存人数组sell中。请编制函数SonDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT48.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 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("IN48.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=(10ng)sell[i].dj*sell[i].sl; fclose(fp); void WriteDat() FILE*fp; int i; fp=fopen("OUT48.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);
问答题对10个候选人进行选举,现有一个100条记录的选票文件ENG78.IN,其数据存放格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位候选人的记录内容均为字符0或1,1表示此人被选中,0表示此人未被选中,全选或全不选(空选票)均为无效的选票。给定函数ReadDat()的功能是把选票记录读入到字符串数组xx中。请编制函数CoutRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中,最后调用函数WtiteDat()把结果yy输出到文件OUT78.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include <memory.h> #include <stdio.h> char xx[100][11]; int yy[10]; int ReadDat(void); void WriteDat(void); void CoutRs(void) void main() int i; for(i=0;i<10;i + +) yy[i]=0; if(ReadDat()) printf("数据文件ENG78.IN不能打开! /n/007"); return; CoutRs(); WriteDat(); int ReadDat(void) FILE * fp; int i; char tt[13]; if((fp=fopen("ENG78.IN","r"))==NULL) return 1; for(i=0;i<100;i + +) if(fgets(tt,13,fp)==NULL) return 1; memcpy(xx[i],tt,10); xx[i][10]=0; fclose(fp); return 0; void WriteDat() FILE * fp; int i; fp=fopen("OUT78.DAT","w"); for(i=0;i<10;i + +) fprintf(fp,"% d/n",yy[i]); printf("第% d个人的选票数=% d/n",i+1,yy[i]); fclose(fp);
问答题已知数据文件IN16.DAT中存有300个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能:求出千位数上的数减百位数上数减十位数上的数减个位数上的数大于零的数的个数ent,再把所有满足此条件的4位数依次存人数组b中,然后对数组b的4位数按从小到大的顺序进行排序,最后调用写函数writeDat()把数组b中的数输出到0UT16.DAT文件中。 例如:9123,9-1-2-3>0,则该数满足条件,存人数组b中,且个数cnt=cnt+1。9812,9-8-1-2<0,则该数不满足条件,忽略。 注意:部分源程序已给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数witeDal()的内容。 [试题程序] #include<stdio.h> int a[300]Ib[300],cnt=0; void readDat(); void writeDat(); void jsValue() voidmain() int i; readDat(); jsValue(); printf("cnt=% d/n",cnt); writeDat(); for(i=0;i<cnt;i++) printf("b[%d]=% d/n",i,b[i]); void readDat() FILE*fp; int i; p=fopen("IN16.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE*fp; int i; fp=fopen("OUT16.DAT","w"); fprintf(fp,"% d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"% d/n",b[i]); fclose(fp);
问答题已知数据文件IN56,DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:把千位数字和十位数字重新组合成一个新的十位数(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数和百位数组成另一个新的十位数(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成的两个十位数均为素数且新十位数字均不为零,则将满足此条件的 4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT56.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200]已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; int isprime(int m) int i; for(i=2;i<=m/2;i++) if(m%i==0) return 0; return 1; void jsVal () void readDat ( ) int i; FILE *fp; fp=fopen("IN56.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/n",b[i]); printf("/n"); writeDat(); writeDat() FILE *fp; int i; fp=fopen("OUT56.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题编写一个函数findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。 函数ReadWrite()实现从文件in.dat中读取两个字符串并调用函数findStr(),最后把结果输出到文件out.dat中。 注意:部分程序已经给出。 请勿改动主函数main()和其他函数中的任何内容,仅在函数findStr()的花括号中填入你编写的若干语句。 #include <stdio.h> #include <string.h> #include <conio.h> int findStr(char *str,char *substr) main() char str[81],substr[3]; int n; clrscr(); printf("输入原字符串"); gets(str) ; printf("输入子字符串:"); gets(substr); puts(str); puts(substr); n=findStr(str, substr); printf("n=%d/n", n); ReadWrite(); ReadWrite() char str[81],substr[3],ch; int n, len,i=0; FILE *rf, *wf; rf=fopen("in.dat", "r"); wf=fopen("out.dat", "w"); while(i<25) fgets(str, 80, rf); fgets(substr, 10, rf); len=strlen(substr)-1; ch=substr[len]; if(ch=='/n' || ch==0xla)substr[len]=0; n=findStr(str, substr); fprintf(wf, "%dkn", n); i++; fclose(rf); fclose(wf);
问答题函数ReadDat()实现从文件eng.in中读取一篇英文文章,存入到字符串数组xx中。请编制函数encrypt Char(),按给定的替代关系对数组xx中所有的字符进行替代,仍存入字符串数组xx的对应位置上,最后调用函数writeDat()把结果xx输出到文件ps3.dat中。 替代关系:f(p)=p*17 mod 256(p是数组中某一个字符的ASCⅡ码值,f(p)是计算后新字符的ASCⅡ码值),如果计算后f(p)值小于32或其ASCⅡ码值是奇数,则该字符不变,否则将f(p)所对应的字符进行替代。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 注意:部分源程序给出如下: 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题源程序] #include<stdio.h> #include<string.h> #include<conio.h> #include<ctype.h> unsigned char xx[50]E80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void encryptChar() void main() system("cls"); if(ReadDat()) printf("数据文件ENG.IN不能打开!/n/007"); return; encryptChar(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; unsigned char*P; if((fp=fopen("eng.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("ps.dat","w"); for(i=0:i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题已知数据文件in34.dat中存有300个4位数,并已调用函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt、pjz1、pjz2输出到out34.dat文件中。 例如:7153,7+1=5+3,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1。8129,8+1≠2+9,则该数不满足条件,计算平均值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() FILE*fp; int i; fp=fopen("in34.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE*fP; fP=fopen("out34.dat","w"); fprintf(fp,"%d/n%7.2lf/n%7.2 lf/n",cnt,pjz1,Pjz2); fclose(fp);
问答题已知数据文件IN85.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:如果一个4位数的千位数字上的值加十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT85.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("IN85.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("OUT85.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题已知在文件IN34.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量s1(整型)、金额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat() 的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求;按产品代码从大到小进行捧列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数writeDat()把结果输出到文件 OUT34.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数RdadDat()和写函数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 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("IN34.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("OUT34.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].s1, sell[i].je); fclose(fp);
问答题已知数据文件IN14.DAT中存有300个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsVaue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足此条件的4位数依次存人数组b中,然后对数组b中的4位数按从大到小的顺序进行排序,最后调用写函数writeDat()把数组b中的数输出到OUT14.DAT文件。 例如:7153.7+1=5+3,则该数满足条件,存人数组b中,且个数cnt=cnt+1。8129,8+1≠2+9,则该数不满足条件,忽略。 注意:部分源程序已给出。 程序中已定义数组:a[300],b[300],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 [试题程序] #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("INl4.DAT","r"); for(i=0;i<300;i++) fscanf(fp,"% d,", fclose(fp); void writeDat() FILE*fp; int i; fP=fopen("OUT14.DAT","W"); fprintf(fp,"% d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"% d/n",b[i]); fclose(fp);
问答题编制一个程序,其实现的功能为:计算10个带符号字节数据的绝对值之和(和为字型),并且找出绝对值最小的数及其所在的偏移地址,将结果依次存入指定的内存区中,结果以0FH结束。 例如: 内存中有:23H, 14H,00H,08H,PEH, 87H,02H,01H,PPH,01H 结果为: BFH,00H,00H,02H,00H,0FH 部分程序已经给出,原始数据由过程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 6 DUP(0) MIN DB ? NAME0 DB 'INPUT.DAT',0 NAME1 DB 'OUTPUT.DAT',0 DSEG ENDS SSEG EGMENT 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 DX,SI MOV CX,N-1 MOV AL,[SI] SUB AX,0 JNS NEXT NEG AL NEXT: MOV MIN,AL ADD [DI],AL (1) AGAIN: INC SI MOV AL,[SI] ADD AL,0 JNS NEXT1 (2) NEXT1: ADD [DI],AL (3) CMP MIN,AL JBE NEXT2 MOV MIN,AL (4) NEXT2: LOOP AGAIN ADD DI,2 MOV AL,MIN MOV [DI],AL INC DI MOV [DI],DX ADD DI,2 MOV (5) ,0FH *********** END ************* LEA DX,RESULT LEA SI,NAME1 MOV CX,6 CALL SAVE RET START ENDP CSEG ENDS END START
问答题请编制程序,其功能是;内存中共有30个字节型数据,找出其中的两个ASCII字符串并进行校验。欲寻找的ASCII字符串由13个字符组成:#(23H),7个ASCII字符,*(2AH),2个ASCII字符,回车符(0DH),换行符(0AH)。 校验方法为:对字符#及字符,之间的7个ASCII字符进行异或操作,若异或操作结果的ASCII字符表示(异或操作结果高4位的ASCII字符表示在前,低4位的ASCII字符表示在后)与原字符串中字符,之后的两个ASCII字符相同,则将原字符串原样保存:反之,则将原字符串中的所有字符(共13个)均用字符!(21H)代替。 例如: 内存中有:33H,35H,23H('#',第一个字符串开始),46H,41H,30H,2EH,34H,3DH,31H,2AH('#'),32H, 31H,ODH,OAH,46H,23H('#',第二个字符串开始),46H,41H,30H,2EH,34H,46H,41H, 30H,46H,41H,30H,2EH,34H,3DH,30H,2AH('*'),32H,31H,ODH,OAH,55H 结果为:23H,46H,41H,30H,2EH,34H,3DH,31H,2AH('*'),32H,31H(校验正确,该字符串原样保持), ODH,OAH,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H,21H(校验错,整个字符串用字符“!”代替) 部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中。运算结果要求从 RESULT开始存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR, SAVE:FAR N EQU 26 STAC SEGMENT STACK DB 128 DUP (?) STAC ENDS DATA SEGMENT SOURCE DB N+4 DUP(?) RESULT DB N DUP(0) HH DB 2 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 LEA DX, SOURCE ; 数据区起始地址 LEA SI,NAME0 ; 原始数据文件名 MOV CX, N+4 ; 字节数 CALL LOAD ; 从'INPUT. DAT' 中读取数据 ;******** BEGIN ******** MOV SI,0 MOV DI,0 MOV BX,2 ; 两个ASCII 字符串 REPEAT: MOV AH,0 SEARCH: MOV AL,SOURCE[SI] INC SI CMP AL,'#' (1) SEARCH MOV RESULT[DI],AL INC DI SEARCH1: MOV AL,SOURCE[SI] INC SI CMP AL, (2) JE ASCII MOV RESULT[DI],AL INC DI XOR AH,AL JMP (3) ASCII: MOV RESULT[DI],AL INC DI PUSH DI MOV DI,0 MOV DH,2 MOV DL,AH ; 异或结果暂存在DL MOV CL, 4 ; 先将结果高4位转换成ASDCII字符 SHR AH, CL ; 本行开始的4行语句将一个十六进制数转换 ; 为ASCII码 CHANGE: CMP AH,10 JL ADD_0 ADD AH, 'A'-'0'-10 ADD_O: ADD AH, '0' MOV HH[DI],AH INC DI DEC DH JZ EXT MOV AH, DL ; 再将异或结果低4位转换成ASDCII字符 AND AH, 0FH JMP CHANGE EXT: POP DI MOV AL,SOURCE[SI] MOV RESULT[DI],AL INC SI INC DI MOV AH,SOURCE[SI] MOV RESULT[DI],AH INC SI INC DI MOV DL,HH MOV DH,HH+1 CMP AX,DX (4) ERR MOV AL, 0DH ; 校验正确 MOV RESULT[DI],AL INC DI MOV AL,0AH MOV RESULT[DI],AL INC DI JMP LP ERR: SUB DI, 11 ;校验正确 MOV AL,'!' MOV CX, (5) COVER: MOV RESULT[DI],AL INC DI LOOP COVER LP: (6) JZ EXIT JMP REPEAT EXIT: NOP ;******** END ******** LEA DX, RE****SULT ; 结果数据区首址 LEA SI, NAME1 ; 结果文件名 MOV CX, N ;结果字节数 CALL SAVE ; 保存结果到文件 RET START ENDP CODE ENDS END START
问答题试题要求如图10.1所示。部分源程序内容如下:#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;inti;if((fp=fopen("K://k06//35010001//IN.DAT","r"))==NULL)return1;for(i=0;i<MAX;i++)fscanf(fp,"%d,",&xx[i]);fclose(fp);return0;voidCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN.DAT不能打开!/007/n");return;Compute();printf("ODD=%d/nEVEN=%d/nAVER=%lf/nTOTFC=%lf/n",odd,even,aver,totfc);WriteDat();voidWriteDat(void)FILE*fp;inti;fp=fopen("K://k06//35010001//OUT.DAT","w");fprintf(fp,"%d/n%d/n%lf/n%lf/n",odd,even,aver,totfc);fclose(fp);
问答题已知数据文件IN26.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中。请编制一函数jsVal(),其功能是:把千位数字和个位数字重新组成千个新的十位数(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的个位数字),把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原4位数的百位数字,新十位数的个位数字是原4位数的十位数字),如果新组成的两个十位数均是奇数并且两个十位数中至少有一个数能被5整除,同时两个新十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要求计算满足上述条件的 4位数的个数cnt,最后调用写函数writeDat(),把结果cnt及数组b中符合条件的4位数输出到OUT26.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("IN26.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("OUT26.DAT", "w"); fprintf(fp, "%dkn", cnt); for(i = 0; i〈cnt; i++) fprintf(fp, "%dkn", b[i]); fclose(fp);
