第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 ;
}