1、下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char *s)实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。 例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为No.123Ayz。 注:该题的思路比较明显,先判断是否是'z'或'Z',若是则转成相应的'a'或'A',否则再判断是不是字母(已除'z'或'Z')。 void chg(char *s) { int i,j,k; k=strlen(s); for(i=0;i{if(s[i]=='z'//s[i]=='Z' ) s[i]-=25; else if(isalpha(s[i])) s[i]+=1; }} 2、现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。 /*注:题目要求将那些选了不超过5人的选票视为无效票,即一张选票中如果‘1’不超过5个则为无效选票。该题先用for()循环对100行选票进行循环,在循环内先进行用for()循环数出这张选票中选中的人数(count)再用if()判断,如果选中人数小于等于5则continue即判断下一张选票,否则用内嵌的for()对行内的数据进行判断,注意如果数据为‘1’时才对对应的人增加1。*/ void countrs(void) { int i,j,count; for(i=0;i<300;i++) {count=0; for(j=0;j<10;j++) if(xx[i][j]=='1') count++; if(count<=5) continue; for(j=0;xx[i][j];j++) if(xx[i][j]=='1') yy[j]++; }} 3、函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请 编制函数STROR(),其函数功能是:以行为单位把字符串中的所有小写字母O左边的字符串 内容移到该串的右边存放,然后并把小写字母O删除,余下的字符串内容移到已处理字符串 的左边存放.最后把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRIT EDAT()把结果XX输出到文件OUT5.DAT中. 例如:原文:You can create an index on any field. you have the correct record. 结果:n any field.You can create an index rd.yu have the crrect rec 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格. /* 注:题目要求的字符串中所有小写字母o左边的字符串内容移到该串的右边存放,即将串中“最后”一个字母o左右两侧的内容互换。题中第一个while()特环的作用是让p1指向最后一个字母'o'。第一个ctrcat()函数的作用是将p1以后的字符都放到新串t中,第二个strcat()函数的作用是将p1以前的字符连接到新串t的后面(注意:在些之前要让p1所指的单元成为p1前面字符串的结束位置*p1='\0')。这时完成左右互换。最后一个while()循环的作用是删除新串中的所有小写字母'o',采用的删除方法是不是' o'的字母一律留下,否则不留(即相当于删除。*/ void StrOR(void) { int i; char *p1,*p2,t[80]; for(i=0;i{t[0]='\0'; p2=xx[i]; while(*p2) {if(*p2=='o') p1=p2; p2++; } strcat(t,p1+1); *p1='\0'; strcat(t,xx[i]); p1=xx[i]; p2=t; while(*p2) {if(*p2!='o') *p1++=*p2; p2++; } *p1='\0'; } } 4、函数READDAT()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组XX中;请编制函数CONVERTCHARA(),其函数功能是:以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母Z,则改写成字母A.大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变.把已处理的字符串仍按行重新存入字符串数组XX中,最后调用函数WRITEDAT()把结果XX输出到文件OUT.DAT中. 例:原文:Adb.Bcdza abck.LLhj 结果:Aec.Bdeab bcdl.LLik /* 注:注意本题中不能将第一个if()的else去掉,若不用else则经过第一个if()后原来字符'z'变成了'a',当再经过第二个if()时又将已变成'a'的字符改成了'b',即实际上字母'z'变成了字母'b',这是不行的。*/ void ConvertCharA(void) {int I,j,str; for(I=0;I {str =strlen(xx[I]); for(j=0;jif(xx[I][j]=='z')xx[I][j]='a'; else if(xx[I][j]>='a'&&xx[I][j]<='y') xx[I][j]+=1; } } } 5、已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)四部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相等,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT7.DAT中。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #define MAX 100 typedef struct{ char dm[5]; /*产品代码*/ char mc[11]; /*产品名称*/ int dj; /*单价*/ int sl; /*数量*/ long je; /*金额*/ }PRO; PRO sell[MAX]; 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) {xy=sell[I]; sell[I]=sell[j]; sell[j]=xy;} else if(strcmp(sell[I].dm,sell[j].dm)==0) if(sell[I].je {xy=sell[I]; sell[I]=sell[j]; sell[j]=xy;} } 6、编写函数,功能是以行为单位对行中的以空格或标点符号为分隔的单词倒排,最后把已经处理的字符串(不含标点符号)仍按行从新存入字符串数组中,例如: 原文:You He Me 结果:Me He You void StrOL(void) {int I,j,k,strl,l;char c; for(I=0;I for(j=0;j {c=xx[I][j]; if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' ') ; else xx[I][j]=' '; } for(l=0;l{char ch[80]={0}; char pp[80]={0}; strl=strlen(xx[l]); I=strl-1; k=1; while(1) {while (((xx[l][I]>='a'&&xx[l][I]<='z')||(xx[l][I]>='A'&&xx[l][I]<='z'))&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++;I--; } strcat(ch,pp); strcpy(pp, ""); k=1; if(I==-1)break; while((xx[l][I]<'A'||xx[l][I]>'z')&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++; I--;} strcat(ch,pp); strcpy(pp,""); k=0; if(I==-1)break;} strcpy(xx[l],ch); } } 7、 有200个正整数已经存入数组a,他们都是1000—9999的正整数,编写函数,功能是如果四位数各位上的数字均为0/2/4/6/8,则统计满足条件的个数cnt,并且把这些四位数按从大到小的顺序存入数组b。注意a,b数组已经定义。cnt已经定义并已经赋值为0 void jsVal() { int bb[4]; int I,j,k,flag; for (I=0;I<200;I++) {bb[0]=a[I]/1000; bb[1]=a[I]%1000/100; bb[2]=a[I]%100/10; bb[3]=a[I]%10; for (j=0;j<4;j++) {if (bb[j]%2= =0) flag=1; else {flag=0;break;} } if (flag= =1) { b[cnt]=a[I]; cnt ++;} } for(I=0;I for(j=I+1;j if (b[I] {k=b[I]; b[I]=b[j]; b[j]=k;} } 8、有200个正整数已经存入数组aa,他们都是1000—9999的正整数,编写函数,功能是按照每个数的后三位的大小进行升序排列,将排序后的前10个数存入数组bb。如果数组bb中出现后三位相等的数值,则按照原值降序排列。注意aa,bb数组已经定义。 例如: 前 :6012 5099 9012 7025 8088 后:9012 6012 7025 8088 5099 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) {data=aa[I]; aa[I]=aa[j]; aa[j]=data;} else if(aa[I]%1000==aa[j]%1000) if(aa[I] {data=aa[I]; aa[I]=aa[j]; aa[j]=data;} } for(I=0;I<10;I++) bb[I]=aa[I]; } 9、左降序,右升序的程序: void jsSort() {int I,j,k,strl,half; char ch; for(I=0;I<20;I++) {strl=strlen(xx[I]); half=strl/2; for(j=0;j for(k=j+1;k if (xx[I][j] {ch=xx[I][j]; xx[I][j]=xx[I][k]; xx[I][k]=ch;} if (strl%2) half++; /* 判断奇数 for(j=half;j for(k=j+1;k if (xx[I][j]>xx[I][k]) {ch=xx[I][j]; xx[I][j]=xx[I][k]; xx[I][k]=ch;} } (注意此处加half=strl/2;) for(j=half-1,k=strl-1;j>=0;j--,k--) {ch=xx[I][j]; xx[I][j]=xx[I][k]; xx[I][k]=ch;} } 10、从文件中读入200个整数放入XX数组中,求数组中的奇数个数cnt1和偶数个数cnt2以及XX下标为奇数的元素值的算术平均值PJ(保留2位小数) void main() {int cnt1,cnt2,xx[N]; float pj; FILE *fw; int I,k=0,j=0; cnt1=0;cnt2=0;pj=0.0; fw=fopen("out.dat", " w"); clrscr(); read_dat(xx); for(I=0;I { if (xx[I]%2) cnt1++; else cnt2++; if (I%2) {k+=xx[I];j++;} } pj=(float)(k*100/j)/100; printf("\n\cnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj); fprintf(fw, "%d\n%d\n%6.2f\n",cnt1,cnt2,pj); fclose(fw); } 11、从文件中读入200个整数放入XX数组中,求数组中的最大数max和最大数个数cnt和XX数组中能被3或7整除的元素值的算术平均值PJ(保留2位小数) void main() { int cnt, xx[N], max ; float pj ; FILE *fw ; long j=0; clrscr(); fw=fopen("out.dat","w"); read_dat(xx); max=xx[0]; for(I=1,k=0;I {if (xx[I]>max) max=xx[I]; if (xx[I]%3==0||xx[I]%7==0) {j+=xx[I];k++;} } for(I=0,cnt=0;I if (xx[I]==max) cnt++; pj=(float)(j*100/k)/100; printf("\n\nmax=%d,cnt=%d,pj=%6.2f\n", max, cnt, pj) ; fprintf(fw, "%d\n%d\n%6.2f\n", max, cnt, pj) ; fclose(fw) ; } 12、下列函数的功能是在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组[]中;它既是完全平方数,又有两位数字相同,例如144、676等。 int jsValue(int bb[]) {int I,j,k=0; int hun,ten,data; for(I=100;I<=999;I++) {j=10; while(j*j<=I) {if (I==j*j) {hun=I/100; data=I-hun*100; ten=data/10; data=data-ten*10; if(hun==ten||hun==data||ten==data) {bb[k]=I;k++;} } j++; } } return k; } 13、 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中:金额=单价*数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT10.DAT中。资料来源:东方教育http://www.eastedu.com.cn 注意:部分源程序已给出。 #define MAX 100 typedef struct{ char dm[5]; /*产品代码*/ char mc[11]; /*产品名称*/ int dj; /*单价*/ int sl; /*数量*/ long je; /*金额*/ }PRO; PRO sell[MAX]; 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) {xy=sell[I]; sell[I]=sell[j]; sell[j]=xy;} else if(strcmp(sell[I].dm,sell[j].dm)==0) if(sell[I].je{xy=sell[I]; sell[I]=sell[j]; sell[j]=xy;} } 14、函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT6.DAT中。 例如:原文:You He Me I am a student. 结果:Me He You student a am I 试题程序: char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); _______________________________ void StrOL(void) {int I,j,k,strl,l;char c; for(I=0;Ifor(j=0;j{c=xx[I][j]; if ((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c==' ') ; else xx[I][j]=' '; } for(l=0;l{char ch[80]={0}; char pp[80]={0}; strl=strlen(xx[l]); I=strl-1; k=1; while(1) {while (((xx[l][I]>='a'&&xx[l][I]<='z')||(xx[l][I]>='A'&&xx[l][I]<='z'))&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++;I--; } strcat(ch,pp); strcpy(pp, ""); k=1; if(I==-1)break; while((xx[l][I]<'A'||xx[l][I]>'z')&&I>=0) {for(j=k;j>=0;j--) pp[j+1]=pp[j]; pp[0]=xx[l][I]; k++; I--;} strcat(ch,pp); strcpy(pp,""); k=0; if(I==-1)break;} strcpy(xx[l],ch); }} 15、函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOR(),该函数的功能是:以行为单位把字符串中所有小写字母o左边的字符串内容移到该串的右边存放,然后并把小写字母o删除,余下的字符串内容移到已处理字符串的左边存放。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT5.DAT中。资料来源:东方教育http://www.eastedu.com.cn 例如:原文:You can creat an index on any field. you have the correct record. 结果:n any field. Yu can creat an index rd.yu have the crrect rec char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); ________________________ void StrOR(void) {int I,j,k,index,strl; char ch; for(I=0;I{strl=strlen(xx[I]); index=strl; for(j=0;jif(xx[I][j]=='o') {for(k=j;kxx[I][k]=xx[I][k+1]; xx[I][strl-1]= ' '; index=j;} for(j=strl-1;j>=index;j--) {ch=xx[I][strl-1]; for(k=strl-1;k>0;k--) xx[I][k]=xx[I][k-1]; xx[I][0]=ch;} } }
2004年9月全国计算机等级考试三级(PC技术)笔试试卷
计算机等级考试三级(C语言)上机考试试题总结
| |