2020年度全國計算機等級考試C語言上機考試題庫4160套_第1頁
2020年度全國計算機等級考試C語言上機考試題庫4160套_第2頁
2020年度全國計算機等級考試C語言上機考試題庫4160套_第3頁
2020年度全國計算機等級考試C語言上機考試題庫4160套_第4頁
2020年度全國計算機等級考試C語言上機考試題庫4160套_第5頁
已閱讀5頁,還剩138頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

全國計算機等級考試C語言上機考試題庫

4160套

資料僅供參考

全國計算機等級考試C語言上機考試題庫

學生練習用第41套至第60套

第四十一套

1、程序填空

下列給定程序中,函數(shù)fun的功能是:將形參s所指字符串中的所有字母字符

順序前移,其它字符順序后移,處理后將新字符串的首地址作為函數(shù)值返回。

例如,若s所指字符串為:"asdl23fgh543df”,處理后新字符串為:

"asdfghdf123543”。

請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

ttinclude<stdio.h>

ttinclude<stdlib.h>

#include<string.h>

char*fun(char*s)

{inti,j,k,n;char*p,*t;

n=strlen(s)+l;

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**********/

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));

}

資料僅供參考

【參考答案】

⑴s[i](2)k(3)'\0'或0

【考點分析】

本題考查:數(shù)組元素賦值操作;for循環(huán)語句中循環(huán)變量的取值范圍;字符串結(jié)

束標識'\0'。

【解題思路】

填空1:將字符串s中所有字母元素賦給數(shù)組to

填空2:字符串中所有非字母元素放到字母元素后面,因此取值范圍是。?k。

填空3:最后給字符串加入結(jié)束標識'\0'。

2、程序修改

下列給定程序中函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與tl所

指字符串相同的子串替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。

要求tl和t2所指字符串的長度相同。

例如,當s所指字符串中的內(nèi)容為:"abcdabfabc”,tl所指串中的內(nèi)容為"ab”,

t2所指子串中的內(nèi)容為"99〃時,結(jié)果在w所指的數(shù)組中的內(nèi)容應為

"abcdabf99c”。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改的程序的結(jié)

構(gòu)!

#include<stdio.h>

#include<string.h>

voidfun(char*s,char*tl,char*t2,

char*w)

(

char*p,*r,*a;

strcpy(w,s);

/************foiind************/

資料僅供參考

while(w)

{p=w;r=tl;

while(*r)

/************fourid************/

IF(*r==*p)

{r++;p++;}

elsebreak;

if(*r='\0')a=w;

w++;

)

r=t2;

while(*r){*a=*r;a++;r++;}

}

main()

