本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055
考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题
第71套:
给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序
前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为:asd123fgh5##43df,
处理后新字符串为:123543asdfgh##df。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#include
#include
char *fun(char *s)
{ int i, j, k, n; char *p, *t;
n=strlen(s)+1;
t=(char*)malloc(n*sizeof(char));
p=(char*)malloc(n*sizeof(char));
j=0; k=0;
for(i=0; i
{ if(isdigit(s[i])) {
/**********found**********/
p[__1__]=s[i]; j++;}
else
{ t[k]=s[i]; k++; }
}
/**********found**********/
for(i=0; i<__2__; i++) p[j+i]= t[i];
p[j+k]=0;
/**********found**********/
return __3__;
}
main()
{ char s[80];
printf("Please input: "); scanf("%s",s);
printf("\nThe result is: %s\n",fun(s));
}
解题思路:
第一处:函数中申请了两个内存空间,其p是存放数字字符串,t是存放非数字字符串,根
据条件可知,p依次存放数字字符串,其位置由j来控制,所以应填:j。
第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。
第三处:最后返回p的首地址即可,所以应填:p。
***************************************************
给定程序MODI1.C中函数fun的功能是:首先把b所指字符串中的字符按逆序存
放, 然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合
并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串
中的内容为"abcdefg",b所指字符串中的内容为"1234"时,c所指数组中的内容应
该为"a4b3c2d1efg";而当a所指字符串中的内容为"1234",b所指字符串中的内容
为"abcdefg"时,c所指数组中的内容应该为"1g2f3e4dcba"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
void fun( char *a, char *b, char *c )
{
int i , j; char ch;
i = 0; j = strlen(b)-1;
/************found************/
while ( i > j )
{ ch = b[i]; b[i] = b[j]; b[j] = ch;
i++; j--;
}
while ( *a || *b ) {
/************found************/
If ( *a )
{ *c = *a; c++; a++; }
if ( *b )
{ *c = *b; c++; b++; }
}
*c = 0;
}
main()
{
char s1[100],s2[100],t[200];
printf("\nEnter s1 string : ");scanf("%s",s1);
printf("\nEnter s2 string : ");scanf("%s",s2);
fun( s1, s2, t );
printf("\nThe result is : %s\n", t );
}
解题思路:
第一处:应该判断i是否小于j,所以应改为:while(i。
第二处:if错写成If。
***************************************************
函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删
除,s所指串中剩余的字符形成的新串放在t所指的数组中。
例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符C的ASCII码值为
奇数,在数组中的下标为偶数, 因此必须删除;而字符1的ASCII码值为奇数,在
数组中的下标也为奇数,因此不应当删除,其它依此类推。
最后t所指的数组中的内容应是"BDF12345"。
注意: 部分源程序存在文件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 = 0 ; i < strlen(s) ; i++)
if(!((i % 2) ==0 && (s[i] % 2))) t[j++] = s[i] ;
t[j] = 0 ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第72套:
给定程序中,函数fun的功能是计算下式
例如,若形参e的值为1e-3,函数的返回值2.735678。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun(double e)
{ int i; double s, x;
/**********found**********/
s=0; i=__1__;
x=1.0;
while(x>e){
/**********found**********/
__2__;
/**********found**********/
x=(2.0*i-1)/((__3__)*(2.0*i));
s=s+x;
}
return s;
}
main()
{ double e=1e-3;
printf("\nThe result is: %f\n",fun(e));
}
解题思路:
第一处:根据公式以及下面的程序,可以得出i应为0。
第二处:根据公式以及i的初值为0,所以应填:i++。
第三处:根据公式要求,所以应填:2.0*i。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:将s所指字符串的正序和反序进行连
接,形成一个新串放在t所指的数组中。
例如,当s所指字符串为:"ABCD" 时,则t所指字符串中的内容应
为:"ABCDDCBA"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
/************found************/
void fun (char s, char t)
{
int i, d;
d = strlen(s);
for (i = 0; i
for (i = 0; i
/************found************/
t[2*d-1] = '\0';
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
}
解题思路:
第一处:从函数体fun中可知,两个均为字符指针型变量,应改为:void fun (char *s, char
*t)。
第二处:字符串结束位置错误,应改为:t[2*d]=0;。
***************************************************
函数fun的功能是: 将s所指字符串中除了下标为奇数、同时ASCII值也为奇
数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所
指的数组中。
例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值
虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇
数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的
数组中的内容应是:"135"。
注意: 部分源程序存在文件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)
if(s[i] % 2) t[j++] = s[i] ;
t[j] = 0 ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第73套:
给定程序中,函数fun的功能是计算下式
例如:若形参e的值为1e-3,函数的返回值为0.551690。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun(double e)
{ int i, k; double s, t, x;
s=0; k=1; i=2;
/**********found**********/
x=__1__/4;
/**********found**********/
while(x __2__ e)
{ s=s+k*x;
k=k* (-1);
t=2*i;
/**********found**********/
x=__3__/(t*t);
i++;
}
return s;
}
main()
{ double e=1e-3;
printf("\nThe result is: %f\n",fun(e));
}
解题思路:
第一处:根据公式,首项应该是3.4,所以应填:3.。
第二处:当x大于e时,循环体才会运行,所以应填:>。
第三处:分子的值是2i+1,所以应填:2*i+1。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:求出以下分数序列的前n项之和。和
值通过函数值返回到main函数。
2 3 5 8 13 21
┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ……
1 2 3 5 8 13
例如,若n = 5,则应输出:8.391667。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/************found************/
fun ( int n )
{ int a, b, c, k; double s;
s = 0.0; a = 2; b = 1;
for ( k = 1; k <= n; k++ ) {
/************found************/
s = s + (Double)a / b;
c = a; 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等定义。
第二处:double的第1个字母错写成大写D。
***************************************************
请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的
值,并将此值返回调用函数。
注意: 部分源程序存在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#define M 4
fun (int a[][M])
{
}
main( )
{ int arr[2][M]={5,8,3,45,76,-4,12,82} ;
printf("max =%d\n", fun(arr)) ;
NONO( ) ;
}
解题思路:
本题是求出一个2×M整型二维数组中最大元素的值。
参考答案:
fun (int a[][M])
{
int i, j, max=a[0][0];
for(i=0; i<2; i++)
for(j=0; j
if(max
return max;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第74套:
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入
结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在
形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define N 8
typedef struct
{ int num;
int year,month,day ;
}STU;
int fun(STU *std, STU *k, int year)
{ int i,n=0;
for (i=0; i
/**********found**********/
if( ___1___==year)
/**********found**********/
k[n++]= ___2___;
/**********found**********/
return (___3___);
}
main()
{ STU std[N]={ {1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},
{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};
STU k[N]; int i,n,year;
printf("Enter a year : "); scanf("%d",&year);
n=fun(std,k,year);
if(n==0)
printf("\nNo person was born in %d \n",year);
else
{ printf("\nThese persons were born in %d \n",year);
for(i=0; i
printf("%d %d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);
}
}
解题思路:
本题是从给定的人员数据中找出年龄相同的记录存入k中,并返回符合条件的人数。
第一处:断结构变量中的编号year是否相等,所以应填:std[i].year。
第二处:把符合条件的记录依次存入实参k中,所以应填:std[i]。
第三处:返回符合满足条件的人数,所以应填:n。
***************************************************
给定程序MODI1.C的功能是:读入一个整数k(2≤k≤10000),打印它的所有质
因子(即所有为素数的因子)。
例如,若输入整数:2310,则应输出:2、3、5、7、11。
请改正程序中的语法错误,使程序能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
/************found************/
IsPrime ( int n );
{ int i, m;
m = 1;
for ( i = 2; i < n; i++ )
/************found************/
if !( n%i )
{ m = 0; break ; }
return ( m );
}
main( )
{ int j, k;
printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d",
&k );
printf( "\n\nThe prime factor(s) of %d is( are ):", k );
for( j = 2; j <= k; j++ )
if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n M", j );
printf("\n");
}
解题思路:
第一处:函数定义的行尾有多余的分号。
第二处:条件判断缺少圆括号。
***************************************************
已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a
中。请编写函数 fun,函数的功能是:找出成绩最高的学生记录,通过形参指针
传回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
#define N 10
typedef struct ss
{ char num[10]; int s; } STU;
fun( STU a[], STU *s )
{
}
main ( )
{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;
int i;
printf("***** The original data *****\n");
for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);
fun ( a, &m );
printf ("***** THE RESULT *****\n");
printf ("The top : %s , %d\n",m.num, m.s);
NONO( );
}
解题思路:
本题考察学生在一组记录中找出最高分。我们使用for循环语句来解决这个问题。
参考答案:
fun( STU a[], STU *s )
{
int i, max = a[0].s, j = 0;
for(i = 1 ; i < N ; i++)
if(max < a[i].s) {
j = i ;
max = a[i].s ;
}
*s = a[j] ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第75套:
给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按
长度由短到长进行排序。ss所指字符串数组中共有M个字符串,且串长。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define M 5
#define N 20
void fun(char (*ss)[N])
{ int i, j, k, n[M]; char t[N];
for(i=0; i
for(i=0; i
{ k=i;
/**********found**********/
for(j=___1___; j
/**********found**********/
if(n[k]>n[j]) ___2___;
if(k!=i)
{ strcpy(t,ss[i]);
strcpy(ss[i],ss[k]);
/**********found**********/
strcpy(ss[k],___3___);
n[k]=n[i];
}
}
}
main()
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i
printf("\n");
fun(ss);
printf("\nThe result :\n");
for(i=0; i
}
解题思路:
本题是要求按字符串的长短进行排序。
第一处:内循环赋初值,应填:i+1。
第二处:找出最短的一个长度,所以应填:m=j。
第三处:交换字符串,所以应填:t。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:判断ch中的字符是否与str所指串中
的某个字符相同; 若相同,什么也不做,若不同,则将其插在串的最后。
请改正程序中的错误,使它能进行正确的操作。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
/**********found**********/
void fun(char str, char ch )
{ while ( *str && *str != ch ) str++;
/**********found**********/
if ( *str == ch )
{ str [ 0 ] = ch;
/**********found**********/
str[1] = '0';
}
}
main( )
{ char s[81], c ;
printf( "\nPlease enter a string:\n" ); gets ( s );
printf ("\n Please enter the character to search : " );
c = getchar();
fun(s, c) ;
printf( "\nThe result is %s\n", s);
}
解题思路:
第一处:第1个形参应该是字符串类型,所以应改为:void fun(char *str, char ch)。
第二处:应该是判断不相等,所以应改为:if(*str!=ch)。
第三次:置字符串结束符错误,所以应改为:str[1] = 0;。
***************************************************
请编一个函数fun(char *s),函数的功能是把s所指字符串中的内容逆置。
例如:字符串中原有的字符串为:abcdefg,
则调用该函数后, 串中的内容为:gfedcba。
注意: 部分源程序存在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
#define N 81
fun ( char *s )
{
}
main( )
{ char a[N];
printf ( "Enter a string : " ); gets ( a );
printf ( "The original string is : " ); puts( a );
fun ( a );
printf("\n");
printf ( "The string after modified : ");
puts ( a );
NONO( );
}
解题思路:
本题是考察考生如何对字符串中的字符进行逆序操作。给出的程序使用了一个临时变量b
的字符串,使用for循环语句把原字符串的字符从尾部依次赋给临时变量b(从头开始)中,循
环结束后,再把临时变量b的内容重新复制给原字符串变量即可。
参考答案:
fun ( char *s )
{
char b[N] ;
int i = 0, j ;
memset(b, 0, N) ;
for(j = strlen(s) - 1 ; j >= 0 ; j--) b[i++] = s[j] ;
strcpy(s, b) ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第76套:
给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。
例如,当形参n的值为10时,函数返回:-0.204491。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
double fun(int n)
{ int i, k; double s, t;
s=0;
/**********found**********/
k=__1__;
for(i=1; i<=n; i++) {
/**********found**********/
t=__2__;
s=s+k*(2*i-1)*(2*i+1)/(t*t);
/**********found**********/
k=k*__3__;
}
return s;
}
main()
{ int n=-1;
while(n<0)
{ printf("Please input(n>0): "); scanf("%d",&n); }
printf("\nThe result is: %f\n",fun(n));
}
解题思路:
第一处:k是用来管理正负号的,公式中第一个值是正数,所以应填:1。
第二处:根据公式,t是2i,所以应填:2*i。
第三处:根据公式,第2个是负数,所以应填:(-1)。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:判断一个整数是否是素数,若是返
回1,否则返回0。
在main()函数中,若fun返回1输出YES,若fun返回0输出NO!。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
int fun ( int m )
{ int k = 2;
while ( k <= m && (m%k))
/************found************/
k++
/************found************/
if (m = k )
return 1;
else return 0;
}
main( )
{ int n;
printf( "\nPlease enter n: " ); scanf( "%d", &n );
if ( fun ( n ) ) printf( "YES\n" );
else printf( "NO!\n" );
}
解题思路:
第一处:语句后缺少分号。
第二处:条件判断相等的符号是==。
***************************************************
请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所
在的下标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数
中赋予。
主函数中x是数组名, n是x中的数据个数,max存放最大值,index存放最大值
所在元素的下标。
注意: 部分源程序存在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
#include
void fun(int a[], int n , int *max, int *d )
{
}
main()
{ int i, x[20], max , index, n = 10;
randomize() ;
for (i=0;i < n;i++) {x[i] = rand()P; printf("M", x[i]) ; }
printf("\n");
fun( x, n , &max, &index);
printf("Max =] , Index =M\n",max, index );
NONO();
}
解题思路:
本题是找出一维整型数组元素中最大的值和它所在的下标, 最大的值和它所在的下标通过
形参传回。具体看参考源程序中的说明。
参考答案:
void fun(int a[], int n , int *max, int *d )
{
int i ;
*max=a[0];*d = 0 ; /* 把数组的第1个元素值赋值给最大值变量*max */
for(i = 1; i < n; i++)
if(*max < a[i]) { /* 判断*max是否小于当前值 */
*max = a[i]; /* 重新把最大值赋值给*max */
*d = i ; /* 记住下标 */
}
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第77套:
给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按
原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。
例如,输入一个整数:27638496,函数返回值为:64862。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
unsigned long fun(unsigned long n)
{ unsigned long x=0; int t;
while(n)
{ t=n;
/**********found**********/
if(t%2==__1__)
/**********found**********/
x=__2__+t;
/**********found**********/
n=__3__;
}
return x;
}
main()
{ unsigned long n=-1;
while(n>99999999||n<0)
{ printf("Please input(0
printf("\nThe result is: %ld\n",fun(n));
}
解题思路:
第一处:判断t是否是偶数,所以应填:0。
第二处:每操作一次,x必须乘以10,再加t,所以应填:10*x。
第三处:每循环一次n的值缩小10倍,所以应填:n/10。
***************************************************
给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依
次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:87653142时,t中的数为:7531。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
void fun (long s, long *t)
{ int d;
long sl=1;
/************found************/
t = 0;
while ( s > 0)
{ d = s;
/************found************/
if (d%2 == 0)
{ *t = d * sl + *t;
\TAB sl *= 10;
}
s /= 10;
}
}
main()
{ long s, t;
clrscr();
printf("\nPlease enter s:"); scanf("%ld", &s);
fun(s, &t);
printf("The result is: %ld\n", t);
}
解题思路:
第一处:由于t是一个指针变量,赋初值的方式应为:*t=0;。
第二处:d%2条件判断时应为不是0,所以应改为:if(d%2!=0)。
***************************************************
编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),
即把p2所指的字符串连接到p1所指的字符串后。
例如,分别输入下面两个字符串:
FirstString--
SecondString
程序输出:
FirstString--SecondString
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun(char p1[], char p2[])
{
}
main()
{ char s1[80], s2[40] ;
printf("Enter s1 and s2:\n") ;
scanf("%s%s", s1, s2) ;
printf("s1=%s\n", s1) ;
printf("s2=%s\n", s2) ;
printf("Invoke fun(s1,s2):\n") ;
fun(s1, s2) ;
printf("After invoking:\n") ;
printf("%s\n", s1) ;
NONO() ;
}
解题思路:
本题是不使用字符串库函数来实现两个字符串的连接。
参考答案:
void fun(char p1[], char p2[])
{
char *p=p1;
while(*p)p++;
while(*p2) *p++=*p2++;
*p=0;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第78套:
给定程序中,函数fun的功能是:将N×N矩阵主对角线元素中的值与反向对角
线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
交换后为:
3 2 1
4 5 6
9 8 7
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define N 4
/**********found**********/
void fun(int ___1___ , int n)
{ int i,s;
/**********found**********/
for(___2___; i++)
{ s=t[i][i];
t[i][i]=t[i][n-i-1];
/**********found**********/
t[i][n-1-i]=___3___;
}
}
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
{ for(j=0; jprintf("\n");
}
fun(t,N);
printf("\nThe result is:\n");
for(i=0; i
{ for(j=0; jprintf("\n");
}
}
解题思路:
第一处:在函数体fun中,已经使用了t整型数组,所以应填:t[][N]。
第二处:要求填写for循环语句的初始值和终止值,所以应填:i=0;i。
第三处:交换变量的值,根据循环体中的语句可知,s是存放交换的中间变量,所以应填:
s。
***************************************************
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的
功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;
反之,返回-1。
折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high
(low),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于
中间位置元素中的值, 则下一次的查找范围落在中间位置之后的元素中;反之,
下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include
#define N 10
/************found************/
void fun(int a[], int m )
{ int low=0,high=N-1,mid;
while(low<=high)
{ mid=(low+high)/2;
if(m
high=mid-1;
/************found************/
else If(m > a[mid])
low=mid+1;
else return(mid);
}
return(-1);
}
main()
{ int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m;
printf("a数组中的数据如下:");
for(i=0;iprintf("Enter m: "); scanf("%d",&m);
k=fun(a,m);
if(k>=0) printf("m=%d,index=%d\n",m,k);
else printf("Not be found!\n");
}
解题思路:
第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a[],int m)。
第二处:if错定成If。
***************************************************
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了
尾部的*号之外,将字符串中其它*号全部删除。形参p已指向字符串中最后的一个
字母。在编写函数时,不得使用C语言提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内
容应当是: ABCDEFG*******。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun( char *a, char *p )
{
}
main()
{ char s[81],*t;
printf("Enter a string:\n");gets(s);
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun( s , t );
printf("The string after deleted:\n");puts(s);
NONO();
}
解题思路:
本题是考察字符串的操作。
1. 利用循环扫描出p指针左边的字符是否是'*',如果不是'*',则依次把这些字符移动原
字符串a首地址开始存放。
2. 把p指针所指的字符串也依次存放到字符串a中。
3. 最后给字符串a加上结束符。
参考答案:
void fun( char *a, char *p )
{
char *q=a;
int j=0;
while(*q && q
if(*q != '*') a[j++] = *q ;
q++ ;
}
while(*p) a[j++]=*p++;
a[j]=0;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第79套:
给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所
在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串
数组中共有M个字符串,且串长。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#define M 5
#define N 20
int fun(char (*ss)[N], int *n)
{ int i, k=0, len= N;
/**********found**********/
for(i=0; i<___1___; i++)
{ len=strlen(ss[i]);
if(i==0) *n=len;
/**********found**********/
if(len ___2___ *n)
{ *n=len;
k=i;
}
}
/**********found**********/
return(___3___);
}
main()
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};
int n,k,i;
printf("\nThe original strings are :\n");
for(i=0;i
k=fun(ss,&n);
printf("\nThe length of shortest string is : %d\n",n);
printf("\nThe shortest string is : %s\n",ss[k]);
}
解题思路:
第一处:字符串数组共有M个字符串,所以在循环中终止值应填:M。
第二处:由于本题是取长度最短的字符串,*n总是保存长度最短值,所以应填:<。
第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:k。
***************************************************
给定程序MODI1.C中函数 fun 的功能是:将tt所指字符串中的小写字母都改
为对应的大写字母,其它字符不变。
例如,若输入"Ab, cD",则输出"AB, CD"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
char* fun( char tt[] )
{
int i;
for( i = 0; tt[i]; i++ )
/**********found***********/
if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) )
/**********found***********/
tt[i] += 32;
return( tt );
}
main( )
{
char tt[81];
printf( "\nPlease enter a string: " );
gets( tt );
printf( "\nThe result string is:\n%s", fun( tt ) );
}
解题思路:
第一处:判断是小写字母,则条件应该是与的关系。
第二处:小写字母的ASCII值减去32正好是其大写字母。
***************************************************
请编写函数fun,其功能是: 将所有大于1小于整数m的非素数存入xx所指数组
中, 非素数的个数通过k传回。
例如,若输入:17,则应输出:4 6 8 9 10 12 14 15 16。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include
void fun( int m, int *k, int xx[] )
{
}
main()
{
int m, n, zz[100];
printf( "\nPlease enter an integer number between 10 and 100: " );
scanf( "%d", &n );
fun( n, &m, zz );
printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );
for( n = 0; n < m; n++ )
printf( "\n M", zz[n] );
NONO();
}
解题思路:
本题是考察考生如何判断一个数不是素数,如果所给出的数是非素数且小于指定的数,那
么这些数应存放到指定的数组xx中保存,最后由形参xx返回。
在给出的程序中函数isP就是判断一个数是否是素数,若是非素数,则返回1,否则返回0。
本题是用for(i=2;i循环语句分别判断i是否为非素数,如果i是非素数,则把该数i
存入数组xx中。其中,i是控制变量,m是试题给出的整数。
参考答案:
#include
int isP(int m)
{
int j, tag = 0 ;
for(j = 2 ; j < m && !tag ; j++)
if(m % j == 0) tag = 1 ;
return tag ;
}
void fun( int m, int *k, int xx[] )
{
int i, cnt = 0 ;
for(i = 2 ; i < m ; i++)
if(isP(i)) xx[cnt++] = i ;
*k = cnt ;
}
※※※※※※※※※※※※※※※※※※※※※※※※※
第80套:
给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按
原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数:27638496,函数返回值为:26846。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结
果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
unsigned long fun(unsigned long n)
{ unsigned long x=0, s, i; int t;
s=n;
/**********found**********/
i=__1__;
/**********found**********/
while(__2__)
{ t=s;
if(t%2==0){
/**********found**********/
x=x+t*i; i=__3__;
}
s=s/10;
}
return x;
}
main()
{ unsigned long n=-1;
while(n>99999999||n<0)
{ printf("Please input(0
printf("\nThe result is: %ld\n",fun(n));
}
解题思路:
第一处:对变量i赋初值,根据i的使用规则来看,i应等于1。
第二处:while循环要求计算后的s应大于0,所以应填:s。
第三处:每循环一次,i要乘以10,所以应填:i*10。
***************************************************
给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对
角线上元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#define M 5
/************found************/
int fun(int n, int xx[][])
{ int i, j, sum=0;
printf( "\nThe %d x %d matrix:\n", M, M );
for( i = 0; i < M; i++ )
{ for( j = 0; j < M; j++ )
/************found************/
printf( "%f ", xx[i][j] );
printf("\n");
}
for( i = 0 ; i < n ; i++ )
sum += xx[i][i]+xx[i][ n-i-1 ];
return( sum );
}
main( )
{ int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
\TAB \TAB {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa ));
}
解题思路:
第一处:形参必须定义字符串数组的长度,所以应改为:int fun(int n,int xx[][M])。
第二处:由于xx是整型的双维数组,不能用浮点型输出,所以应改为:printf("%d
",xx[i][j]);。
***************************************************
函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c
中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的
十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12。调用该函数后,c=4251。
注意: 部分源程序存在文件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=(a/10)*1000+(b)*100+(a)*10+(b/10);
} |