问答题函数ReadDat()的功能是实现从文件IN7.DAT中读取一篇英文文章并存人到字符串数组xx中。请编制函数SortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果XX输出到文件OUT7.DAT中。 例如,原文:dAe,BFC CCbbAA 结果:fedCBA, bbCCAA 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出. 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 [试题程序] #include<stdio.h> #include<string.h> #include<stdlib.h> char xx[50][80]; int maxline=0; int ReadDat(void); void WriteDat(void); void SortCharD() void main() system("CLS"); if(ReadDat()) printf("数据文件IN7.DAT不能打开! /n/007"); return; SortCharD(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; char * P; if((fp=fopen("IN7.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; system("CLS"); fp=fopen("OUT7.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题已知数据文件IN20.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,清编制一函数jsVal(),其功能是:如果一个4位数的千位数字加十位数字恰好等于百位数字加上个位数字,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存人数组b中,最后调用写函数wfiteDat()把结果cnt及数组b中符合条件的4位数输出到OUT20.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("IN20.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("kn"); writeDat(); void writeDat() FILE*fp; int i; fp=fopen("OUT20.DAT","w"); fprintf(fp,"% d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题函数ReadDat()的功能是实现从文件IN83.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中偶数的个数even、奇数的平均值ave1、偶数的平均值ave2及所有偶数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT83.DAT文件中。计算方差的公式如下:设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数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;inti,j;if((fp=fopen("IN83.DAT","r"))==NULL)return1;for(i=0;i<100;i++)for(j=0;j<10;j++)fscanf(fp,"%d,",&xx[i*10+j]);fscanf(fp,"/n");if(feof(fp))break;fclose(fp);return0;voidCompute(void)voidmain()inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat())printf("数据文件IN83.DAT不能打开!/007/n");return;Compute();printf("EVEN=%d/nAVE1=%f/nAVE2=%f/nTOTFC=%f/n",even,ave1,ave2,totfc);WriteDat();voidWriteDat(void)FILE*fp;fp=fopen("OUT83.DAT","w");fprintf(fp,"%d/n%1f/n%1f/n%1f/n",even,ave1,ave2,totfc);fclose(fp);
问答题已知数据文件in80.dat中存有300个4位数,并已调用函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于0的个数cnt,再求出所有满足此条件的4位数平均值pjz1,以及所有不满足此条件的4位数平均值pjz2,最后调用函数writeDat()把结果cnt,pjz1,pjz2输出到out80.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 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( "in80.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", writeDat() FILE *fp; int i; fp=fopen("out80.dat","w") fprintf(fp,"%d/n%7.2lf/n%7.2lf/n",cnt ,pjz1,pjz2); fclose(fp);
问答题在文件in71.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDat()的功能是读取这200组数据并存放到结构数组aa中。请编制函数jsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第一个数大于第二个数加第三个数之和,其中满足条件的个数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数按照每组数据的第一个数加第三个数之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中。最后调用函数writeDat()把结果bb输出到文件out71.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("IN71.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; system("CLS"); out=fopen("OUT71.dat","w"); for(i=0;i<count;i + +) printf("% d,% d,% d 第一个数+第三个数=% d/n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3); fprintf(out,"% d,% 5d,% d/n",bb[i].x1,bb[i].x2,bb[i].x3); fclose(out);
问答题已知数据文件IN1.DAT中存有200个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsVal(),其功能是:如果4位数各位上的数字均是奇数,则统计出满足此条件的个数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 writeDat(); void jsVal() void readDat() int i; FILE*fp; fp=fopen("IN1.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/n",b[i]); printf("/n"); writeDat(); void writeDat() FILE*fp; int i; fp=fopen("outl.dat","W"); fprintf(fp,"%d/n",cnt); for(i=0;i>cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题已知IN2.DAT中存有200个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsVal(),其功能是:依次从数组a中取出一个数,如果该4位数连续大于该4位数以后的5个数且该数是奇数,则统计出满足此条件的数的个数cnt,并把这些4位数按从小到大的顺序存人数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT2.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cn 请勿改动主函数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("IN2.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("OUT2.DAT","W"); fprintf(fP,"%d/n",cnt); for(i=0;i<cnt;i++)fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题已知文件IN43.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价di(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存人结构数组sell中,最后调用函数WfiteDat()把结果输出到文件OUT43.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WfiteDat()的内容。 [试题程序] #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() i memset(sell,0,s2zeof(sell)); ReadDat(); SortDat(); WriteDat(); void ReadDat() FILE*fp; char str[80],ch[11]; int i; fp=fopen("IN43.DAT","r"); for(i=0;i<100;i++) fgets(str,80,fp); memcpy(sell[i].dm,str,4); memacpy(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("OUT43.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);
问答题已知在文件IN13.DAT中存有若干个(个数
#include
#define MAXNUM 200
int xx[MAXNUM];
int totNum = 0; /* 文件IN13.DAT中共有多少个正整数 */
int totCnt = 0; /* 符合条件的正整数的个数 */
double totPjz = 0.0; /* 平均值 */
int ReadDat(void);
void Writedat(void);
void CalValue(void)
{
}
main()
{
int i;
clrscr();
for(i = 0; i < MAXNUM; i++)
xx[i] = 0;
if(ReadDat())
{
printf("数据文件IN13.DAT不能打开!/007/n");
return;
}
CalValue();
printf("文件IN13.DAT中共有正整数= %d 个/n", totNum);
printf("符合条件的正整数的个数= %d 个/n", totCnt);
printf("平均值=%.2lf/n", totPjz);
Writedat();
}
int ReadDat(void)
{
FILE *fp;
int i = 0;
if((fp = fopen ("IN13.DAT", "r")) == NULL)
return 1;
while(! feof(fp))
{
fscanf(fp, "%d,",
}
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
fp = fopen("OUT13.DAT", "w");
fprintf(fp, "%d/n%d/n%.2lf/n", totNum, totCnt, totPjz);
fclose(fp);
}
问答题请编制程序,其功能是:内存中连续存放着10个用ASCII码表示的十进制个位数,将它们转换成相应的二进制字节数N0,N1,…,N9,然后按序将N0至N9存入内存中,最后存放它们的和n(n=N0+N1+…N9)。N用压缩型(组合型)BCD码表示。 例如: 内存中有;30H ('0'),39H('9'),31H('1'),… 结果为: 00H,09H,01H,…(后跟n) 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白处已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令亦可,或删去BEGIN和END之间原有的代码并自行编程来完成所要求的功能。 对程序必须进行汇编,并与IO.OBJ连接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序存在错误之处,请加以修改。 【试题程序】 EXTRN LOAD:FAR,SAVE:FARN EQU 10STAC SEGMENT STACK DB 128 DUP (?)STAC ENDSDATA SEGMENTSOURCE DB N DUP(?)RESULT DB N+1 DUP(0)NAME0 DB 'INPUT1.DAT',0NAME1 DB 'OUTPUT1.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 ; 字节数 CALL LOAD ; 从"INPUT1.DAT"中读取数据; ******** BEGIN ******** MOV DI,OFFSET RESULT MOV BX,0 MOV CX,N MOV DL, (1) PRO: MOV AL,SOURCE[BX] (2) AL,30H MOV [DI],AL (3) ADD AL,DL (4) ; BCD码调整 MOV DL,AL INC BX (5) JNZ PRO (6) ; ******* END ******** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名 MOV CX,N+1 ; 结果字数 CALL SAVE ; 保存结果到文件 RETSTART ENDPCODE ENDS END START
问答题已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序,最后调用写函数writeDat()把数组b中的数输出到OUT13.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 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("IN13.DAT","r"); for(i=0;i≤300;i++)fscanf(fp,"%d,",i<cnt;i++)fprint(fp,"%d\n",b[i]); fclose(fp);
问答题已知在文件IN4.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量s1(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT4.DAT中。 注意:部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 [试题程序] #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(); WrheDat(); void ReadDat() FILE *fp; char str[80],ch[11]; int i; fp=open("IN4.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("OUT4.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);
问答题已知数据文件IN29.DAT中存有200个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsVal(),其功能是:把个位数字和千位数字重新组合成一个新的2位数ab(新2位数的十位数字是原4位数的个位数字,新2位数的个位数字是原4位数的千位数字),以及把百位数字和十位数字组成另一个新的2位数cd(新2位数的十位数字是原4位数的百位数字,新2位数的个位数字是原4位数的十位数字),如果新组成的两个数均为偶数且两个2位数中至少有一个数能被9整除,同时两个新2位数的十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存人数组b中,并计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT29.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("IN29.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/n",b[i]); printf("/n"); writeDat(); void writeDat() FILE*fp; int i; fp=fopen("OUT29.DAT","W"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
问答题在文件in75.dat中有200组数据,每组有3个数,每个数均为3位数。函数readDat()是读取这200组数存放到结构数组aa中。请编制函数JsSort(),其函数的功能是:要求在200组数据中找出条件为每组数据中的第一个数大于第二个数加第三个数之和,其中满足条件的个数作为函数JsSort()的返回值,同时把满足条件的数据存入结构数组bb中,再对bb中的数按照每组数据的第一个数加第三个数之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb中。最后调用函数writeDat()把结果bb输出到文件out75.dat。 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include<stdio.h> #include<string.h> #include<conio.h> typedef struct int x1,x2,x3; Data; Data aa[200],bb[200]; int jsSort () void main() int count; readDat(); count=jsSort(); writeDat(count); readDat() FILE *in; int i; in=fopen("in75.dat","r"); for(i=0;i<200;i++) fscanf(in,"%d %d %d", fclose(in); writeDat(int count) ( FILE *out; int i; clrscr(); out=fopen("out75.dat","w"); for(i=0;i<count;i++) printf("%d, %d, %d 第一个数+第三个数 =%d/n",bb[i].xl,bb[i].x2,bb[i].x3,bb[i].xl+bb[i].x3); fprintf(out,"%d,%d,%d/n",bb[i].xl,bb[i].x2,bb[i].x3); fclose(out);
问答题已知数据文件IN76.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:把个位数字和千位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的千位数字),以及把百位数和十位数组成另一个新的十位数cd(新十位数的十位数字是原4位数的百位数字,新十位数的个位数字是原4位数的十位数字),如果新组成的两个十位数必须是一个奇数,另一个为偶数且两个十位数中至少有一个数能被17整除,同时两个新十位数字均不为0,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT76.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("IN76.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("OUT76.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
问答题对10个候选人进行选举,现有一个100条记录的选票数据文件IN29.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位内容均为字符0或1,1表示此人被选中, 0表示此人未被选中,若一张选票选中人数小于等于5个人时则被认为是无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中,最后调用函数 WriteDat()把结果”输出到文件OUT29.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WilteDat()的内容。 试题程序: #include〈stdio.h> char xx[100] [11]; int yy[10]; int ReadDat(void); void WriteDat(void); void CountRs(void) main () int i; for (i=0; i〈10; i++) yy[i] = 0; if (ReadDat ( ) ) printf ("选票数据文件IN29.DAT不能打开!/007/n"); return; CountRs(); WriteDat(); int ReadDat(void) FILE *fp; int i; char tt[13]; if((fp = fopen("IN29.DAT", "r")) == NULL) return 1; for (i = 0; i〈100; i++) if(fgets(tt, 13, fp) == NULL) return 1; memcpy(xx[i], tt, 10); fclose(fp); return 0; void WriteDat(void) FILE *fp; int i; fp = fopen("OUT29.DAT", "w"); for(i = 0; i〈10; i++) fprintf(fp, "%d/n", yy[i]); printf("第%d个人的选票数=%d/n", i+1, yy[i]); fclose(fp);
问答题请编制程序PROG1.ASM,其功能是:以逻辑尺L变量对内存中连续存放着16个字的数进行去高字节操作:当L的i位为1则将第i数据的高字节置为全0,当L的i位为0则第i数据不变。将处理的结果存入RESULT指示的内存区。 例如: 设L=0005H 源数:1111H,2222H,3333H,4444H,5555H,6666H… 结果:0011H,2222H,0033H,4444H,5555H,6666H… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUTl.DAT中读入SOURCE开始的内存元中,运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 填空BEGIN和END之间已给出的源程序使其完整(空白已用横线标出,每行空白一般只需一条指令,但采用功能相当的多条指令也可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 PROG1.ASM文件内容如下: EXTRN LOAD:FAR,SAVE:FAR N EQU 16 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT L DW ? SOURCE DW N DUP(?) RESULT DW 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,L ;数据区起始地址 LEA SI,NAMEO ;原始数据文件名 MOV CX,2*(N+1) ;字节数 CALL LOAD ;从input1.dat文件中读取数据 ;* * * * BECIN * * * * LEA SI,SOURCE _______ MOV CX,N MOV DX,_____ LO: MOV AX,[SI] _____ L,DX _____ STORE NOT AX STORE: MOV [DI],AX ADD DI,2 ADD SI,2 LOOP LO ;* * * * END * * * * LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,2*N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
问答题已知数据文件in32.dat中存有300个4位数,并已调用读函数readDat()把这些数存人数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数上数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt、pjz1、pjz2输出到out32.dat文件中。 例如:9123,9-1-2-3>0,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1;9812,9-8-1-2<0,则该数不满足条件,计算平均值pjz2。 注意:部分源程序已给出。 程序中已定义数组:a[300],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数wfteDat()的内容。 [试题程序] #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("in32.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", fclose(fp); void writeDat() FILE*fP: fP=fopen("out32.dat","W"); fprintf(fp,"%d/n%7.2lf/n%7.2lf/n”,cnt,pjz1,pjz2); fclose(fp);
问答题已知数据文件IN27.DAT中存有200个4位数,并已调用读函数read()砒()把这些数存入数组a中,请编制一函数jsVal(),其功能是:把千位数字和十位数字重新组合成一个新的2位数(新2位数的十位数字是原4位数的千位数字,新2位数的个位数字是原4位数的十位数字),以及把个位数和百位数组成另一个新的2位数(新2位数的十位数字是原4位数的个位数字,新2位数的个位数字是原4位数的百位数字),如果新组成的两个2位数均为素数且新2位数的十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数wr"iteDat()把结果cnt及数组b中符合条件的4位数输出到OUT27.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 [试题程序] #include <stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void writeDat(); 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("IN27.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/n",b[i]); printf("/n"); void writeDat(); void writeDat() FILE*fp: int i; fp=fopen("OUT27.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fP,"% d/n",b[i]); fclose(fp);
问答题请编写函数void eountValue(int *a,int *n),它的功能是:求出1~1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。 注意:部分源程序已给出。 请勿改动主函数main()和写函数writeDAT()的内容。 [试题程序] #include<stdlib.h> #include<stdio.h> void writeDAT(); void countValue(int *a,int *n) void main() int aa[1000],n,k; system("CLS"); countValue(aa, for(k=0;k<n;k++) if((k+1)%10==0) printf("%5d",aa[k]); printf("kn"); else printf("%5d",aa[k]); writeDAT(); void writeDAT() int aa[1000],n,k; FILE *fp; fP=fopen("out10.dat","w"); countValue(aa, for(k=0;k<n;k++) if((k+1)%10==0) fprintf(fp,"%5d",aa[k]); fprintf(fp,"/n"); else fprintf(fp,"%5d",aa[k]); fclose(fp);
