第一篇:2018年大學(xué)c語(yǔ)言機(jī)期未試考題
1#####
在考生文件夾下的給定程序modi53.c中,函數(shù)fun的功能是:將從鍵盤上輸入的每個(gè)單詞的第一個(gè)字母寫為大寫字母,輸入時(shí)各單詞必須用空格隔開,用'.'結(jié)束輸入。
請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include
int fun(char *c,int status){ /************found************/
if(c==' ')return 1;
else
{
if(status && *c<='z' && *c>='a')/************found************/
c+='A'-'a';
return 0;
} }
main(){
int flag=1;
char ch;
printf(“請(qǐng)輸入一字符串,用點(diǎn)號(hào)結(jié)束輸入!n”);
do
{
ch=getchar();
flag=fun(&ch,flag);
putchar(ch);
}while(ch!='.');
printf(“n”);} 第1 處內(nèi)容填寫有誤
第[1]處操作錯(cuò)誤
題面要求操作:內(nèi)容為[if(*c==' ')return 1;]
實(shí)際操作結(jié)果:內(nèi)容為[if(c=='')return1;] 第2 處內(nèi)容填寫有誤
第[2]處操作錯(cuò)誤
題面要求操作:內(nèi)容為[*c+='A'-'a';]
實(shí)際操作結(jié)果:內(nèi)容為[c+='A'-'a';]
2##### 請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出3到n之間所有素?cái)?shù)的平方根之和。
例如,在主函數(shù)中從鍵盤給n輸入100后,輸出為:sum=148.874270。
注意:要求n的值大于2但不大于100。
部分源程序在考生文件夾下的文件prog192.c中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語(yǔ)句
#include
} main(){ int n;
double sum;
printf(“nnInput n: ”);scanf(“%d”,&n);
sum=fun(n);
printf(“nnsum=%fnn”,sum);
NONO();} NONO(){/* 請(qǐng)?jiān)诖撕瘮?shù)內(nèi)打開文件,輸入測(cè)試數(shù)據(jù),調(diào)用 fun 函數(shù),輸出數(shù)據(jù),關(guān)閉文件。*/
FILE *rf, *wf;int n, i;double s;
rf = fopen(“bc192.in”, “r”);
wf = fopen(“bc192.out”, “w”);
for(i = 0;i < 10;i++){
fscanf(rf, “%d”, &n);
s = fun(n);
fprintf(wf, “%lfn”, s);
}
fclose(rf);fclose(wf);}
本題的考核點(diǎn)是查找素?cái)?shù)的算法以及開根函數(shù)的應(yīng)用。
解題思路:從3到指定數(shù)n,找出所有的素?cái)?shù),素?cái)?shù)的判斷方法是:只能被1和其自身整除,而不能被其它任何數(shù)整除的數(shù);sqrt(x)函數(shù)是計(jì)算x的平方根。
#include
for(i=3;i<=n;i++)
{ for(j=2;j
if(i%j==0)break;
/*如果i能被j整除就說明i不是素?cái)?shù),繼而退出循環(huán)體*/
if(j==i)s=s+sqrt(i);/*sqrt(i)函數(shù)是計(jì)算i的平方根*/
}
return s;/*返回結(jié)果*/
3#
給定程序的功能是求k!(k<13)并通過函數(shù)名傳回主函數(shù)。
例如:若k = 10,則應(yīng)輸出:3628800。
請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。
注意:源程序存放在考生文件夾下的blank20.c中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include
k){ /************found************/
if(k>0)/************found************/
return(k*fun(___2___));/************found************/
else if(k==0)
return 1L;}
main(){ int k = 10;
printf(“%d!=%ldn”, k, fun(k));}
本題主要考查的是函數(shù)的遞歸調(diào)用。
題中第一個(gè)空填“>”:此處為遞歸調(diào)用結(jié)束的條件。
題中第二個(gè)空填“k-1”:此處為遞歸調(diào)用時(shí)返回給調(diào)用函數(shù)的實(shí)參值。
題中第三個(gè)空填“==”:此處判斷k是否為0,若是則將值返回給主函數(shù)。
本評(píng)析僅供參考。
4在考生文件夾下的給定程序modi31.c中,函數(shù)fun的功能是:從N個(gè)字符串中找出最長(zhǎng)的那個(gè)串,并將其地址作為函數(shù)值返回。各字符串在主函數(shù)中輸入,并放入一個(gè)字符串?dāng)?shù)組中。
請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include if(strlen(sp) sp=sq[i];/************found************/ return sq;} main(){char str[N][M],*longest;int i;printf(“Enter %d lines :n”,N);for(i=0;i 程序中的重要思想如下: 1、建立了一個(gè)二維字符串?dāng)?shù)組,用于存放用戶輸入的6個(gè)字符串; 2、建立了一個(gè)指針數(shù)組,目的是用6個(gè)指針分別指向6個(gè)字符串; 3、函數(shù)fun()的形參只有一個(gè),即指針數(shù)組pstr[],這表明要想在函數(shù)fun()中對(duì)6個(gè)字符串進(jìn)行操作,只能通過pstr[]中的6個(gè)指針。 題中第一個(gè)空填“*(pstr+j)”:觀察源程序可以發(fā)現(xiàn),在程序中使用strcmp()函數(shù)是為了判斷字符串str[i]與str[i+1]兩者的大小,在fun()函數(shù)中只能通過指針來表達(dá)各個(gè)字符串,所以應(yīng)當(dāng)填“*(pstr+j)”。 題中第二個(gè)空填“pstr[j]”:對(duì)兩個(gè)字符進(jìn)行比較后,若pstr[i]中的字符比pstr[j]中的字符大,則將pstr[j]中的字符賦給pstr[i]。 題中第三個(gè)空填“p”:對(duì)兩個(gè)字符進(jìn)行比較后,若pstr[i]中的字符比pstr[j]中的字符大,則將pstr[j]和pstr[i]的內(nèi)容進(jìn)行交換。 5請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出下列多項(xiàng)式的值: S=(1─)+…+(──1]);"。 1、程序填空題 給定的程序的功能是調(diào)用fun函數(shù)建立班級(jí)通訊錄。通訊錄中記錄 每位學(xué)生的編號(hào)、姓名和電話號(hào)碼班級(jí)的人數(shù)和學(xué)生的信息從鍵盤 讀入,每個(gè)人的信息作為一個(gè)數(shù)據(jù)塊寫到名為myfile5.dat的二進(jìn)制中。填空:(1)STYPE (2)FILE (3)fp 改錯(cuò):(1)for(i=0;i<=sl;i++)(2)t[2*sl]='
第二篇:C語(yǔ)言機(jī)試試題