更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入--------------》跳转接口
更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入--------------》跳转接口
第99套:
函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。
例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 9
void fun(int a[], int n)
{ int i, t, p;
p = (n%2==0)?n/2:n/2+___1___;
for (i=0; i<n/2; i++)
{
t=a[i];
a[i] = a[p+___2___];
___3___ = t;
}
}
main()
{ int b[N]={1,2,3,4,5,6,7,8,9}, 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");
}
解题思路:
第一处:如果n是奇数,则中间的元素不动,所以应填:1。
第二处:使用for循环语句来交换数组元素的值,所以应填:i。
第三处:使用中间变量t来交换的,所以应填:t。
给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在 a中,最小的放在c中,中间的放在b中。
例如,输入的数为:55 12 34,
输出结果应当是:a=55.0 , b=34.0 , c=12.0。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
void fun(float *a,float *b,float *c)
{
float *k;
if( *a<*b )
{ k=*a; *a=*b; *b=k; }
if( *a>*c )
{ k=*c; *c=*a; *a=k; }
if( *b<*c )
{ k=*b; *b=*c; *c=k; }
}
main()
{ float a,b,c;
printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
fun(&a,&b,&c);
printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
}
解题思路:
第一处:在函数fun体中,k是一个浮点型变量,所以应改为:float k;。
第二处:三个数比较大小,第1个条件是第1个比第2个小,则交换。第3个条件是第2个比第3个小,则也交换。第2个条件是应该第1和第3个小,则交换就符合题意了,所以应改为:
if(*a<*c)。
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
int fun( STREC *a, STREC *b )
{
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85}, {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}, {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
STREC h[N];
int i,n;FILE *out ;
n=fun( s,h );
printf("The %d highest score :\n",n);
for(i=0;i<n; i++)
printf("%s %4d\n",h[i].num,h[i].s);
printf("\n");
out = fopen("c:\\test\\out.dat","w") ;
fprintf(out, "%d\n",n);
for(i=0;i<n; i++)
fprintf(out, "%4d\n",h[i].s);
fclose(out);
}
解题思路:
本题是找出最高成绩,再把N名学生的成绩等于最高成绩的记录存入b所指的数组中。具体
操作请看答案程序中的说明。
参考答案:
int fun( STREC *a, STREC *b )
{
int i, max = a[0].s, n=0;
for(i = 1; i < N; i++)
if(max < a[i].s) max = a[i].s ; /* 找出最高成绩 */
for(i = 0; i < N; i++)
if(max==a[i].s) b[n++] = a[i] ; /* 找相等的最高成绩并存入数组b中 */
return n; /* 返回符合条件的人数 */
}