第23套:?
給定程序中,函數(shù)fun的功能是:找出N×N矩陣中每列元素中的最大值,并按順序依次存放于形參b所指的一維數(shù)組中。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
?
#include?<stdio.h>?
#define?N?4?
void?fun(int?(*a)[N],?int?*b)?
{?int?i,j;?
for(i=0;?i<N;?i++)?{?
/**********found**********/?
b[i]=?__1__;?
for(j=1;?j<N;?j++)?
/**********found**********/?
if(b[i]?__2__?a[j][i])?b[i]=a[j][i];?
}?
}?
main()?
{?int?x[N][N]={?{12,5,8,7},{6,1,9,3},{1,2,3,4},{2,8,4,3}?},y[N],i,j;?
printf("\nThe?matrix?:\n");?
for(i=0;i<N;?i++)?
{?for(j=0;j<N;?j++)?printf("%4d",x[i][j]);?
printf("\n");?
}?
/**********found**********/?
fun(__3__);?
printf("\nThe?result?is:");?
for(i=0;?i<N;?i++)?printf("%3d",y[i]);?
printf("\n");?
}?
解題思路:?
第一處:把每列的第1值賦值給b[i],所以應填:a[0][i]。?
第二處:如果b[i]值小于a[j][i]的值,則把a[j][i]重新賦值給b[i]中,保存最大的值,所以應填:<。?
第三處:在主函數(shù)中,x是存放矩陣數(shù)據(jù),y是存放每列的最大值,所以應填:x,y。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:?交換主函數(shù)中兩個變量的值。例如:
若變量a中的值原為8,b中的值為3。程序運行后a中的值為3,?b中的值為8。?
請改正程序中的錯誤,?使它能計算出正確的結(jié)果。?
注意:?不要改動?main?函數(shù),?不得增行或刪行,?也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
/*********found**********/?
int?fun(int?x,int?y)?
{?
int?t;?
/*********found**********/?
t=x;x=y;y=t;?
}?
main()?
{?
int?a,b;?
?
a=8;b=3;?
fun(&a,&b);?
printf("%d,?%d\n",a,b);?
}?
解題思路:?
第一處:函數(shù)形參定義不正確,在定義第2個形參時,也應加上int。由于通過該函數(shù)實現(xiàn)兩數(shù)交換,在C語言中,必須交換地址中的值,所以應定義為int?*x,int?*y。?
第二處:要交換地址中的值,不能交換地址,必須指定地址中的值,因此應改為t=*x;*x=*y;*y=t;。?
***************************************************?
編寫函數(shù)fun,?函數(shù)的功能是求出小于或等于lim的所有素數(shù)并放在aa數(shù)組中,?函數(shù)返回所求出的素數(shù)的個數(shù)。函數(shù)fun中給出的語句僅供參考。?
注意:部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#define?MAX?100?
int?fun(int?lim,?int?aa[MAX])?
{?
/*?以下代碼僅供參考?*/?
int?i,j,k=0;?
/*?其中變量k用于統(tǒng)計素數(shù)個數(shù)?*/?
for(i=2;i<=lim;i++)?
{?
/*?以下完成判斷aa數(shù)組中小于或等于lim的素數(shù)并統(tǒng)計個數(shù)?*/?
}?
return?k;?
}?
main()?
{?
int?limit,?i,?sum;?
int?aa[MAX]?;?
printf("輸入一個整數(shù)");?
scanf("%d",?&limit);?
sum=fun(limit,?aa);?
for(i=0?;?i?<?sum?;?i++)?{?
if(i?%?10?==?0?&&?i?!=?0)?printf("\n")?;?
printf("%5d",?aa[i])?;?
}?
NONO();?
}?
解題思路:?
本題是考察考生如何判斷一個數(shù)是素數(shù),再求出所有小于lim數(shù)的素數(shù)并存入數(shù)組aa中保存,最后由形參aa返回,素數(shù)的個數(shù)由函數(shù)值返回。?
參考答案:?
int?fun(int?lim,?int?aa[MAX])?
{?
/*?以下代碼僅供參考?*/?
int?i,j,k=0;?
/*?其中變量k用于統(tǒng)計素數(shù)個數(shù)?*/?
for(i=2;i<=lim;i++)?
{?
/*?以下完成判斷aa數(shù)組中小于或等于lim的素數(shù)并統(tǒng)計個數(shù)?*/?
for(j?=?2?;?j?<=?(i/2)?;?j++)?
if(i?%?j?==?0)?break;?
if(j?>?(i/2))?aa[k++]?=?i;?
}?
return?k;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第24套:?
程序通過定義學生結(jié)構(gòu)體變量,存儲了學生的學號、姓名和3門課的成績。函數(shù)fun的功能是將形參a中的數(shù)據(jù)進行修改,把修改后的數(shù)據(jù)作為函數(shù)值返回主函數(shù)進行輸出。?
例如:傳給形參a的數(shù)據(jù)中,學號、姓名、和三門課的成績依次是:10001、?
"ZhangSan"、95、80、88,修改后的數(shù)據(jù)應為:10002、"LiSi"、96、81、89。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
struct?student?{?
long?sno;?
char?name[10];?
float?score[3];?
};?
/**********found**********/?
__1__?fun(struct?student?a)?
{?int?i;?
a.sno?=?10002;?
/**********found**********/?
strcpy(__2__,?"LiSi");?
/**********found**********/?
for?(i=0;?i<3;?i++)?__3__+=?1;?
return?a;?
}?
main()?
{?struct?student?s={10001,"ZhangSan",?95,?80,?88},?t;?
int?i;?
printf("\n\nThe?original?data?:\n");?
printf("\nNo:?%ld?Name:?%s\nScores:?",s.sno,?s.name);?
for?(i=0;?i<3;?i++)?printf("%6.2f?",?s.score[i]);?
printf("\n");?
t?=?fun(s);?
printf("\nThe?data?after?modified?:\n");?
?
printf("\nNo:?%ld?Name:?%s\nScores:?",t.sno,?t.name);?
for?(i=0;?i<3;?i++)?printf("%6.2f?",?t.score[i]);?
printf("\n");?
}?
解題思路:?
本題是對結(jié)構(gòu)體變量中的值進行修改并通過函數(shù)值返回。?
第一處:必須定義結(jié)構(gòu)返回類型,所以應填:struct?student。?
第二處:對姓名進行修改,所以應填:a.name。?
第三處:分別對成績增加1分,所以應填:a.score[i]。?
***************************************************?
假定整數(shù)數(shù)列中的數(shù)不重復,并存放在數(shù)組中。給定程序MODI1.C中函數(shù)fun?的功能是:刪除數(shù)列中值為x的元素。n中存放的是數(shù)列中元素的個數(shù)。?
請改正程序中的錯誤,使它能得出正確結(jié)果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。?
給定源程序:?
#include?<stdio.h>?
#define?N?20?
fun(int?*a,int?n,int?x)?
{?int?p=0,i;?
a[n]=x;?
while(?x!=a[p]?)?
\TAB?p=p+1;?
/**********found**********/?
if(P==n)?return?-1;?
else?
{?for(i=p;i<n;i++)?
/**********found**********/?
\TAB?a[i+1]=a[i];?
return?n-1;?
}?
}?
main()?
{?int?w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;?
n=10;?
printf("The?original?data?:\n");?
for(i=0;i<n;i++)?printf("%5d",w[i]);?
printf("\nInput?x?(to?delete):?");?scanf("%d",&x);?
printf("Delete?:?%d\n",x);?
n=fun(w,n,x);?
if?(?n==-1?)?printf("***Not?be?found!***\n\n");?
else?
{?printf("The?data?after?deleted:\n");?
for(i=0;i<n;i++)?printf("%5d",w[i]);printf("\n\n");?
}?
}?
解題思路:?
第一處:?條件語句中的小寫p錯寫成大寫P了。?
?
第二處:?刪除元素,應該是后面位置的元素值賦值給前面的位置上,所以應改為:?
a[i]=a[i+1];。?
***************************************************?
學生的記錄由學號和成績組成,N名學生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,?請編寫函數(shù)fun,它的功能是:把分數(shù)最低的學生數(shù)據(jù)放在b所指的數(shù)組中,注意:分數(shù)最低的學生可能不止一個,函數(shù)返回分數(shù)最低的學生的人數(shù)。?
注意:?部分源程序在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#define?N?16?
typedef?struct?
{?char?num[10];?
int?s;?
}?STREC;?
int?fun(?STREC?*a,?STREC?*b?)?
{?
}?
main()?
{?STREC?s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},?
\TAB?\TAB?{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},?
\TAB?\TAB?{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},?
\TAB?\TAB?{"GA011",91},{"GA017",64},{"GA018",64},{"GA016",72}};?
STREC?h[N];?
int?i,n;FILE?*out?;?
n=fun(?s,h?);?
printf("The?%d?lowest?score?:\n",n);?
for(i=0;i<n;?i++)?
printf("%s?%4d\n",h[i].num,h[i].s);?
printf("\n");?
out?=?fopen("c:\\test\\out.dat","w")?;?
fprintf(out,?"%d\n",n);?
for(i=0;i<n;?i++)?
fprintf(out,?"%4d\n",h[i].s);?
fclose(out);?
}?
解題思路:?
本題是把符合條件的學生記錄存入到另一個結(jié)構(gòu)體,人數(shù)通過函數(shù)返回,記錄由實參b返回。?
1.?符合條件的學生人數(shù)存在變量j(初始值為0)中,最后返回其值。?
2.?利用for循環(huán)語句,依次判斷是否符合條件,如果成績相等,則把記錄存入b中,人數(shù)j?加1;如果當前成績a[i].s小于最低成績min,那么人數(shù)重新初始化為0,把當前成績存入最低成績中,人數(shù)j加1。?
3.?直至循環(huán)結(jié)束為止。?
參考答案:?
int?fun(?STREC?*a,?STREC?*b?)?
{?
int?i,?j?=?0,?min=a[0].s?;?
for(i?=?0?;?i?<?N;?i++)?{?
if(min?>?a[i].s)?{?
j?=?0?;?b[j++]?=?a[i]?;?min?=?a[i].s?;?
}?
else?if(min?==?a[i].s)?
b[j++]?=?a[i]?;?
}?
return?j?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第25套:?
人員的記錄由編號和出生年、月、日組成,N名人員的數(shù)據(jù)已在主函數(shù)中存入結(jié)構(gòu)體數(shù)組std中,且編號唯一。函數(shù)fun的功能是:找出指定編號人員的數(shù)據(jù),作為函數(shù)值返回,由主函數(shù)輸出,若指定編號不存在,返回數(shù)據(jù)中的編號為空串。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?N?8?
?
typedef?struct?
{?char?num[10];?
int?year,month,day?;?
}STU;?
/**********found**********/?
___1___?fun(STU?*std,?char?*num)?
{?int?i;?STU?a={"",9999,99,99};?
for?(i=0;?i<N;?i++)?
/**********found**********/?
if(?strcmp(___2___,num)==0?)?
/**********found**********/?
return?(___3___);?
return?a;?
}?
main()?
{?STU?std[N]={?{"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},?
{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},?
{"777777",1983,6,22},{"888888",1984,8,19}};?
STU?p;?char?n[10]="666666";?
p=fun(std,n);?
if(p.num[0]==0)?
printf("\nNot?found?!\n");?
else?
{?printf("\nSucceed?!\n?");?
printf("%s?%d-%d-%d\n",p.num,p.year,p.month,p.day);?
}?
}?
解題思路:?
本題是要求從給定的人員數(shù)據(jù)中找出編號相同的記錄數(shù)據(jù)。?
第一處:從返回值來看,是返回一個結(jié)構(gòu)型的值,所以應填:STU。?
第二處:判斷結(jié)構(gòu)變量中的編號num是否相等,所以應填:stu[i].num。?
第三處:返回編號相等的記錄值,所以應填:std[i]。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:從s所指字符串中,找出與t所指字符串相同的子串的個數(shù)作為函數(shù)值返回。?
例如,當s所指字符串中的內(nèi)容為:"abcdabfab",t所指字符串的內(nèi)容為:?"ab",則函數(shù)返回整數(shù)3。?
請改正程序中的錯誤,使它能得出正確的結(jié)果。?
注意:不要改動main?函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
int?fun?(char?*s,?char?*t)?
{?
int?n;?char?*p?,?*r;?
n?=?0;?
while?(?*s?)?
?
{?p?=?s;?r?=?t;?
while?(?*r?)?
if?(?*r?==?*p?)?{?
/************found************/?
r++;?p++?
}?
else?break;?
/************found************/?
if?(?r?==?'\0'?)?
n++;?
s++;?
}?
return?n;?
}?
main()?
{?
char?s[100],?t[100];?int?m;?
printf("\nPlease?enter?string?S:");?scanf("%s",?s);?
printf("\nPlease?enter?substring?t:");?scanf("%s",?t);?
m?=?fun(?s,?t);?
printf("\nThe?result?is:?m?=?%d\n",?m);?
}?
解題思路:?
第一處:語句后缺少分號。?
第二處:判斷r的當前字符是否是字符串結(jié)束符,所以應改為:if(*r==0)。?
***************************************************?
函數(shù)fun的功能是:將s所指字符串中ASCII值為偶數(shù)的字符刪除,串中剩余字符形成一個新串放在t所指的數(shù)組中。?
例如,若s所指字符串中的內(nèi)容為:"ABCDEFG12345",其中字符B的ASCII碼值為偶數(shù)、…、字符2的ASCII碼值為偶數(shù)、…?都應當刪除,其它依此類推。最后t所指的數(shù)組中的內(nèi)容應是:"ACEG135"。?
注意:?部分源程序存在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
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循環(huán)語句來解決這個問題。?
參考答案:?
void?fun(char?*s,?char?t[])?
{?
int?i,?j?=?0?;?
for(i?=?0?;?i?<?strlen(s);?i++)?if(s[i]?%?2)?t[j++]?=?s[i]?;?
t[j]?=?0?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?