本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055
考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题
第51套:
给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,
作为函数值返回。为便于统计,规定各单词之间用空格隔开。
例如,形参s所指的字符串为:This is a C language program.,函数
的返回值为6。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
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
#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++ )
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 ) );
printf( "Ave = %f\n", aver ) ;
}
解题思路:
第一处:应求累加和,而不赋值,所以应改为t+=s[k];。
第二处:ave不需要取地址,直接赋给*aver就可以了。
***************************************************
请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所
指的存储单元中。
例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777
则输出结果为: 6, 980
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
int fun(int *s, int t, int *k)
{
}
main( )
{
int a[10]={876,675,896,101,301,401,980,431,451,777}, k ;
fun(a, 10, &k) ;
printf("%d, %d\n", k, a[k]) ;
NONO( ) ;
}
解题思路:
本题是考察考生如何在指定的数组找出最大元素值的下标,通过形参*k返回到主程序中。
给出的程序是使用for循环语句进行处理的,在循环之前,首先把数组的第一个元素值赋给
最大值变量max,位置pos为0,然后通过循环依次判断下一元素值是否大于最大值max,如果大
于,那么把这个数重新赋给max,位置i赋给pos,循环结果,即可得到最大值的位置pos,最后
执行语句*k=pos就可以实现返回了。
参考答案:
int fun(int *s, int t, int *k)
{
int i, pos = 0, max = *s ;
for(i = 1 ; i < t ; i++) {
if(max < *(s + i)) {
max = *(s + i) ;
pos = i ;
}
}
*k = pos ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第52套:
给定程序中,函数fun的功能是:将N×N矩阵中元素的值按列右移1个位置,
右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为
3 1 2
6 4 5
9 7 8
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define N 4
void fun(int (*t)[N])
{ int i, j, x;
/**********found**********/
for(i=0; i<___1___; i++)
{
/**********found**********/
x=t[i][___2___] ;
for(j=N-1; j>=1; j--)
t[i][j]=t[i][j-1];
/**********found**********/
t[i][___3___]=x;
}
}
main()
{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
printf("The original array:\n");
for(i=0; i
{ for(j=0; jprintf("\n");
}
fun(t);
printf("\nThe result is:\n");
for(i=0; i
{ for(j=0; jprintf("\n");
}
}
解题思路:
第一处:函数fun是对N×N矩阵进行操作,for循环的终止值为N。
第二处:把最后一列的元素值赋值给临时变量x保存用来交换,所以应填:N-1。
第三处:第1列元素值使用x替换,由于C语言的下标是从0开始的,所以应填:0。
***************************************************
例如,若q的值为: 50.0,则函数值为: 49.394948。
请改正程序中的错误,使程序能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun( double q )
{ int n; double s,t;
n = 2;
s = 2.0;
while (s<=q)
{
t=s;
/************found************/
s=s+(n+1)/n;
n++;
}
printf("n=%d\n",n);
/************found************/
return s;
}
main ( )
{
printf("%f\n", fun(50));
}
解题思路:
第一处:如果两个整数类型相除,结果仍为整数,所以必须转换其中一个数的类型,所以
应改为:s+=(float)(n+1)/n;。
第二处:返回结果错误,应改为:return t;。
***************************************************
编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果
由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
例如:当t = 1000时,函数值为:1597。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
int fun( int t)
{
}
main() /* 主函数 */
{ int n;
n=1000;
printf("n = %d, f = %d\n",n, fun(n));
NONO();
}
解题思路:
本题是考察考生用递推算法来求出斐波那契数列中每项的值。给出的程序就是用变量f、f0
和f1来表示递推的过程,给变量f0和f1最初分别置数列中第1项和第2项的值0和1,然后进入循
环,执行语句f=f0+f1;将所得和值存入f中,这就是数列的第3项,把f1的值移入f0中,将f的
值移入f1中,为求数列的下一列作好准备;接着进入下一次循环,通过语句f=f0+f1求得数列的
第4项,不断重复以上步骤,每重复一次就依次求得数列的下一项,直至某项满足要为止。
参考答案:
int fun( int t)
{
int f0 = 0, f1 = 1, f ;
do {
f = f0 + f1 ;
f0 = f1 ;
f1 = f ;
} while(f < t) ;
return f ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第53套:
函数fun的功能是:计算
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
double fun(double x)
{ double f, t; int n;
f = 1.0 + x;
/**********found**********/
t = ___1___;
n = 1;
do {
n++;
/**********found**********/
t *= (-1.0)*x/___2___;
f += t;
}
/**********found**********/
while (___3___ >= 1e-6);
return f;
}
main()
{ double x, y;
x=2.5;
y = fun(x);
printf("\nThe result is :\n");
printf("x=%-12.6f y=%-12.6f\n", x, y);
}
解题思路:
第一处:根据公式可知,变量t的值为x。
第二处:根据公式可知,此处应该除以n,所以应填:n。
第三处:根据试题中条件的要求,所以应填:fabs(t)。
***************************************************
给定程序MODI1.C中函数fun的功能是: 求整数x的y次方的低3位值。例如,整
数5的6次方为15625, 此值的低3位值为625。
请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
long fun(int x,int y,long *p )
{ int i;
long t=1;
/**************found**************/
for(i=1; i
t=t*x;
*p=t;
/**************found**************/
t=t/1000;
return t;
}
main()
{ long t,r; int x,y;
printf("\nInput x and y: "); scanf("%ld%ld",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t );
}
解题思路:
第一处:错误在for循环语句上,根据试题要求,终止条件应该是i<=y。
第二处:要取低3位的值时,应模1000取余数,而不是整除1000取商。
***************************************************
例如, 在主函数中从键盘给x输入0.21后,输出为:s=1.100000。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的
花括号中填入你编写的若干语句。
给定源程序:
#include
#include
double fun(double x)
{
}
main()
{ double x,s;
printf("Input x: "); scanf("%lf",&x);
s=fun(x);
printf("s=%f\n",s);
NONO();
}
解题思路:
本题是根据给定的公式进行计算。具体操作请看答案程序中的说明。
参考答案:
double fun(double x)
{
int n=1; /* 循环计数*/
double sn=1; /* 累计数*/
double xn=1,xn1=0; /*x的n值,以及x的n-1值;*/
while(fabs(xn-xn1)>=0.000001)/*绝对值是否满足条件*/
{
xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/
n+=1;
sn+=xn; /*sn累加上xn*/
}
return(sn);
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第54套:
给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据
域中值之和作为函数值返回。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define N 8
typedef struct list
{ int data;
struct list *next;
} SLIST;
SLIST *creatlist(int *);
void outlist(SLIST *);
int fun( SLIST *h)
{ SLIST *p; int s=0;
p=h->next;
while(p)
{
/**********found**********/
s+= p->___1___;
/**********found**********/
p=p->___2___;
}
return s;
}
main()
{ SLIST *head;
int a[N]={12,87,45,32,91,16,20,48};
head=creatlist(a); outlist(head);
/**********found**********/
printf("\nsum=%d\n", fun(___3___));
}
SLIST *creatlist(int a[])
{ SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i
{ q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i]; p->next=q; p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{ SLIST *p;
p=h->next;
if (p==NULL) printf("The list is NULL!\n");
else
{ printf("\nHead ");
do
{ printf("->%d", p->data); p=p->next; }
while(p!=NULL);
printf("->End\n");
}
}
解题思路:
本题是计算出带有头结点的单向链表中各结点数据域中值之和。
第一处:累加数据域中的值,所以应填:data。
第二处:指定p的下一个指针,所以应填:next。
第三处:函数调用,在主函数中已经给出了head,所以应填:head。
***************************************************
给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符
串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此
处,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为:"abcdabfab",t1所指子串中的内容为:
"ab",t2所指子串中的内容为:"99"时, 结果在w所指的数组中的内容应为:
"99cd99f99"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
int fun (char *s, char *t1, char *t2 , char *w)
{
int i; char *p , *r, *a;
strcpy( w, s );
while ( *w )
{ p = w; r = t1;
/************found************/
while ( r )
if ( *r == *p ) { r++; p++; }
else break;
if ( *r == '\0' )
{ a = w; r = t2;
while ( *r ){
/************found************/
*a = *r; a++; r++
}
w += strlen(t2) ;
}
else w++;
}
}
main()
{
char s[100], t1[100], t2[100], w[100];
printf("\nPlease enter string S:"); scanf("%s", s);
printf("\nPlease enter substring t1:"); scanf("%s", t1);
printf("\nPlease enter substring t2:"); scanf("%s", t2);
if ( strlen(t1)==strlen(t2) ) {
fun( s, t1, t2, w);
printf("\nThe result is : %s\n", w);
}
else printf("Error : strlen(t1) != strlen(t2)\n");
}
解题思路:
第一处:判断字符串当前字符是否是字符串结束符,所以应改为:while(*r)。
第二处:语句后缺少分号。
***************************************************
函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符
形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为:"ABCDEFGHIJK",
在t所指数组中的内容应是:"BDFHJ"。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
void fun(char *s, char t[])
{
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
解题思路:
本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问
题。
参考答案:
void fun(char *s, char t[])
{
int i, j = 0 ;
for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ;
t[j] = 0 ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第55套:
给定程序中,函数fun的功能是:判断形参s所指字符串是否是"回文"
(Palindrome),若是,函数返回值为1;不是,函数返回值为0。"回文"
是正读和反读都一样的字符串(不区分大小写字母)。
例如,LEVEL和Level是"回文",而LEVLEV不是"回文"。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#include
int fun(char *s)
{ char *lp,*rp;
/**********found**********/
lp= __1__ ;
rp=s+strlen(s)-1;
while((toupper(*lp)==toupper(*rp)) && (lp
/**********found**********/
lp++; rp __2__ ; }
/**********found**********/
if(lp
else return 1;
}
main()
{ char s[81];
printf("Enter a string: "); scanf("%s",s);
if(fun(s)) printf("\n\"%s\" is a Palindrome.\n\n",s);
else printf("\n\"%s\" isn't a Palindrome.\n\n",s);
}
解题思路:
本题是判断字符串是否是“回文”。
第一处:根据函数体fun中,对变量lp的使用可知,lp应指向形参s,所以应填:s。
第二处:rp是指向字符串的尾指针,当每做一次循环rp指向就要指向前一个字符,所以应
填:--。
第三处:当lp和rp相等时,则表示字符串是回文并返回1,否则就返回0,所以应填:return
0。
***************************************************
给定程序MODI1.C中fun函数的功能是:求出以下分数序列的前n项之和。
2 3 5 8 13 21
┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ……
1 2 3 5 8 13
和值通过函数值返回main函数。
例如,若 n = 5,则应输出: 8.391667。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/**************found**************/
fun (int n )
{ int a = 2, b = 1, c, k ;
double s=0.0 ;
for ( k = 1; k <= n; k++ )
{ s = s + 1.0 * a / b ;
/**************found**************/
c = a; a += b; b += c;
}
return(s) ;
}
main( )
{ int n = 5 ;
printf( "\nThe value of function is: %lf\n", fun ( n ) ) ;
}
解题思路:
第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要int或void
可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double或float等定义。
第二处:根据公式可知,在for循环内b的值应是c。
***************************************************
请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指
的数组中。例如,若输入17, 5,则应输出:19, 23, 29, 31, 37。函数fun中给
出的语句仅供参考。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun(int m, int k, int xx[])
{
/* 以下代码仅供参考 */
int i, j=1, t=m+1;
while(j<=k)
{
/* 以下完成判断素数,并存放到数组xx中 */
}
}
main()
{
int m, n, zz[1000] ;
printf( "\nPlease enter two integers:") ;
scanf("%d%d", &m, &n ) ;
fun( m, n, zz) ;
for( m = 0 ; m < n ; m++ )
printf("%d ", zz[m]) ;
printf("\n") ;
NONO( ) ;
}
解题思路:
本题是考察考生如何判断一个数是素数,再判断所求出的素数是否符合题义要求,如果符
合,则存入指定的数组xx中保存,最后由形参xx返回。
本题是用while循环语句分别求出5个符合题义的素数。其中,j是控制变量,m是所求素数
要大于这个数且还要紧靠这个数,k是所求素数的个数,j是当前所求第几个素数。其中while
循环体中的for循环语句是判断t是否是素数。
参考答案:
void fun(int m, int k, int xx[])
{
/* 以下代码仅供参考 */
int i, j=1, t=m+1;
while(j<=k)
{
/* 以下完成判断素数,并存放到数组xx中 */
for(i = 2 ; i < t; i++)
if(t % i==0) break;
if(i==t) {
xx[j-1] = i;
j++;
}
t++;
}
}
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第56套:
给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到
文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显
示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#include
void WriteText(FILE *);
void ReadText(FILE *);
main()
{ FILE *fp;
if((fp=fopen("myfile4.txt","w"))==NULL)
{ printf(" open fail!!\n"); exit(0); }
WriteText(fp);
fclose(fp);
if((fp=fopen("myfile4.txt","r"))==NULL)
{ printf(" open fail!!\n"); exit(0); }
ReadText(fp);
fclose(fp);
}
/**********found**********/
void WriteText(FILE ___1___)
{ char str[81];
printf("\nEnter string with -1 to end :\n");
gets(str);
while(strcmp(str,"-1")!=0) {
/**********found**********/
fputs(___2___,fw); fputs("\n",fw);
gets(str);
}
}
void ReadText(FILE *fr)
{ char str[81];
printf("\nRead file and output to screen :\n");
fgets(str,81,fr);
while( !feof(fr) ) {
/**********found**********/
printf("%s",___3___);
fgets(str,81,fr);
}
}
解题思路:
本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,
使程序能运行出正确的结果。
第一处:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("\n",fw);分析可
知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或fw[]。
第二处:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入
的内容已存入字符串str变量中,因此,本处应填写str。
第三处:要把已存入文件中的内容,再从文件中读出且已存入字符串变量str中,最后在屏
幕显示出来,因此,此处应填写str。
***************************************************
给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位
上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:7531。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/************found************/
void fun (long s, long t)
{ long sl=10;
*t = s % 10;
while ( s > 0)
{ s = s/100;
*t = s * sl + *t;
/************found************/
\TAB sl = sl*100;
}
}
main()
{ long s, t;
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
解题思路:
第一处:在函数fun中使用了*t,但在函数定义时没有使用*t,所以应改为:void fun(long
s,long *t)。
第二处:每循环一次,sl的值就乘以10,所以应改为:sl=sl*10;。
***************************************************
函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上, b数的十位
和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12时,调用该函数后,c=1524。
注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun(int a, int b, long *c)
{
}
main()
{ int a,b; long c;
printf("Input a, b:");
scanf("%d,%d", &a, &b);
fun(a, b, &c);
printf("The result is: %ld\n", c);
NONO();
}
解题思路:
本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
取a十位数字的方法:a/10
取a个位数字的方法:a
参考答案:
void fun(int a, int b, long *c)
{
*c=(b/10)*1000+(a)*100+(b)*10+(a/10);
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第57套:
函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把
形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放
在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a
所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动
后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数
据的个数。
注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大
值的下标。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
# include
#define N 9
void fun(int a[], int n)
{ int i,j, max, min, px, pn, t;
for (i=0; i
{
/**********found**********/
max = min = ___1___;
px = pn = i;
for (j=i+1; j
/**********found**********/
if (max<___2___)
{ max = a[j]; px = j; }
/**********found**********/
if (min>___3___)
{ min = a[j]; pn = j; }
}
if (pn != i)
{ t = a[i]; a[i] = min; a[pn] = t;
if (px == i) px =pn;
}
if (px != i+1)
{ t = a[i+1]; a[i+1] = max; a[px] = t; }
}
}
main()
{ int b[N]={9,1,4,2,3,6,5,8,7}, i;
printf("\nThe original data :\n");
for (i=0; iprintf("\n");
fun(b, N);
printf("\nThe data after moving :\n");
for (i=0; iprintf("\n");
}
解题思路:
第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填:
a[i]。
第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]。
第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。
***************************************************
给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n
项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……
例如,若给n输入7,该项的斐波拉契数值为:13。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include
long fun(int g)
{
/**********found**********/
switch(g);
{ case 0: return 0;
/**********found**********/
case 1 ;case 2 : return 1 ;
}
return( fun(g-1)+fun(g-2) );
}
main()
{ long fib; int n;
printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n);
fib=fun(n);
printf("fib = %d\n\n",fib);
}
解题思路:
第一处:switch后有多余的分号。
第二处:case 1后没有返回语句,也应该为return 1;。所以应改为:case 1: return 1; case
2:return 1;。
***************************************************
某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已
在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的
ave成员中。
例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当
是:78.875。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编
写的若干语句。
给定源程序:
#include
#define N 8
typedef struct
{ char num[10];
double s[N];
double ave;
} STREC;
void fun(STREC *a)
{
}
main()
{ STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
int i;
fun( &s );
printf("The %s's student data:\n", s.num);
for(i=0;i
printf("%4.1f\n",s.s[i]);
printf("\nave=%7.3f\n",s.ave);
NONO();
}
解题思路:
本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。
参考答案:
void fun(STREC *a)
{
int i ;
for(i = 0 ; i < N ; i++)
a->ave = a->ave + a->s[i] ;
a->ave /= N ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第58套:
给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制
到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个
字符串复制到形参t所指字符数组中。
例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数
组中的字符串应为:defgh。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define N 80
void fun(char *s, int n, char *t)
{ int len,i,j=0;
len=strlen(s);
/**********found**********/
if(n>=len) strcpy(__1__);
else {
/**********found**********/
for(i=len-n; i<=len-1; i++) t[j++]= __2__ ;
/**********found**********/
t[j]= __3__ ;
}
}
main()
{ char s[N],t[N]; int n;
printf("Enter a string: ");gets(s);
printf( "Enter n:"); scanf("%d",&n);
fun(s,n,t);
printf("The string t : "); puts(t);
}
解题思路:
本题是根据要求来复制字符串。
第一处:当给定的长度n大于该字符串s的长度,那么把该字符串直接拷贝到t就可以了,所
以应填:t,s。
第二处:使用for循环语句,把最右边n个字符依次添加到t中,所以应填:s[i]。
第三处:字符串操作结束,需要到t加一个字符串结束符,所以应填:'\0'。
***************************************************
给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,
并作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
int fun(int m)
{ int i, k ;
for (i = m + 1 ; ; i++) {
for (k = 2 ; k < i ; k++)
/**************found**************/
if (i % k != 0)
break ;
/**************found**************/
if (k < i)
return(i);
}
}
void main()
{
int n ;
n = fun(20) ;
printf("n=%d\n", n) ;
}
解题思路:
第一处:判断素数的条件是一个数i除自身或1除外不被任何数k整除的数,如果一个数i被
另一个数k取模,模值等于零,那么这个不是素数并退出循环体,所以应改为if(i%k==0)。
第二处:如果i不被循环中任一个k值不整除,那么循环结束后k的值应该等于i,所以应改
为if(k==i)或if(k>=i)也可以。
***************************************************
请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从
小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun ( int x, int pp[], int *n )
{
}
main( )
{ int x, aa[1000], n, i ;
printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ;
fun(x, aa, &n ) ;
for( i = 0 ; i < n ; i++ )
printf("%d ", aa[i]) ;
printf("\n") ;
NONO( ) ;
}
解题思路:
本题是求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,
这些除数的个数通过形参n返回。
参考答案:
void fun ( int x, int pp[], int *n )
{
int i;
*n=0;
for(i=1; i <= x; i++)
if((x % i== 0) && (i % 2)) pp[(*n)++]=i;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第59套:
给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最
小的那个元素,若没有符合条件的元素则输出相应信息。
例如,有下列矩阵:
1 2 13 4
7 8 10 6
3 5 9 7
程序执行结果为:find: a[2][2]=9
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define M 3
#define N 4
void fun(int (*a)[N])
{ int i=0,j,find=0,rmax,c,k;
while( (i
{ rmax=a[i][0]; c=0;
for(j=1; j
if(rmax
/**********found**********/
rmax=a[i][j]; c= __1__ ; }
find=1; k=0;
while(k
/**********found**********/
if (k!=i && a[k][c]<=rmax) find= __2__ ;
k++;
}
if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);
/**********found**********/
__3__ ;
}
if(!find) printf("not found!\n");
}
main()
{ int x[M][N],i,j;
printf("Enter number for array:\n");
for(i=0; i
for(j=0; j
printf("The array:\n");
for(i=0; i
{ for(j=0; j
}
fun(x);
}
解题思路:
本题是在矩阵中找出在行上最大、在列上最小的那个元素。
第一处:找出行上最大的数,并该位置j(列)保存在c中,所以应填:j。
第二处:使用while循环语句和控制变量find,如果该数不是列是最小数,那么把find置0,
所以应填:0。
第三处:i是while的控制变量,所以每做一次循环,该数均要加1,所以应填:i++。
***************************************************
给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的
值。
1 1 1
t = 1 - ----- - ----- - …… - -----
2*2 3*3 m*m
例如,若 m 中的值为: 5,则应输出: 0.536389。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun ( int m )
{ double y = 1.0 ;
int i ;
/**************found**************/
for(i = 2 ; i < m ; i++)
/**************found**************/
y -= 1 /(i * i) ;
return( y ) ;
}
main( )
{ int n = 5 ;
printf( "\nThe result is %lf\n", fun ( n ) ) ;
}
解题思路:
第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)。
第二处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改
为y-=1./(i*i)。
***************************************************
m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均
分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,
函数返回的人数应该是4, below中的数据应为: 10、20、30、40。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
int fun(int score[], int m, int below[])
{
}
main( )
{ int i, n, below[9] ;
int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
n = fun(score, 9, below) ;
printf( "\nBelow the average score are: " ) ;
for (i = 0 ; i < n ; i++) printf("%d ", below[i]) ;
NONO() ;
}
解题思路:
本题是计算平均成绩,再把低于平均成绩的分数存入依次数组below中。
参考答案:
int fun(int score[], int m, int below[])
{
float av=0.0 ;
int i, j=0 ;
for(i=0; i
av /= m;
for(i=0; i
if(av>score[i]) below[j++]=score[i];
return j;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第60套:
给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按
num成员进行升序排列。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
typedef struct
{ int num;
char name[10];
}PERSON;
/**********found**********/
void fun(PERSON ___1___)
{
/**********found**********/
___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;
/**********found**********/
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
#include
int fun ( char str[][10], int m, char *pt )
{
/************found************/
Int k, q, i ;
for ( k = 0; k < m; k++ )
{ q = strlen ( str [k] );
for (i=0; i
/************found************/
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
#include
#define N 5
int fun ( int a[][N] )
{
}
main ( )
{ int a[N][N], i, j;
printf("***** The array *****\n");
for ( i =0; i
{ for ( j =0; j
{ a[i][j] = rand(); printf( "M", a[i][j] ); }
printf("\n");
}
fun ( a );
printf ("THE RESULT\n");
for ( i =0; i
{ for ( j =0; 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 ;
} |