第50套:
给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元
素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有
下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为
1 0 0
6 5 0
10 14 9
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 4
/**********found**********/
void fun(int (*t)___1___ )
/* 宏为世纪教育 atc */
{ int i, j;
for(i=1; i<N; i++)
{ for(j=0; j<i; j++)
{
/**********found**********/
___2___ =t[i][j]+t[j][i];
/**********found**********/
___3___ =0;
}
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
printf("\nThe original array:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0; i<N; i++)
{ for(j=0; j<N; j++) printf("%2d ",t[i][j]);
printf("\n");
}
}
解题思路:
第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。
c编程必背100题第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。
第三处:右上三角元素置为0,所以应填:t[j][i]。
***************************************************
给定程序MODI1.C中函数fun的功能是:计算函数
F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。
例如,当x的值为9、y的值为11、z的值为15时,函数值为 -3.50。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
/************found************/
#define FU(m,n) (m/n)
float fun(float a,float b,float c)
{ float value;
value=FU(a+b,a-b)+FU(c+b,c-b);
/************found************/
Return(Value);
}
/* 宏为世纪教育 atc */
main()
{ float x,y,z,sum;
printf("Input x y z: ");
scanf("%f%f%f",&x,&y,&z);
printf("x=%f,y=%f,z=%f\n",x,y,z);
if (x==y||y==z){printf("Data error!\n");exit(0);}
sum=fun(x,y,z);
printf("The result is : %5.2f\n",sum);
}
解题思路:
第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。
第二处:return错写成Return,变量value错写成Value。
***************************************************
规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字
符串中的前导*号全部删除,中间和尾部的*号不删除。
例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内
容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include <stdio.h>
void fun( char *a )
{
}
main()
{ char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
NONO();
}
解题思路:
/* 宏为世纪教育 atc */
本题是考察字符串的操作。
1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。
2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。
3. 最后给字符串a加上结束符。
参考答案:
void fun( char *a )
{
int j=0;
char *p = a ;
while(*p == '*') p++ ;
while(*p) {
a[j++] = *p ;
p++;
}
a[j]=0 ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第51套:
给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,
作为函数值返回。为便于统计,规定各单词之间用空格隔开。
例如,形参s所指的字符串为:This is a C language program.,函数
的返回值为6。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
/* 宏为世纪教育 atc */
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
int fun(char *s)
{ int n=0, flag=0;
while(*s!='\0')
{ if(*s!=' ' && flag==0) {
/**********found**********/
__1__ ; flag=1;}
/**********found**********/
if (*s==' ') flag= __2__ ;
/**********found**********/
__3__ ;
}
return n;
}
main()
{ char str[81]; int n;
printf("\nEnter a line text:\n"); gets(str);
n=fun(str);
printf("\nThere are %d words in this text.\n\n",n);
}
解题思路:
本题是统计字符串中包含的单词个数。
第一处:单词个数用变量n来统计,当当前字母不是空格且flag状态标志为0时,则单词数
就加1,将状态标志flag置为1,所以应填:n++。
第二处:当当前字符是空格时,flag状态标志置0,所以应填:0。
第三处:到字符串下一个位置,所以应填:s++。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:从n(形参)个学生的成绩中统计出低
于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单
元中。
例如,若输入 8 名学生的成绩:80.5 60 72 90.5 98 51.5 88 64
则低于平均分的学生人数为: 4 (平均分为:75.5625 )。
请改正程序中的错误,使它能统计出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
#define N 20
int fun ( float *s, int n, float *aver )
{ float ave, t = 0.0 ;
int count = 0, k, i ;
for ( k = 0 ; k < n ; k++ )
/**************found**************/
t = s[k] ;
ave = t / n ;
for ( i = 0 ; i < n ; i++ )
/* 宏为世纪教育 atc */
if ( s[ i ] < ave ) count++ ;
/**************found**************/
*aver = Ave ;
return count ;
}
main()
{ float s[30], aver ;
int m, i ;
printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ;
printf ( "\nPlease enter %d mark :\n ", m ) ;
for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ;
printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) );