编程题:
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”); }