函数实验题
改错题:
【程序功能】函数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]交换后数据为 RRRWWWBBB
【测试数据与运行结果】
测试数据:RBWBRWRBW
运行结果:RRRWWWBBB
【含有错误的源程序如下】:
#include<>
#include<>
#denfine 10 N /*改为#define N 10 */
void HolandFlag(char flag[],int num)
{int i,j,k,m;
char c,color[3]={B,W,R}; /*改为color[3]={'B','W','R'}*/
m=num;
for(k=0;k<2;k++)
for(i=0;i<m;i++)
if(flag[i]==color[k])
{for(j=m-1;j>i;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;
}
}
void main()
{char flag[N]="RBWBRWRBW";
int i,k,n=strlen(flag);
HolandFlag(flag[N],n); /*改为HolandFlag(flag,n)*/
for(i=0;i<n;i++)
printf("%c",flag[i]);
}
【要求】
1、,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
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)编写函数int fun(int a[],int b[],int n),其功能是用a指向数组的前n个整数验证上述
实验三参考答案 来自淘豆网m.daumloan.com转载请标明出处.