编程题:
57.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是60和69, 则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的
若干语句。
#include
#define N 16
typedef struct
{
char num[10];
int s;
} STREC;
int fun ( STREC *a, STREC *b, int l, int h )
{
}
main ()
{
STREC s[N]= {{“GA005″,85}, {“GA003″,76}, {“GA002″,69}, {“GA004″,85},
{“GA001″,96}, {“GA007″,72}, {“GA008″,64}, {“GA006″, 87},
{“GA015″,85}, {“GA013″,94}, {“GA012″,64}, {“GA014″,91},
{“GA011″,90}, {“GA017″,64}, {“GA018″,64}, {“GA016″,72}};
STREC h[N],tt;
FILE *out;
int i,j,n, low, heigh, t;
printf ( “Enter 2 integer number low & heigh : “);
scanf (“%d%d”, &low, &heigh );
if ( heigh < low )
{
t=heigh;
heigh=low;
low=t;
}
n=fun (s, h, low , heigh );
printf ( “The student ‘s data between %d—-%d : \n”, low, heigh );
for (i=0; i printf (“%s %4d\n”, h[i]. num, h[i]. s); printf ( “\n” ); out=fopen (“out18.dat”, “w”); fprintf ( out, “%d\n”, n ); n=fun ( s, h, 80, 98 ); for (i=0; i for (j=i+1; j if(h[i].s>h[j].s) { tt=h[i] ; h[i]=h[j]; h[j]=tt; } for(i=0;i fprintf (out, “%4d\n”, h[i]. s); fprintf ( out, “\n” ); fclose ( out ); } 60.请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 # include # define N 80 int fun(int a[], int n) { } main() { int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}, i,n=20; printf(“The original data :\n”); for(i=0; i printf(“%3d”,a[i]); n=fun(a,n); printf(“\n\nThe data after deleted :\n”); for(i=0;i printf(“%3d”,a[i]); printf(“\n\n”); } 改错题: 90.下列给定程序中,函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是16807,其低3位数的和值是15。 请改正函数fun中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include #include int fun(int n ,int *value) { int d,s,i; /********found********/ d=0; /********found********/ s=1; for(i=1; i<=5; i++) d=d*n; *value=d; for(i=1; i<=3; i++) { s=s+d%10; /********found********/ s=s/10; } return s; } main() { int n, sum, v; do { printf(“\nEnter n(2 scanf(“%d”,&n); } while(n<=2 || n>=8); sum=fun(n,&v); printf(“\n\nThe result:\n value=%d sum=%d\n\n”,v,sum); } 93.下列给定程序中,函数fun的功能是:用下面的公式求π的近似值,直到最后一项 的绝对值小于指定的数(参数num)为止: π 1 1 1 -≈ 1- - + - – - +… 4 3 5 7 例如,程序运行后,输入0.0001,则程序输出3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include #include float fun(float num) { int s; float n,t,pi; t=1; pi=0; n=1; s=1; /********found********/ while (t>=num) { pi=pi+t; n=n+2; s=-s; /********found********/ t=s%n; } pi=pi*4; return pi; } main( ) { float n1,n2; clrscr(); printf(“Enter a float number: “); scanf(“%f”, &n1); n2=fun(n1); printf(“%6.4f\n”, n2); }