第38套:?
函數(shù)fun的功能是:把形參a所指數(shù)組中的奇數(shù)按原順序依次存放到a[0]、a[1]、a[2]、……中,把偶數(shù)從數(shù)組中刪除,奇數(shù)個(gè)數(shù)通過(guò)函數(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。?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#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]是否是奇數(shù),若是,則仍保留在原數(shù)組中a[j],所以應(yīng)填:1。?
第二處:數(shù)組a中的元素位置由j來(lái)控制,每增加一個(gè)元素,則j加1,所以應(yīng)填:j++。?
第三處:返回刪除偶數(shù)后a所指數(shù)組中數(shù)據(jù)的元素j,所以應(yīng)填:j。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:求出兩個(gè)非零正整數(shù)的最大公約數(shù),并作為函數(shù)值返回。?例如,若給num1和num2分別輸入49和21,則輸出的最大公約數(shù)為7;若給num1和num2分別輸入27和81,則輸出的最大公約數(shù)為27。?
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?
給定源程序:?
#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);?
}?
解題思路:?
第一處:交換值的次序有問(wèn)題,所以應(yīng)改為:t=a;a=b;b=t;。?
第二處:返回值錯(cuò)誤,應(yīng)改為:return(b);。?
***************************************************?
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:刪除字符串中所有的*號(hào)。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。?
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:ABCDEFG。?
注意:?部分源程序在文件PROG1.C中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。?
給定源程序:?
#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.?利用循環(huán)掃描字符串中所有的字符是否是'*',如果不是'*',則把這些字符存放字符串a首地址開(kāi)始的位置上。?
2.?最后給字符串a加上結(jié)束符。?
參考答案:?
void?fun(?char?*a?)?
{?
int?j?=0?;?
char?*p=a;?
while(*p)?{?
if(*p?!=?'*')?a[j++]=*p?;?
p++?;?
}?
a[j]=0;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第39套:?
給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,刪除所有串長(zhǎng)超過(guò)k的字符串,函數(shù)返回所剩字符串的個(gè)數(shù)。ss所指字符串?dāng)?shù)組中共有N個(gè)字符串,且串長(zhǎng)小于M。?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#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);?
printf("The?string?witch?length?is?less?than?or?equal?to?7?:\n");?
for(i=0;?i<f;?i++)?puts(x[i]);printf("\n");?
}?
解題思路:?
本題是根據(jù)給定的字符串?dāng)?shù)組中刪除串長(zhǎng)大于某個(gè)值的字符串。?
第一處:利用for循環(huán),從幾個(gè)字符串中進(jìn)行查找,程序中已經(jīng)給定了N個(gè)字符串,所以應(yīng)填:N。?
第二處:串長(zhǎng)由形參k來(lái)傳遞,所以應(yīng)填:k。?
第三處:如果字符串ss[i]的串長(zhǎng)小于k,則該字符串仍存在原字符串?dāng)?shù)組中,位置由變量j?來(lái)控制,所以應(yīng)填:ss[i]。?
?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:逐個(gè)比較p、q所指兩個(gè)字符串對(duì)應(yīng)位置中的字符,把ASCII值大或相等的字符依次存放到c所指數(shù)組中,形成一個(gè)新的字符串。?
例如,若主函數(shù)中a字符串為:aBCDeFgH,?
主函數(shù)中b字符串為:ABcd,?
則c中的字符串應(yīng)為:aBcdeFgH。?
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
void?fun(char?*p?,char?*q,?char?*c)?
{?
/************found************/?
int?k?=?1;?
/************found************/?
while(?*p?!=?*q?)?
{?if(?*p<*q?)?c[k]=*q;?
else?c[k]=*p;?
if(*p)?p++;?
if(*q)?q++;?
k++;?
}?
}?
main()?
{?char?a[10]="aBCDeFgH",?b[10]="ABcd",?c[80]={'\0'};?
fun(a,b,c);?
printf("The?string?a:?");?puts(a);?
printf("The?string?b:?");?puts(b);?
printf("The?result?:?");?puts(c);?
}?
解題思路:?
第一處:?存放字符串初始位置也是從0開(kāi)始存放的,由于k是控制c字符串的位置值,所以k應(yīng)為0。?
第二處:?判斷兩個(gè)字符串中是否有字符串結(jié)束符產(chǎn)生,所以應(yīng)改為:while(?*p?||?*q?),而不是兩字符串中對(duì)應(yīng)位置的值不相等。?
***************************************************?
假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun,它的功能是:除了字符串前導(dǎo)的*號(hào)之外,將串中其它*號(hào)全部刪除。在編寫函數(shù)時(shí),不得使用C語(yǔ)言提供的字符串函數(shù)。函數(shù)fun中給出的語(yǔ)句僅供參考。?
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,?字符串中的內(nèi)容應(yīng)當(dāng)是:****ABCDEFG。?
注意:?部分源程序在文件PROG1.C文件中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。?
給定源程序:?
#include?<stdio.h>?
void?fun(?char?*a?)?
{?
/*?以下代碼僅供參考?*/?
int?i=0,k;?
while(a[i]=='*')?i++;?
k=i+1;?
while(a[i]!='\0')?/*?以下程序段實(shí)現(xiàn)非*字符前移?*/?
{?
}?
a[i+1]='\0';?
}?
main()?
{?char?s[81];?
printf("Enter?a?string:\n");gets(s);?
fun(?s?);?
printf("The?string?after?deleted:\n");puts(s);?
NONO();?
}?
解題思路:?
本題是考察字符串的操作。?
1.?使用while循環(huán)語(yǔ)句求出字符串前導(dǎo)*號(hào)的個(gè)數(shù)。?
2.?使用while循環(huán)語(yǔ)句判斷a[i]是否是字符串結(jié)束符標(biāo)志,如果不是字符串結(jié)束標(biāo)志,則再判斷是否是字符*號(hào),如果不是*號(hào),則把a[i]字符存入a[k]中,如果是*號(hào)則跳過(guò)該*號(hào),直至字符串結(jié)束為止。?
參考答案:?
void?fun(?char?*a?)?
{?
/*?以下代碼僅供參考?*/?
int?i=0,k;?
while(a[i]=='*')?i++;?
k=i;?
?
while(a[i]!='\0')?/*?以下程序段實(shí)現(xiàn)非*字符前移?*/?
{?
if(a[i]?!=?'*')?a[k++]=a[i];?
i++;?
}?
a[k]='\0';?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第40套:?
給定程序中已建立一個(gè)帶有頭結(jié)點(diǎn)的單向鏈表,鏈表中的各結(jié)點(diǎn)按結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)遞增有序鏈接。函數(shù)fun的功能是:把形參x的值放入一個(gè)新結(jié)點(diǎn)并插入到鏈表中,插入后各結(jié)點(diǎn)數(shù)據(jù)域的值仍保持遞增有序。?
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
#define?N?8?
typedef?struct?list?
{?int?data;?
struct?list?*next;?
}?SLIST;?
void?fun(?SLIST?*h,?int?x)?
{?SLIST?*p,?*q,?*s;?
?
s=(SLIST?*)malloc(sizeof(SLIST));?
/**********found**********/?
s->data=___1___;?
q=h;?
p=h->next;?
while(p!=NULL?&&?x>p->data)?{?
/**********found**********/?
q=___2___;?
p=p->next;?
}?
s->next=p;?
/**********found**********/?
q->next=___3___;?
}?
SLIST?*creatlist(int?*a)?
{?SLIST?*h,*p,*q;?int?i;?
h=p=(SLIST?*)malloc(sizeof(SLIST));?
for(i=0;?i<N;?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("\nThe?list?is?NULL!\n");?
else?
{?printf("\nHead");?
do?{?printf("->%d",p->data);?p=p->next;?}?while(p!=NULL);?
printf("->End\n");?
}?
}?
main()?
{?SLIST?*head;?int?x;?
int?a[N]={11,12,15,18,19,22,25,29};?
head=creatlist(a);?
printf("\nThe?list?before?inserting:\n");?outlist(head);?
printf("\nEnter?a?number?:?");?scanf("%d",&x);?
fun(head,x);?
printf("\nThe?list?after?inserting:\n");?outlist(head);?
}?
解題思路:?
本題是要求在一個(gè)有序的鏈表中插入一個(gè)數(shù),插入后各結(jié)點(diǎn)仍然是有序的。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容,使程序能運(yùn)行出正確的結(jié)果。?
第一處:在函數(shù)fun的開(kāi)始處,已經(jīng)對(duì)結(jié)構(gòu)指針s分配了內(nèi)存,其中data是一個(gè)整型變量,實(shí)際要求填入一個(gè)整型數(shù)據(jù)。根據(jù)本題要求在一個(gè)鏈表插入一個(gè)整型數(shù),該數(shù)已通過(guò)函數(shù)的形參x傳入,因此應(yīng)填x。?
第二處:使用一個(gè)while循環(huán)找出要插入一個(gè)數(shù)的位置,在循環(huán)體中q實(shí)際上保留當(dāng)前鏈表p?位置的臨時(shí)變量,如果x>p->data時(shí),那么再移動(dòng)鏈表指針到下一個(gè)結(jié)果,再進(jìn)行判斷是否符合條件,如果仍大于,則仍q保留鏈表p的位置。因此,此處應(yīng)填p。?
第三處:當(dāng)找到結(jié)點(diǎn)位置后,就要插入這個(gè)數(shù),完成插入過(guò)程。由于函數(shù)體中分配了結(jié)構(gòu)指針s,s的next指針已經(jīng)指向了p,所以,當(dāng)前位置q的next指針就應(yīng)該指向指針s完成鏈表的鏈接。因此,此處應(yīng)填s。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算正整數(shù)num的各位上的數(shù)字之積。?
例如,若輸入:252,則輸出應(yīng)該是:20。若輸入:202,則輸出應(yīng)該是:0。?
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。?
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
long?fun?(long?num)?
{?
/************found************/?
long?k;?
do?
{?k*=num%10?;?
/************found************/?
num\=10?;?
}?while(num)?;?
return?(k)?;?
}?
main(?)?
{?long?n?;?
printf("\Please?enter?a?number:")?;?scanf("%ld",&n)?;?
printf("\n%ld\n",fun(n))?;?
}?
解題思路:?
第一處:由于在k定義時(shí)沒(méi)有賦初值,所以k是一個(gè)隨機(jī)數(shù),根據(jù)試題要求,k應(yīng)賦值為1。?
第二處:整除的符號(hào)是/。?
***************************************************?
請(qǐng)編寫一個(gè)函數(shù)fun,它的功能是:計(jì)算n門課程的平均分,計(jì)算結(jié)果作為函數(shù)值返回。?
例如:若有5門課程的成績(jī)是:90.5,?72,?80,?61.5,?55?
則函數(shù)的值為:71.80。?
注意:?部分源程序存在文件PROG1.C中。?
請(qǐng)勿改動(dòng)主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句。?
給定源程序:?
#include?<stdio.h>?
float?fun?(?float?*a?,?int?n?)?
{?
}?
?
main()?
{?float?score[30]={90.5,?72,?80,?61.5,?55},?aver;?
aver?=?fun(?score,?5?);?
printf(?"\nAverage?score?is:?%5.2f\n",?aver);?
NONO?(?);?
}?
解題思路:?
本題是使用循環(huán)來(lái)計(jì)算平均值且結(jié)果由函數(shù)值返回。?
參考答案:?
float?fun?(?float?*a?,?int?n?)?
{?
int?i;?
float?ave=0.0;?
for(i=0;?i<n;?i++)?ave=ave+a[i]?;?
ave=ave/n;?
return?ave;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?