知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

57套: 

函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a所指数组中的数据最初排列为:914236587;则按规则移动后,数据排列为:192837465。形参n中存放a所指数组中数据的个数。 

注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

# include <stdio.h> 

#define N 9 

void fun(int a[], int n) 

{ int i,j, max, min, px, pn, t; 

for (i=0; i<n-1; i+=2) 

/ **********found**********/ 

max = min = ___1___; 

px = pn = i; 

for (j=i+1; j<n; j++) { 

/ **********found**********/ 

if (max<___2___) 

{ max = a[j]; px = j; } 

/ **********found**********/ 

if (min>___3___) 

{ min = a[j]; pn = j; } 

if (pn != i) 

{ t = a[i]; a[i] = min; a[pn] = t; 

if (px == i) px =pn; 

if (px != i+1) 

{ t = a[i+1]; a[i+1] = max; a[px] = t; } 

main() 

{ int b[N]={9,1,4,2,3,6,5,8,7}, i; 

printf("\nThe original data :\n"); 

for (i=0; i<N; i++) printf("%4d ", b[i]); 

printf("\n"); 

fun(b, N); 

printf("\nThe data after moving :\n"); 

 

for (i=0; i<N; i++) printf("%4d ", b[i]); 

printf("\n"); 

解题思路: 

第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给maxmin变量,所以应填: a[i]。 

第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]。 

第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1123581321、…… 例如,若给n输入7,该项的斐波拉契数值为:13。 

请改正程序中的错误,使它能得出正确结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 

给定源程序: 

#include <stdio.h> 

long fun(int g) 

/ **********found**********/ 

switch(g); 

{ case 0: return 0; 

/ **********found**********/ 

case 1 ;case 2 : return 1 ; 

return( fun(g-1)+fun(g-2) ); 

main() 

{ long fib; int n; 

printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n); 

fib=fun(n); 

printf("fib = %d\n\n",fib); 

解题思路: 

第一处:switch后有多余的分号。 

第二处:case 1后没有返回语句,也应该为return 1;。所以应改为:case 1: return 1; case 2:return 1;。 

*************************************************** 

某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。 

例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。 

注意部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

 

#define N 8 

typedef struct 

{ char num[10]; 

double s[N]; 

double ave; 

} STREC; 

void fun(STREC *a) 

main() 

{ STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5}; 

int i; 

fun( &s ); 

printf("The %s's student data:\n", s.num); 

for(i=0;i<N; i++) 

printf("%4.1f\n",s.s[i]); 

printf("\nave=%7.3f\n",s.ave); 

NONO(); 

解题思路: 

本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。 

参考答案: 

void fun(STREC *a) 

int i ; 

for(i = 0 ; i < N ; i++) 

a->ave = a->ave + a->s[i] ; 

a->ave /= N ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多