第41套:?
給定程序中,函數(shù)fun的功能是:計算x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有?數(shù)均為正數(shù)),平均值通過形參返回主函數(shù),將小于平均值且最接近平均值的數(shù)作為函數(shù)值返回,在主函數(shù)中輸出。?例如,有10個正數(shù):46?30?32?40?6?17?45?15?48?26,平均值為:?30.500000?
主函數(shù)中輸出:m=30.0?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdlib.h>?
#define?N?10?
double?fun(double?x[],double?*av)?
{?int?i,j;?double?d,s;?
s=0;?
for(i=0;?i<N;?i++)?s?=?s?+x[i];?
/**********found**********/?
__1__=s/N;?
d=32767;?
for(i=0;?i<N;?i++)?
if(x[i]<*av?&&?*av?-?x[i]<=d){?
/**********found**********/?
d=*av-x[i];?j=__2__;}?
/**********found**********/?
return?__3__;?
}?
main()?
{?int?i;?double?x[N],av,m;?
for(i=0;?i<N;?i++){?x[i]=rand()%50;?printf("%4.0f?",x[i]);}?
printf("\n");?
m=fun(x,&av);?
printf("\nThe?average?is:?%f\n",av);?
printf("m=%5.1f?",m);?
printf("\n");?
}?
解題思路:?
第一處:計算好的平均值通過形參av返回,所以應填:*av。?
第二處:計算小于平均值且最接近平均值的位置j,所以應填:i。?
第三處:返回該數(shù),所以應填:x[j]。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:根據(jù)整型形參n,計算如下公式的值。?
例如,若?n=10,則應輸出:?0.617977。?
請改正程序中的語法錯誤,使它能得出正確的結果。?
注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
/************found************/?
int?fun?(?int?n?)?
{?float?A=1;?int?i;?
/************found************/?
for?(i=2;?i<n;?i++)?
A?=?1.0/(1+A);?
return?A?;?
}?
main(?)?
{?int?n?;?
printf("\nPlease?enter?n:?")?;?
scanf("%d",?&n?)?;?
printf("A%d=%f\n",?n,?fun(n)?)?;?
}?
解題思路:?
第一處:函數(shù)的返回是浮點型數(shù),所以應改為:float?fun(int?n)。?
第二處:for的終止條件應是i<=n。?
***************************************************?
程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun,函數(shù)的功能是:使數(shù)組右上三角元素中的值乘以m?。?
例如:若m的值為2,a?數(shù)組中的值為?|?1?9?7?|??|?2?18?14|??|?2?3?8?|?則返回主程序后a數(shù)組中的值應為?|?2?6?16|??|?4?5?6?|??|?4?5?12|?
注意:?部分源程序存在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,?僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
#define?N?5?
int?fun?(?int?a[][N],?int?m?)?
{?
}?
?
main?(?)?
{?int?a[N][N],?m,?i,?j;?
printf("*****?The?array?*****\n");?
for?(?i?=0;?i<N;?i++?)?
{?for?(?j?=0;?j<N;?j++?)?
{?a[i][j]?=?rand()%20;?printf(?"%4d",?a[i][j]?);?}?
printf("\n");?
}?
do?m?=?rand()%10?;?while?(?m>=3?);?
printf("m?=?%4d\n",m);?
fun?(?a?,m?);?
printf?("THE?RESULT\n");?
for?(?i?=0;?i<N;?i++?)?
{?for?(?j?=0;?j<N;?j++?)?printf(?"%4d",?a[i][j]?);?
printf("\n");?
}?
NONO?(?);?
}?
解題思路:?
本題是利用兩重循環(huán)給二維數(shù)組右上三角元素中的值乘以m。?
參考答案:?
int?fun?(?int?a[][N],?int?m?)?
{?
int?i,?j;?
for(i?=?0?;?i?<?N?;?i++)?
for(j?=?i?;?j?<?N?;?j++)?
?
a[i][j]?*=?m?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第42套:?
給定程序中,函數(shù)fun的功能是:?將s所指字符串中的所有數(shù)字字符移到所有非數(shù)字字符之后,并保持數(shù)字字符串和非數(shù)字字符串原有的先后次序。例如,形參s所指的字符串為:def35adh3kjsdf7。執(zhí)行結果為:defadhkjsdf3537。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
void?fun(char?*s)?
{?int?i,?j=0,?k=0;?char?t1[80],?t2[80];?
for(i=0;?s[i]!='\0';?i++)?
if(s[i]>='0'?&&?s[i]<='9')?
{?
/**********found**********/?
t2[j]=s[i];?___1___;?
}?
else?t1[k++]=s[i];?
t2[j]=0;?t1[k]=0;?
/**********found**********/?
for(i=0;?i<k;?i++)?___2___;?
/**********found**********/?
for(i=0;?i<___3___;?i++)?s[k+i]=t2[i];?
}?
main()?
{?char?s[80]="ba3a54j7sd567sdffs";?
printf("\nThe?original?string?is?:?%s\n",s);?
fun(s);?
printf("\nThe?result?is?:?%s\n",s);?
}?
解題思路:?
t2是存放數(shù)字字符串,t1是存放非數(shù)字字符串。?
第一處:t2存放數(shù)字字符串的位置是由j來控制的,每添加一個,j必須加1,所以應填:j++。?
第二處:利用for循環(huán)把t1字符串添加到原字符串s中,所以應填:s[i]=t1[i]。?
第三處:利用for循環(huán)把t2字符串添加到原字符串s的尾部,其中數(shù)字字符串的長度為j,所以應填:j。?
***************************************************?
給定程序MODI1.C中函數(shù)?fun?的功能是:用冒泡法對6個字符串按由小到大的順序進行排序。?
請改正程序中的錯誤,使它能得出正確的結果。?
注意:?不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?MAXLINE?20?
fun?(?char?*pstr[6])?
{?int?i,?j?;?
char?*p?;?
for?(i?=?0?;?i?<?5?;?i++?)?{?
/**************found**************/?
for?(j?=?i?+?1,?j?<?6,?j++)?
{?
if(strcmp(*(pstr?+?i),?*(pstr?+?j))?>?0)?
{?
?
p?=?*(pstr?+?i)?;?
/**************found**************/?
*(pstr?+?i)?=?pstr?+?j?;?
*(pstr?+?j)?=?p?;?
}?
}?
}?
}?
main(?)?
{?int?i?;?
char?*pstr[6],?str[6][MAXLINE]?;?
for(i?=?0;?i?<?6?;?i++)?pstr[i]?=?str[i]?;?
printf(?"\nEnter?6?string(1?string?at?each?line):?\n"?)?;?
for(i?=?0?;?i?<?6?;?i++)?scanf("%s",?pstr[i])?;?
fun(pstr)?;?
printf("The?strings?after?sorting:\n")?;?
for(i?=?0?;?i?<?6?;?i++)?printf("%s\n",?pstr[i])?;?
}?
解題思路:?
第一處:for循環(huán)語句中缺少分號。?
第二處:應該把pstr+j位置上的值賦值給*(pstr+i)上,所以應改為:?
*(pstr+i)=*(pstr+j);。?
***************************************************?
請編寫函數(shù)fun,它的功能是:求出ss所指字符串中指定字符的個數(shù),并返回此值。?
例如,若輸入字符串:?123412132,輸入字符為:?1,則輸出:3。?
注意:?部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?M?81?
int?fun(char?*ss,?char?c)?
{?
}?
main()?
{?char?a[M],?ch;?
printf("\nPlease?enter?a?string:");?gets(a);?
printf("\nPlease?enter?a?char:");?ch?=?getchar();?
printf("\nThe?number?of?the?char?is:?%d\n",?fun(a,?ch));?
NONO?(?);?
}?
?
解題思路:?
本題是考察考生怎樣從字符串中找出指定字符的個數(shù)。使用while循環(huán)語句來字符串是否結束,如果沒有結束,則判斷當前字符是否是指定的字符,如果是指定的字符,則個數(shù)cnt加1,直至字符串結束為止,最后由函數(shù)返回。?
參考答案:?
int?fun(char?*ss,?char?c)?
{?
int?cnt?=?0?;?
char?*p?=?ss?;?
while(*p)?{?
if(*p?==?c)?cnt++?;?
p++?;?
}?
return?cnt?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第43套:?
給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中查找與形參t所指字符串相同的串,找到后返回該串在字符串數(shù)組中的位置(下標值),未找到則返回-1。ss所指字符串數(shù)組中共有N個內(nèi)容不同的字符串,且串長小于M。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?N?5?
#define?M?8?
int?fun(char?(*ss)[M],char?*t)?
{?int?i;?
/**********found**********/?
for(i=0;?i<?__1__?;?i++)?
/**********found**********/?
if(strcmp(ss[i],t)==0?)?return?__2__?;?
return?-1;?
}?
main()?
{?char?ch[N][M]={"if","while","switch","int","for"},t[M];?
int?n,i;?
printf("\nThe?original?string\n\n");?
for(i=0;i<N;i++)puts(ch[i]);?printf("\n");?
printf("\nEnter?a?string?for?search:?");?gets(t);?
n=fun(ch,t);?
/**********found**********/?
if(n==?__3__)?printf("\nDon't?found!\n");?
else?printf("\nThe?position?is?%d?.\n",n);?
}?
解題思路:?
本題是考察在字符串查找指定的子串。?
第一處:利用for循環(huán),從幾個字符串中進行查找,程序中已經(jīng)給定了N個字符串,所以應填:N。?
第二處:在字符串已經(jīng)找到,則返回字符串數(shù)組中的位置(下標值),所以應填:i。?
第三處:如果沒有發(fā)現(xiàn),則顯示沒有找到信息,所以應填:-1。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:從整數(shù)1到55之間,選出能被3整除、且有一位上的數(shù)是5的那些數(shù),并把這些數(shù)放在b所指的數(shù)組中,這些數(shù)的個數(shù)作為函數(shù)值返回。規(guī)定,函數(shù)中a1放個位數(shù),a2放十位數(shù)。?
請改正程序中的錯誤,使它能得出正確結果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。?
給定源程序:?
#include?<stdio.h>?
fun(?int?*b?)?
{?int?k,a1,a2,i=0;?
for(k=10;?k<=55;?k++)?{?
/************found************/?
a2=k/1O;?
a1=k-a2*10;?
if((k%3==0?&&?a2==5)||(k%3==0?&&?a1==5))?
{?b[i]=k;?i++;?}?
}?
/************found************/?
return?k;?
}?
main(?)?
{?int?a[100],k,m;?
m=fun(?a?);?
printf("The?result?is?:\n");?
for(k=0;?k<m;?k++)?printf("%4d",a[k]);?printf("\n");?
}?
解題思路:?
第一處:?取當前變量k的十位數(shù)字上的數(shù),所以應改為:a2=k/10;。?
第二處:?要求統(tǒng)計個數(shù)并存入變量i中,最后返回i,所以應改為:return?i;。?
***************************************************?
假定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,它的功能是:將字符串尾部的*號全部刪除,前面和中間的*號不刪除。?
例如,字符串中的內(nèi)容為:****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應當是:****A*BC*DEF*G。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。?
注意:?部分源程序在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)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.?使用while循環(huán)語句和字符串指針p掃描出尾部的*號。?
2.?定義兩個字符串中間變量s和t,其中s是存放*號后面的字符串,t是存放*號字符串。?
3.?最后利用字符串拷貝和連接,重新組成字符串a。?
參考答案:?
void?fun(?char?*a?)?
{?
char?*p?=?a?;?
while(*p)?p++?;?p--?;?
while(*p?==?'*')?p--?;?
p++?;?
*p?=?0?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第44套:?
函數(shù)fun的功能是進行數(shù)字字符轉(zhuǎn)換。若形參ch中是數(shù)字字符'0'~'9',?則'0'轉(zhuǎn)換成'9','1'轉(zhuǎn)換成'8','2'轉(zhuǎn)換成'7',……,'9'轉(zhuǎn)換成'0';若是其它字符則保持不變;并將轉(zhuǎn)換后的結果作為函數(shù)值返回。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
/**********found**********/?
___1___?fun(char?ch)?
{?
/**********found**********/?
if?(ch>='0'?&&?___2___)?
/**********found**********/?
return?'9'-?(ch-___3___);?
return?ch?;?
}?
main()?
{?char?c1,?c2;?
printf("\nThe?result?:\n");?
c1='2';?c2?=?fun(c1);?
printf("c1=%c?c2=%c\n",?c1,?c2);?
c1='8';?c2?=?fun(c1);?
printf("c1=%c?c2=%c\n",?c1,?c2);?
c1='a';?c2?=?fun(c1);?
printf("c1=%c?c2=%c\n",?c1,?c2);?
}?
解題思路:?
第一處:要求返回處理好的字符,所以應填:char。?
第二處:判斷該字符是否是數(shù)字,所以應填:ch<='9'。?
第三處:只要減去'0'的ASCII值,即可得到要求的結果,所以應填:'0'。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:將p所指字符串中的所有字符復制到b?中,要求每復制三個字符之后插入一個空格。?
例如,在調(diào)用fun函數(shù)之前給a輸入字符串:ABCDEFGHIJK,?
調(diào)用函數(shù)之后,字符數(shù)組b中的內(nèi)容則為:ABC?DEF?GHI?JK。?
請改正程序中的錯誤,使它能得出正確結果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結構。?
給定源程序:?
#include?<stdio.h>?
?
void?fun(char?*p,?char?*b)?
{?int?i,?k=0;?
while(*p)?
{?i=1;?
while(?i<=3?&&?*p?)?{?
/**********found**********/?
b[k]=p;?
k++;?p++;?i++;?
}?
if(*p)?
{?
/**********found**********/?
b[k++]="?";?
}?
}?
b[k]='\0';?
}?
main()?
{?char?a[80],b[80];?
printf("Enter?a?string:?");?gets(a);?
printf("The?original?string:?");?puts(a);?
fun(a,b);?
printf("\nThe?string?after?insert?space:?");?puts(b);?printf("\n\n");?
}?
解題思路:?
第一處:把指針p所指的值賦值給b[k]中。?
第二處:把空格字符賦值給b[k++]中,而不是一個空格的字符串。?
***************************************************?
N名學生的成績已在主函數(shù)中放入一個帶頭節(jié)點的鏈表結構中,h指向鏈表的頭節(jié)點。請編寫函數(shù)fun,它的功能是:求出平均分,由函數(shù)值返回。?
例如,若學生的成績是:85,76,69,85,91,72,64,87,?則平均分應當是:78.625。?
注意:?部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
#define?N?8?
struct?slist?
{?double?s;?
struct?slist?*next;?
};?
typedef?struct?slist?STREC;?
double?fun(?STREC?*h?)?
{?
}?
?
STREC?*?creat(?double?*s)?
{?STREC?*h,*p,*q;?int?i=0;?
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;?
while(i<N)?
{?q=(STREC*)malloc(sizeof(STREC));?
q->s=s[i];?i++;?p->next=q;?p=q;?
}?
p->next=0;?
return?h;?
}?
outlist(?STREC?*h)?
{?STREC?*p;?
p=h->next;?printf("head");?
do?
{?printf("->%4.1f",p->s);p=p->next;}?
while(p!=0);?
printf("\n\n");?
}?
main()?
{?double?s[N]={85,76,69,85,91,72,64,87},ave;?
STREC?*h;?
h=creat(?s?);?outlist(h);?
ave=fun(?h?);?
printf("ave=?%6.3f\n",ave);?
NONO();?
}?
解題思路:?
本題是計算鏈表結構中成績的平均分。具體操作請看答案程序中的說明。?
參考答案:?
#include?<stdio.h>?
#include?<stdlib.h>?
double?fun(?STREC?*h?)?
{?
STREC?*p=h->next;?/*?由于頭結點中沒有存放數(shù)據(jù)?*/?
double?av=0.0;?/*?對計算成績平均值的變量進行初始化?*/?
int?n?=?0?;?
while(p!=NULL)?{?/*?判斷鏈表是否結束?*/?
av?=?av?+?p->s?;?/*?對成績進行累加?*/?
p=p->next;?/*?到下一個結點位置?*/?
n++;?/*?人數(shù)加1?*/?
}?
av?/=?n?;?/*?計算成績平均值?*/?
return?av?;?/*?返回成績平均值?*/?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?