手机版

计算机国家三级考试网络技术上机题库最终修订版100

发布时间:2024-11-18   来源:未知    
字号:

全国计算机等级考试三级网络技术

机试题库

前言

1、题目标题号前用“☆”显示的是本人根据各种类型的书籍总结的集中而来,题号前加“★”为历年真题,其中难免有题型相同而题号增加的现象,此类标明,仅供参考。

2、每种题目,只用一种解题方法,兰色(即画框)部分为解题答案,此种方法本人觉得容易理解,不易出错,适合初学者。

3、特别说明:所有解法本人均上机在VC6.0下验证通过,目前市面上题库均有很多错误,本人一一修改,最终确立这个版本的题库。

4、本题库共有100道题,但是钻研透彻发现不外乎以下十三种题型,希望对我的学生有导向价值;下面这个分类是参照南开100题,故有可能有些题号和我们的题库题号不能够对应,特此说明。 (一)、替换字符。(1、3、5、7、9、27、30、73、79、91、93、95、97、99) (二)、字符串左右排序和比较。(2、4、6、12、26、29、71、72、74、84、90、96、98、) (三)、正整数排序求平均值(包括将数拆散、求最大最小值)。(8、31、33、35、37、39、、、、、、、、、、、、、、、、、、、、、、) (四)、产品五个因素的比较排列,是结构体操作问题。(11、13、15、17、19、81、83、85、、 ) (五)、素数。(14、22、28、51、80 ) (六)、数字排序。(10、18、) (七)、其他数学计算。(16、20、36、43、55、57、59、64、66、78、86、88 ) (八)、数字或字符移位后的计算。(21、23、41、45、77 ) (九)、学生成绩,结构体问题。(24、76 ) (十)、字符串(单词)的倒置和删除。(25、75 ) (十一)、选票问题。(32、68、70、82 ) (十二)、出圈问题。(34 ) (十三)、进制转换。(38、40、62 )

(2007年10月)

内部资料 翻录必究

******************************☆题目1 请编写一个函数num(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入数组xx传回。最后调用函数writeDat()读取10组数据,分别得出结果且把结果输出到文件out.dat中。部分源程序存在文件prog1.c中。例如:若输入17 5 则应输出:19,23,29,31,37。请勿改动主函数void main()和写函数writeDat()的内容。 #include <conio.h> #include <stdio.h> void readwriteDat();

int isP(int m) {

int i;

for(i=2;i<m;i++)

if(m % i==0)return 0; return 1; }

void num(int m,int k,int xx[]) { int s=0;

for(m=m+1;k>0;m++)

if(isP(m)) { xx[s++]=m; k--;} }

void main() {

int m,n,xx[1000];

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 %d",&m,&n); num(m,n,xx);

for(m=0;m<n;m++)fprintf(wf,"%d ",xx[m]);

fprintf(wf,"\n"); }

fclose(rf); fclose(wf); }

******************************☆题目2 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:如果四位数各位上的数字均是0或2或4或6或8,则统计出满足此条件的个数cnt,并把这些四位数按从大到小的顺序存入数组b中。最后void main( )函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序存在文件prog1.c中。程序中已定义数组:a[200],b[200],已定义变量:cnt。请勿改动数据文件IN.DAT中的任何数据、主函数void main()、读函数readDat()和写函数writeDat()的内容。 #include <stdio.h> #define MAX 200

int a[MAX], b[MAX], cnt = 0 ; writeDat() ;

void jsVal()

{ int i,j,qw,bw,sw,gw; for(i=0;i<MAX;i++)

{ qw=a[i]/1000; bw=a[i]/100%10; sw=a[i]%100/10; gw=a[i]%10;

if(qw&&qw%2==0&&bw%2==0&&sw%2==0&&gw%2==0) b[cnt++]=a[i]; }

for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++)

if(b[i]<b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw;}

}

void readDat() {

int i ;

FILE *fp ;

fp = fopen("in.dat", "r") ;

for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;

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() ; }

