第74套:
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#define N 8 
typedef struct 
{ int num; 
int year,month,day ; 
}STU; 
int fun(STU *std, STU *k, int year) 
{ int i,n=0; 
for (i=0; i<N; i++) 
if( ___1___==year) 
k[n++]= ___2___; 
return (___3___); 
} 
main() 
{ STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15}, 
{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}}; 
STU k[N]; int i,n,year; 
printf("Enter a year : "); scanf("%d",&year); 
n=fun(std,k,year); 
if(n==0) 
printf("\nNo person was born in %d \n",year); 
else 
{ printf("\nThese persons were born in %d \n",year); 
for(i=0; i<n; i++) 
printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day); 
} 
} 
解题思路:
 本题是从给定的人员数据中找出年龄相同的记录存入k中,并返回符合条件的人数。
 第一处:断结构变量中的编号year是否相等,所以应填:std[i].year。
 第二处:把符合条件的记录依次存入实参k中,所以应填:std[i]。
 第三处:返回符合满足条件的人数,所以应填:n。
给定程序MODI1.C的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。
 例如,若输入整数:2310,则应输出:2、3、5、7、11。
 请改正程序中的语法错误,使程序能得出正确的结果。
 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
IsPrime ( int n ); 
{ int i, m; 
m = 1; 
for ( i = 2; i < n; i++ ) 
if !( n%i ) 
{ m = 0; break ; } 
return ( m ); 
} 
main( ) 
{ int j, k; 
printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", 
&k ); 
printf( "\n\nThe prime factor(s) of %d is( are ):", k ); 
for( j = 2; j <= k; j++ ) 
if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n %4d", j ); 
printf("\n"); 
} 
解题思路:
 第一处:函数定义的行尾有多余的分号。
 第二处:条件判断缺少圆括号。
已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a 中。请编写函数 fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
 注意: 部分源程序存在文件PROG1.C中。
 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
 你编写的若干语句。
 给定源程序:
#include <stdio.h> 
#include <string.h> 
#define N 10 
typedef struct ss 
{ char num[10]; int s; } STU; 
fun( STU a[], STU *s ) 
{ 
} 
main ( ) 
{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, 
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ; 
int i; 
printf("***** The original data *****\n"); 
for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s); 
fun ( a, &m ); 
printf ("***** THE RESULT *****\n"); 
printf ("The top : %s , %d\n",m.num, m.s); 
NONO( ); 
} 
解题思路:
 本题考察学生在一组记录中找出最高分。我们使用for循环语句来解决这个问题。
 参考答案:
fun( STU a[], STU *s ) 
{ 
int i, max = a[0].s, j = 0; 
for(i = 1 ; i < N ; i++) 
if(max < a[i].s) { 
j = i ; 
max = a[i].s ; 
} 
*s = a[j] ; 
}