计算机类
公务员类
工程类
语言类
金融会计类
计算机类
医学类
研究生类
专业技术资格
职业技能资格
学历类
党建思政类
计算机等级考试(NCRE)
全国计算机应用水平考试(NIT)
计算机软件水平考试
计算机等级考试(NCRE)
全国高校计算机等级考试CCT
行业认证
信息素养
计算机等级考试三级
计算机等级考试一级
网络工程师(计算机等级考试四级)
计算机等级考试二级
数据库工程师(计算机等级考试四级)
计算机等级考试三级
信息安全工程师(计算机等级考试四级)
嵌入式系统开发工程师(计算机等级考试四级)
软件测试工程师(计算机等级考试四级)
问答题函数ReadDat()的功能是实现从文件IN32.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母。左边的字符串内容移至该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,最后把已处理的字符串仍按行重新存入字符串数组xx中。最后调用函数WriteDat()把结果输出到文件OUT32。DAT中。 例如,原文:You can create an index on any field you have the correct record 结果:n any field Yu can create an index rd yu have the crrect rec 原始数据文件存放的格式是;每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数,WriteDat()的内容。 试题程序: #include<stdio.h> #include<string.h> #include<conio.h> char xx[50] [80]; int maxline=O; int ReadDat(void); void WriteDat(void); void StrOR(void) void main() clrscr(); if(ReadDat()) printf("数据文件 IN32.DAT 不能打开! /n/007"); return; StrOR(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; char *p; if((fp=fopen("IN32.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; clrscr(); fp=fopen("OUT32.DAT","w"); for (i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf fp,"%s/n",xx[i]); fclose(fp)
进入题库练习
问答题下列程序的功能是:已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a数组中。找出成绩最高的学生记录(假定最高成绩的记录是唯一的),通过形参返回。请编写函数mmm(STU a[],STU*s)实现程序要求,最后调用函数reawriteDAT()把结果输出到文件out.dat中。 例如:KS01 87 KS09 67 KS11 97 则调用该函数后,输出The lowest:KS09,67。 注意:部分源程序已给出。 请勿改动主函数main()和函数readwriteDAT()的内容。 [试题源程序] #include<stdio.h> #include<string.h> #include<conio.h> #define N 10 void readwriteDat(); typedef struct ss char num[10];int s; STU; void mmm(STU a口,STU*s) main() ( STU a[N]="A01",81,"A02",89,"A03",81),"A04",66),"A05",87),"A06",77),"A07",79, "A08",61,"A09",80),"A10",71),,m; int i; system("cls"); printf("*****The original data*****/n"); for(i=0;i<N;i++)printf("No=%s Mark=%d/n",a[i]nmu/n,a[i].s); mmm(a, wf=fopen("out.dat","w"); for(i:0;i<10;i++)fscanf(rf,"%s%d",a[i].num,&a[i].s); mmm(a,&m); fprintf(wf,"The lowest:%s,%d/n",m.num,m.s); fclose(rf); fclose(wf);
进入题库练习
问答题请编制程序PROG1.ASM,其功能是:内存中连续存放的20个8位有符号数(补码)是由一个8位A/D转换器采集的双极性信号(Xn),现要求对该信号作如下限幅处理(处理后的信号记为Yn): a) Yn=-100 Xn<-100 b) Yn=Xn ∣Xn∣≤100 c) Yn=100 Xn>100 例如: Xn:68H,60H,8EH,38H,… Yn:64H,61H,9CH,38H,… 部分程序已在PROG1.ASM中给出,请填空BEGIN和END之间已给出的源程序使其完整(空白己用横线标出,每行空白一般只需一条指令,但功能相当的多条指令亦可)或删除 BEGIN和END之间原有的代码并自行编写程序片段来完成要求的功能。 原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。 对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。 试题程序: EXTRN LOAD:FAR, SAVE:FAR N EQU 20 M EQU 100 DSEG SEGMENT SOURCE DW N DUP(?) RESULT DW N DUP(0) NAME0 DB 'INPUTI.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 128 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 ; 从INPUT1.DAT中读取数据 ; **** BEGIN **** LEA SI,SOURCE LEA DI,RESULT (1) NEXT: MOV AX,[SI] CMP AX,-M (2) L1 CMP AL,M (3) MOV AL,M JMP L2 L1: MOV AL,-M L2: MOV [DI],AL (4) (5) (6) ; **** END **** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ; 结果文件名起始地址 MOV CX,N ; 字节数 CALL SAVE ; 保存结果到OUTPUT1.DAT文件中 RET START ENDP CSEG ENDS END START
进入题库练习
问答题已知数据文件in38.dat中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数JsVal(),其功能是:若一个4位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数字上的值小于等于个位数字上的值,并且此4位数是偶数,则统计出满足此条件的数的个数cnt并把这些4位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到out38.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( "in38.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]); writeDat(); writeDat ( ) FILE *fp; int i; fp=fopen("out38.dat","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp,"%d/n",b[i]); fclose(fp);
进入题库练习
问答题函数ReadDat()的功能是实现从文件IN5.DAT中读取一篇英文文章存入到字符串数组XX中。请编制函数ConvertCharA(),该函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存人字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。 例如,原文:Adb.Bcdza abck.LLhj 结果:Aec.Bdeab bcdl.LLik 原始数据文件存放的格式是:每行的宽度均小于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 ConvertCharA(void) voidmain() system("CLS"); if(ReadDat()) printf("数据文件IN5.DAT不能打开!/n/007"); return; ConvertCharA(); WriteDat(); int ReadDat(void) FILE*fp; int i=0; char*P; if((fP=fopen("IN5.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("OUT5.DAT","W"); for(i=0;i<maxline;i++) printf("%S/n"xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
进入题库练习
问答题已知数据文件in81.dat中存有300个4位数,并已调用函数readDat()把这些数存入数组a中,请编制一函数jsVaiue(),其功能是,求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的4位数的平均值pjz1,以及所有不满足此条件的4位数的平均值pjz2,最后调用函数writeDat()把结果cnt,pjz1,pjz2输出到out81.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 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( "in81.dat","r"); for(i=0;i<300;i++) fscanf(fp,"%d,", writeDat() FILE *fp; int i; fp=fopen("out81.dat","w") fprintf(fp,"%d/n%7.2lf/n%7.2lf/n",cnt ,pjz1,pjz2); fclose(fp);
进入题库练习
问答题下列程序的功能是:选出100~1000之间的所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数。计算并输出上述这些素数的个数cnt,以及这些素数值的和sum。请编写函数countValue()实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件OUT90.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",sum); writeDAT(); void writeDAT() FILE * fp; fp=fopen("OUT90.DAT","w"); fprintf(fp,"% d/n% d/n",cnt,sum); fclose(fp);
进入题库练习
问答题请编制程序,其功能是:内存中有一个由16个十六位二进制数组成的数组(SOURCE)和一个字变量L。试将L作为逻辑尺对数组SOURCE进行下列处理:如L的第i位为0,则数组的第i个数不变:如L的第i位为1,则数纽的第i个数按位取反。字L的位序从低到高依次为0至15,数组下标依次从0到15。 例如:L=0009H 数组为:139CH,89C6H,5437H,8819H,… 变换为:EC63H,89C6H,5437H,77E6H,… 部分程序已给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入(L在前,SOURCE在后)。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT.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 L DW ? SOURCE DW N DUP(?) RESULT DW N 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,L ;数据区起始地址 LEA SI,NANE0 ;原女合数据文件名 MOV CX,2*(N+1) ;字节数 CALL LOAD ;从'INPUT.DAT'中读取数据 ; ******** BEGIN ************ LEA SI, SOURCE{{U}} {{/U}} MOV CX,N MOV DX,{{U}} {{/U}}L0: MOV AX, [SI]{{U}} {{/U}}L,DX{{U}}{{/U}}STORE NOT AX STORE:MOV [DI],AX ADD DI,2 ADD SI,2 {{U}}(5) {{/U}} LOOP L0 ; ******** END ******** LEA DX,RESULT ; 结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,2*N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题己知数据文件IN45.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsVal(),其功能是:把千位数字和十位数字重新组合成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数和百位数组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成的两个十位数ab-cd≥10且ab-cd≤20且两个数均为偶数,同时两个新十位数字均不为零,则将满足此条件的4位数按从人到小的顺序存入数组b中,并要计算满足上述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT45.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main0、读函数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("IN45.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("OUT45.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0;i<cnt;i++) fprintf(fp, "%d/n",b[i]); fclose(fp);
进入题库练习
问答题试题要求如图10.6所示。部分源程序内容如下:#include<stdio.h>#defineMAXNUM200intxx[MAXNUM];inttotNum=0;/*文件IN.DAT中共有多少个正整数*/inttotCnt=0;/*符合条件的正整数的个数*/doubletotPjz=0.0;/*平均值*/intReadDat(void);voidWriteDat(void);voidCalValue(void)voidmain()inti;for(i=0;i<MAXNUM;i++)xx[i]=0;if(ReadDat())printf("数据文件IN.DAT不能打开!/007/n");return;CalValue();printf("文件IN.DAT中共有正整数=%d个/n",totNum);printf("符合条件的正整数的个数=%d个/n",totCnt);printf("平均值=%.2lf/n",totPjz);WriteDat();intReadDat(void)FILE*fp;inti=0;if((fp=fopen("K://k06//35010005//in.dat","r"))==NULL)returni;while(!feof(fp))fscanf(fp,"%d,",&xx[i++]);fclose(fp);return0;voidWriteDat(void)FILE*fp;fp=fopen("K://k06//35010005//OUT.DAT","w");fprintf(fp,"%d/n%d/n%.2lf/n",totNum,totCnt,totPjz);fclose(fp);
进入题库练习
问答题编制一个程序,其功能为:内存中以8位无符号数形式连续存放着10个数据,这数据来自于一个自动抄表系统记录的10个用户某月天然气的使用量(立方米),天然气费计算公式如下(其中,X表示天然气用量,Y表示应该天然气费): a)Y=X×80 X≤8 b)Y=8×80+(X-8)×120 X>8 计算每个用户需要交的天然气费,结果用字表示,并将结果存入指定单元。 例如: 用天然气量为:05H,07H,12H…… 则天然气费为:0190H,0348H,0780H…… 部分程序已经给出,其中原始数据由过程LOAD从文件INPUT.DAT中读入以SOURCE开始的内存单元中。运算结果要求从RESULT开始的内存单元存放,由过程SAVE保存到文件OUTPUT.DAT中。 请填空BEGIN和END之间已给出的源程序使其完整,空白已经用横线标出,每行空白一般只需要一条指令,但采用功能相当的多条指令也行,考生也可以删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] TRN AD:FAR,SAVE:FAR N EQU 0 DSEG EGMENT SOURCE DB DUP(?) RESULT DW DUP(0) NAME0 DB INPUT.DAT',0 NAME1 DB OUTPUT.DAT',0 DSEG NDS SSEG EGMENT TACK B 56 DUP(?) SSEG NDS CSEG EGMENT SSUME CS:CSEG,DS:DSEG,SS:SSEG START ROC AR USH S OR AX,AX USH AX OV AX,DSEG OV DS,AX EA DX,SOURCE EA SI,NAME0 OV CX,N ALL OAD ; ********* BEGIN ******** EA SI,SOURCE EA DI,RESULT LD OV CX,N OV DL,80 OV DH,120 AGAIN: MOV AL,[SI] MP AL,8 (1) UL DL MP NEXT BIGGER: (2) UB AL,8 (3) DD AX,BX NEXT: (4) (5) NC SI OOP GAIN ; ***+**** END ******** EA DX,RESULT EA SI,NAME1 OV CX,N*2 ALL AVE ET START ENDP CSEG NDS END START
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着20个有符号字节数序列,求出该序列的最大值和最小值。结果存放形式为:先按原序放20个需处理的有符号字节数序列,后跟该程序列的最大值和最小值(最大值在前,最小值在后)。 例如: 内存中有:81H,02H,03H,... 结果为:81H,02H,03H,...(共20个需处理的原有符号字节序列),后跟该序列的最大值和最小值(最大值在前,最小值在后) 部分程序已给出,其中原始数据由过程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****** ;最大值放在BH中,最小值放在BL中 LEA SI,SOURCE LEA ______,RESULT MOV BH,[SI] ;第一个字节既为最大值 MOV BL,BH ;又为最小值 MOV [DI],BH ADD SI,______ ______ MOV CX,N-1 NEXT: MOV AL,[SI] CMP AL,BH ______ CHKMIN MOV BH,AL JMP ENDL CHKMIN: CMP AL,BL JAE ENDL MOV ______,AL ENDL: MOV [DI],AL ADD SI,1 ADD DI,1 LOOP NEXT ______ ______ MOV [DI],______ ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N+2 ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题在文件IN6.DAT中有200个正整数,且每个数均在1000~9999之间。函数readDat()的功能是读取这200个数并存放到"数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的后3位的大小进行降序排列,将排序后的前10个数存人数组b中,如果数组b中出现后3位相等的数,则对这些数按原始4位数据进行升序排列。最后调用函数writeDat()把结果bb输出到文件0UT6.DAT中。 例如:处理前9012 5099 6012 7025 8088 处理后5099 8088 7025 6012 9012 注意:部分源程序已给出。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容. [试题程序] #include <stdio.h> #include <string.h> #include <stdlib.h> int aa[200],bb[10]; void readDat(); void writeDat(); void jsSort() void main() readDat(); jsSort(); writeDat(); void readDat() FILE*in; int i; in=fopen("IN6.DAT","r"); for(i=0;i<200;i++)fscanf(in,"%d,", fclose(in); void writeDat() FILE *out; int i; out=fopen("OUT6.DAT","w"); system("CLS"); for(i=0;i<10;i++) printf("i=%d,% d/n",i+1,bb[i]); fprintf(out,"%d/n",bb[i]); fclose(out);
进入题库练习
问答题函数ReadDat()实现从文件in.dar中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 例如:位置 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 则处理后字符串 h g f e d c b a 8 7 6 5 9 4 3 2 1 部分源程序已经给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h> char xx[20][80]; void jsSort() void main() ReadDat(); jsSort(); WriteDat(); ReadDat() FILE *in; int i=0; char *p; in=fopen("in.dat","r"); while(i<20 if(p)*p=0; i++; fclose(in); WriteDat() FILE *out; int i; clrscr(); out=fopen("out.dar","w"); for(i=0;i<20;i++) printf("%s/n",xx[i]); fprintf(out,"%s/n",xx[i]); fclose(out);
进入题库练习
问答题已知在文件IN65.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat()是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求是: (1)求出这个文件中共有多少个正整数totNum。 (2)求出这些数中的各位数字之和是奇数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz。最后调用函数WriteDat()把所有结果输出到文件 OUT65.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<stdio. h> #include<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 ("数据文件IN65.DAT不能打开! /007/") return; CalValue ( ); printf ( "文件IN65.DAT中共有正整数=%d个/n",totNum); printf ( "符合条件的正整数的个数=%d个/n", totCnt) printf ( "平均值=%. 21f/n", totPjz); WriteDat (); int ReadDat (void) FILE *fp; int i=0; if ( ( fp= fopen ( "IN65. DAT", "r" ) ) ==NULL) return 1; while ( ! feof (fp)) fscanf (fp, "%d", fclose (fp); return 0; void WriteDat (void) FILE *fp; fp=fopen ("OUT65. DAT", "w" ); fprint f (fp, "%d/n%d/n%. 21f/n", totNum, totCnt,totPjz); fclose (fp);
进入题库练习
问答题编制一个程序,其实现的功能为:内存中连续的10个无符号字节数,对其执行(X×7-5)÷8操作(X为内存中的数据,且X不等于0),将结果存入指定的内存区中。 例如: 内存中为:4FH,83H,34H… 则结果为:26H,40H,18H… 部分程序已经给出,原始数据由过程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 N DUP(0) NAME0 DB 'INPUT.DAT',0 NAME2 DB 'OUTPUT.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 BX,N AGAIN: MOV AL,[SI] MOV DX,0 MOV DL,AL AND AX, (1) MOV CL,3 (2) AX,CL (3) SUB AX,5 MOV CL,3 (4) AX,CL MOV [DI],AL INC SI INC DI DEC BX (5) ; ****+**** END ******** LEA DX,RESULT LEA SI,NAME1 MOV CX,N CALL SAVE RET START ENDP CSEG ENDS END START
进入题库练习
问答题请编制程序,其功能是:内存中连续存放着9个ASCII字符(8位二进制数表示,最高位为零),把它们转换成串行通讯中的偶校验码,并计算9个偶校验码的累加码(累加值的低8位二进制数),将9个偶校验码按原序存入内存,累加码存放在此序最后。 例如: 内存中有:37H,38H,39H... 结果为:B7H,B8H,39H...累加码 部分程序已给出,其中原始数据由过程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 9 DUP(?) ;顺序存放9个ASCII字符 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-1 ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ; ******BEGIN****** MOV DI,OFFSET RESULT MOV SI,OFFSET SOURCE MOV DX,N-1 MOV AL,0 LP0: MOV BL,[SI] MOV CX,8 ______ AX MOV AL,0 LP1: ______ BL,1 ______ AL,0 LOOP LP1 AND AL,01H ROR AL,1 OR ______,______ MOV [DI],BL ______ AX ADD AL,BL INC DI INC SI DEC ______ JNZ LP0 ______ ; ******END****** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,N ;结果字节数 CALL SAVE ;保存结果到文件 RET START ENDP CODE ENDS END START
进入题库练习
问答题请编制程序,其功能是:对经常上下波动的数据可采用只记录峰值的数据压缩方法。即每次将采样到的当前值和前一次值比较,如数据变化方向改变(原变大现变小或原变小现变大),说明已过峰值,这时就将前一值(峰值)记录下来。 例如(下例数据均为无符号数): 原数据:23H,45H,89H,67H,5CH,36H,3CH… 压缩后:23H,89H,36H… 内存中从SOURCE连续存放着48个八位无符号数,假定无相邻两数相等的情况,编程按上述方法进行压缩,结果保存在 RESULT开始的内存单元中。 部分程序已给出,请填空BEGIN和END之间已给出的源程序使其完整,空白已用横线标出,每个空白一般只需一条指令,但采用功能相当的多条指令亦可,或删除BEGIN和END之间原有的代码并自行编写程序片段来完成所要求的功能。 原始数据由过程LOAD从文件INPUT.DAT中读入SOURCE开始的内存单元中,结果要求从RESULT开始存放,由过程 SAVE保存到文件OUTPUT.DAT中。 对程序必须进行汇编,并与IO.OBJ链接产生可执行文件,最终运行程序产生结果。调试中若发现整个程序中存在错误之处,请加以修改。 [试题程序] EXTRN LOAD:FAR,SAVE:FAR N EQU 40 STAC SEGMENT STACK DB 128 DUP(?) STAC ENDS DATA SEGMENT SOURCE DB N DUP(?) RESULT DB N 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 MOV ES,AX ;置附加段寄存器 LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名起始地址 MOV CX,N ;字节数 CALL LOAD ;从'INPUT.DAT'中读取数据 ; ******** BEGIN ******** LEA SI,SOURCE LEA DI,RESULT CLD MOVSB ;Y[0]=X[0] XOR AX,AX XOR BX,BX LODSB MOV BL,[SI-2] SUB AX,AX ;X[1]-X[0] MOV DX,AX MOV CX,N-2 FILTER: XOR AX,AX XOR BX,BX LODSB ;X[n] MOV BL,[SI-2] ;X[n-1] SUB AX,BX ;X[n]-X[n-1] (1) ;相邻两差值(Ax,Dx)符号位是否相同 (2) J (3) SKIP ;相同,数据方向未变 (4) ;不同,方向变化,保存峰值 STOSB SKIP: (5) LOOP FILTER ; ******** END ******** LEA DX,RESULT ;数据区起始地址 LEA SI,NAME1 ;结果文件名起始地址 MOV CX,N ;字节数 CALL SAVE ;保存结果到 'OUTPUT.DAT' 文件中 RET START ENDP CODE ENDS END START
进入题库练习
问答题已知在文件IN46.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金过额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用写函数WriteDat()把结果输出到文件 OUT46.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("IN46.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() FILE *fP; int i; fP=fopen("OUT46.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].sl,sell[i].je); fclose(fp);
进入题库练习
问答题函数readDat()的功能是从文件IN75.DAT中读取20行数据并存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSort(),该函数的功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT75.DAT中。 条件:从字符串中间一分为二,左边部分按字符的ASCII值降序排序,排序后,左边部分与右边部分按例子所示进行交换。 如果原字符串长度为奇数,则最中间的字符不参加处理,字符仍放在原位置上。 注意:部分源程序已给出。 请勿改动主函数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("in75.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; system("CLS"); out=fopen("out74.dat","w"); for(i=0;i<20;i + +) printf("% s/n",xx[i]); fprintf(out,"% s/n",xx[i]); fclose(out);
进入题库练习