试题二(共15分)
阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
如果矩阵A中的元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
一个矩阵可能存在多个马鞍点,也可能不存在马鞍点。下面的函数求解并输出一个矩阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。
【C函数】
Int findSaddle(int a[][N],int M),
{ /*a表示M行N列矩阵,N是宏定义符号常量量*/
int row,column,i,k;
int minElem;
int count=0;/*count用于记录矩阵中马鞍点的个数*/
for(row = 0;row< (1) ;row++) {
/*minElem用于表示第row行的最小元素值,其初值设为该行第0列的元素值*/
(2) ;
for(column = 1;column< (3) ;column++)
if(minElem> a[row][column]) {
minElem = a[row][column];
}
for(k=0;k<N;k++)
if(a[row][k]==minElem){
/术对第row行的每个最小元素,判断其是否为所在列的最大元素*/
for(i=0;i <M;i++)
if((4) >minElem) break;
if(i>=(5) ){
printf("(%d,%d):%d\n",row,k,minElem);/*输出马鞍点*/
count++;
}/*if*/
}/*if*/
}/*for*/
return count,
}/*findSaddle*/
试题二(共15分)
阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对应栏内。
[说明]
某单位准备进行一次选举,对指定的n 名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n 名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3 个,也不得少于1 个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,
n=8 时所形成的文件如下:
01011000
10010100
10011000
11111111
00000000
00111000
…
其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i 行第j 列为1,表示第i 张选票上投了第j 名候选人1 票。函数statistic()的功能是读入选票数据,并统计每位候选者的得票数,函数返回
有效选票数。
[C函数]
int statistic(FILE *fp,int candidate[],int n)
{ /* 从文件中读入选票数据,n 为候选人数量(n<80),从有效选票中统计每位候选者
的得票数并存入candidate[],函数返回有效选票数*/
char str[80]; /* str 保存读入的一张选票数据 */
int i,tag = 0; /* tag用于判断每张选票是否有效 */
int q = 0; /* q用于计算有效选票数 */
for(i = 0; i < n; i++)
candidate[i] = 0;
while ((1) ) {
fgets(str,80,fp); /* 读入一张选票数据 */
for(tag = 0,i = 0; (2) ; i++)
if (str[i] == '1') tag++;
if ((3) ){ /* 若是有效选票,则进行统计 */
(4) ;
for(i = 0; i < n; i++)
if (str[i] == '1') (5) ;
}
}
return q;
}/* statistic */
A.顺序文件中的记录一个接一个地顺序存放
B.随机文件中记录长度是随机的
C.执行打开文件的命令后,自动生成一个文件指针
D.LOF函数返回给文件分配的字节数
阅读下列说明、流程图和算法,将应填入(n)处的字句写在对应栏内。
【流程图说明】
下图所示的流程图5.3用N-S盒图形式描述了数组Array中的元素被划分的过程。其划分方法;以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于Array[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。
【算法说明】
将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int Array[],int low,int high)实现了上述流程图的划分过程并返回基准数在数组Ar ray中的下标。递归函数void sort(int Array[],int L,int H)的功能是实现数组Array中元素的递增排序。
【算法】
void sort(int Array[],int L,int H){
if (L<H) {
k=p(Array,L,H);/*p()返回基准数在数组Array中的下标*/
sort((4));/*小于基准数的元素排序*/
sort((5));/*大于基准数的元素排序*/
}
}
试题五(共15分)
阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对应栏内。
[说明]
某班级有N 名学生,他们可根据自己的情况选修名称和数量不尽相同的课程。设N,如图5-1 所示。
程序中相应的类型定义如下:
define N 6
struct node{
char cname[5]; /*课程名*/
int grade; /*成绩*/
struct node *next; /*指针,指示某学生选修的下一门课程及成绩*/
};
struct student{
char xh[5]; /*学号*/
char name[20]; /*姓名*/
struct node *link; /*指针,指示出选修的课程及成绩链表*/
}stud_info[N];
stud_info[]为一个全局数组。
函数func (char kc[],int *num)的功能是统计选修了课程名为kc 的学生的人数,
并返回该课程的平均成绩(若无人选修该课程,则平均成绩为0),参数num 带回选修课程kc 的学生人数。
[C函数]
double func (char kc[],int *num)
{
int i,count = 0,sum = 0; /*count用于记录选修课程名为kc 的学生的人数*/
double avg = 0.0;
struct node *p;
for(i = 0; i < N; i++){
p = (1) ; /*取第i 个学生所修课程链表的头指针*/
while (p) {
if ((2) ) {
sum = (3) ;
count++;
break;;
}/*if*/
p = p->next;
}/*while*/
}
(4) ;
if ((5) )
avg = (double)sum / count; /* 计算平均成绩 */
return avg;
}/*func*/
设有如下定义:
int(*ptr);
则以下叙述中正确的是()。
A.ptr是指向一维组数的指针变量
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指int型数据的指针
A.INDEX函数可以返回表格或数组中的元素值,此元素由行号和列号的索引值给定
B.LOOKUP函数用于在指定区域内按指定方式查询与指定内容所匹配的单元格位置
C.MATCH函数用于在指定区域内查询指定内容所对应的匹配区域内单元格的内容
D.MATCH函数和INDEX函数可嵌套使用,组合功能更强大
E.INDEX函数有两种形式:数组形式和引用形式
以下关于文件的叙述中,错误的是()。
A.顺序文件中的记录一个接一个地顺序存放
B.随机文件中记录的长度是随机的
C.执行打开文件的命令后,自动生成一个文件指针
D.LOF函数返回给文件分配的字节数
以下关于文件的叙述中,错误的是()。
A.顺序文件中的记录一个接一个地顺序存放
B.随机文件中记录的长度是随机的
C.执行打开文件的命令后,自动生成一个文件指针
D.LOF函数返回给文件分配的字节数