(

chars[100],tl[100],t2[100],w[100];

printf("\nPleaseenterstringS:");

scanf("%s”,s);

printf(^\nPleaseentersubstringtl:");

scanf(,z%s,z,tl);

資料僅供參考

printf(^XnPleaseentersubstring

scanf("%s”,t2);

if(strlen(tl)==strlen(t2))

{fun(s,tl,t2,w);

printf("\nTheresultis:%s\n”,w);

)

elseprintf("\nError:strlen(tl)!=

strlen(t2)\n,z);

【參考答案】

(l)while(*w)

(2)if(*r==*p)

【考點分析】

本題考查:while循環(huán)語句,C語言中的關鍵字。

【解題思路】

(1)這藕判斷的是值的真假,而不是地址,因此改為while(*w)o

(2)C語言中關鍵字區(qū)分大小寫,只需運行程序,就能夠根據(jù)錯誤提示找到。

3、程序設計

編寫函數(shù)fun,其功能是:將s所指字符串中ASCH值為奇數(shù)的字符刪除,剩余

字符形成的新串放在t所指數(shù)組中。

例如,若s所指字符串中的內(nèi)容為:"ABCDEFG12345”,其中字符A的ASCII碼

值為奇數(shù),字符1的ASCII碼值也為奇數(shù),都應當刪除,其它依此類推。最后t

所指的數(shù)組中的內(nèi)容應是:"BDF24"。

注意:部分源程序在文件PR0G1.C中。

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

你編寫的若干語句。

資料僅供參考

ttinclude<stdio.h>

ttinclude<string.h>

voidfun(char*s,chart[])

(

)

main()

(

chars[100],t[100];voidNONO();

printf(^XnPleaseenterstringS:");

scanfs);

fun(s,t);

printf("\nTheresultis:%s\n”,t);

NONO();

資料僅供參考

voidNONO()

{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),

輸出數(shù)據(jù),關閉文件。*/

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>

ttinclude<string.h>

voidfun(char*s,chart[])

資料僅供參考

}

main()

(

chars[100],t[100];voidNONO();

printf(^XnPleaseenterstringS:");

scanf("%s",s);

fun(s,t);

printf(〃\nTheresultis:%s\n〃,t);

NONO();

voidNONO()

{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),

輸出數(shù)據(jù),關閉文件。*/

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);

)

【參考答案】

voidfun(char*s,chart[])

(

inti,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*;

)

【考點分析】

本題考查:ASCH碼值為奇數(shù)或偶數(shù)的判定方法,同時掌握刪除字符的思想,即

重新保留非刪除字符。

【解題思路】

要刪除ASCH碼值為奇數(shù)的字符,也就是要保留ASCII碼值為偶數(shù)的字符,由

于最終是要求出剩余字符形成的新串,因此本題的算法是對原字符串從頭到尾

掃描,并找出ASCH碼值為偶數(shù)的字符依次存入數(shù)組中。

第四十二套

1、程序填空

給定程序中,函數(shù)fun的功能是將參數(shù)給定的字符串、整數(shù)、浮點數(shù)寫到文本

文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof

將字符串轉(zhuǎn)換成相應的整數(shù)、浮點數(shù),然后將其顯示在屏幕上。

請在程序的下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANKLC中。

請勿改動main函數(shù)和其它函數(shù)中的任何內(nèi)容,僅在main函數(shù)的橫線上填入所

編寫的若干表示式或語句。

ttinclude<stdio.h>

^include<stdlib.h>

voidfun(char*s,inta,doublef)

/**********found**********/

—1—fp;

charstr[100],strl[100],str2[100];

intal;doublefl;

資料僅供參考

fp=fopen("filel.txt","w");

fprintf(fp,"%s%d%f\nz,,s,a,f);

/**********found**********/

―2—;

fp=fopen("filel,txt","r");

/**********found**********/

fscanf(_3—,,,%s%s%s,z,str,strl,str2);

fclose(fp);

al=atoi(strl);

fl=atof(str2);

printf(z,\nTheresult:\n\n%s%d%f\nz,,

str,al,fl);

}

main()

{chara[10]="Hello!”;intb=12345;

doublec=98.76;

fun(a,b,c);

)

【參考答案】

(1)FILE*(2)fclose(fp)(3)fp

【解題思路】

填空1:從使用fp=fopen("filel.txt〃,〃w〃)可知fp應該是文件類型指針,因

資料僅供參考

此本空因該填寫FILE*0

填空2:當對fp作打開操作的時候,并進行不同的操作前,應該對其關閉,因

為在第一次打開時是對fp進行寫操作,而在第二次打開后進行的是讀操作,因

此應該先對fp進行關閉,本空填fclose(fp)o

填空3:fscanf()是把文本文件輸出,因此本空只能填寫fp。

2、程序修改

下列給定程序中,函數(shù)fun的功能是:對N名學生的學習成績,按從高到低的

順序找出前m(mW10)名學生來,并將這些學生的數(shù)據(jù)存放在一個動態(tài)分配的連

續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件MODILC中,不得增行或刪行,也不得更改程序的結(jié)

構(gòu)。

^include<stdlib.h>

ttinclude<conio.h>

ttinclude<string.h>

#include<stdio.h>

ttinclude<malloc.h>

ttdefineN10

typedefstructss

{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;KN;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("\nGivethenumberofthestudents

whohavebetterscore:");

scanf(〃%d〃,&m);

while(m>10)

{printf(^\nGivethenumberofthe

studentswhohavebetterscore:");

scanf&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);

)

【參考答案】

(l)t=calloc(m,sizeof(STU));

⑵t[k]=b[j];

【解題思路】

(1)clloc應用于分配內(nèi)存空間。調(diào)用形式為(類型說明符

*)calloc(n,size),功能:在內(nèi)存動態(tài)存儲區(qū)中分配n塊長度為"size"字節(jié)的

連續(xù)區(qū)域,函數(shù)的返回值為該區(qū)域的首地址,(類型說明符*)用于強制類型轉(zhuǎn)換。

calloc函數(shù)與malloc函數(shù)的區(qū)別在于calloc函數(shù)一次能夠分配n塊區(qū)域。

例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的

sizeof(structstu)是求stu的結(jié)構(gòu)長度。該語句的意思是:按stu的長度分

配兩塊連續(xù)區(qū)域,強制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。在本

題中不用考慮那么復雜,根據(jù)定義類型STU就能夠看出

*t=calloc(m,sizeof(STU))中的錯誤。

(2)t[k].num=b[j].num的錯誤旨在考查對結(jié)構(gòu)體概念的掌握和靈活應用程度。

3、程序設計

請編寫函數(shù)fun,該函數(shù)的功能是:刪除一維數(shù)組中所有相同的數(shù),使之只剩一

個。數(shù)組中的數(shù)已按由小到大的順序排列,函數(shù)返回刪除后數(shù)組中數(shù)據(jù)的個數(shù)。

例如,若一維數(shù)組中的數(shù)據(jù)是:

2223445666677899101010

刪除后,數(shù)組中的內(nèi)容應該是:

2345678910

注意:部分源程序在文件PR0G1.C中。

請勿改動main函數(shù)和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所

編寫的若干語句。

資料僅供參考

ttinclude<stdio.h>

ttdefineN80

intfun(inta[],intn)

}

voidmain()

FILE*wf;

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(^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(/zout.dat","w");

資料僅供參考

for(i=0;i<n;i++)

fprintf(wf,,z%3d,z,a[i]);

fclose(wf);

//

//

}

【參考答案】

intfun(inta[],intn)

inti,j=l;

for(i=l;i<n;i++)

if(a[j-l]!=a[i])/*若該數(shù)與前一個數(shù)不相同,則要保留*/

a[j++]=a[i];

returnj;/*返回不相同數(shù)的個數(shù)*/

)

【解題思路】

該程序的流程是:定義變量i和j,其中j用于控制刪除后剩下的數(shù)在數(shù)組中的

下標,i用于搜索原數(shù)組中的元素。j始終是新數(shù)組中最后一個元素的下一個元

素的下標,因此if語句中的條件是a[j-l]!=a[i],其中a[j-L]就是新數(shù)組中的

最后一個元素,若條件成立,則表示出現(xiàn)了不同的值,因此a[i]要保留到新數(shù)組

中。注意本題中i和j的初值都要從1開始,該算法只能用于數(shù)組已排序的題

目中。

第四十三套

1、程序填空

下列給定程序中,函數(shù)fun的功能是:計算NXN矩陣的主對角線元素和反向?qū)?/p>

角線元素之和,并作為函數(shù)值返回。要求先累加主對角線元素中的值,再累加

資料僅供參考

反向?qū)蔷€元素中的值。

例如,若N=3,有下列矩陣:

123

456

789

首先累加1、5、9,然后累加3、5、7,函數(shù)返回值為30。

請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

ttinclude<stdio.h>

ttdefineN4

fun(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()

資料僅供參考

{int

t[][N]={21,2,13,24,25,16,47,38,29,11,32,5

4,42,21,3,10},i,j;

printf(,z\nTheoriginaldata:Xn^);

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)(3)1

【考點分析】

本題考查:變量初始化;NXN矩陣對角線下標如何表示;累加操作。

【解題思路】

填空1:變量sum用來儲存〃和"結(jié)果,因此將其初始化為0。

填空2:從題目中我們能夠了解到,主對角線元素的行和列下標是相同的,因此

應填入

填空3:對于反向?qū)蔷€元素的行和列的下標,它們的關系是相加和為n—L

因此應填入1?

2、程序修改

下列給定程序中函數(shù)fun和funx的功能是:用二分法求方程

2

2/-4x+3x-6=0的一個根,并要求絕對誤差不超過0.001o

例如,若給m輸入-100,n輸入90,則函數(shù)求得的一個根為2.000。

資料僅供參考

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)。

ttinclude<stdio.h>

#include<math.h>

doublefunx(doublex)

{return(2*x*x*x-4*x*x+3*x-6);}

doublefun(doublem,doublen)

/************fourid************/

intr;

r=(m+n)/2;

/************fourid************/

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”,&m,&n);

root=fun(m,n);

printf("root=%6.3f\n”,root);

}

【參考答案】

(1)doubler;

(2)while(fabs(n-m)>0.001)

【考點分析】

本題考查:變量數(shù)據(jù)類型;while循環(huán)語句。

【解題思路】

(1)程序中我們會發(fā)現(xiàn)r=(m+n)/2,而m和n都是double型的,而且根據(jù)題意

可知,變量r需要定義為double型。

(2)絕對誤差不超過0.001,因此循環(huán)條件應為fabs(n-m)>0.001o

3、程序設計

規(guī)定輸入的字符串中只包含字母和*號。編寫函數(shù)fun,其功能是:除了字符串

前導和尾部的*號外,將串中其它的*號全部刪除。形參h已指向字符串中第一

個字母,形參p指向字符串的中最后一個字母。在編寫函數(shù)時,不得使用C語

言提供的字符串函數(shù)。

例如,若字符串中的內(nèi)容為****A*BC*DEF*G*******,刪除后,字符串中的內(nèi)容

應當是:****ABCDEFG********。

在編寫函數(shù)時,不得使用C語言提供的字符串函數(shù)。

注意:部分源程序在文件PR0GLC中。

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

所編寫的若干語句。

ftinclude<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("Thestringafter

deleted:\nz/);puts(s);

NONO();

}

voidNONO()

資料僅供參考

{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),

輸出數(shù)據(jù),關閉文件。*/

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);

)

fclose(in);

fclose(out);

)

【參考答案】

voidfun(char*a,char*h,char*p)

資料僅供參考

inti=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';

)

