




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2023年全國計(jì)算機(jī)等級考試C語言上機(jī)考試題庫學(xué)生練習(xí)用第41套至第60套第四十一套1、程序填空下列給定程序中,函數(shù)fun的功能是:將形參s所指字符串中的所有字母字符順序前移,其他字符順序后移,解決后將新字符串的首地址作為函數(shù)值返回。
例如,若s所指字符串為:"asd123fgh543df",解決后新字符串為:"asdfghdf123543"。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<stdlib.h>#include<string.h>char*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i<n;i++){if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))){/**********found**********/t[j]=__1__;j++;}else{p[k]=s[i];k++;}}/**********found**********/for(i=0;i<__2__;i++)t[j+i]=p[i];/**********found**********/t[j+k]=__3__;returnt;}main(){chars[80];printf("Pleaseinput:");scanf("%s",s);printf("\nTheresultis:%s\n",fun(s));}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)s[i]
(2)k
(3)'\0'或0
【考點(diǎn)分析】
本題考察:數(shù)組元素賦值操作;for循環(huán)語句中循環(huán)變量的取值范圍;字符串結(jié)束標(biāo)記'\0'。
【解題思緒】
填空1:將字符串s中所有字母元素賦給數(shù)組t。
填空2:字符串中所有非字母元素放到字母元素后面,所以取值范圍是0~k。
填空3:最后給字符串加入結(jié)束標(biāo)記'\0'。2、程序修改下列給定程序中函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與t1所指字符串相同的子串替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。規(guī)定t1和t2所指字符串的長度相同。
例如,當(dāng)s所指字符串中的內(nèi)容為:"abcdabfabc",t1所指串中的內(nèi)容為"ab",t2所指子串中的內(nèi)容為"99"時,結(jié)果在w所指的數(shù)組中的內(nèi)容應(yīng)為"abcdabf99c"。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改的程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);/************found************/while(w){p=w;r=t1;while(*r)/************found************/IF(*r==*p){r++;p++;}elsebreak;if(*r=='\0')a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],t1[100],t2[100],w[100];printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf("\nError:strlen(t1)!=strlen(t2)\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)while(*w)
(2)if(*r==*p)
【考點(diǎn)分析】
本題考察:
while循環(huán)語句,C語言中的關(guān)鍵字。
【解題思緒】
(1)這里要判斷的是值的真假,而不是地址,所以改為while
(*w)。
(2)C語言中關(guān)鍵字區(qū)分大小寫,只需運(yùn)營程序,就可以根據(jù)錯誤提醒找到。3、程序設(shè)計(jì)編寫函數(shù)fun,其功能是:將s所指字符串中ASCII值為奇數(shù)的字符刪除,剩余字符形成的新串放在t所指數(shù)組中。
例如,若s所指字符串中的內(nèi)容為:"ABCDEFG12345",其中字符A的ASCII碼值為奇數(shù),字符1的ASCII碼值也為奇數(shù),都應(yīng)當(dāng)刪除,其它依此類推。最后t所指的數(shù)組中的內(nèi)容應(yīng)是:"BDF24"。
注意:部分源程序在文獻(xiàn)PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}-----------------------------------------------------------------------------------------------------------------【參考答案】
void
fun(char
*s,char
t[])
{
int
i,j=0,n;
n=strlen(s);
for(i=0;i<n;i++)
/*找出ASCII碼值為偶數(shù)的字符依次存入數(shù)組中*/
if(s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]='\0';
}
【考點(diǎn)分析】
本題考察:ASCII碼值為奇數(shù)或偶數(shù)的鑒定方法,同時掌握刪除字符的思想,即重新保存非刪除字符。
【解題思緒】
要刪除ASCII碼值為奇數(shù)的字符,也就是要保存ASCII碼值為偶數(shù)的字符,由于最終是規(guī)定出剩余字符形成的新串,所以本題的算法是對原字符串從頭到尾掃描,并找出ASCII碼值為偶數(shù)的字符依次存入數(shù)組中。第四十二套1、程序填空給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點(diǎn)數(shù)寫到文本文獻(xiàn)中,再用字符串方式從此文本文獻(xiàn)中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點(diǎn)數(shù),然后將其顯示在屏幕上。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并把下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所編寫的若干表達(dá)式或語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found**********/__1__fp;charstr[100],str1[100],str2[100];inta1;doublef1;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("\nTheresult:\n\n%s%d%f\n",str,a1,f1);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)FILE*
(2)fclose(fp)
(3)fp
【解題思緒】
填空1:從使用fp=fopen("file1.txt","w")可知fp應(yīng)當(dāng)是文獻(xiàn)類型指針,因此本空因該填寫FILE*。
填空2:當(dāng)對fp作打開操作的時候,并進(jìn)行不同的操作前,應(yīng)當(dāng)對其關(guān)閉,由于在第一次打開時是對fp進(jìn)行寫操作,而在第二次打開后進(jìn)行的是讀操作,因此應(yīng)當(dāng)先對fp進(jìn)行關(guān)閉,本空填fclose(fp)。
填空3:fscanf()是把文本文獻(xiàn)輸出,因此本空只能填寫fp。2、程序修改下列給定程序中,函數(shù)fun的功能是:對N名學(xué)生的學(xué)習(xí)成績,按從高到低的順序找出前m(m≤10)名學(xué)生來,并將這些學(xué)生的數(shù)據(jù)存放在一個動態(tài)分派的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)。-----------------------------------------------------------------------------------------------------------------#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#include<malloc.h>#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/*************found**************/*t=calloc(m,sizeof(STU));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].num=b[j].num;t[k].s=b[j].s;b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i<N;i++)fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].s);fprintf(pf,"\n\n");}voidmain(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}};STU*pOrder;inti,m;system("CLS");printf("*****THERESULT*****\n");outresult(a,stdout);printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10){printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);}pOrder=fun(a,m);printf("*****THERESULT*****\n");printf("Thetop:\n");for(i=0;i<m;i++)printf("%s%d\n",pOrder[i].num,pOrder[i].s);free(pOrder);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)t=calloc(m,sizeof(STU));
(2)t[k]=b[j];
【解題思緒】
(1)calloc應(yīng)用于分派內(nèi)存空間。調(diào)用形式為
(類型說明符*)calloc(n,size),功能:在內(nèi)存動態(tài)存儲區(qū)中分派n塊長度為"size"字節(jié)的連續(xù)區(qū)域,函數(shù)的返回值為該區(qū)域的首地址,(類型說明符*)用于強(qiáng)制類型轉(zhuǎn)換。calloc函數(shù)與malloc
函數(shù)的區(qū)別在于calloc函數(shù)一次可以分派n塊區(qū)域。例如,ps=(struct
stu*)
calloc(2,sizeof
(struct
stu));,其中的sizeof(struct
stu)是求stu的結(jié)構(gòu)長度。該語句的意思是:按stu的長度分派兩塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。在本題中不用考慮那么復(fù)雜,根據(jù)定義類型STU
b[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的錯誤。
(2)t[k].num=b[j].num的錯誤旨在考核對結(jié)構(gòu)體概念的掌握和靈活應(yīng)用限度。3、程序設(shè)計(jì)請編寫函數(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)容應(yīng)當(dāng)是:
2
3
4
5
6
7
8
9
10
注意:部分源程序在文獻(xiàn)PROG1.C中。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#defineN80intfun(inta[],intn){}voidmain(){FILE*wf;inta[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("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);n=fun(a,n);printf("\n\nThedataafterdeleted:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");/******************************/wf=fopen("out.dat","w");for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);fclose(wf);/*****************************/}-----------------------------------------------------------------------------------------------------------------【參考答案】
int
fun(int
a[],
int
n)
{
int
i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])
/*若該數(shù)與前一個數(shù)不相同,則要保存*/
a[j++]=a[i];
return
j;
/*返回不相同數(shù)的個數(shù)*/
}
【解題思緒】
該程序的流程是:定義變量i和j,其中j用于控制刪除后剩下的數(shù)在數(shù)組中的下標(biāo),i用于搜索原數(shù)組中的元素。j始終是新數(shù)組中最后一個元素的下一個元素的下標(biāo),所以if語句中的條件是a[j-1]!=a[i],其中a[j-1]就是新數(shù)組中的最后一個元素,若條件成立,則表達(dá)出現(xiàn)了不同的值,所以a[i]要保存到新數(shù)組中。注意本題中i和j的初值都要從1開始,該算法只能用于數(shù)組已排序的題目中。第四十三套1、程序填空下列給定程序中,函數(shù)fun的功能是:計(jì)算N×N矩陣的主對角線元素和反向?qū)蔷€元素之和,并作為函數(shù)值返回。規(guī)定先累加主對角線元素中的值,再累加反向?qū)蔷€元素中的值。
例如,若N=3,有下列矩陣:
一方面累加1、5、9,然后累加3、5、7,函數(shù)返回值為30。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#defineN4fun(intt[][N],intn){inti,sum;/**********found**********/___1___;for(i=0;i<n;i++)/**********found**********/sum+=___2___;for(i=0;i<n;i++)/**********found**********/sum+=t[i][n-i-___3___];returnsum;}main(){intt[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",t[i][j]);printf("\n");}printf("Theresultis:%d",fun(t,N));}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)
sum=0
(2)
t[i][i]
(3)
1
【考點(diǎn)分析】
本題考察:變量初始化;N×N矩陣對角線下標(biāo)如何表達(dá);累加操作。
【解題思緒】
填空1:變量sum用來儲存"和"結(jié)果,所以將其初始化為0。
填空2:從題目中我們可以了解到,主對角線元素的行和列下標(biāo)是相同的,所以應(yīng)填入t[i][i]。
填空3:對于反向?qū)蔷€元素的行和列的下標(biāo),它們的關(guān)系是相加和為n-1,所以應(yīng)填入1。2、程序修改下列給定程序中函數(shù)fun和funx的功能是:用二分法求方程
的一個根,并規(guī)定絕對誤差不超過0.001。
例如,若給m輸入-100,n輸入90,則函數(shù)求得的一個根為2.000。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<math.h>doublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen){/************found************/intr;r=(m+n)/2;/************found************/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r; elsen=r; r=(m+n)/2;}returnr;}main(){doublem,n,root;printf("Entermn:\n");scanf("%lf%lf",&m,&n);root=fun(m,n);printf("root=%6.3f\n",root);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)double
r;
(2)while
(fabs(n-m)>0.001)
【考點(diǎn)分析】
本題考察:變量數(shù)據(jù)類型;while循環(huán)語句。
【解題思緒】
(1)程序中我們會發(fā)現(xiàn)r=(m+n)/2,而m和n都是double型的,并且根據(jù)題意可知,變量r需要定義為double型。
(2)絕對誤差不超過0.001,所以循環(huán)條件應(yīng)為fabs(n-m)>0.001。3、程序設(shè)計(jì)規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:除了字符串前導(dǎo)和尾部的*號外,將串中其它的*號所有刪除。形參h已指向字符串中第一個字母,形參p指向字符串的中最后一個字母。在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
例如,若字符串中的內(nèi)容為****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:****ABCDEFG********。
在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
注意:部分源程序在文獻(xiàn)PROG1.C中。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>voidfun(char*a,char*h,char*p){}main(){chars[81],*t,*f;voidNONO();printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t--;while(*t=='*')t--;while(*f=='*')f++;fun(s,f,t);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/FILE*in,*out;inti;chars[81],*t,*f;in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);t=f=s;while(*t)t++;t--;while(*t=='*')t--;while(*f=='*')f++;fun(s,f,t);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}-----------------------------------------------------------------------------------------------------------------【參考答案】
void
fun(
char
*a,
char
*h,char
*p
)
{
int
i=0;
char
*q=a;
while(q<h)
{
a[i]=*q;
q++;i++;
}
while(q<p)
{
if(*q!='*')
{
a[i]=*q;i++;
}
q++;
}
while(*q)
{
a[i]=*q;
i++;
q++;
}
a[i]='\0';
}
【考點(diǎn)分析】
本題考察:while循環(huán)語句,注意循環(huán)條件的設(shè)定;指針型變量。
【解題思緒】
本題的重點(diǎn)是要選擇好判斷條件,一方面是需要判斷前導(dǎo)*的結(jié)束,然后判斷是否指向最后一個字母,最后補(bǔ)充尾部*,只要思緒對了就可對的解答。第四十四套1、程序填空下列給定程序中,函數(shù)fun的功能是:找出100到x(x≤999)之間各位上的數(shù)字之和為15的所有整數(shù),并在屏幕輸出;將符合條件的整數(shù)的個數(shù)作為函數(shù)值返回。
例如,當(dāng)n值為500時,各位數(shù)字之和為15的整數(shù)有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有26個。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>intfun(intx){intn,s1,s2,s3,t;/**********found**********/n=__1__;t=100;/**********found**********/while(t<=__2__){s1=t%10;s2=(t/10)%10;s3=t/100;if(s1+s2+s3==15){printf("%d",t);n++;}/**********found**********/__3__;}returnn;}main(){intx=-1;while(x>999||x<0){printf("Pleaseinput(0<x<=999):");scanf("%d",&x);}printf("\nTheresultis:%d\n",fun(x));}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)
0
(2)
x
(3)
t++
【考點(diǎn)分析】
本題考察:變量賦初值;while循環(huán)語句。
【解題思緒】
填空1:變量n用于存放符合條件的整數(shù)的個數(shù),應(yīng)賦初值為0。
填空2:根據(jù)題目規(guī)定,擬定循環(huán)變量t的取值范圍t<=x。
填空3:循環(huán)變量t自增1操作。2、程序修改下列給定程序中函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串之后。
例如:當(dāng)s所指的字符串為"ABCDE"時,t所指的字符串應(yīng)為"EDCBAABCDE"。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>voidfun(char*s,char*t){/************found************/inti;sl=strlen(s);for(i=0;i<sl;i++)/************found************/t[i]=s[sl-i];for(i=0;i<=sl;i++) t[sl+i]=s[i];t[2*sl]='\0';}main(){chars[100],t[100];printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)int
i,
sl;
(2)t[i]=s[sl-i-1];
【考點(diǎn)分析】
本題考察:變量定義;字符串操作。
【解題思緒】
(1)變量s1沒有定義。
(2)該循環(huán)實(shí)現(xiàn)將s串中的字符逆序存入t串中,t[i]相應(yīng)s串中的s[sl-i-1]。3、程序設(shè)計(jì)函數(shù)fun的功能是:將a、b的兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的十位和個位數(shù)依次放在變量c的千位和十位上。
例如,當(dāng)a=45,b=12,調(diào)用該函數(shù)后c=1425。
注意:部分源程序在文獻(xiàn)PROG1.C中。
數(shù)據(jù)文獻(xiàn)IN.DAT中的數(shù)據(jù)不得修改。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<math.h>#include<stdio.h>floatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/**************found**************/while(t>=num){pi=pi+t;n=n+2;s=-s;/**************found**************/t=s%n;}pi=pi*4;returnpi;}main(){floatn1,n2;printf("Enterafloatnumber:");scanf("%f",&n1);n2=fun(n1);printf("%6.4f\n",n2);}-----------------------------------------------------------------------------------------------------------------【參考答案】
void
fun(int
a,
int
b,
long
*c)
{
*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;
}
【考點(diǎn)分析】
本題考察:如何取出數(shù)值n的各個位;知道數(shù)值n的各個位,又如何表達(dá)該數(shù)值;指針型變量的使用。
【解題思緒】
本題的重要問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表達(dá)成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后相應(yīng)乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進(jìn)行指針運(yùn)算。第四十五套1、程序填空下列給定程序中,函數(shù)fun的功能是:在形參ss所指字符串?dāng)?shù)組中,將所有串長超過k的字符串中后面的字符刪除,只保存前面的k個字符。ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>#defineN5#defineM10/**********found**********/voidfun(char(*ss)__1__,intk){inti=0;/**********found**********/while(i<__2__){/**********found**********/ss[i][k]=__3__;i++;}}main(){charx[N][M]={"Create","Modify","Sort","skip","Delete"};inti;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");fun(x,4);printf("\nThestringafterdeleted:\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)[M]
(2)N
(3)'\0'
【考點(diǎn)分析】
本題考察:函數(shù)定義;while循環(huán)語句;字符串結(jié)束標(biāo)記'\0'。
【解題思緒】
填空1:根據(jù)main函數(shù)中函數(shù)調(diào)用語句,擬定函數(shù)定義時的形式參數(shù),所以填入[M]。
填空2:
while循環(huán)語句需要對所有字符串進(jìn)行操作,因此循環(huán)條件是i<N。
填空3:字符串結(jié)尾加入字符串結(jié)束標(biāo)記'\0'。2、程序修改下列給定程序中函數(shù)fun的功能是:根據(jù)以下公式求π值,并作為函數(shù)值返回。
例如,當(dāng)給指定精度的變量eps輸入0.0005時,應(yīng)輸出Pi=3.140578。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改的程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<math.h>#include<stdio.h>doublefun(doubleeps){doubles,t;intn=1;s=0.0;/************found************/t=0;while(t>eps){s+=t;t=t*n/(2*n+1);n++;}/************found************/return(s);}main(){doublex;printf("\nPleaseenteraprecision:");scanf("%lf",&x);printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)t=1.0;
(2)return(s*2);
【考點(diǎn)分析】
本題考察:根據(jù)給定公式求值,因此需要擬定變量定義的數(shù)據(jù)類型以及如何對其進(jìn)行初始化;函數(shù)返回值。
【解題思緒】
該題中,我們一方面檢查變量數(shù)據(jù)類型前后是否一致,由于變量t定義為double型,所以賦值時要賦以實(shí)型數(shù)值。return(s)是一個數(shù)學(xué)錯誤,應(yīng)當(dāng)返回return(s*2)。3、程序設(shè)計(jì)規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:使字符串的前導(dǎo)*號不得多于n個,若多于n個,則刪除多余的*號;若少于或等n個,則不做解決,字符串中間和尾部的*號不刪除。
例如,字符串中的內(nèi)容為:*******A*BC*DEF*G****,若n的值為4,刪除后,字符串中的內(nèi)容應(yīng)當(dāng)是:****A*BC*DEF*G****;若n的值為8,則字符串中的內(nèi)容仍為:*******A*BC*DEF*G****。n的值在主函數(shù)中輸入。
在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>voidfun(char*a,intn){}main(){chars[81];intn;voidNONO();printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/FILE*in,*out;inti,n;chars[81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fscanf(in,"%d",&n);fun(s,n);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}-----------------------------------------------------------------------------------------------------------------【參考答案】
void
fun(
char
*a,
int
n
)
{
int
i=0;
int
k=0;
char
*p,*t;
p=t=a;
/*開始時,p與t同時指向數(shù)組的首地址*/
while(*t=='*')
/*用k來記錄前部星號的個數(shù)*/
{k++;t++;}
if(k>n)
/*假如k大于n,則使p的前部保存n個星號,其后的字符依次存入數(shù)組a中*/
{
while(*p)
{
a[i]=*(p+k-n);
i++;
p++;
}
a[i]='\0';
/*在字符串最后加上結(jié)束標(biāo)記位*/
}
}
【考點(diǎn)分析】
本題考察:循環(huán)判斷語句;字符串的操作。
【解題思緒】
字符串中前導(dǎo)*號不能多于n個,多余的刪除。一方面需要通過while循環(huán)記錄字符串前導(dǎo)*號的個數(shù),然后通過if條件語句完畢前導(dǎo)*號的個數(shù)和n的比較,假如前導(dǎo)*號多于n個,需要把n個*號和其余字符重新保存。第四十六套1、程序填空下列給定程序中,函數(shù)fun的功能是:將自然數(shù)1~10及其平方根寫到名為myfile3.txt的文本文獻(xiàn)中,然后再順序讀出顯示在屏幕上。
請?jiān)诔绦蛳庐嬀€處填入對的的內(nèi)容并把下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<math.h>#include<stdio.h>intfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,"w"))==NULL)return0;for(i=1;i<=10;i++)/**********found**********/fprintf(___1___,"%d%f\n",i,sqrt((double)i));printf("\nSucceed!!\n");/**********found**********/___2___;printf("\nThedatainfile:\n");/**********found**********/if((fp=fopen(___3___,"r"))==NULL)return0;fscanf(fp,"%d%f",&n,&x);while(!feof(fp)){printf("%d%f\n",n,x);fscanf(fp,"%d%f",&n,&x);}fclose(fp);return1;}main(){charfname[]="myfile3.txt";fun(fname);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)fp
(2)fclose(fp)
(3)fname
【考點(diǎn)分析】
本題考察:文獻(xiàn)的相關(guān)操作,fprintf函數(shù)與前printf功能相似,區(qū)別在于fprintf函數(shù)的對象不是鍵盤和顯示器,而是磁盤文獻(xiàn);文獻(xiàn)打開和關(guān)閉函數(shù)fopen和fclose的使用。
【解題思緒】
填空1:fprintf函數(shù)的形式是:fprintf(文獻(xiàn)指針,格式字符串,輸出表列);,所以填入文獻(xiàn)指針fp。
填空2:文獻(xiàn)一旦使用完畢,應(yīng)使用關(guān)閉函數(shù)fclose()將文獻(xiàn)關(guān)閉,以避免發(fā)生文獻(xiàn)數(shù)據(jù)丟失等錯誤。
填空3:fopen函數(shù)用來打開一個文獻(xiàn),其一般形式為:文獻(xiàn)指針名=fopen(文獻(xiàn)名,使用文獻(xiàn)方式);因此應(yīng)填入文獻(xiàn)名fname。2、程序修改下列給定程序中fun函數(shù)功能是:將n個無序整數(shù)從小到大排序。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<stdlib.h>fun(intn,int*a){inti,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(intn,int*z){inti;for(i=1;i<=n;i++,z++){printf("%4d",*z);if(!(i%10))printf("\n");}printf("\n");}main(){intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;printf("\n\nBeforesorting%dnumbers:\n",n);putarr(n,aa);fun(n,aa);printf("\nAftersorting%dnumbers:\n",n);putarr(n,aa);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)for(i=j+1;i<n;i++)
(2)p=i;
【考點(diǎn)分析】
本題考察:for循環(huán)語句;需明確各個變量含義。
【解題思緒】
該程序是對n個無序數(shù)實(shí)現(xiàn)從小到大的排序,先找出整數(shù)序列的最小項(xiàng),置于指針第1個元素的位置;再找出次小項(xiàng),置于第2個元素的位置;之后順次解決后續(xù)元素。
(1)數(shù)組的長度為n,所以最后一個元素的下標(biāo)值為n-1,i的取值范圍應(yīng)當(dāng)涉及此下標(biāo)值。
(2)p是中間變量,存放值較小的元素下標(biāo)。3、程序設(shè)計(jì)編寫函數(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。
注意:部分源程序在文獻(xiàn)PROG1.C中。
數(shù)據(jù)文獻(xiàn)IN.DAT中的數(shù)據(jù)不得修改。
請勿動改主函數(shù)的main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}fclose(rf);fclose(wf);}-----------------------------------------------------------------------------------------------------------------【參考答案】
void
fun(int
a,int
b,long
*c)
{
*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;
}
【考點(diǎn)分析】
本題考察:如何取出數(shù)值n的各個位;知道數(shù)值n的各個位,又如何表達(dá)該數(shù)值;指針型變量的使用。
【解題思緒】
本題的重要問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表達(dá)成c中相應(yīng)的位數(shù)。由于a和b都是只有兩位的整數(shù),所以分別對它們除10可得到它們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后相應(yīng)乘以1000、100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時要進(jìn)行指針運(yùn)算。第四十七套1、程序填空下列給定程序中,函數(shù)fun的功能是:將形參n所指變量中,各位上為偶數(shù)的數(shù)去掉,剩余的數(shù)按本來從高位到低位的順序組成一個新數(shù),并通過形參指針n傳回所指變量。
例如,若輸入一個數(shù)27638496,則新數(shù)為739。
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>voidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=1;while(*n)/**********found**********/{t=*n%__1__;/**********found**********/if(t%2!=__2__){x=x+t*i;i=i*10;}*n=*n/10;}/**********found**********/*n=__3__;}main(){unsignedlongn=-1;while(n>99999999||n<0){printf("Pleaseinput(0<n<):");scanf("%ld",&n);}fun(&n);printf("\nTheresultis:%ld\n",n);}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)10
(2)0
(3)x
【考點(diǎn)分析】
本題考察:求余運(yùn)算;if語句條件表達(dá)式。
【解題思緒】
填空1:通過t對10求余,取出該數(shù)值的各個位。
填空2:通過if條件語句實(shí)現(xiàn)奇偶數(shù)的鑒定。假如條件表達(dá)式對2求余為0即是偶數(shù),反之是奇數(shù)。
填空3:最后將剩余的數(shù)賦給n指問的元素。2、程序修改下列給定程序中函數(shù)fun的功能是:計(jì)算n!。
例如,給n輸入5,則輸出120.000000。
請改正程序中的錯誤,使它能得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)MODI1.C中,不得增行或刪行,也不得更改的程序的結(jié)構(gòu)!-----------------------------------------------------------------------------------------------------------------#include<stdio.h>doublefun(intn){doubleresult=1.0;/************found************/ifn==0return1.0;while(n>1&&n<170)/************found************/result=n--;returnresult;}main(){intn;printf("InputN:");scanf("%d",&n);printf("\n\n%d!=%lf\n\n",n,fun(n));}-----------------------------------------------------------------------------------------------------------------【參考答案】
(1)if(n==0)
(2)result
*=n--;或{result
*=n;
n--;}
【考點(diǎn)分析】
本題考察:if語句條件表達(dá)式,需注意其格式;計(jì)算階乘的方法。
【解題思緒】
(1)這里是一個簡樸的格式錯誤,if條件應(yīng)當(dāng)加括號。
(2)根據(jù)階乘的概念,從n開始,n!=n*(n-1)!,直到1,所以應(yīng)當(dāng)為result
*=n--;。3、程序設(shè)計(jì)請編寫函數(shù)fun,其功能是:將一個數(shù)字字符串轉(zhuǎn)換為一個整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。
例如,若輸入字符串"-1234",則函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。
注意:部分源程序在文獻(xiàn)PROG1.C中。
請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。-----------------------------------------------------------------------------------------------------------------#include<stdio.h>#include<string.h>longfun(char*p){}main()/*主函數(shù)*/{chars[6];voidNONO();longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%ld\n",n);NONO();}voidNONO(){/*本函數(shù)用于打開文獻(xiàn),輸入數(shù)據(jù),調(diào)用函數(shù),輸出數(shù)據(jù),關(guān)閉文獻(xiàn)。*/FILE*fp,*wf;inti;chars[20];longn;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%s",s);n=fun(s);fprintf(wf,"%ld\n",n);}fclose(fp);fclose(wf);}-----------------------------------------------------------------------------------------------------------------【參考答案】
long
fun
(char
*p)
{
long
n=0;
int
flag=1;
if(*p=='-')
/*負(fù)數(shù)時置flag為-1*/
{p++;flag=
-1;}
else
if(*p=='+')
/*正數(shù)時置flag為1*/
p++;
while(*p!='\0')
{
n=n*10+*p-'0';
/*將字符串轉(zhuǎn)成相應(yīng)的整數(shù)*/
p++;
}
return
n*flag;
}
【考點(diǎn)分析】
本題考察:字符串轉(zhuǎn)整數(shù)算法。
【解題思緒】
if()語句的作用是判斷該字符串應(yīng)當(dāng)為正數(shù)還是負(fù)數(shù),while()循環(huán)的作用是將字符串轉(zhuǎn)成相應(yīng)的整數(shù)。注意:*p是一個字符(如'9'、'4'),并不是一個數(shù),要將其轉(zhuǎn)成相應(yīng)的數(shù)字需令其減去′0′
(不是′\0′),即*p-′0′就得到*p這個字符的相應(yīng)數(shù)字,如′0′-′0′=0、′8′-′0′=8等。必須在程序的前面加#include<stdlib.h>,函數(shù)atol()的作用是將字符串p轉(zhuǎn)成長整型數(shù),它是一個庫函數(shù)。
【解題寶典】
要實(shí)現(xiàn)字符串轉(zhuǎn)整數(shù)操作,并且不允許使用相應(yīng)的字符串函數(shù),因此我們需要通過字符減去'0'來實(shí)現(xiàn),即*p-'0'就得到*p這個字符的相應(yīng)數(shù)字。
掌握以下語句:
while(*p!=='\0')
{
n=n*10+*p-'0';
p++;
}第四十八套1、程序填空下列給定程序中,函數(shù)fun的功能是:將N×N矩陣中元素的值按列向右移動1個位置,右邊被移出矩陣的元素繞回左邊第1列。
例如,N=3,有下列矩陣:
計(jì)算結(jié)果為
:
請?jiān)诔绦虻南庐嬀€處填入對的的內(nèi)容并將下畫線刪除,使程序得出對的的結(jié)果。
注意:部分源程序在文獻(xiàn)BLANK1.C中。
不得增行或刪行,也不得更改程序的結(jié)構(gòu)!-----------------------------------------------
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 賓館公寓轉(zhuǎn)讓合同范本
- 2025年護(hù)欄清洗車合作協(xié)議書
- 代表企業(yè)簽合同范例
- 代轉(zhuǎn)店鋪合同范本
- 農(nóng)村新建樓房承包合同范本
- 北京裝飾工程合同范本
- 合作廠家合同范本
- 合同范本 解釋權(quán)
- 主體勞務(wù)簡易合同范本
- 勞務(wù)派遣合同范本封面
- 模板安裝三檢記錄表
- 高考語言運(yùn)用題之標(biāo)點(diǎn)符號的表達(dá)效果專題訓(xùn)練
- 安全費(fèi)用提取、使用臺賬
- 部編版六年級語文下冊全冊課件PPT
- 北京市歷年中考語文現(xiàn)代文之記敘文閱讀25篇(2003-2021)
- 新教科版六年級下冊科學(xué)全冊重點(diǎn)題型練習(xí)課件(含答案)
- 鋼筋平法識圖與鋼筋算量經(jīng)典課件
- 現(xiàn)代漢語課件 副詞
- 中國古典文獻(xiàn)學(xué)(全套)
- 如何撰寫課程故事94
- 年處理量48萬噸重整裝置芳烴精餾的工藝設(shè)計(jì)-二甲苯塔
評論
0/150
提交評論