编程题:
85.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,85,91,72,64,87;则平均分应当是78.625。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
#define N 8
struct slist
{
double s;
struct slist *next;
};
typedef struct slist STREC;
double fun ( STREC *h )
{
}
STREC * creat ( double *s )
{
STREC *h, *p, *q;
int i=0;
h=p=( STREC* ) malloc (sizeof (STREC ) );
p->s=0;
while ( i
{
q=( STREC* ) malloc (sizeof ( STREC ) );
q->s=s[i];
i++;
p->next=q;
p=q;
}
p->next=0;
return h;
}
outlist ( STREC *h )
{
STREC *p;
p=h->next;
printf ( ” head ” );
do
{
printf ( “->%4.1f”, p->s );
p=p->next;
}
while ( p!=0 );
printf ( “\n\n” );
}
main ()
{
double s[N]={85, 76, 69, 85, 91, 72, 64, 87}, ave;
STREC *h;
h=creat ( s );
outlist (h);
ave=fun ( h );
printf ( “ave= %6.3f\n”, ave );
}
87.请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。
例如,当a=45,b=12,调用该函数后,c=4251。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
#include
void fun (int a, int b, long *c)
{
}
main ()
{
int a, b;
long c;
clrscr ();
printf (“Input a, b:”);
scanf (“%d%d”, &a, &b);
fun ( a, b, &c );
printf (“The result is: %ld\n”, c);
}
改错题:
46.已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项之和。下列给定程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序输出结果应为23.197745。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函敛,不得增行或删行;也不得更改程序的结构!
试题程序:
#include
#include
#include
/********found********/
fun(int n)
{
double sum, s0, s1, s2, s;
int k;
sum=1.0;
if (n <= 2)
sum = 0.0;
s0 = 0.0;
s1 = 0.0;
s2 = 1.0;
for (k = 4; k <= n; k++)
{
s = s0 + s1 + s2;
sum += sqrt(s);
s0 = s1;
s1 = s2;
s2 = s;
}
/********found********/
return sum
}
main ( )
{
int n;
clrscr( );
printf(“Input N=”);
scanf(“%d”,&n);
printf(“%f\n”,fun(n));
}
47.下列给定程序中,函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include
#include
#define N 20
/********found********/
int fun ( int *a, int n )
{
int i, m, t, k ;
for(i=0;i<2;i++)
{
/********found********/
m=0;
for(k=i;k
if(a[k]>a[m])
m=k;
t=a[i];
a[i]=a[m];
a[m]=t;
}
}
main( )
{
int x, b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i;
clrscr( );
for ( i=0; i
printf(“%d “, b[i]);
printf(“\n”);
fun ( b, n );
for ( i=0; i
printf(“%d “, b[i]);
printf(“\n”);
}