writeDat() {

FILE *fp ; int i ;

fp = fopen("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;

fclose(fp) ; }

******************************★题目3 函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR( ),其函数的功能是:以行为单位依次把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放,之后把已处理的字符串仍按行重新存入字符串数组xx中。最后void main()函数调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。原始数据文件存放的格式是:每行的宽度均小于80

个字符,含标点符号和空格。注意:部分源程序存放在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h> char xx[50][80] ;

int maxline = 0 ; /* 文章的总行数 */

int ReadDat(void) ; void WriteDat(void) ;

void StrOR(void) {int i,righto,j,s,k; char tem[80];

for(i=0;i<maxline;i++) for(j=strlen(xx[i])-1;j>=0;j--) { k=0;

memset(tem,0,80);

if(xx[i][j]=='o') {righto=j;

for(s=righto+1;s<strlen(xx[i]);s++)

tem[k++]=xx[i][s];

for(s=0;s<righto;s++) if(xx[i][s]!='o')

tem[k++]=xx[i][s]; strcpy(xx[i],tem);

}

else continue; } }

void main() {

if(ReadDat()) {

printf("数据文件IN.DAT不能打开!\n\007") ; return ; }

StrOR() ; WriteDat() ; }

int ReadDat(void) {

FILE *fp ; int i = 0 ;

if((fp = fopen("IN.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 ;

fp = fopen("OUT5.DAT", "w") ; for(i = 0 ; i < maxline ; i++) { printf("%s\n", xx[i]) ; fprintf(fp, "%s\n", xx[i]) ; }

fclose(fp) ; }

******************************★题目4 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT6.DAT中。例如:原文:You He Me I am a student. 结果:Me He You student a am I.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void); void StrOL(void) { int i,j,k,s,m,strl; char str[80];

for(i=0;i<maxline;i++) { strl=strlen(xx[i]);

memset(str,0,80); s=k=0;

for(j=strl-1;j>=0;j--)

{ if(isalpha(xx[i][j])) k++; else { for(m=1;m<=k;m++)

str[s++]=xx[i][j+m];

k=0; } if(!isalpha(xx[i][j]))

str[s++]=' ';

}

for(m=1;m<=k;m++) str[s++]=xx[i][j+m]; str[s]='\0';

strcpy(xx[i],str); } }

void main() {

if(ReadDat()){

printf("数据文件IN.DAT不能打开!\n\007"); return; }

StrOL(); WriteDat(); }

int ReadDat(void) {

FILE *fp; int i=0; char *p;

if((fp=fopen("IN.DAT","r"))==NULL)

return 1;

while(fgets(xx[i],80,fp)!=NULL){ p=strchr(xx[i],'\n'); if(p)*p=0;

} maxline=i; fclose(fp); return 0; } void WriteDat(void) { FILE *fp; int i; fp=fopen("OUT6.DAT","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); } fclose(fp); } ******************☆题目5(整数排序题)

在文件in.dat中有200个正整数,且每个数

均在1000至9999之间。函数ReadDat()读

取这200个数存放到数组aa中。请编制函

数jsSort(),其函数的功能是:要求按每个

数的后三位的大小进行升序排列,然后取出

满足此条件的前10个数依次存入数组bb

中,如果后三位的数值相等,则按原先的数

值进行降序排列。最后调用函数WriteDat()

把结果bb输出到文件out.dat中。例:处理

前 6012 5099 9012 7025 8088 处理后 9012 6012 7025 8088 5099部

分源程序存在文件prog1.c中。请勿改动主

函数void main()、读数据函数ReadDat()和

输出数据函数WriteDat()的内容。

#include <stdio.h> #include <string.h> #include <conio.h> int aa[200],bb[10]; void readDat(); void writeDat(); void jsSort() { int i,j,data; for(i=0;i<199;i++) for(j=i+1;j<200;j++) if(aa[i]%1000>aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]<aa[j]) {data=aa[i];aa[i]=aa[j];aa[j]=data;} for(i=0;i<10;i++) bb[i]=aa[i]; } void main() { readDat(); jsSort(); writeDat(); } void readDat() {

FILE *in; int i; in=fopen("in.dat","r"); for(i=0; i<200; i++) fscanf(in,"%d,",&aa[i]); fclose(in); } void writeDat() { FILE *out; int i; out=fopen("out.dat","w"); for(i=0; i<10; i++){ printf(" %d",bb[i]); fprintf(out,"%d\n",bb[i]); } fclose(out); } *******************☆题目6 正整数排序 在文件in.dat中有200个正整数,且每个数均在1000至9999之间。函数ReadDat()读取这200个数存放到数组aa中。请编制函数jsSort(),其函数的功能是:要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进

行升序排列。最后调用函数WriteDat()把结果bb输出到文件out.dat中。

例:处理前 9012 5099 6012 7025 8088

处理后 5099 8088 7025 6012 9012 注意:部分源程序已给出。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h>

int aa[200],bb[10]; void readDat(); void writeDat();

void jsSort() {

int i,j,data;

for(i=0;i<199;i++)

for(j=i+1;j<200;j++)

if(aa[i]%1000<aa[j]%1000||aa[i]%1000==aa[j]%1000&&aa[i]>aa[j]) {data=aa[i];aa[i]=aa[j];aa[j]=data;} for(i=0;i<10;i++) bb[i]=aa[i]; }

void main() {

readDat(); jsSort(); writeDat();

system("pause"); }

void readDat() {

FILE *in; int i;

in=fopen("in.dat","r");

for(i=0; i<200; i++) fscanf(in,"%d,",&aa[i]); fclose(in); } void writeDat() {

FILE *out; int i;

out=fopen("out.dat","w"); for(i=0; i<10; i++){

printf("i=%d,%d\n",i+1,bb[i]); fprintf(out,"%d\n",bb[i]); }

fclose(out); }

****************☆题目7(结构体操作题) 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT6.DAT中。部分源程序存在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.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()

{int i,j; PRO xy;

for(i=0;i<99;i++)

for(j=i+1;j<100;j++)

if(strcmp(sell[i].dm,sell[j].dm)<0||strcmp(sell[i].dm,sell[j].dm)==0&&sell[i].je<sell[j].je) {xy=sell[i]; sell [i]=sell[j]; sell[j]=xy;} }

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("OUT6.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); }

******************★题目8(字符替换题) 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS1.DAT中。替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。(注意中间变量用无符号整型),部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void);

void encryptChar() { int i,j;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

if(xx[i][j]*11%256<=32||xx[i][j]*11%256>130) continue;

else xx[i][j]=xx[i][j]*11%256;

}

void main() {

if(ReadDat()){

printf("数据文件ENG.IN不能打开!\n\007"); return; }

encryptChar(); WriteDat(); }

int ReadDat(void) {

FILE *fp; int i=0; 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("ps1.dat","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); }

fclose(fp); }

**************★☆题目9(字符串排序题) 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数SortCharD(),其函数的功能是:以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT2.DAT中。例:原文:

dAe,BfC. CCbbAA结果:fedCBA. bbCCAA 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include <stdio.h> #include <string.h> #include <conio.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void);

void SortCharD(void) {int i,j,k,strl; char ch;

for(i=0;i<maxline;i++) {strl=strlen(xx[i]); for(j=0;j<strl-1;j++) for(k=j+1;k<strl;k++) if(xx[i][j]<xx[i][k]) {ch=xx[i][j]; xx[i][j]=xx[i][k]; xx[i][k]=ch;} } }

void main() {

if(ReadDat()){

printf("数据文件IN.DAT不能打开!\n\007"); return; }

SortCharD(); WriteDat();

}

int ReadDat(void) {

FILE *fp; int i=0; char *p;

if((fp=fopen("IN.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;

fp=fopen("OUT2.DAT","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); }

fclose(fp); }

***************★☆题目10(替换字符题) 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数ConvertCharA(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT1.DAT中。例:原文:Adb.Bcdza abck.LLhj结果:Aec.Bdeab bcdl.LLik 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件prog1.c中。 请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include <stdio.h> #include <string.h> #include <conio.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void);

void ConvertCharA(void) { int i,j;

for(i=0;i<maxline;i++)

{ for(j=0;j<strlen(xx[i]);j++) if(xx[i][j]=='z') xx[i][j]='a';

else if(xx[i][j]>='a'&&xx[i][j]<='y') xx[i][j]+=1; } }

void main() {

if(ReadDat()){

printf("数据文件IN.DAT不能打开!\n\007"); return; }

ConvertCharA(); WriteDat(); }

int ReadDat(void) {

FILE *fp; int i=0; char *p;

if((fp=fopen("IN.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;

fp=fopen("OUT1.DAT","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); }

fclose(fp); }

***********☆题目11(字符串字母移位题) 程序prog1.c的功能是:把 s 字符串中的所有字母改写成该字母的下一个字母,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其它字符不做改变。请考生编写函数chg(char *s)实现程序要求,最后调用函数readwriteDAT( )把结果输出到文件bc1.out中。例如:s 字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为:No.123Ayz。注意:部分源程序存在文件prog1.c文件中。请勿改动主函数void main( )和输出数据函数readwriteDAT()的内容。 #include <conio.h> #include <string.h> #include <stdio.h> #include <ctype.h> #define N 81

void readwriteDAT();

void chg(char *s) {int i;

for(i=0;i<strlen(s);i++)

if(s[i]=='z'||s[i]=='Z') s[i]-=25; else if(s[i]>='a'&&s[i]<='y'||s[i] >='A'&&s[i]<='Y') s[i]+=1; }

void main( ) {

char a[N];

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] ; FILE *rf, *wf ;

rf = fopen("bc1.in", "r") ; wf = fopen("bc1.out", "w") ; for(i = 0 ; i < 50 ; i++) { fscanf(rf, "%s", a) ; chg(a) ;

fprintf(wf, "%s\n", a) ; }

fclose(rf) ; fclose(wf) ; }

***********★☆题目12(结构体运算题题) 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5.DAT中。部分源程序存在文件prog1.c中。请勿改动主函数void

main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.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() {int i,j; PRO xy;

for(i=0;i<99;i++)

for(j=i+1;j<100;j++)

if(strcmp(sell[i].mc,sell[j].mc)>0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) {xy=sell[i];sell[i]=sell[j];sell[j]=xy;} }

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() {

FILE *fp; int i;

fp=fopen("OUT5.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); }

*****************题目13(结构体运算题) 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT9.DAT中。部分源程序存在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.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() {int i,j; PRO xy;

for(i=0;i<99;i++)

for(j=i+1;j<100;j++)

if(strcmp(sell[i].dm,sell[j].dm)>0||strcmp(sell[i].dm,sell[j].dm)==0&&sell[i].je<sell[j].je) {xy=sell[i];sell[i]=sell[j];sell[j]=xy;} }

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() {

FILE *fp; int i;

fp=fopen("OUT9.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); }

***********★☆题目14(整数统计排序题) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序存在文件prog1.c中。程序中已定义数组:a[200],b[200],已定义变量:cnt请勿改动数据文件IN.DAT中的任何数据、主函数void main()、读函数readDat()和写函数writeDat()的内容。 #include <stdio.h> #define MAX 200

int a[MAX], b[MAX], cnt = 0 ; void writeDat() ;

void jsVal() {int i,j,flag;

for(i=0;i<MAX-5;i++) {for(j=i+1;j<=i+5;j++)

if(a[i]>a[j]&&a[i]%2) flag=1; else {flag=0;break;} if(flag==1) b[cnt++]=a[i]; }

for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) if(b[i]>b[j])

{flag=b[i];b[i]=b[j];b[j]=flag;} }

void readDat() {

int i ;

FILE *fp ;

fp = fopen("in.dat", "r") ;

for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;

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("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;

fclose(fp) ; }

*****★题目15(整数各位数字运算排序题) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:若一个四位数的千位数字上的值小于等于百位数字上的值,百位数字上的值小于等于十位数字上的值,以及十位数字上的值小于等于个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。注意:部分源程序存在文件prog1.c中。程序中已定义数组:a[200],b[200],已定义变量:cnt 请勿改动数据文件IN.DAT中的任何数据、主函数void main()、读函数readDat()和写函数writeDat()的内容。 #include <stdio.h> #define MAX 200

int a[MAX], b[MAX], cnt=0; void writeDat();

void jsVal() {int i,j;

int qw,bw,sw,gw; for (i=0;i<MAX;i++)

{qw=a[i]/1000; bw=a[i]%1000/100; sw=a[i]%100/10; gw=a[i]%10;

if((qw<=bw)&&(bw<=sw)&&(sw<=gw)&&(a[i]%2==0)) b[cnt++]=a[i]; }

for(i=0;i<cnt-1;i++) for(j=i+1;j<cnt;j++) if (b[i]>b[j]) {qw=b[i];b[i]=b[j];b[j]=qw;} }

void readDat() {

int i ;

FILE *fp ;

fp = fopen("in.dat", "r") ;

for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;

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("out.dat", "w") ; fprintf(fp, "%d\n", cnt) ;

for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;

fclose(fp) ; }

***************★☆题目16(字符替换题) 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrCharJR(),其函数的功能是:以行为单位把字符串中所有字符的ASCII值右移4位,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8.DAT中。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。部分源程序存在文件prog1.c中。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void);

void StrCharJR() {int i,j;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++) xx[i][j]+=(xx[i][j]>>4); }

void main() {

if(ReadDat()){

printf("数据文件IN.DAT不能打开!\n\007"); return; }

StrCharJR(); WriteDat(); }

int ReadDat(void) {

FILE *fp; int i=0; char *p;

if((fp=fopen("IN.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;

fp=fopen("OUT8.DAT","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); }

fclose(fp); }

************☆题目17 (亲朋字符替换题) 函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数CHA(),其函数功能是:以行为单位把字符串中的第一个字符的ASCII值加第二个字符的ASCII值,得到第一个亲朋字符,第二个字符的ASCII值加第三个字符的ASCII值,得到第二个新字符,依此类推一直处理到最后第二个字符,最后一个字符的ASCII值加原第一个字符的ASCII值,得到最后一个新的字符,得到的新字符分别存放在原字符串对应的位置上。最后把已处理的字符串逆转后按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT9.DAT中.原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格.注意:部分源程序已给出。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。

#include <stdio.h> #include <string.h> #include <conio.h>

char xx[50][80] ;

int maxline = 0 ; /* 文章的总行数 */

int ReadDat(void) ; void WriteDat(void) ;

void ChA(void) { int i,j; char ch;

for(i=0;i<maxline;i++) { ch=xx[i][0]; for(j=0;j<strlen(xx[i])-1;j++) xx[i][j]+=xx[i][j+1]; xx[i][strlen(xx[i])-1]+=ch; strrev(xx[i]); } }

void main() {

if(ReadDat()) {

printf("数据文件IN.DAT不能打开!\n\007") ; return ; }

ChA() ; WriteDat() ; }

int ReadDat(void) {

FILE *fp ; int i = 0 ; char *p ;

if((fp = fopen("IN.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 ;

fp = fopen("OUT9.DAT", "w") ; for(i = 0 ; i < maxline ; i++) { printf("%s\n", xx[i]) ; fprintf(fp, "%s\n", xx[i]) ; }

fclose(fp) ;

}

*****************************☆题目18 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。部分源程序存在文件prog1.c中。原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数void main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h>

char xx[50][80];

int maxline=0;/*文章的总行数*/

int ReadDat(void); void WriteDat(void);

void encryptChar() { int i,j;

for(i=0;i<maxline;i++)

for(j=0;j<strlen(xx[i]);j++)

if(xx[i][j]*11%256<=32||xx[i][j]%2==0) continue;

else xx[i][j]=xx[i][j]*11%256; }

void main() {

if(ReadDat()){

printf("数据文件ENG.IN不能打开!\n\007"); return; }

encryptChar(); WriteDat(); }

int ReadDat(void) {

FILE *fp; int i=0; 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("ps10.dat","w"); for(i=0;i<maxline;i++){ printf("%s\n",xx[i]); fprintf(fp,"%s\n",xx[i]); }

fclose(fp); }

*************☆题目19(单词个数统计题) 编写一个函数findStr(char *str,char *substr),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。函数ReadWrite()实现从文件in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中。注意:部分源程序存在文件prog1.c中。请勿改动主函数void main()和其它函数中的任何内容,

计算机国家三级考试网络技术上机题库最终修订版100.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)