1 / 3
文档名称:

c语言-2010春C语言上机试卷C05答案.doc

格式:doc   大小:48KB   页数:3页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

c语言-2010春C语言上机试卷C05答案.doc

上传人:qsrkmc24 2018/8/24 文件大小:48 KB

下载得到文件列表

c语言-2010春C语言上机试卷C05答案.doc

文档介绍

文档介绍:一、改错题(16分)
【程序功能】
一个数列中相邻的n个数被称为n阶子序列。程序实现在二维数组a的每一行中找出和值最大的3阶子序列,并将这些子序列的起始列下标及和值保存在二维数组b中。
函数sta在pa指向的一维数组m个元素中找出和值最大的n阶子序列,将找到的子序列起始下标保存到pos指向的变量中,函数返回最大和值。
【测试数据与运行结果】
数组初始化数据:
1 2 3 4 5
1 2 3 2 1
6 5 4 3 2
输出:
positon: a[0][2] max:12
positon: a[1][1] max: 7
positon: a[2][0] max:15
【含有错误的源程序】
#include ""
int sta(int *pa,int m,int n,int *pos)
{ int i=0,j=0, max=1,sum;
int b; /* 语法错,中,改为 int *b */
if(n<m)
{ b=(int *)malloc(sizeof(int)*(m-n+1));
for(i=0;i<=m-n;i++)
{ for(sum=0,j=i+1;j<i+n;j++)
/* 算法错,中,改为:for(sum=0,j=i;j<i+n;j++)或for(sum=pa[i],j=i+1;j<i+n;j++) */
sum=sum+pa[j] ;
b[i]=sum;
}
max=b[0];
for(i=1;i<=m-n;i++)
{ if(b[i]>max)
{ max=b[i] ;
*pos=i;
}
}
}
free(b);
return max ;
}
void main()
{ int a[3][]={{1,2,3,4,5},{1,2,3,2,1},{6,5,4,3,2}},b[3][2]={0},i,n,*p=&n;
/* 语法错,易,改为 int a[3][5]={{1,2,3,4,5},{1,2,3,2,1},{6,5,4,3,2}} */
for(i=0;i<3;i++)
{ b[i][1]=sta(a[i],5,3,p);
b[i][0]=p; /* 语义错,中, 改为b[i][0]=n; 或 b[i][0]=*p; */
printf("\n positon: a[%d][%d] max:%4d",i, b[i][0],b[i][1]);
}
getch();
}
二、编程题(24分)
【程序功能】
判断求余运算“%”对于一个数组是否封闭。
求余运算“%”对于一个数组的封闭性定义为:对于一维数组a中的任意两个元素a[i]和a[j] ( i ¹ j ),若当a[j]不为0时a[i]%a[j]的值都存在于a数组中,则称求余运算“%”对于a数组是封闭的。
【编程要求】
1. 编写函数int judge( int a[ ], int n)实现以下功能:判断求余运算%对于a指向的包含n个元素的数组是否封闭,若封闭则函数返回1,否则函数返回0。
:声明一维数组a和b并用测试数据初始化,分别用a数组和b数组作实参两次调