2011年c上机考试试卷(3套)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2011春第1套一、改错题(16分)对存储在string数组内的英文句子中所有以a开始并以e结尾的单词做加密处理。加密规则:若单词长度为偶数个字符,则将组成该单词的所有字母循环左移一次;否则循环右移一次。例如,单词able经左移一次后变为blea,单词abide经右移一次后变为eabid。测试数据:sheisabletoabideher.屏幕输出:sheisbleatoeabidher.【含有错误的源程序】#includestdio.h#includectype.hvoidwordchange(charstr[]){inti,j,k,m;charc;for(i=0;str[i];i++){for(j=i,k=i;isalpha(str[k]);k++);if(str[j]=='a'||str[k-1]=='e'){if((k-j)%2=0){c=str[j];for(m=k-1j;mj;m--)str[m]=str[m+1];str[k-1]=c;}else{c=str[k-1];for(m=k-1;mj;m--)str[m]=str[m-1];str[j]=c;}}i=k;}}voidmain(){charstring[80]=sheisabletoabideher.;wordchange(string[80]);puts(string);}二、编程题(24分)【程序功能】矩阵数据生成及排序。【编程要求】1.编写函数voidcreaort(inta[][3],intn)。函数功能是先根据a指向的二维数组中第1列(列下标为0)和第2列(列下标为1)的值按如下表所列规则生成第3列各元素的值,再以行为单位重排a数组的各行,使得所有行按第3列元素值从小到大排列。第3列生成规则:对任意的i(0≤i≤n-1)有:a[i][0]a[i][1]a[i][2]非素数非素数1非素数素数2素数非素数3素数素数42.编写main函数。函数功能是声明5行3列二维数组a并用测试数据初始化,用数组a作为实参调用cresort函数,将a数组中数据输出到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out中。测试数据:27160111206907130850屏幕输出:27161691852111237134第2套一、改错题(16分)【程序功能】统计一个字符串中包含的字母串个数并找出其中最长的字母串。所谓字母串是指一个连续字母序列(不区分大小写),字母串之间用非字母字符分隔。函数count的功能是统计p指向的字符串中包含的字母串个数,并将找出的最长字母串存放在pmax指向的数组中,函数返回字母串的个数。【测试数据及运行结果】测试数据:youareteacher234too.屏幕输出:a=youareteacher234too.numberis4maxstringis:teacher【含有错误的源程序】#includestdio.h#includestring.h#includectype.hintcount(charp[],charpmax[]){intj=0,k,m=0;chartemp[100];while(*p){while((!isalpha(*p))&&*p)p++;k=0;if(*p!='\0')m++;while(isalpha(*p))temp[k++]=*p++;temp[k]=\0;if(kj){j=k;pmax=temp;}}returnm;}voidmain(){chara[100]=youareteacher234too.,max[100];inti;i=count(a[],max[]);if(i==0)printf(a=%s:Noletterstrings!\n,a);elseprintf(a=%s\nnumberis%d\nmaxstringis:%s\n,a,i,max);}二、编程题(24分)【程序功能】将一个二维数组中的若干行数据按要求插入到另一个二维数组中。【编程要求】1.定义符号常量N代表4。2.编写函数intinsert_row(inta[][N],intn,intb[][N],intm)。已知insert_row函数的形参a指向的二维数组(简称a数组)前n行数据已按每行数据之和升序排列,形参b指向的二维数组(简称b数组)已有m行数据,insert_row函数实现将b数组中的m行插入到a数组中,完成插入操作后数组a中所有行的数据仍按每行数据之和升序排列。函数返回a数组中有效数据的行数。3.编写main函数。函数功能是声明2个二维数组x和y并用测试数据初始化,用x和y数组作为实参调用insert_row函数将y数组中的2行数据插入到x数组中。输出x数组中全部数据到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out中。x数组原数据:22349101112y数组数据:13575101520屏幕输出:2234135791011125101520第3套一、改错题(16分)函数factor的功能是求出正整数m(m2)除自身以外的所有不同因子,将这些因子按从小到大的顺序存放到fac指向的数组中,将因子个数保存到n指向的变量中,函数返回因子之和。算法提示:用m分别除以2,3,4,…,(int)sqrt(m),若相除得到两个互异因子,则小者存入fac指向数组的左端,大者存入fac指向数组的右端;若相除得到两个相同因子,则将该因子存入fac指向数组的左端。当求出全部因子后,将所有因子按从小到大的顺序集中存放在fac指向数组的左端。测试数据:m=32屏幕输出:Sum:31Number:=5Factors:124816【含有错误的源程序】#includestdio.h#includemath.h#defineN100longfactor(intm,int*fac,int*n){intright,left,k=(int)sqrt(m),i;longsum;*fac=1;*n=1;right=N-1;left=1;sum=1;i=2;while(ik){k=m/i;if(k*i==m){if(i!=m){*n+=2;sum=sum+i+k;fac[left++]=i;fac[right--]=k;}else{*n+=1;sum+=i;fac[left++]=i;}}i++;}for(i=right+1;i=N-1;i++)fac[left++]=fac[i];returnsum;}voidmain(){intfac[N]={0},i,m,num;longsum;printf(Inputm(2):);scanf(%d,&m);sum=factor(m,fac,&num);printf(\nSum:%ld\n,sum);printf(\nNumer:%d\n,num);for(i=0;inum;i++)printf(%6d,fac[i]);}二、编程题(24分)【程序功能】在一个字符串中查找所有等值子串。【编程要求】1.如果字符串内的一个子串(其长度大于1)中所有字符均相同,则称之为等值子串.编写函数inteqsub(chars[],charresult[][80])。函数功能是在s指向的字符串中查找等值子串,将找到的所有等值子串存放到result指向的二维数组中(一行存储一个等值子串),函数返回result数组中等值子串的个数。2.编写main函数。函数功能是声明一维数组s和二维数组result,用测试数据初始化s数组,用数组s和result作为实参调用函数eqsub在s数组中查找所有等值子串,将找到的等值子串输出到屏幕及文件myf2.out中。最后将考生本人的准考证号字符串输出到文件myf2.out中。测试数据:aaahjdbbbbsdccskdjffff屏幕输出:aaabbbbccffff

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功