模拟测试题一
一、改错题 【程序功能】
以下程序的功能是:对获得学位的学生名单排序。排序要求:数组元素按照degree值以自定义序列bachelor、master、doctor的顺序排列,对于degree值相同的那些元素,按照name的值以字典序排列。 【测试数据与运行结果】 测试数据: A master 运行结果: B bachelor B bachelor D bachelor C doctor A master D bachelor E master E master C doctor 【含有错误的源程序】 #include
struct {
char name[10]; char degree[10]; }ST;
void sort(ST x[],int n,char *key[],int m) {
int i,j,k,con1,con2; ST v;
for(i=0;i for(j=0;j for(k=0;k if(strcmp(x[j].degree,key[k])==0) { con1=k; break; } for(k=0;k if(strcmp(x[j+1].degree,key[k])==0) { con2=k; break; } if((con1>con2||con1==con2)&&strcmp(x[j].name,x[j+1].name)>0) { v=x[j]; x[j]=x[j+1]; x[j+1]=v; } } } void main() { ST s[5]={{\ {\ char sortkey[]={\ int i; sort(s,5,sortkey,3); for(i=0;i<5;i++) printf(\ %s\ getch(); } 【要求】 ? 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 ? 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。 ? 将改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【编程要求】 1.编写函数int findword(char *s,char *t,char ch[][20])。函数功能:在由若干句子组成的字符串s中搜索包含字符 串t的所有单词,将这些单词存放在数组ch中,函数返回找到的单词格式。称字符串s为“被搜索字符串”,字符串t为“搜索字符串”。 2.编写main函数。函数功能:声明数组s和t,用被搜索字符串和搜索字符串初始化这两个数组。调用函数findword对给定的测试数据进行检索,并将检索到的包含字符串t的所有单词及单词的个数保存到结果文件myf2.out中。最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 【测试数据及运行结果】 被搜索字符串:No living man all things can. Graspall,loseall. 搜索字符串:all 检索结果:all,Graspall,loseall. 3 【要求】 ? 源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out ? 数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ? 源程序文件和运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ? 不要复制扩展名为OBJ和EXE的文件到考试盘上。 模拟测试题二 一、改错题 【程序功能】 查找并输出同时出现的两个一维数组中的整数,每个一维数组中的元素均已按值升序排列,并且每个数组中的元素没有相同的值。 函数int coincidence_count(int a[],int b[],int m,int n,int c[])按上述要求在a指向的数组前m个元素和b指向的数组前n个元素中查找,将找到的整数保存到c指向的数组中。 【测试数据与运行结果】 测试数据: a数组中的数据:1,2,4,8,10,12,13,14,16,18 b数组中的数据:3,4,7,8, 9,10,12,13,16,19 运行结果: No. Array 1 Array 2 0 1 3 1 2 4 2 4 7 3 8 8 4 10 9 5 12 10 6 13 12 7 14 13 8 16 16 9 18 19 【含有错误的源程序】 #include int coincidence_count(int a[],int b[],int m,int n,int c[]) { int count,ia,ib; count=ia=ib=0; while(ia else (a[ia]>b[ib]) ib++; else { c[count]=a[ia]; ia++; ib++; } return count; } void main() { int a[]={1,2,4,8,10,12,13,14,16,18},b[]={3,4,7,8,9,10,12,13,16,19}; int c[10],i,na,nb,n; na=sizeof(a)/sizeof(int); nb=sizeof(b)/sizeof(int); printf(\ Coincidence Count of two Increasing Arrays\\n\ printf(\ Array 1 Array 2\ for(i=0;i printf(\ printf(\ for(i=0;i printf(\ getch(); } 【要求】 ? 将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 ? 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。 ? 将改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【编程要求】 1.编写函数void josephu(int a[],int b[],int n,int m)实现如下模拟处理功能:a指向的数组中存储了n个人的编号(从1开始按序编号到n)。n个人围坐成一圈,从编号为1 的人开始报数(从1到m报数),凡报到m的人出列。将每次出列的人的编号依次保存在b指向的数组中,直到最后一个人出列为止。 2.编写main函数。用给定的测试数据调用josephu函数,将经函数处理后得到的n个依次出列的人的编号保存到结果文件myf2.out中。最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 【测试数据及运行结果】 测试数据: n=10,m=3 运行结果: 3, 6, 9, 2, 7, 1, 8, 5, 10, 4