二级C语言题库SLYY 下载本文

}

a[j]=0;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第38套:

函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、

a[1]、a[2]、??中,把偶数从数组中删除,奇数个数通过函数值返回。例如: 若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a 所指数组中的数据为:9、1、3、5、7,返回值为5。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结

果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include <stdio.h>

#define N 9

int fun(int a[], int n)

{ int i,j;

j = 0;

for (i=0; i<n; i++)

/**********found**********/

if (a[i]%2==___1___)

{

/**********found**********/

a[j] = a[i]; ___2___;

}

/**********found**********/

return ___3___;

}

main()

{ int b[N]={9,1,4,2,3,6,5,8,7}, i, n;

printf("\nThe original data :\n");

for (i=0; i<N; i++) printf("%4d ", b[i]);

printf("\n");

n = fun(b, N);

printf("\nThe number of odd : %d \n", n);

printf("\nThe odd number :\n");

for (i=0; i<n; i++) printf("%4d ", b[i]);

printf("\n");

}

解题思路:

第一处:判断a[i]是否是奇数,若是,则仍保留在原数组中a[j],所以应填:1。

第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:j++。 第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j。

***************************************************

给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数, 并作为函数值返回。

例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1 /* 宏为世纪教育 www.greatc.cn */

和num2分别输入27和81,则输出的最大公约数为27。

请改正程序中的错误,使它能得出正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

给定源程序:

#include <stdio.h>

int fun(int a,int b)

{ int r,t;

if(a<b) {

/************found************/

t=a; b=a; a=t;

}

r=a%b;

while(r!=0)

{ a=b; b=r; r=a%b; }

/************found************/

return(a);

}

main()

{ int num1, num2,a;

printf("Input num1 num2: "); scanf("%d%d",&num1,&num2);

printf("num1= %d num2= %d\n\n",num1,num2);

a=fun(num1,num2);

printf("The maximun common divisor is %d\n\n",a);

}

解题思路:

第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。

第二处:返回值错误,应改为:return(b);。

***************************************************

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除 字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内 容应当是:ABCDEFG。

注意: 部分源程序在文件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();

}

解题思路:

本题是考察字符串的操作。

1. 利用循环扫描字符串中所有的字符是否是'*',如果不是'*',则把这些字符存放字符串 a首地址开始的位置上。

2. 最后给字符串a加上结束符。

参考答案:

void fun( char *a )

{

int j =0 ;

char *p=a;

while(*p) {

if(*p != '*') a[j++]=*p ;

p++ ;

}

a[j]=0;

}

※※※※※※※※※※※※※※※※※※※※※※※※※

第39套:

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长

超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符 串,且串长小于M。

请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

给定源程序:

#include <stdio.h>

#include <string.h>

#define N 5

#define M 10

int fun(char (*ss)[M], int k)

{ int i,j=0,len;

/**********found**********/

for(i=0; i< __1__ ; i++)

{ len=strlen(ss[i]);

/**********found**********/

if(len<= __2__)

/**********found**********/

strcpy(ss[j++],__3__);

}

return j;

}

main()

{ char x[N][M]={"Beijing","Shanghai","Tianjing","Nanjing","Wuhan"};

int i,f;

printf("\nThe original string\n\n");

for(i=0;i<N;i++)puts(x[i]); printf("\n");

f=fun(x,7);