全国计算机等级考试三级网络技术
机试题库
前言
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()和其它函数中的任何内容,