為大家收集整理了《2013年計算機(jī)二級C語言上機(jī)題庫及答案解析(18)》供大家參考,希望對大家有所幫助?。。?BR> 填空題
函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[1]、a[2]、……中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7,刪除偶數(shù)后a 所指數(shù)組中的數(shù)據(jù)為:9、1、3、5、7,返回值為5。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#define N 9
int fun(int a[], int n)
{ int i,j;
j = 0;
for (i=0; i if (a[i]%2==___1___)
{
a[j] = a[i]; ___2___;
}
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 = fun(b, N);
printf("\nThe number of odd : %d \n", n);
printf("\nThe odd number :\n");
for (i=0; i }
解題思路:
第一處:判斷a[i]是否是奇數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:1。
第二處:數(shù)組a中的元素位置由j來控制,每增加一個元素,則j加1,所以應(yīng)填:j++。
第三處:返回刪除偶數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。
改錯題
給定程序MODI1.C中函數(shù)fun的功能是:求出兩個非零正整數(shù)的公約數(shù),并作為函數(shù)值返回。
例如,若給num1和num2分別輸入49和21,則輸出的公約數(shù)為7;若給num1
和num2分別輸入27和81,則輸出的公約數(shù)為27。
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include
int fun(int a,int b)
{ int r,t;
if(a t=a; b=a; a=t;
}
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b; }
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);
}
解題思路:
第一處:交換值的次序有問題,所以應(yīng)改為:t=a;a=b;b=t;。
第二處:返回值錯誤,應(yīng)改為:return(b);。
編程題
假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:刪除字符串中所有的*號。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG。
注意: 部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include
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. 利用循環(huán)掃描字符串中所有的字符是否是'*',如果不是'*',則把這些字符存放字符串a(chǎn)首地址開始的位置上。
2. 最后給字符串a(chǎn)加上結(jié)束符。
參考答案:
void fun( char *a )
{
int j =0 ;
char *p=a;
while(*p) {
if(*p != '*') a[j++]=*p ;
p++ ;
}
a[j]=0;
}
函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[1]、a[2]、……中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個數(shù)通過函數(shù)值返回。例如:若a所指數(shù)組中的數(shù)據(jù)最初排列為:9、1、4、2、3、6、5、8、7,刪除偶數(shù)后a 所指數(shù)組中的數(shù)據(jù)為:9、1、3、5、7,返回值為5。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
給定源程序:
#include
#define N 9
int fun(int a[], int n)
{ int i,j;
j = 0;
for (i=0; i if (a[i]%2==___1___)
{
a[j] = a[i]; ___2___;
}
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 = fun(b, N);
printf("\nThe number of odd : %d \n", n);
printf("\nThe odd number :\n");
for (i=0; i }
解題思路:
第一處:判斷a[i]是否是奇數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:1。
第二處:數(shù)組a中的元素位置由j來控制,每增加一個元素,則j加1,所以應(yīng)填:j++。
第三處:返回刪除偶數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。
改錯題
給定程序MODI1.C中函數(shù)fun的功能是:求出兩個非零正整數(shù)的公約數(shù),并作為函數(shù)值返回。
例如,若給num1和num2分別輸入49和21,則輸出的公約數(shù)為7;若給num1
和num2分別輸入27和81,則輸出的公約數(shù)為27。
請改正程序中的錯誤,使它能得出正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
給定源程序:
#include
int fun(int a,int b)
{ int r,t;
if(a t=a; b=a; a=t;
}
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b; }
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);
}
解題思路:
第一處:交換值的次序有問題,所以應(yīng)改為:t=a;a=b;b=t;。
第二處:返回值錯誤,應(yīng)改為:return(b);。
編程題
假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:刪除字符串中所有的*號。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG。
注意: 部分源程序在文件PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入
你編寫的若干語句。
給定源程序:
#include
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. 利用循環(huán)掃描字符串中所有的字符是否是'*',如果不是'*',則把這些字符存放字符串a(chǎn)首地址開始的位置上。
2. 最后給字符串a(chǎn)加上結(jié)束符。
參考答案:
void fun( char *a )
{
int j =0 ;
char *p=a;
while(*p) {
if(*p != '*') a[j++]=*p ;
p++ ;
}
a[j]=0;
}