第05套:?
給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應的整數(shù)、浮點數(shù),然后將其顯示在屏幕上。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
void?fun(char?*s,?int?a,?double?f)?
{?
/**********found**********/?
__1__?fp;?
char?str[100],?str1[100],?str2[100];?
int?a1;?double?f1;?
fp?=?fopen("file1.txt",?"w");?
?
fprintf(fp,?"%s?%d?%f\n",?s,?a,?f);?
/**********found**********/?
__2__?;?
fp?=?fopen("file1.txt",?"r");?
/**********found**********/?
fscanf(__3__,"%s%s%s",?str,?str1,?str2);?
fclose(fp);?
a1?=?atoi(str1);?
f1?=?atof(str2);?
printf("\nThe?result?:\n\n%s?%d?%f\n",?str,?a1,?f1);?
}?
main()?
{?char?a[10]="Hello!";?int?b=12345;?
double?c=?98.76;?
fun(a,b,c);?
}?
解題思路:?
本題是考察先把給定的數(shù)據(jù)寫入到文本文件中,再從該文件讀出并轉(zhuǎn)換成相應的整數(shù)、浮點數(shù)顯示在屏幕上。?
第一處:定義文本文件類型變量,所以應填:FILE?*。?
第二處:關閉剛寫入的文件,所以應填:fclose(fp)。?
第三處:從文件中讀出數(shù)據(jù),所以應填:fp。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:?對N名學生的學習成績,按從高到低的順序找出前m(m≤10)名學生來,?并將這些學生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,?此存儲區(qū)的首地址作為函數(shù)值返回。?
請改正函數(shù)fun中指定部位的錯誤,?使它能得出正確的結果。?
注意:?不要改動main函數(shù),?不得增行或刪行,?也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
#include?<alloc.h>?
#include?<string.h>?
#define?N?10?
typedef?struct?ss?
{?char?num[10];?
int?s;?
}?STU;?
STU?*fun(STU?a[],?int?m)?
{?STU?b[N],?*t;?
int?i,j,k;?
/**********found**********/?
t=(STU?*)calloc(sizeof(STU),m)?
for(i=0;?i<N;?i++)?b[i]=a[i];?
for(k=0;?k<m;?k++)?
{?for(i=j=0;?i<N;?i++)?
if(b[i].s?>?b[j].s)?j=i;?
/**********found**********/?
?
t(k)=b(j);?
b[j].s=0;?
}?
return?t;?
}?
outresult(STU?a[],?FILE?*pf)?
{?int?i;?
for(i=0;?i<N;?i++)?
fprintf(pf,"No?=?%s?Mark?=?%d\n",?a[i].num,a[i].s);?
fprintf(pf,"\n\n");?
}?
main()?
{?STU?a[N]={?{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},?
{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}?};?
STU?*pOrder;?
int?i,?m;?
printf("*****?The?Original?data?*****\n");?
outresult(a,?stdout);?
printf("\nGive?the?number?of?the?students?who?have?better?score:?");?
scanf("%d",&m);?
while(?m>10?)?
{?printf("\nGive?the?number?of?the?students?who?have?better?score:?");?
scanf("%d",&m);?
}?
pOrder=fun(a,m);?
printf("*****?THE?RESULT?*****\n");?
printf("The?top?:\n");?
for(i=0;?i<m;?i++)?
printf("?%s?%d\n",pOrder[i].num?,?pOrder[i].s);?
free(pOrder);?
}?
解題思路:?
第一處:?語句最后缺少分號。?
第二處:?應該使用方括號,而不是圓括號。?
像此類,使用編譯,即可發(fā)現(xiàn)。?
***************************************************?
請編寫函數(shù)fun,?函數(shù)的功能是:?刪去一維數(shù)組中所有相同的數(shù),?使之只剩一個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。?
例如,?一維數(shù)組中的數(shù)據(jù)是:?2?2?2?3?4?4?5?6?6?6?6?7?7?8?9?9?10?10?10。?
刪除后,數(shù)組中的內(nèi)容應該是:?2?3?4?5?6?7?8?9?10。?
注意:部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,?僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#define?N?80?
int?fun(int?a[],?int?n)?
?
{?
}?
main()?
{?int?a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;?
printf("The?original?data?:\n");?
for(i=0;?i<n;?i++)printf("%3d",a[i]);?
n=fun(a,n);?
printf("\n\nThe?data?after?deleted?:\n");?
for(i=0;i<n;i++)printf("%3d",a[i]);?printf("\n\n");?
NONO();?
}?
解題思路:?
本題是刪除已排序過數(shù)組中的相同數(shù)。?
1.?取出數(shù)組中的第1個數(shù)存放在臨時變量k中,再利用for循環(huán)來依次判斷所有的數(shù)。?
2.?如果取出的數(shù)和k相比,如果不相同,則仍存放在原數(shù)組中,其中存放的位置由j來控制,接著把這個數(shù)重新存入k。如果相同,則取下一數(shù)。?
參考答案:?
int?fun(int?a[],?int?n)?
{?
int?i,?j?=?1,?k?=?a[0]?;?
for(i?=?1?;?i?<?n?;?i++)?
if(k?!=?a[i])?{?
a[j++]=a[i]?;?
k?=?a[i]?;?
}?
a[j]?=?0?;?
return?j?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第06套:?
給定程序中,函數(shù)fun的功能是根據(jù)形參i的值返回某個函數(shù)的值。當調(diào)用正確時,?程序輸出:?
x1=5.000000,?x2=3.000000,?x1*x1+x1*x2=40.000000?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
double?f1(double?x)?
{?return?x*x;?}?
double?f2(double?x,?double?y)?
{?return?x*y;?}?
/**********found**********/?
__1__?fun(int?i,?double?x,?double?y)?
{?if?(i==1)?
/**********found**********/?
return?__2__(x);?
else?
/**********found**********/?
return?__3__(x,?y);?
}?
main()?
{?double?x1=5,?x2=3,?r;?
r?=?fun(1,?x1,?x2);?
?
r?+=?fun(2,?x1,?x2);?
printf("\nx1=%f,?x2=%f,?x1*x1+x1*x2=%f\n\n",x1,?x2,?r);?
}?
解題思路:?
本題是根據(jù)給定的公式來計算函數(shù)的值。?
第一處:程序中使用雙精度double類型進行計算,所以函數(shù)的返回值類型也為double,所以應填:double。?
第二處:當i等于1時,則返回f1函數(shù)的值,所以應填:f1。?
第三處:如果i不等于1,則返回f2函數(shù)的值,所以應填:f2。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:?比較兩個字符串,將長的那個字符串的首地址作為函數(shù)值返回。?
請改正函數(shù)fun中指定部位的錯誤,?使它能得出正確的結果。?
注意:?不要改動main函數(shù),?不得增行或刪行,?也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
/**********found**********/?
char?fun(char?*s,?char?*t)?
{?int?sl=0,tl=0;?char?*ss,?*tt;?
ss=s;?tt=t;?
while(*ss)?
{?sl++;?
/**********found**********/?
(*ss)++;?
}?
while(*tt)?
{?tl++;?
/**********found**********/?
(*tt)++;?
}?
if(tl>sl)?return?t;?
else?return?s;?
}?
main()?
{?char?a[80],b[80],*p,*q;?int?i;?
printf("\nEnter?a?string?:?");?gets(a);?
printf("\nEnter?a?string?again?:?");?gets(b);?
printf("\nThe?longer?is?:\n\n\"%s\"\n",fun(a,b));?
}?
解題思路:?
第一處:?試題要求返回字符串的首地址,所以應改為:char?*fun(char?*s,char?*t)?
第二處:?取字符串指針ss的下一個位置,所以應改為:ss++;。?
第三處:取字符串指針tt的下一個位置,所以應改為:tt++;。?
***************************************************?
請編寫函數(shù)fun,函數(shù)的功能是:?移動字符串中的內(nèi)容,移動的規(guī)則如下:?把第1到第m個字符,?平移到字符串的最后,?把第m+1到最后的字符移到字符串的前部。?
例如,?字符串中原有的內(nèi)容為:?ABCDEFGHIJK,?m的值為3,?則移動后,?字符串中的內(nèi)容應該是:?DEFGHIJKABC。?
注意:部分源程序在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,?僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<string.h>?
#define?N?80?
void?fun1(char?*w)?/*?本函數(shù)的功能是將字符串中字符循環(huán)左移一個位置?*/?
{?
int?i;?char?t;?
t=w[0];?
for(i=0;i<strlen(w)-1;i++)?
w[i]=w[i+1];?
w[strlen(w)-1]=t;?
}?
void?fun(char?*w,?int?m)?/*?可調(diào)用fun1函數(shù)左移字符?*/?
{?
}?
main()?
{?char?a[N]=?"ABCDEFGHIJK";?
int?m;?
printf("The?original?string:\n");puts(a);?
printf("\n\nEnter?m:?");scanf("%d",&m);?
fun(a,m);?
printf("\nThe?string?after?moving:\n");puts(a);?
printf("\n\n");?
NONO();?
}?
解題思路:?
本題是考察字符串的操作。?
1.?由于函數(shù)fun1是將字符串中字符循環(huán)左移一個位置,并通過實參w返回循環(huán)左移一個位置的字符串。?
2.?利用循環(huán)for語句來操作多少個字符(m)需要循環(huán)左移。?
參考答案:?
void?fun1(char?*w)?/*?本函數(shù)的功能是將字符串中字符循環(huán)左移一個位置?*/?
{?
int?i;?char?t;?
t=w[0];?
for(i=0;i<strlen(w)-1;i++)?
w[i]=w[i+1];?
w[strlen(w)-1]=t;?
}?
void?fun(char?*w,?int?m)?/*?可調(diào)用fun1函數(shù)左移字符?*/?
{?
int?i;?
for(i?=?0?;?i?<?m?;?i++)?fun1(w);?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第07套:?
程序通過定義并賦初值的方式,利用結構體變量存儲了一名學生的信息。函數(shù)fun的功能是輸出這位學生的信息。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
typedef?struct?
{?int?num;?
char?name[9];?
char?sex;?
struct?{?int?year,month,day?;}?birthday;?
float?score[3];?
}STU;?
/**********found**********/?
void?show(STU?___1___)?
{?int?i;?
printf("\n%d?%s?%c?%d-%d-%d",?tt.num,?tt.name,?tt.sex,?
tt.birthday.year,?tt.birthday.month,?tt.birthday.day);?
for(i=0;?i<3;?i++)?
/**********found**********/?
printf("%5.1f",?___2___);?
printf("\n");?
}?
main(?)?
{?STU?std={?1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0?};?
printf("\nA?student?data:\n");?
/**********found**********/?
show(___3___);?
}?
解題思路:?
本題是利用結構體變量存儲了一名學生的信息。?
第一處:tt變量在函數(shù)體fun已經(jīng)使用,所以應填:tt。?
第二處:利用循環(huán)分別輸出學生的成績數(shù)據(jù),所以應填:tt.score[i]。?
第三處:函數(shù)的調(diào)用,所以應填:std。?
***************************************************?
給定程序MODI1.C中函數(shù)?fun?的功能是:求出數(shù)組中最大數(shù)和次最大數(shù),并把最大數(shù)和a[0]中的數(shù)對調(diào)、次最大數(shù)和a[1]中的數(shù)對調(diào)。?
請改正程序中的錯誤,使它能得出正確的結果。?
注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
#define?N?20?
int?fun?(?int?*?a,?int?n?)?
{?int?i,?m,?t,?k?;?
for(i=0;i<2;i++)?{?
/**********found**********/?
m=0;?
for(k=i+1;k<n;k++)?
/**********found**********/?
if(a[k]>a[m])?k=m;?
t=a[i];a[i]=a[m];a[m]=t;?
}?
?
}?
main(?)?
{?int?x,?b[N]={11,5,12,0,3,6,9,7,10,8},?n=10,?i;?
for?(?i=0;?i<n;?i++?)?printf("%d?",?b[i]);?
printf("\n");?
fun?(?b,?n?);?
for?(?i=0;?i<n;?i++?)?printf("%d?",?b[i]);?
printf("\n");?
}?
解題思路:?
第一處:外循環(huán)每循環(huán)一次,把當前位置i賦值給m,所以應改為:m=i;。?
第二處:通過內(nèi)循環(huán)來找出最大的一個數(shù)的位置k,所以應改為:if(a[k]>a[m])?m=k;。?
***************************************************?
請編寫一個函數(shù)?unsigned?fun?(?unsigned?w?),w?是一個大于10的無符號整數(shù),若?w?是?n?(n?≥?2)位的整數(shù),函數(shù)求出w的低?n-1位的數(shù)作為函數(shù)值返回。?
例如:w?值為?5923,則函數(shù)返回?923;?w?值為?923?則函數(shù)返回?23。?
注意:?部分源程序存在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
unsigned?fun?(?unsigned?w?)?
{?
}?
main(?)?
{?unsigned?x;?
printf?(?"Enter?a?unsigned?integer?number?:?"?);?scanf?(?"%u",?&x?);?
printf?(?"The?original?data?is?:?%u\n",?x?);?
if?(?x?<?10?)?printf?("Data?error?!");?
else?printf?(?"The?result?:?%u\n",?fun?(?x?)?);?
NONO(?);?
}?
解題思路:?
本題是考察考生怎樣獲取一個符合要求的無符號整數(shù)。本題是應用if條件語句首先判斷給出的數(shù)是幾位數(shù),再模相應的值,最后得出的余數(shù)就是結果。?
參考答案:?
unsigned?fun?(?unsigned?w?)?
{?
if(w>10000)?w?%=?10000?;?
else?if(w>1000)?w?%=?1000?;?
else?if(w>100)?w?%=?100?;?
else?if(w>10)?w?%=10?;?
return?w?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第08套:?
給定程序通過定義并賦初值的方式,利用結構體變量存儲了一名學生的學號、姓名和3門課的成績。函數(shù)fun的功能是將該學生的各科成績都乘以一個系數(shù)a。
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結果。
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
?
typedef?struct?
{?int?num;?
char?name[9];?
float?score[3];?
}STU;?
void?show(STU?tt)?
{?int?i;?
printf("%d?%s?:?",tt.num,tt.name);?
for(i=0;?i<3;?i++)?
printf("%5.1f",tt.score[i]);?
printf("\n");?
}?
/**********found**********/?
void?modify(___1___?*ss,float?a)?
{?int?i;?
for(i=0;?i<3;?i++)?
/**********found**********/?
ss->___2___?*=a;?
}?
main(?)?
{?STU?std={?1,"Zhanghua",76.5,78.0,82.0?};?
float?a;?
printf("\nThe?original?number?and?name?and?scores?:\n");?
show(std);?
printf("\nInput?a?number?:?");?scanf("%f",&a);?
/**********found**********/?
modify(___3___,a);?
printf("\nA?result?of?modifying?:\n");?
show(std);?
}?
解題思路:?
本題是利用結構體存儲學生記錄并由實參ss返回。?
第一處:實參ss是一個結構型指針變量,所以應填:STU。?
第二處:該學生的各科成績都乘以一個系數(shù)a,所以應填:score[i]。?
第三處:函數(shù)的調(diào)用,由于函數(shù)定義時使用的指針結構型變量,所以應填:&std。?
***************************************************?
給定程序MODI1.C中函數(shù)fun的功能是:求k!(k<13),所求階乘的值作為函數(shù)值返回。例如:若k?=?10,則應輸出:3628800。?
請改正程序中的錯誤,使它能得出正確的結果。?
注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結構!?
給定源程序:?
#include?<stdio.h>?
long?fun?(?int?k)?
{?
/************found************/?
if?k?>?0?
return?(k*fun(k-1));?
?
/************found************/?
else?if?(?k=0?)?
return?1L;?
}?
main()?
{?int?k?=?10?;?
printf("%d!=%ld\n",?k,?fun?(?k?))?;?
}?
解題思路:?
第一處:條件判斷缺少圓括號。?
第二處:判斷相等的符號是==。?
***************************************************?
程序定義了N×N的二維數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(int?a[][N],?int?n),函數(shù)的功能是:使數(shù)組左下三角元素中的值乘以n?。?
例如:若n的值為3,a?數(shù)組中的值為
|?1?9?7?|?|?3?9?7?|?|?2?3?8?|則返回主程序后a數(shù)組中的值應為?|?6?9?8?|??|?4?5?6?|??|?12?15?18|?
注意:?部分源程序存在文件PROG1.C中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
#define?N?5?
int?fun?(?int?a[][N],?int?n?)?
{?
}?
main?(?)?
{?int?a[N][N],?n,?i,?j;?
printf("*****?The?array?*****\n");?
for?(?i?=0;?i<N;?i++?)?
{?for?(?j?=0;?j<N;?j++?)?
{?a[i][j]?=?rand()%10;?printf(?"%4d",?a[i][j]?);?}?
printf("\n");?
}?
do?n?=?rand()%10?;?while?(?n?>=3?);?
printf("n?=?%4d\n",n);?
fun?(?a,?n?);?
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ù)組左下三角元素中的值乘以n。?
參考答案:?
int?fun?(?int?a[][N],?int?n?)?
{?
int?i,?j;?
for(i?=?0?;?i?<?N?;?i++)?
for(j?=?0?;?j?<=?i;?j++)?
a[i][j]?*=?n?;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?