第60套:
给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。
 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
typedef struct 
{ int num; 
char name[10]; 
}PERSON; 
void fun(PERSON ___1___) 
{ 
___2___ temp; 
if(std[0].num>std[1].num) 
{ temp=std[0]; std[0]=std[1]; std[1]=temp; } 
if(std[0].num>std[2].num) 
{ temp=std[0]; std[0]=std[2]; std[2]=temp; } 
if(std[1].num>std[2].num) 
{ temp=std[1]; std[1]=std[2]; std[2]=temp; } 
} 
main() 
{ PERSON std[ ]={ 5,"Zhanghu",2,"WangLi",6,"LinMin" }; 
int i; 
fun(___3___); 
printf("\nThe result is :\n"); 
for(i=0; i<3; i++) 
printf("%d,%s\n",std[i].num,std[i].name); 
} 
解题思路:
 本题是要求对结构体数组中的三个元素按num成员升序排列。
 第一处:由于在函数体fun中,已经使用了std变量,所以应填:*std。
 第二处:由于temp是存放交换记录的中间变量,所以应填:PERSON。
 第三处:函数的调用,所以应填:std。
给定程序MODI1.C中函数fun的功能是:将 m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。
 例如:把3个串:“abc”,“CD”,"EF"连接起来,结果是 “abcCDEF”。
 请改正程序中的错误,使它能得出正确的结果。
 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#include <string.h> 
int fun ( char str[][10], int m, char *pt ) 
{ 
Int k, q, i ; 
for ( k = 0; k < m; k++ ) 
{ q = strlen ( str [k] ); 
for (i=0; i<q; i++) 
pt[i] = str[k,i] ; 
pt += q ; 
pt[0] = 0 ; 
} 
} 
main( ) 
{ int m, h ; 
char s[10][10], p[120] ; 
printf( "\nPlease enter m:" ) ; 
scanf("%d", &m) ; gets(s[0]) ; 
printf( "\nPlease enter %d string:\n", m ) ; 
for ( h = 0; h < m; h++ ) gets( s[h]) ; 
fun(s, m, p) ; 
printf( "\nThe result is : %s\n", p) ; 
} 
解题思路:
 第一处:保留字int错写成Int。
 第二处:字符数组的字符串书写格式错误。
程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数
 fun( int a[][N]),函数的功能是:使数组左下三角元素中的值全部置成0 。
 例如:a 数组中的值为 | 1 9 7 | | 0 9 7 | a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 0 0 8 | | 4 5 6 | | 0 0 0 |
 注意: 部分源程序存在文件PROG1.C中。
 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
 给定源程序:
#include <stdio.h> 
#include <stdlib.h> 
#define N 5 
int fun ( int a[][N] ) 
{ 
} 
main ( ) 
{ int a[N][N], i, j; 
printf("***** The array *****\n"); 
for ( i =0; i<N; i++ ) 
{ for ( j =0; j<N; j++ ) 
{ a[i][j] = rand()%10; printf( "%4d", a[i][j] ); } 
printf("\n"); 
} 
fun ( a ); 
printf ("THE RESULT\n"); 
for ( i =0; i<N; i++ ) 
{ for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] ); 
printf("\n"); 
} 
NONO( ); 
} 
解题思路:
 本题是利用两重循环给二维数组左下三角元素中的值全部置成0。
 参考答案:
int fun ( int a[][N] ) 
{ 
int i, j; 
for(i = 0 ; i < N ; i++) 
for(j = 0 ; j <= i; j++) 
a[i][j] = 0 ; 
}