●试题四
下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<mallo
C.h>
#include<string.h>
#include<conio.h>
#define N 10
typedef struct ss
{
char num[10];
int order;
}STU;
STU *fun(STU a[], int m)
{
STU b[N],*tt;
int i,j,k;
(1) ;
for(i=0; i<N; i++)
b[i]=a[i];
for (k=0;k<m;k++)
{
for(i=j=0;i<N;i++)
if ( (2) )
j=i;
tt[k]=b[j];
b[j].order=0;
}
return (3) ;
}
outresult(STU a[],FILE *pf)
{
int i;
for(i=0;i<N; i++)
fprintf(pf,"No=%s Mark=%d\n",
a[i].num,a[i].order);
fprintf(pf,"\n\n");
}
main()
{
STU [N]={{"A01",80},{"A02",79},
{"A03",66},{"A04",82},{"A05",87},
{"A06",93},{"A07",78},{"A08",60},
{"A09",85},{"A10",73}};
STU *p_order;
int i,m;
clrscr();
printf("*** The Origial data ***\n");
outresult(a, stdout);
printf("\nGive the numeber of the
students who have better score:");
scanf("%d",&m);
while (m>10)
{
printf("\nGive the number of the
studets who have better score:");
scanf("%d",&m);
}
p_order=fun(a,m);
printf("*** THE RESULT ***\n");
printf("*** The top students ***\n");
for(i=0; i<m; i++)
printf(" %s %d\n",
p_order[i].num,p_order[i].order);
free(p_order);
}
第1题:
下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include<stdio.h>
define N 20
void fun(int a[],int n)
{int i,j,t,p;
for (j=0;j<n-1;j++)
/*************found**************/
{p=j
for(i=j;i<n;i++)
if(a[i]<a[p])
/*************found**************/
p=j;
t=a[p]; a[p]=a[j]; a[j]=t;
}
}
main()
{int a[N]={9.6,8,3,-1},i,m=5;
printf("排序前的数据: ");
for(i=0;i<m;i++) printf("%d",a[i]);
printf("\n");
fun(a,m);
printf("排序后的顺序: ");
for(i=0;i<m;i++) printf("%d",a[i]);
printf("\n");
}
第2题:
下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值。
t=1-1/(2×2)-1/(3×3)-…-l/(m×m)
请改正函数fun()中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
include <conio.h>
include <stdio.h>
double fun(int m)
{ double y=1.O;
int i;
/*************found**************/
for(i=2;i<m;i++)
/************found**************/
y-=1/ (i*i);
return(y);
}
main()
{ int n=5;
clrscr();
printf("\nThe result is %1f\n", fun(n));
}
第3题:
下列给定程序中,函数proc()的功能是:对M名学生的学习成绩,按从低到高的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请修改程序中的错误,使它能得到正确结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
(1)错误:*t=calloe(m,sizeof(STU));
正确:(structss*)calloc(m,sizeof(STU));
(2)错误:for(i=j=0;i<M;j++)
正确:for(i=j=0;i<M;i++)
(3)错误:t[k].s=b[j].s;
正确:t[k]=b[j];
【解析】由函数proc()可知,变量t是指向动态存储空间的变量,因此不能间接访问运算符,而函数calloc的返回值类型为void*,要进行显式类型转换,因此“*t=calloc(m,si-zeof(STU));”应改为“(structss*)calloc(m,sizeof(STU));”。
由程序可知,变量i为控制学生个数的变量,因此“for(i=j=
第4题:
下列给定程序中,函数fun()的功能是:判断一个整数m是否是素数,若是返回l,否则返回0。在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.
试题程序:
include <conio.h>
include <stdio.h>
int fun(int m)
{ int k=2;
while (k<=m&&(m%k))
/*************found*********************/
k++
/*************found*********************/
if(m=k)
return 1;
else return O;
}
main ( )
{ iht n;
clrscr ();
printf("\nPlease enter n: ");
scanf ("%d", &n);
if (fun (n)) printf ("YES\n");
else printf ("NO! \n");
}
第5题:
给定程序MODll.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!