【考點分析】

本題考查:while循環(huán)語句,注意循環(huán)條件的設定;指針型變量。

【解題思路】

本題的重點是要選擇好判斷條件,首先是需要判斷前導*的結(jié)束,然后判斷是否

指向最后一個字母,最后補充尾部*,只要思路對了就可正確解答。

第四十四套

1、程序填空

下列給定程序中,函數(shù)fun的功能是:找出100到x(x/999)之間各位上的數(shù)字

之和為15的所有整數(shù),并在屏幕輸出;將符合條件的整數(shù)的個數(shù)作為函數(shù)值返

資料僅供參考

回。

例如,當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個。

請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANKLC中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

intfun(intx)

{intn,si,s2,s3,t;

/**********found**********/

n=_1_

t=100;

/**********found**********/

while(t<=_2_)

{sl=t%10;s2=(t/10)%10;s3=t/100;

if(sl+s2+s3==15)

{printf("%d”,t);

n++;

/**********found**********/

3

)

資料僅供參考

returnn;

)

main()

{intx=-l;

while(x>999||x<0)

{printf("Pleaseinput(0<x<=999):");

scanf&x);}

printf("\nTheresultis:%d\n”,fun(x));

【參考答案】

(1)O(2)x(3)t++

【考點分析】

本題考查:變量賦初值;while循環(huán)語句。

【解題思路】

填空1:變量n用于存放符合條件的整數(shù)的個數(shù),應賦初值為0。

填空2:根據(jù)題目要求,確定循環(huán)變量t的取值范圍僅=x。

填空3:循環(huán)變量t自增1操作。

2、程序修改

下列給定程序中函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t

所指字符串中,然后把s所指串中的字符按正序連接到t所指串之后。

例如:當s所指的字符串為"ABCDE”時,t所指的字符串應為"EDCBAABCDE”。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

資料僅供參考

ttinclude<stdio.h>

ttinclude<string.h>

voidfun(char*s,char*t)

/************foiind************/

inti;

si=strlen(s);

for(i=0;i<sl;i++)

/************foiind************/

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(^XnPleaseenterstrings:〃);

scanf("%s”,s);

fun(s,t);

printf("Theresultis:%s\n”,t);

資料僅供參考

)

【參考答案】

(1)inti,si;

(2)t[i]=s[sl-i-l];

【考點分析】

本題考查:變量定義;字符串操作。

【解題思路】

(1)變量si沒有定義。

(2)該循環(huán)實現(xiàn)將s串中的字符逆序存入t串中,t[i]對應s串中的so

3、程序設計

函數(shù)fun的功能是:將a、b的兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。

合并的方式是:將a中的十位和個位數(shù)依次放在變量c的百位和個位上,b中的

十位和個位數(shù)依次放在變量c的千位和十位上。

例如,當a=45,b=12,調(diào)用該函數(shù)后c=1425。

注意:部分源程序在文件PROGLC中。

數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。

請勿改動主函數(shù)main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入

你編寫的若干語句。

#include<math.h>

^include<stdio.h>

floatfun(floatnum)

{ints;

floatn,t,pi;

資料僅供參考

t=l;pi=O;n=l;s=1;

/**************found**************/

while(t>=num)

pi=pi+t;

n=n+2;

s-s;

/**************found**************/

t=s%n;

)

pi=pi*4;

returnpi;

main()

{floatnl,n2;

printf("Enterafloatnumber:");

scanf("%f”,&nl);

n2=fun(nl);

printf("%6.4f\n”,n2);

資料僅供參考

【參考答案】

voidfun(inta,intb,long*c)

*c=a%10+(b%10)*10+(a/10)*100+(b/10)*1000;

)

【考點分析】

本題考查:如何取出數(shù)值n的各個位;知道數(shù)值n的各個位,又如何表示該數(shù)

值;指針型變量的使用。

[解題思路]

本題的工要問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中

相應的位數(shù)。由于a和b都是只有兩位的整數(shù),因此分別對它們除10可得到它

們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應乘以1000、

100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時

要進行指針運算。

第四十五套

1、程序填空

下列給定程序中,函數(shù)fun的功能是:在形參ss所指字符串數(shù)組中,將所有串

長超過k的字符串中后面的字符刪除,只保留前面的k個字符。ss所指字符串

數(shù)組中共有N個字符串,且串長小于M。

請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

ttinclude<stdio.h>

ttinclude<string.h>

^defineN5

#defineM10

資料僅供參考

/**********found**********/

voidfun(char(*ss)_1_,intk)

{inti=0;

/**********found**********/

while(i<_2_){

/**********found**********/

ss[i][k]=—3—;i++;}

)

main()

{char

x[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("\nThestringafter

deleted:\n\n");

for(i=0;i<N;i++)puts(x[i]);

printf(〃\n〃);

資料僅供參考

【參考答案】

⑴[M](2)N⑶’\0'

【考點分析】

本題考查:函數(shù)定義;while循環(huán)語句;字符串結(jié)束標識'\0'。

【解題思路】

填空1:根據(jù)main函數(shù)中函數(shù)調(diào)用語句,確定函數(shù)定義時的形式參數(shù),因此填

入[M]。

填空2:while循環(huán)語句需要對所有字符串進行操作,因此循環(huán)條件是十比

填空3:字符串結(jié)尾加入字符串結(jié)束標識'\0'。

2、程序修改

下列給定程序中函數(shù)fun的功能是:根據(jù)以下公式求“值,并作為函數(shù)值返回。

例如,當給指定精度的變量eps輸入0.0005時,應輸出Pi=3.140578。

IT,I12123I2v34

2■'3353573579

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改的程序的結(jié)

構(gòu)!

^include<math.h>

ttinclude<stdio.h>

doublefun(doubleeps)

{doubles,t;intn=l;

s=0.0;

/************foiind************/

t=0;

資料僅供參考

while(t>eps)

{s+=t;

t=t*n/(2*n+l);

n++;

/************foiind************/

return(s);

)

main()

{doublex;

printf(,z\nPleaseenteraprecision:");

scanf("%lf",&x);

printf(,,\neps=%lf,

Pi=%lf\n\nz,,x,fun(x));

}

【參考答案】

(l)t=l.o;

(2)return(s*2);

【考點分析】

本題考查:根據(jù)給定公式求值,因此需要確定變量定義的數(shù)據(jù)類型以及如何對

其進行初始化;函數(shù)返回值。

【解題思路】

該題中,我們首先檢查變量數(shù)據(jù)類型前后是否一致,因為變量t定義為double

型,因此賦值時要賦以實型數(shù)值。return(s)是一個數(shù)學錯誤,應該返回

return(s*2)。

資料僅供參考

3、程序設計

規(guī)定輸入的字符串中只包含字母和*號。請編寫函數(shù)fun,其功能是:使字符串

的前導*號不得多于n個,若多于n個,則刪除多余的*號;若少于或等n個,

則不做處理,字符串中間和尾部的*號不刪除。

例如,字符串中的內(nèi)容為:*******A*BC*DEF*G****,若n的值為4,刪除后,

字符串中的內(nèi)容應當是:****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&n);

fun(s,n);

資料僅供參考

printf(zzThestringafter

deleted:\n^);puts(s);

NONO();

)

voidNONO()

{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),

輸出數(shù)據(jù),關閉文件。*/

FILE*in,*out;

inti,n;chars[81];

m=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);

}

資料僅供參考

【參考答案】

voidfun(char*a,intn)

(

inti=0;

intk=0;

char*p,*t;

p=t=a;/*開始時,p與t同時指向數(shù)組的首地址*/

while(*t=-**)/*用k來統(tǒng)計前部星號的個數(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é)束標識位*/

)

)

【考點分析】

本題考查:循環(huán)判斷語句;字符串的操作。

【解題思路】

字符串中前導*號不能多于n個,多余的刪除。首先需要經(jīng)過while循環(huán)統(tǒng)計字

符串前導*號的個數(shù),然后經(jīng)過if條件語句完成前導*號的個數(shù)和n的比較,如

果前導*號多于n個,需要把n個*號和其余字符重新保留。

第四十六套

資料僅供參考

1、程序填空

下列給定程序中,函數(shù)fun的功能是:將自然數(shù)1?10及其平方根寫到名為

myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。

請在程序下畫線處填入正確的內(nèi)容并把下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANKLC中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<math.h>

ttinclude<stdio.h>

intfun(char*fname)

{FILE*fp;inti,n;float

if((fp=fopen(fname,"w"))==NULL)

return0;

for(i=l;i<=10;i++)

/**********found**********/

fprintf(1,"%d%f\n,z,i,sqrt((double)

i));

printf(^XnSucceed!!\n");

/**********found**********/

資料僅供參考

printf("\nThedatainfile:\n");

/**********found**********/

if((fp=fopen(3,"r"))==NULL)

return0;

fscanf(fp,&n,&x);

while(!feof(fp))

{printf("%d%f\n,z,n,x);

fscanf(fp,&n,&x);}

fclose(fp);

return1;

)

main()

{charfname[]=,zmyfile3.txt7,;

fun(fname);

【參考答案】

(l)fp(2)fclose(fp)(3)fname

【考點分析】

本題考查:文件的相關操作,fprintf函數(shù)與前printf功能相似,區(qū)別在于

fprintf函數(shù)的對象不是鍵盤和顯示器,而是磁盤文件;文件打開和關閉函數(shù)

fopen和fclose的使用。

【解題思路】

填空1:fprintf函數(shù)的形式是:fprintf(文件指針,格式字符串,輸出表列)一

因此填入文件指針fp.

填空2:文件一旦使用完畢,應使用關閉函數(shù)fclose。將文件關閉,以避免發(fā)

資料僅供參考

生文件數(shù)據(jù)丟失等錯誤。

填空3:fopen函數(shù)用來打開一個文件,其一般形式為:文件指針名=fopen(文

件名,使用文件方式);因此應填入文件名fname。

2、程序修改

下列給定程序中fun函數(shù)功能是:將n個無序整數(shù)從小到大排序。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

ttinclude<stdio.h>

ftinclude<stdlib.h>

fun(intn,int*a)

{inti,j,p,t;

for(j=0;j<n-l;j++)

{P=J;

/************fourid************/

for(i=j+l;i<n-l;i++)

if(a[p]>a[i])

/************fourid************/

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=ll;

printf("\n\nBeforesorting%d

numbers:\n",n);putarr(n,aa);

fun(n,aa);

printf("\nAftersorting%dnumbers:\n”,

n);putarr(n,aa);

)

【參考答案】

(1)for(i=j+l;i<n;i++)

⑵P=i;

【考點分析】

資料僅供參考

本題考查:for循環(huán)語句;需明確各個變量含義。

[解題思路]

該程序£對n個無序數(shù)實現(xiàn)從小到大的排序,先找出整數(shù)序列的最小項,置于

指針第1個元素的位置;再找出次小項,置于第2個元素的位置;之后順次處

理后續(xù)元素。

(1)數(shù)組的長度為n,因此最后一個元素的下標值為n—l,i的取值范圍應該包

括此下標值。

(2)p是中間變量,存放值較小的元素下標。

3、程序設計

編寫函數(shù)fun,其功能是:將兩個兩位數(shù)的正整數(shù)a、b合并成一個整數(shù)放在c

中。合并的方式是:將a數(shù)的十位和個位數(shù)依次在c數(shù)的個位和百位上,b數(shù)的

十位和個位數(shù)依次放在c數(shù)的十位和千位上。

例如,當a=45,b=12時,調(diào)用該函數(shù)后c=2514。

注意:部分源程序在文件PR0GLC中。

數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。

請勿動改主函數(shù)的main和其它函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號填入

你編寫的若干語句。

ftinclude<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(,zTheresultis:%ld\n”,c);

NONO();

}

voidNONO()

{/*本函數(shù)用于打開文件,輸入數(shù)據(jù),調(diào)用函數(shù),

輸出數(shù)據(jù),關閉文件。*/

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);

資料僅供參考

)

【參考答案】

voidfun(inta,intb,long*c)

*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;

)

【考點分析】

本題考查:如何取出數(shù)值n的各個位;知道數(shù)值n的各個位,又如何表示該數(shù)

值;指針型變量的使用。

【解題思路】

本題的主要問題是如何取出a和b的個位數(shù)和十位數(shù),取出后如何表示成c中

相應的位數(shù)。由于a和b都是只有兩位的整數(shù),因此分別對它們除10可得到它

們的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。得到后對應乘以1000、

100、10、1就可得到c的千位數(shù)、百位數(shù)、十位數(shù)和個位數(shù)。注意:使用c時

要進行指針運算。

第四十七套

1、程序填空

下列給定程序中,函數(shù)fun的功能是:將形參n所指變量中,各位上為偶數(shù)的

數(shù)去掉,剩余的數(shù)按原來從高位到低位的順序組成一個新數(shù),并經(jīng)過形參指針n

傳回所指變量。

例如,若輸入一個數(shù)27638496,則新數(shù)為739。

請在程序的下畫線處填入正確的內(nèi)容并將下畫線刪除,使程序得出正確的結(jié)果。

注意:部分源程序在文件BLANK1.C中。

不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

ttinclude<stdio.h>

voidfun(unsignedlong*n)

{unsignedlongx=0,i;intt;

資料僅供參考

i=l;

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=-l;

while(n>99999999||n<0)

{printf("Pleaseinput(0<n<):");

scanf("%Id",&n);}

fun(&n);

printf("\nTheresultis:%ld\n”,n);

}

資料僅供參考

【參考答案】

(1)10(2)0(3)x

【考點分析】

本題考查:求余運算;if語句條件表示式。

【解題思路】

填空1:經(jīng)過t對10求余,取出該數(shù)值的各個位。

填空2:經(jīng)過if條件語句實現(xiàn)奇偶數(shù)的判定。如果條件表示式對2求余為0即

是偶數(shù),反之是奇數(shù)。

填空3:最后將剩余的數(shù)賦給n指問的元素。

2、程序修改

下列給定程序中函數(shù)fun的功能是:計算n!。

例如,給n輸入5,則輸出120.000000。

請改正程序中的錯誤,使它能得出正確的結(jié)果。

注意:部分源程序在文件M0DI1.C中,不得增行或刪行,也不得更改的程序的結(jié)

構(gòu)!

ttinclude<stdio.h>

doublefun(intn)

{doubleresult=1.0;

/************fourid************/

ifn==0

return1.0;

while(n>1&&n<170)

/************fourid************/

result=n——

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論