您好,欢迎访问三七文档
函数实验题一、改错题:【程序功能】函数HolandFlag的功能是:已知在flag指向的有n个元素的字符数组中,每个元素的值是字符‘R’、‘W’或‘B’中的一个。函数按照‘R’、‘W’、‘B’的顺序重新排列flag数组中所有元素的值。算法提示:若flag数组初始值为RBWBRWRBW则在flag数组中出现数据交换的步骤与效果为:第1步:flag[1]与flag[8]交换后数据为RWWBRWRBB第2步:flag[3]与flag[6]交换后数据为RWWRRWBBB第3步:flag[1]与flag[4]交换后数据为RRWRWWBBB第4步:flag[2]与flag[3]交换后数据为RRR【测试数据与运行结果】测试数据:RBWBRWRBW运行结果:RRR【含有错误的源程序如下】:#includestdio.h#includestring.h#denfine10N/*改为#defineN10*/voidHolandFlag(charflag[],intnum){inti,j,k,m;charc,color[3]={B,W,R};/*改为color[3]={'B','W','R'}*/m=num;for(k=0;k2;k++)for(i=0;im;i++)if(flag[i]==color[k]){for(j=m-1;ji;j--)if(flag[j]==color[k])/*改为if(flag[j]!=color[k])*/{c=flag[i];flag[i]=flag[j];flag[j]=c;m--;break;}if(i==j)m=i;}}voidmain(){charflag[N]=RBWBRWRBW;inti,k,n=strlen(flag);HolandFlag(flag[N],n);/*改为HolandFlag(flag,n)*/for(i=0;in;i++)printf(%c,flag[i]);}【要求】1、将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。2、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。二、编程题:1、【程序功能】用一组整数验证命题:“任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数字与个位数字交换得到n2;求n1与n2差的绝对值得到n3;将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089。若n1、n3是一位数或两位数,则在高位补0使其成为三位数。”例如:n1:123,n2:321,n3:198(321-123),n4:891,n5:1089(198+891)【编程要求】(1)编写函数intfun(inta[],intb[],intn),其功能是用a指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数。(2)编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕及结果文件myf2.out中。最后将本人的学号字符串也保存到结果文件myf2.out中。【测试数据与运行结果】测试数据:1237651451211345131676963589运行结果:12376514567mynumberis:本人学号字符串【要求】(1).将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。(2).数据文件的打开、使用和关闭等操作均用C语言标准库中缓冲文件系统的文件操作函数实现。即①#include“stdio.h”②FILE*fp;③fp=fopen(“E:\\myf2.out”,”w”);④fprintf(fp,”……”,……);⑤fclose(fp);(3).源程序文件和运行结果文件均需保存在考试盘的根目录下(平时练习时保存在E盘,考试时保存在T盘),供阅卷用。(4).不要将myf2.obj和myf2.exe保存到考试盘上。【参考程序】#includestdio.h#includemath.h#defineN10intfun(inta[],intb[],intn){inti,s=0,n1,n2,n3,n4,n5;for(i=0;in;i++){if(a[i]999)continue;else{n1=a[i];n2=(n1%10)*100+(n1/10%10)*10+n1/100;n3=fabs(n1-n2);n4=(n3%10)*100+(n3/10%10)*10+n3/100;n5=n3+n4;if(n5==1089){b[s]=i;s++;}}}return(s);}voidmain(){inta[N]={123,765,1,45,121,1345,131,67,696,3689};inti,n,b[N];FILE*fp;clrscr();fp=fopen(e:\\ljh\\myf2.out,w);n=fun(a,b,N);for(i=0;in;i++){printf(%5d,a[b[i]]);fprintf(fp,%5d,a[b[i]]);}fprintf(fp,\nmynumberis:12345678);fclose(fp);}2、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。【要求】:(1)、两个整数由键盘输入。(2)、源程序文件取名为myf3.c,输出结果文件取名为myf3.out。(3)、最后将本人的学号字符串也保存到结果文件myf3.out中。输入本人学号字符串调用fun函数在b数组中记下a数组中符合命题的数组元素的下标
本文标题:实验五参考答案
链接地址:https://www.777doc.com/doc-2459024 .html