第20套:?
給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中小于平均值的數(shù)據(jù)移至數(shù)組的前部,大于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。?
例如,有10個正數(shù):46?30?32?40?6?17?45?15?48?26,平均值為:?30.500000?
移動后的輸出為:30?6?17?15?26?46?32?40?45?48?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdlib.h>?
#include?<stdio.h>?
#define?N?10?
double?fun(double?*x)?
{?int?i,?j;?double?av,?y[N];?
av=0;?
/**********found**********/?
for(i=0;?i<N;?i++)?av?+=__1__;?
for(i=j=0;?i<N;?i++)?
if(?x[i]<av?){?
/**********found**********/?
y[j]=x[i];?x[i]=-1;?__2__;}?
i=0;?
while(i<N)?
{?if(?x[i]!=?-1?)?y[j++]=x[i];?
/**********found**********/?
__3__;?
}?
for(i=0;?i<N;?i++)x[i]?=?y[i];?
return?av;?
}?
main()?
{?int?i;?double?x[N];?
for(i=0;?i<N;?i++){?x[i]=rand()%50;?printf("%4.0f?",x[i]);}?
printf("\n");?
printf("\nThe?average?is:?%f\n",fun(x));?
printf("\nThe?result?:\n",fun(x));?
for(i=0;?i<N;?i++)?printf("%5.0f?",x[i]);?
printf("\n");?
}?
解題思路:?
第一處:求出N個數(shù)的平均值,所以應(yīng)填:N。?
第二處:利用for循環(huán)語句,把數(shù)組x中小于平均值的數(shù),依次存放到數(shù)組y中,其中位置由變量j來控制,所以應(yīng)填:j++。?
第三處:i是while循環(huán)體的控制變量,每做一次循環(huán)均要加1。?
***************************************************?
給定程序MODI1.C中函數(shù)?fun?的功能是:統(tǒng)計字符串中各元音字母(即:A、E、I、O、U)的個數(shù)。注意:字母不分大、小寫。?
例如:若輸入:THIs?is?a?boot,則輸出應(yīng)該是:1、0、2、2、0。請改正程序中的錯誤,使它能得出正確的結(jié)果。?
注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
fun?(?char?*s,?int?num[5]?)?
{?int?k,?i=5;?
for?(?k?=?0;?k<i;?k++?)?
/**********found**********/?
num[i]=0;?
for?(;?*s;?s++)?
{?i?=?-1;?
/**********found**********/?
switch?(?s?)?
{?case?'a':?case?'A':?{i=0;?break;}?
case?'e':?case?'E':?{i=1;?break;}?
case?'i':?case?'I':?{i=2;?break;}?
case?'o':?case?'O':?{i=3;?break;}?
case?'u':?case?'U':?{i=4;?break;}?
}?
if?(i?>=?0)?
num[i]++;?
}?
}?
main(?)?
{?char?s1[81];?int?num1[5],?i;?
printf(?"\nPlease?enter?a?string:?"?);?gets(?s1?);?
fun?(?s1,?num1?);?
for?(?i=0;?i?<?5;?i++?)?printf?("%d?",num1[i]);?printf?("\n");?
}?
解題思路:?
第一處:num初始化錯誤,應(yīng)為:num[k]=0;。?
第二處:由于s是指針型變量,所以應(yīng)改為:switch(*s)。?
***************************************************?
請編寫函數(shù)?fun,函數(shù)的功能是求出二維數(shù)組周邊元素之和,作為函數(shù)值返回。二維數(shù)組中的值在主函數(shù)中賦予。?
例如:二維數(shù)組中的值為1?3?5?7?9?
2?9?9?9?4?
6?9?9?9?8?
1?3?5?7?0?
則函數(shù)值為?61。?
注意:?部分源程序存在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
#define?M?4?
#define?N?5?
int?fun?(?int?a[M][N]?)?
{?
}?
main(?)?
{?int?aa[M][N]={{1,3,5,7,9},?
{2,9,9,9,4},?
{6,9,9,9,8},?
{1,3,5,7,0}};?
int?i,?j,?y;?
clrscr();?
printf?(?"The?original?data?is?:?\n"?);?
for?(?i=0;?i<M;?i++?)?
{?for?(?j?=0;?j<N;?j++?)?printf(?"%6d",?aa[i][j]?);?
printf?("\n");?
}?
y?=?fun?(?aa?);?
printf(?"\nThe?sum:?%d\n"?,?y?);?
printf("\n");?
NONO(?);?
}?
解題思路:?
本題是統(tǒng)計二維數(shù)組周邊元素值之和,但要注意的是不要重復(fù)計算四個角上的元素值,結(jié)果作為函數(shù)值返回。?
參考答案:?
int?fun?(?int?a[M][N]?)?
{?
int?tot?=?0,?i,?j?;?
for(i?=?0?;?i?<?N?;?i++)?{?
tot?+=?a[0][i]?;?
tot?+=?a[M-1][i]?;?
}?
for(i?=?1?;?i?<?M?-?1?;?i++)?{?
tot?+=?a[i][0]?;?
tot?+=?a[i][N-1]?;?
}?
return?tot?;?
}?
?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第21套:?
給定程序中,函數(shù)fun的功能是:計算形參x所指數(shù)組中N個數(shù)的平均值(規(guī)定所有數(shù)均為正數(shù)),將所指數(shù)組中大于平均值的數(shù)據(jù)移至數(shù)組的前部,小于等于平均值的數(shù)據(jù)移至x所指數(shù)組的后部,平均值作為函數(shù)值返回,在主函數(shù)中輸出平均值和移動后的數(shù)據(jù)。?
例如,有10個正數(shù):46?30?32?40?6?17?45?15?48?26,平均值為:?30.500000?
移動后的輸出為:46?32?40?45?48?30?6?17?15?26?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,?使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdlib.h>?
#include?<stdio.h>?
#define?N?10?
double?fun(double?*x)?
{?int?i,?j;?double?s,?av,?y[N];?
s=0;?
for(i=0;?i<N;?i++)?s=s+x[i];?
/**********found**********/?
av=__1__;?
for(i=j=0;?i<N;?i++)?
if(?x[i]>av?){?
/**********found**********/?
y[__2__]=x[i];?x[i]=-1;}?
for(i=0;?i<N;?i++)?
/**********found**********/?
if(?x[i]!=?__3__)?y[j++]=x[i];?
for(i=0;?i<N;?i++)x[i]?=?y[i];?
return?av;?
}?
main()?
{?int?i;?double?x[N];?
for(i=0;?i<N;?i++){?x[i]=rand()%50;?printf("%4.0f?",x[i]);}?
printf("\n");?
printf("\nThe?average?is:?%f\n",fun(x));?
printf("\nThe?result?:\n",fun(x));?
for(i=0;?i<N;?i++)?printf("%5.0f?",x[i]);?
printf("\n");?
}?
解題思路:?
第一處:計算N個數(shù)的平均值,所以應(yīng)填:s/N。?
第二處:利用for循環(huán)語句,把數(shù)組x中大于平均值的數(shù),依次存放到數(shù)組y中,同時把數(shù)組x上的該數(shù)置為-1,其中位置由變量j來控制,所以應(yīng)填:j++。
第三處:再利用循環(huán)把不是-1的數(shù),依次仍存放到數(shù)組y中,所以應(yīng)填:-1。?
***************************************************?
給定程序MODI1.C的功能是:讀入一個英文文本行,將其中每個單詞的第一個字母改成大寫,然后輸出此文本行(這里的“單詞”是指由空格隔開的字符串)。?
例如,若輸入:I?am?a?student?to?take?the?examination.,?
則應(yīng)輸出:I?Am?A?Student?To?Take?The?Examination.。?
請改正程序中的錯誤,使程序能得出正確的結(jié)果。?
注意:不要改動?main?函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<ctype.h>?
#include?<string.h>?
/************found************/?
include?<stdio.h>?
/************found************/?
upfst?(?char?p?)?
{?int?k=0;?
for?(?;?*p;?p++?)?
if?(?k?)?
{?if?(?*p?==?'?'?)?k?=?0;?}?
else?if?(?*p?!=?'?'?)?
{?k?=?1;?*p?=?toupper(?*p?);?}?
}?
main(?)?
{?char?chrstr[81];?
printf(?"\nPlease?enter?an?English?text?line:?"?);?gets(?chrstr?);?
printf(?"\n\nBefore?changing:\n?%s",?chrstr?);?
upfst(?chrstr?);?
printf(?"\nAfter?changing:\n?%s\n",?chrstr?);?
}?
解題思路:?
第一處:包含頭文件的標(biāo)識錯誤,在include前漏寫了#。?
第二處:由于傳入的參數(shù)是字符串,所以應(yīng)為upfst(char?*p)。?
***************************************************?
程序定義了N×N的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)fun,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返給主函數(shù)中的s。?
例如:a?數(shù)組中的值為|0?1?2?7?9|?
|1?9?7?4?5|?
a?=?|2?3?8?3?1|?
|4?5?6?8?2|?
|5?9?1?4?1|?
則返回主程序后s的值應(yīng)為:?3.375。?
注意:?部分源程序存在文件PROG1.C文件中。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
?
#include?<stdlib.h>?
#define?N?5?
double?fun?(?int?w[][N]?)?
{?
}?
main?(?)?
{?int?a[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};?
int?i,?j;?
double?s?;?
printf("*****?The?array?*****\n");?
for?(?i?=0;?i<N;?i++?)?
{?for?(?j?=0;?j<N;?j++?)?
{?printf(?"%4d",?a[i][j]?);?}?
printf("\n");?
}?
s?=?fun?(?a?);?
printf?("*****?THE?RESULT?*****\n");?
printf(?"The?sum?is?:?%lf\n",s?);?
NONO(?);?
}?
解題思路:?
本題是統(tǒng)計二維數(shù)組周邊元素值的平均值,但要注意的是不要重復(fù)計算四個角上的元素值。?
參考答案:?
double?fun?(?int?w[][N]?)?
{?
int?i,?j,?n=0;?
double?sum=0;?
for?(?i?=0;?i<N;?i++?)?{?
sum+=w[0][i]+w[N-1][i];?n+=2;?
}?
for?(?i?=1;?i<N?-?1;?i++?)?{?
?
sum?+=w[i][0]+w[i][N-1];?
n+=2;?
}?
return?sum/n;?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?
第22套:?
給定程序中,函數(shù)fun的功能是:將自然數(shù)1~10以及它們的平方根寫到名為?myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。?
請在程序的下劃線處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。?
注意:源程序存放在考生文件夾下的BLANK1.C中。?
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<math.h>?
#include?<stdio.h>?
int?fun(char?*fname?)?
{?FILE?*fp;?int?i,n;?float?x;?
if((fp=fopen(fname,?"w"))==NULL)?return?0;?
?
for(i=1;i<=10;i++)?
/**********found**********/?
fprintf(___1___,"%d?%f\n",i,sqrt((double)i));?
printf("\nSucceed!!\n");?
/**********found**********/?
___2___;?
printf("\nThe?data?in?file?:\n");?
/**********found**********/?
if((fp=fopen(___3___,"r"))==NULL)?
return?0;?
fscanf(fp,"%d%f",&n,&x);?
while(!feof(fp))?
{?printf("%d?%f\n",n,x);?fscanf(fp,"%d%f",&n,&x);?}?
fclose(fp);?
return?1;?
}?
main()?
{?char?fname[]="myfile3.txt";?
fun(fname);?
}?
解題思路:?
本題要求所求出的數(shù)寫入到指定的文件中保存。程序中共有三處要填上適當(dāng)?shù)膬?nèi)容,使程序能運行出正確的結(jié)果。?
第一處:int?fprintf(FILE?*stream,?const?char?*format?[,argument,?…]);?因此本處只能填寫文件流的變量fp。?
第二處:由于文件打開寫操作,所以必須要關(guān)閉,因此,只能填寫關(guān)閉文件的函數(shù)fclose(fp)。?
第三處:由于本題要把剛寫入文件中的數(shù)據(jù)重新顯示出來,讀方式已經(jīng)給出,但沒有給出文件名,所以本處只能寫文件名變量fname或者直接給出文件名"myfile3.dat"。?
***************************************************?
給定程序MODI1.C中fun函數(shù)的功能是:將n個無序整數(shù)從小到大排序。?
請改正程序中的錯誤,使它能得出正確的結(jié)果。?
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!?
給定源程序:?
#include?<stdio.h>?
#include?<stdlib.h>?
fun?(?int?n,?int?*a?)?
{?int?i,?j,?p,?t;?
for?(?j?=?0;?j<n-1?;?j++?)?
{?p?=?j;?
/************found************/?
for?(?i=j+1;?i<n-1?;?i++?)?
if?(?a[p]>a[i]?)?
/************found************/?
t=i;?
if?(?p!=j?)?
{?t?=?a[j];?a[j]?=?a[p];?a[p]?=?t;?}?
?
}?
}?
putarr(?int?n,?int?*z?)?
{?int?i;?
for?(?i?=?1;?i?<=?n;?i++,?z++?)?
{?printf(?"%4d",?*z?);?
if?(?!(?i%10?)?)?printf(?"\n"?);?
}?printf("\n");?
}?
main()?
{?int?aa[20]={9,3,0,4,1,2,5,6,8,10,7},?n=11;?
printf(?"\n\nBefore?sorting?%d?numbers:\n",?n?);?putarr(?n,?aa?);?
fun(?n,?aa?);?
printf(?"\nAfter?sorting?%d?numbers:\n",?n?);?putarr(?n,?aa?);?
}?
解題思路:?
第一處:for循環(huán)的終止值應(yīng)該<n或者是<=n-1。?
第二處:使用臨時變量p來保存最小值位置i,所以應(yīng)改為:p=i;。?
***************************************************?
函數(shù)fun的功能是:?將兩個兩位數(shù)的正整數(shù)a、b合并形成一個整數(shù)放在c中。?
合并的方式是:?將a數(shù)的十位和個位數(shù)依次放在c數(shù)的個位和百位上,?b數(shù)的十位和個位數(shù)依次放在c數(shù)的十位和千位上。?
例如,?當(dāng)a=45,?b=12時,?調(diào)用該函數(shù)后,?c=2514。?
注意:?部分源程序存在文件PROG1.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。?
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。?
給定源程序:?
#include?<stdio.h>?
void?fun(int?a,?int?b,?long?*c)?
{?
}?
main()?
{?int?a,b;?long?c;?
printf("Input?a,?b:");?
scanf("%d,%d",?&a,?&b);?
fun(a,?b,?&c);?
printf("The?result?is:?%ld\n",?c);?
NONO();?
}?
解題思路:?
本題是給出兩個兩位數(shù)的正整數(shù)分別取出各位上的數(shù)字,再按條件組成一個新數(shù)。?
取a十位數(shù)字的方法:a/10?
取a個位數(shù)字的方法:a%10?
參考答案:?
void?fun(int?a,?int?b,?long?*c)?
{?
*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);?
}?
※※※※※※※※※※※※※※※※※※※※※※※※※?