版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2022年福建省泉州市全國計算機等級考試
C語言程序設(shè)計真題(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.在面向?qū)ο蠓椒ㄖ?,【】描述的是具有相似屬性與操作的一組對象。
2.已知字符A的ASCII碼值為65,以下語句的輸出結(jié)果是【】。
charch='B";
printf("%c%d\n",ch,ch);
3.設(shè)有定義:intn,*k=&n;以下語句將利用指針變量k讀寫變量n中
的內(nèi)容,請將語句補充完整。
scanf("%d”,);
printf("%d\n",);
4.以下程序的輸出是【】。
main()
(
charstrl[]=Howdoyoudo",*p=strl;
strcpy(strl+strlen(strl)\2"esshe");
pfinff("%s\n",pl);
}
5.以下程序的輸出結(jié)果是【】。
main()
{intx=0;
sub(&x,8,1);
printf("%d\n",x);
)
sub(int*a,intn,intk)
{if(k<=n)sub(a,n/2,2*k);
*a+=k;
)
6.下面程序的輸出結(jié)果是【】。
#include<stdio.h>
main()
{char*p={"BOOL""OPK","H","SP");
inti;
for(i=3,i>=0;i--,i--)printf("%",*p[i]);
printf("\n");
)
7.若有以下程序
main()
{inta[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-21,32,-33,0));
inti,j,s=O;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
{if(a[i][j]<0)continue;
if(a[i][j]==O)break;
s+=a[i][j];
)
}
printf("%d\n",s);
)
執(zhí)行后輸出結(jié)果是【】。
8.是數(shù)據(jù)庫應(yīng)用的核心。
9.下列程序的輸出結(jié)果是【】。
main()
(
inta[]={2,4,6},*ptr=&a[0],x=8,y,z;
for(y=0;y<3;y++)
z=(*(ptr+y)<x)?*(ptr+y):x;
printf("%d\n",z);
)
10.以下sstrcpy。函數(shù)實現(xiàn)字符串復(fù)制,即將t所指字符串復(fù)制到s所指
向內(nèi)存空間中,形成一個新的字符串s。清填空。
voidsstrcpy(char*s,char*t)
{while(*s++=[]);}
main()
{charstr1[100],str2[]="abcdefgh";
strcpy(strl,str2);
printf('%s\n",strl);
二、單選題(10題)
11.線性鏈表中結(jié)點的結(jié)構(gòu)為(data,next)o已知指針p所指結(jié)點不是尾結(jié)
點,若在*p之后插入結(jié)點*s,則應(yīng)執(zhí)行下列()操作。
A.s->next=p;p->next=s;
B.s->next=p->next;p->next=s;
C.s->next=p->next;p=s;
D.p->next=s;s->next=p;
12.
有以下程序:
main
{intnum[4][4]={l,2,3.4},{5,6,7,8},{9,10,11,
12.},{13,14,15.16}),i,j;
for(i=0;i<4;i++)
{for(j=0;j<i;j++)printf("%4c",);
for(j=;J<4;j++)printf("%4d",num
[i][j]);
printf("\n");})
若要按以下形式輸出數(shù)組右上半三角
1234
678
1112
16
則在程序下劃線處應(yīng)填入的是()o
A.i-1B,iC,i+1D.4—i
13.設(shè)有如下定義:intx=10,y=3,z;則語句printf('%d\n",z=(x%y,x/y));的輸
出結(jié)果是0。
A.lB.0C,4D,3
14.假設(shè)所有變量均為整型,則表達式(a=2,b=5,b++,a+b)的值是()。
A.7B.8C.6D.2
15.有如下程序:#include<stdioh>msin(){chars[]="ABCD",*P;
for(p=s+l;p<s+4;p++)Printf("%s\n",p);}該程序的輸出結(jié)果是
()o
A.ABCDBCDCDDB.ABCDC.BCDD.BCDCDD
16.有以下程序段
#include<stdio.h>
voidfun(char*fname,char*st)
{FILE*myf;
inti;
myf=fopen(fname,"w");
for(i=O;i<strlen(st);i++)fputc(st[i],myf);
fclose(myf);
1
main()
{fun("test.t","newworld");
fun("test.t","hello,");)
程序執(zhí)行后,文件test.t中的內(nèi)容是
A.A.hello,
B.newworldhello,
C.newworld
D.hello,rid
17.
(10)F列方法中,屬于白盒法設(shè)計測試用例的方法的是(
A)錯誤推測B)因果圖C)基本路徑測試D)邊界值分析
18.當(dāng)用戶要求輸入的字符串中含有空格時,應(yīng)使用的輸入函數(shù)是()o
A.scanfB.getcharC.getsD.getc
19.若變量均已正確定義并賦值,以下合法的C語言賦值語句是()。
A.x=y==5;B,X=n%2,5:C,x+n=i;D,x=5=4+1:
20.下列程序的輸出結(jié)果是
#include"stdio.h"
#defineN3
#defineM3
voidfun(inta[M][N])
{printf("%d\n",*(a[l]+2));}
main()
{inta[M][N];
inti,j;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
a[i][j]=i+j-(i-j);
fun(a);)
A.3B.4C.5D.6
三、程序設(shè)計題(10題)
21.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案
的項目中包含一個源程序文件progl.co在此程序中,請編寫函數(shù)fun(),
其功能是將一個數(shù)字字符串轉(zhuǎn)換成一個整數(shù)(不得調(diào)用C語言提供的將
字符串轉(zhuǎn)換成整數(shù)的函數(shù))。例如,若輸入字符串“-1234”,則函數(shù)把它
轉(zhuǎn)換成整數(shù)值-1234。
注意:部分源程序給出如下。
請勿改動主函數(shù)main。和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
longfun(char*p)
(
)
voidmain()
(
chars[6];
longn;
printf("Enterastring:\n");
gets(s);
n=fun(s);
printf("%ld\n”,n);
}
22.請編寫一個函數(shù),用來刪除字符串中的所有*。例如,輸入
abc*de*f*gh,則輸出為abcdefgh。注意:部分源程序給出如下。請勿
改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。試題程序:
19tnclvd*Vzdto*h>
9includeVctype
9mHudeVcoaio.b>
istnriude<?t<Uii>?
“idpFoc*(ch??aif)
midHUIMI<)
char]i
wyvietnC*CLSa)i
pnmf("Input?Mnngt>)?
get>(*tr)?
ptfiMutr)i
proc(*tr)t
pnntf(fl■??ttrcKs\n*?*tr)i
23.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入
結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,其功能是:按分?jǐn)?shù)的高低排列學(xué)
生的記錄,高分在前。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括
號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#defineM16
typedefstruct
(
charnum[10];
intS;
)
STREC:
voidproc(STRECa[])
inti,j;
STRECt;
for(i=l;i<M;i++)/*用冒泡法來按從高到低
排序*/
for(j=0;j<M-l;j++)o
s)//*按分?jǐn)?shù)的高低排列學(xué)生
的記錄,高分在前*/
{t=a[j];a[j]=a[j+l];a[j+l]=t;)
)
voidmain
(
STRECstu[M]={{"GA005",85),{"GA003",76},
{"GA002",69},{"GA004",85),{"GA001",91),
{"GA007",72),{"GA008",64),{"GA006",87),
{"GAO15",85),{"GA013",91),{"GAO12",64),
{"GA014",91),{"GAOH",66),{"GA017",64},
{"GAO18",64),{"GA016",72}};
inti;
proc(stu);
printf("Thedataaftersorted:\n");
for(i=0;i<M;i++)
(
if(i%4==0)
〃每行輸出4個學(xué)生記錄
printf("n");
printf("%s%4d",stu[i],num,stu[i].s);
)
printf("\n");
)
24.從鍵盤上輸出10個整數(shù)存入一維數(shù)組中,按由大到小的順序輸出。
25.請編一個函數(shù)intfun(inta),它的功能是:判斷a是否是素數(shù),若a是
素數(shù),返回1;若不是素數(shù),返回0。A的值由主函數(shù)從鍵盤讀入。
26.編寫函數(shù)fun,其功能是:將s所指字符串中除了下標(biāo)為奇數(shù),同時
ASCH碼值也為奇數(shù)自q字符之外。
其余所有字符全部刪除,串中剩余字符所形成的一個新串放在所指的數(shù)
組中。
例如,若s所指字符串的內(nèi)容為“ABCDEFG12345",其中字符A的ASCII
碼值為奇數(shù),但所在元素的
下標(biāo)為偶數(shù),因此需要刪除;而字符1的ASCII碼值為奇數(shù),所在數(shù)組
中的下標(biāo)也為奇數(shù),因此不應(yīng)當(dāng)刪除,
其他依此類推。最后t所指數(shù)組中的內(nèi)容應(yīng)為“135”。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括
號中填入你編寫的若干語句。
試題程序:
#1nelude<stdio.k>
#include<gtring.h>
voidfun(char*s,chart[J)
I
)
main()?
(
char4100],t[100];
printff'XnPIeaseenterstrings:rt);
scanf("%s",§X
printfC'XnTTieresultis:%s\n'f4);
I
27.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項目中包含一個源程序文件progl.Co在此程序中,請編寫函數(shù)fun(),
其功能是找出一維整型數(shù)組元素中最大的值及其所在的下標(biāo),并通過形
參傳回。數(shù)組元素中的值已在主函數(shù)中賦予。
主函數(shù)中x是數(shù)組名,n表示x中的元素個數(shù),max存放最大值,
index存放最大值所在元素的下標(biāo)。
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
voidfun(inta[],intn,int*max,int*d)
(
)
voidmain()
(
inti,x[20],max,index,n=10;
srand((unsigned)time(NULL));
for(i=0;i<=n;i++)
(
x[i]=rand()%50;
printf("%4d,,,x[i]);
/*輸出一個隨機數(shù)組*/
)
printf(n\nH);
fun(xfnf&max,&index);
printf("Max=%5d,Index=%4d\n”,max,index);
28.
下列程序定義了MXM的二維數(shù)組,并在主函數(shù)中賦值。請編寫函數(shù)proc
0,函數(shù)的功能是:求出數(shù)組周邊元素的平均值并作為函數(shù)值返回給
主函數(shù)中的s。例如,若a數(shù)組中的值為:
■■01284
5974S
43B34
21098則返回主程序后,s的值為3.750000。注意:部分源程序給出
如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc
()的花括號中填入所編寫的若干語句。試題程序:
Hiviclud*h>
?bncludr<Mdlak.hA
■drfiiwMS
IOMM*proc<miw[J[MJ)
VOMRiBinC)
Imt[M)[M]?10?I?1?4?!?4?
》?0J.2.I?O?,??”
biii?1?
dcnaHe>i
?)r*ictn<?CI*S*)i
pninf(a>???Thrarrajr????\B->I
(ot(i*OiHCMii44>
《lor《?)
(pni>tf(MK4d*
prvntK>\n*>t
proc<a>i
printlc*????THERESULT????\B*)I
*Tlw?umUi*?S)I
29.
學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放人結(jié)構(gòu)
體數(shù)組stu中,請編寫函數(shù)proc(),其功能是:按分?jǐn)?shù)的高低排列學(xué)生
的記錄,高分在前。注意:部分源程序給m如下。請勿改動main。
函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編
寫的若干語句。試題程序:
尊tfidiMle<ind,K.h>
#defineMIt
iViwdrf?trurt
rharnutnclOji
ttil
STRKf.
wedprociSTKEV?[])
mi
STRECti
forG-hYM“++)/?州■通法技
樽岸“
fcx(j?O“VM-I“??》
11(101八接分散的育伍林**4
立記立?鼻分在■?/
<—必].山]■山?1].?[>+1]-Z
voidmain<)
STREl*MMLM]-(<aGA005*?a5I.{*GA003
7??
(;A0024?^l?<eGAo04e?S5)?(*GAoor?9l
?GAOO7F2GA00B*.61)?(*GA0(MM.B71?
s9M
GAoi$.as<;A013*t>lh(*GA0l2.64l.
*GA0Ua.9lGAOirJSGAO|7M,64I.
?GAOIL.64GAO16e.72)h
ifilii
pcoc(?tn>?
pnfM(("Tbe<UitaiirrMinY、1),
for<i**0iYM*i++)
ilCiKl32*0)
〃與行■出4個?生id0
printfC*\ns>?
pnni(<*H?Kid*?*tu(iXnum??iw(i]v?)?
pn>M(<
30.假定輸人的字符串中只包含字母和*號。請編寫函數(shù)proc,它的功能
是:將字符串中
的前導(dǎo)*號全部刪除,中間和后面的*號不刪除。
例如,若字符串中的內(nèi)容為****a*bc*def*g****,刪除后,字符串中的
內(nèi)容則
應(yīng)當(dāng)是a*bc*def*g****。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號
中填入所編
寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
voidproc(char*str)
(一
)
voidmain
(
charstr[81];
printf("Enterastring:kn");
gets(str);
proc(str);
printf("Thestringafterdeleted:kn");
puts(str);}
四、2.程序修改題(10題)
31.給定程序MODII.C中fun函數(shù)的功能是:根據(jù)整型形參m,計算
如下公式的值。
t3s1—————>
23m
例如,若主函數(shù)中輸入5,則應(yīng)輸出-0.283333。
請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使
它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1finclude<stdio.h>
2doublefun(intm)
3(
4doublet=1.0;
5inti;
6for(i?2;i<*m;1++)
7/W??????★??found**********/
8t-1.0-1/i;
9/???*?*****foundw*********/
10
11
12main()
13(
14intm;
15printf(w\nPleaseenter1integer
numbers:\nw);
Mn
16scanf(%dr&m);
ww
17printf(\n\nTheresultis%lf\nr
fun(m));
18)
32.下列給定程序中,函數(shù)fun()的功能是:用冒泡法對6個字符串按由
小到大的順序進行排序。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#defineMAXLINE20
/*************found**************/
fun(char*pstr[6])
{inti,j;
char*p;
for(i=0;i<5;i++)
{for(j=i+l;j<6;j++)
/*************found**************/
{if(strcmp(*(pstr+i),pstr+j)>0)
p=*(pstr+i);
/*************found**************/
*(pstr+i)-pstr+j;
*(pstr+j)=p;
main()
{inti;
char*pstr[6],str[6][MAXLINE];
clrscr();
for(i=0;i<6;i++)pstr[i]=str[i];
printf("\nEnter6string(lstringateach
line):\n");~'
for(i=0;i<6;i++)scanf("%s",pstr[i]);
fun(pstr);
printf("Thestringsaftersorting:\n");
for(i=0;i<6;i++)printf("%s\n",pstr[i]);
33.給定程序M0D11.C中函數(shù)fun的功能是:求出以下分?jǐn)?shù)序列的前
n項之和。和值通過函數(shù)值返回到main函數(shù)。
23581321
T??5#TIT……
例如,若n=5,則應(yīng)輸出:8.391667。
請改正程序中的錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
#include<stdio.h>
2/?????????*wwfound****w****w**/
3voidfun(intn)
4{inta,b,c,k;doubles;
5s,0.0;a?2;bw1;
6for(k-1;k<?n;k++)(
7/???****w**w*found*w****w*****/
8s■s*(Double)a/b;
9c?a;a?afb;b?c;
10I
11returns;
12}
13main()
14(intn?5;
15printf(w\nThevalueoffunction
w
is:%lf\nrfun(n));
16
34.下列給定程序中,函數(shù)fun()的功能是:計算
S=f(-n)+f(-n+l)+...+f(0)+f(l)+f(2)+...f(n)的值。
例如,當(dāng)n為5時,函數(shù)值應(yīng)為10.407143。f(x)函數(shù)定義如下:
「(x+iy(x-2)x>0
f(x)Y0
x=0或x=2
L(x-Mx-2)
x<0
請改正程序中的錯誤,使它能得山正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<math,h>
/**************found***************/
f(doublex)
if(x==0.0||x==2.0)
return0.0;
elseif(x<0.0)
return(x-1)/(x-2);
else
return(x+1)/(x-2);
)
doublefun(intn)
(
inti;doubles=O.O,y;
for(i=-n;i<=n;i++)
{y=f(1.0*i);s+=y;}
/**************found**************/
returns
main()
{clrscr();
printf("%f\n",fun(5));
35.下列給定程序中函數(shù)fun()的功能是;先將在字符串s中的字符按逆
序存放到t串中,然后把s中的字符按正序連接到t串的后面。例如:
當(dāng)s中的字符串為ABCDE時,貝心中的字符串應(yīng)為EDCBAABCDEO
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*s,char*t)
(
inti,sl;
sl=strlen(s);
for(i=0;i<sl;i++)
t[i]=s[sl-l];
for(i=0;i<si;i++)
/*************found**************
t[sl+i]=s[i];
t[2*sl]-'\0';
)
main()
{chars[100],t[100];
clrscr();
printf("\nPleaseenterstrings:");
scanf("%s",s);
fun(s,t);
printf("Theresultis:%s\n",t);
)
36.下列給定的程序中,函數(shù)fun()的功能是:用選擇法對數(shù)組中的n個
元素按從小到大的順序進行排序。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#defineN20
voidfun(inta[],intn)
{inti,j,t,P;
for(j=O;j<n-l;j++)
/*************fou
{p=j
for(i=j;i<n;i++)
if(a[i]<a[p])
/*************found**************/
p=j;
t=a[p];a[p]=a[j];a[j]=t;
)
)
main()
{inta[N]={9.6,8,3,-l},i,m=5;
printf("排序前的數(shù)據(jù):");
for(i=0;i<m;i++)printf("%d",a[i]);
printf("\n");
fun(a,m);
printf("排序后的順序:");
for(i=0;i<m;i++)printf("%d",a[i]);
printf("\n");
)
37.下列給定程序中,函數(shù)fun()的功能是:給一維數(shù)組a輸入任意4個
整數(shù),并按如下的規(guī)律輸出。例如輸入1,2,3,4,程序運行后輸出以
下方陣:
4123
3412
2341
1234
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意,?不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序;
#include<stdio.h>
#defineM4,
voidfun(inta)
{inti,j,k,m;
printf("Enter4number:");
for(i=0;i<M;i++)scanf("%d",&a[i]);
printf("\n\nTheresult:\n\n");
for(i=M;i>0;i—)
{k=a[M-l];
forj>0;j-)
a[j]=a[j+l];
a[0]=k;
for(m=0;m<M;m++)printf("%d",a[m]);
printf("\n");
main()
{inta[M];
fun(a);printf("\n\n");
38.下列給定程序中,函數(shù)fun()的功能是:根據(jù)形參m的值(2)£9),
在m行m列的二維數(shù)組中存放如下所示的數(shù)據(jù),由main()函數(shù)輸出。
例如,若輸入2,則輸出12
24
輸入4,貝脖俞出1234
2468
36912
481216
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#defineM10
intaiM][MI={0};
/***************found*******************/
fun(int**a,intm)
{intj,k;
for(j=0;j<m;j++)
for(k=0;k<m;k++)
/***************found*******************/
a[j][k]=k*j;
main()
{inti,j,n;
clrscr();
printf("Entern\n");scanf("%d",&n);
fun(a,n);
for(i=0;i<n;i++)
{for(j=O;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
39.下列給定程序中,函數(shù)fun()的功能是:刪除字符串s中所有空白字
符(包括Tab字符、回車符及換行符)。輸入字符串時用‘#'結(jié)束輸入。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<string.h>
#include<stdio.h>
#include<ctype.h>
fun(char*p)
{int!i,t;charc[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i)))c[t++]=p[i];
c[t]='\0';
strcpy(p,c);
main()
{charc,s[80];
inti=0;
printf("Inputastring:");
c=getchar();
while(c!='#')
(s[i]=c;i++;c=getchar();}
s[i]="\0";一
fun(s);
puts(s);
40.下列給定程序中,函數(shù)fun()的功能是:在字符串的最前端加入n個
*號,形成新串,并且覆蓋原串。
注意:字符串的長度最長允許79。
請改正函數(shù)fun。中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序;
#include<stdio.h>
#include<strzng.h>
#include<conio.h>
voidfun(chars[],intn)
chara[80],*p;
inti;
/*****************^Qund***************/
S=p;
for(i=0;i<n;i++)a[i]='*';
do
{a[i]=*p;
/*****************^Qund***************/
i++;
}while(*p);
a[i]=0;
strcpy(s,a);
)
main()
{intn;chars[80];
clrscr();
printf("\nEnterastring:");gets(s);
printf("\nThestring\%s\n",s);
printf("\nEntern(numberof*):");scanf("%d",&n);
fun(s,n);
printf("\nThestringafterinster:\%s\n",s);
五、程序改錯題(2題)
41.
給定程序中,函數(shù)proc()的功能是:使數(shù)組中的元素的值增加10倍。
修改其中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main()
函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
Uinclude<vtdao.
aincludeVeonio.h>
ml
voidproc<vo?d)
iniji
phntf(*laMibfuncaftercalli<ig\a*)?
foc(j-Oej<lOij+?)
//????IOUMI????
prwiif(?m£j]?1。)i
voidnum()
iiHii
pcinth*lnmaanbeforecaJUng\n*)?
forti-SYIOil>?)
■tfi]?卜
pruidl.%3d?t
proc<)i
pnntf(*\BlnmainaftercAlli?g\nw>i
(oHi^OirdOii4*?)
print"■.in(i3)i
tftch(>i
42.
下列給定程序中,函數(shù)proc()的功能是:將長整型數(shù)中為偶數(shù)的數(shù)依
次取出,構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,
當(dāng)s中的數(shù)為87653142時,t中的數(shù)為8642。請修改程序中的錯誤,
使它能得出正確的結(jié)果。注意:不要改動main()函數(shù),不得增行或
刪行,也不得更改程序的結(jié)構(gòu)。試題程序:
#isirludr
修ifirludrVcoiiio.Ii>
?isicludr<"di6ll)
<roidptocCIcxig?*iong?O
mldi
longB1*li
?t*Oi
wliW(.>0)
//????(owmi????
i((dXl*O>
????found????
91dIVUIM)()
(long>*1?
nvwirmC*CLS")i
prwiiRv\nPtc?MenterHI*>Iacanf
proeO.&i)&
『ranTherrMihintKldXn*?Ot
六、操作題(2題)
43.請編寫一個函數(shù)intfun(int*s,intt,int*k),用來求出數(shù)組的最小
元素在數(shù)組中的下標(biāo)并存放在k所指的存儲單元中。
例如,輸入如下整數(shù):
234345753134436458100321135760
則輸出結(jié)果為6,100。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括
號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
intfun(int*s,intt,int*k)
(
)
main()
(
inta[10]={234,345,753,134,436,458,
100,321,
135,760),k;
clrscr();
fun(a,10,&k);
printf("%dr%d\n",k,a[k]);
)
44.funl函數(shù)的調(diào)用語句為funl(&a,&b,&c);o它將3個整數(shù)按由大到小
的JI匣序調(diào)整后依次放入a,b,c三個變量中,a中放最大數(shù),請?zhí)羁铡?/p>
voidfun2(int*x,int*y)
{intt;
t=*x;*x;*y;*y=t;
}"
voidfunl(int*pa,int*pb,int*pc)
{if(*pc>*pb)fun2([]);
if(*pa<*pc)fun2([]);
if(*pa<*pb)fun2([]);
參考答案
1.類類解析:在面向?qū)ο蠓椒ㄖ?,類描述的是具有相似屬性與操作的一
組對象。
2.B66B66解析:字符B的ASCII碼值為66,因此,按%c形式輸出
B,按%d形式輸出66,輸出結(jié)果為:B66。
3.k*kk*k解析:本題考查的知識點是scarf()函數(shù)和printf()函數(shù)的用法。
scanf()函數(shù)有兩個參數(shù),第一個參數(shù)是格式控制部分(格式控制部分是字
符串,主要由“%”號和格式字符組成)第二個參數(shù)是一地址列表(地址列
表是由多個地址組成,可以是變量的地址,也可以是字符串的首地址)。
而第一個空格處位于scanf()函數(shù)的第二個參數(shù)處,所以,第一個空應(yīng)該
填地址k。printf()函數(shù)有兩個參數(shù),第一個參數(shù)是輸出格式字符串(輸出
格式字符串是由控制輸出格式的字符和非格式字符組成的,通常是字符
常量。非格式字符作為輸出數(shù)據(jù)的間隔,輸出時原樣輸出)第二個參數(shù)為
一輸出表達式表(輸出表達式表是由若干個需要計算和輸出的表達式組
成的,表達式之間用逗號分隔開)。而第;個空位于printf()函數(shù)的第二
個參數(shù)處,所以應(yīng)該填*K。
4.HowdoessheHowdoesshe解析:strcpy(strl,sl):字符串拷貝函數(shù),作
用是將字符串si拷貝到字符數(shù)組strl中去。strlen(str):測試字符串str的
長度,函數(shù)的值為字符串中實際長度,不包括,\\0,在內(nèi)。本題中strlen(str
1)的值為13,則strcpy(strl+strlen(strl)/2'esshe')相當(dāng)于strcpy(strl+6'esshe');,
因此可得答案為Howdoessheo
5.77解析:在主函數(shù)中定義了一個變量x并賦初值0,然后執(zhí)行函數(shù)調(diào)
用語句,該語句的執(zhí)行過程為sub(&x,8,l)調(diào)用sub(&a,4,2),sub(&a,4,2)
調(diào)用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括號里的判斷
為假,遞歸結(jié)束,執(zhí)行其后的*a+=k;語句此時x=x+k=0+4=4,回退到上
一層調(diào)用函數(shù)sub(&x,4,2)中,執(zhí)行后面的語句,x=x+k=4+2=6,再回推
到最上一層調(diào)用函數(shù)sub(&x,8,1)執(zhí)行后面的語句,x=x+k=6+l=7,所以
最后輸出7o
6.SO
7.5858解析:本題中處理二維數(shù)組元素用了兩重循環(huán),外循環(huán)變量i表
示數(shù)組的行,內(nèi)層循環(huán)變量j表示數(shù)組的列。在第二重循環(huán)中首先判斷
數(shù)組元素的值是否小于0,若是則處理該行的下一個元素;若不是則判
斷的值是否等于0,若等于0則退出內(nèi)層循環(huán)開始處理下一行;
其他情況下,把的值加到變量s中。所以本程序段的功能是把每
行值為0的元素前面的所有大于0的元素值加到變量s中。
8.數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計
9.66解析:條件運算符的優(yōu)先級高于賦值運算符,因此本題先計算關(guān)系
表達式(*ptr+y)<x)?*(ptr+y):x的信再賦給變量z。當(dāng)y=0時,*(ptr+y)=2,
而x=8,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=2,
所以z=2;當(dāng)y-1時,*(ptr+y)=4,(*(ptr+y)<x)條件為真,則整個條件
表達式的值為*(ptr+y)=4,所以z=4;當(dāng)y=2時,*(ptr+y)=6,(*(ptr+y)<
x)條件為真,則整個條件表達式的值為*(ptr+y)=6,所以z=6;循環(huán)結(jié)
束。因此輸出z的結(jié)果為6O
10.*t++或*(t++)*t++或*(t++)解析:主函數(shù)中定義了兩個字符型數(shù)組
strl和str2,并且給str2賦初值“abcdefgh”,接著調(diào)用函數(shù)strcpy(strl,str2),
將字符串str2的值賦給strlo在函數(shù)sstrcpy(*s,*t)中,用了一個while循
環(huán),每循環(huán)一次將形參指針t所指的字符賦給形參指針s所指向的存儲
空間,然后將指針s和t都移到下一個元素。所以空白處應(yīng)該填*t++或
*(t++)o
11.B
12.B
\n本題中要求輸出右上半角的數(shù),對角線上的數(shù)的下標(biāo)相同,所以j=i。
\n
13.D
14.B
15.D解析:本題考查指向字符串指針的運算方法。執(zhí)行p=s+l后,指針
變量P就指向字符串中的第二個字符“B”,然后輸出字符串“BCD”并換
行;下面繼續(xù)執(zhí)行循環(huán)語句,指針變量P指向下一個字符“C",輸出字
符串“CD”,最后一次循環(huán),p指向字符“D",輸出字符串“D”。
16.D
本題主要考查文件的操作。在本題的程序中,首先定義了一個無返回
值的函數(shù)fun,該函數(shù)帶有兩個指針類型的形參,其中第一個形參指向
需要被操作文件的文件名,而第二個形參指向被操作的字符串。在函
數(shù)體中,首先定義一個文件指針,然后以只寫的方式打開第一個形參
所指向的文件,接著執(zhí)行for循環(huán),循環(huán)結(jié)束的條件是循環(huán)變量小于被
操作字符串的長度,循環(huán)體中的程序fputc(st[i]的功能是將字
符串中的當(dāng)前字符輸入到文件中。由這些分析我們可以知道,函數(shù)fun
的作用是將字符串的內(nèi)容寫入到文件中。
在主函數(shù)中,兩次調(diào)用函數(shù)fun,當(dāng)?shù)谝淮握{(diào)用時,寫入文件的內(nèi)容為
newworld,然后第二次調(diào)用函數(shù),此時打開文件,文件的指針重新回
到開始,然后往文件中寫內(nèi)容“hello,",由于此時文件中已經(jīng)有內(nèi)容
“newworld”,則需要覆蓋前面一部分的內(nèi)容,因此,程序的最終輸出
結(jié)果是hello,rid,本題的正確答案選D。
17.C
18.C
解析:C語言提供了許多輸入函數(shù),其中有:getchar(輸入字符)、
scanf(格式輸入)和gets\u3OOO(輸入字符串)等。題目要求輸入的是字符
串,所以可以排除getchar,而且要求輸入的字符串中包含空格,而
scanf函數(shù)默認將輸入的空格字符作為分割符,所以空格不會被輸入,
故可排除scanf。getc的作用是從文件中輸入一個字符,故也不可取。
gets函數(shù)可以輸入一整行作為一個字符串,其中也包括空格字符,故
應(yīng)該選擇C。
19.AB選項中運算符“%”的運算對象為整數(shù)。C選項中不能將變量賦給
表達式“x+n”。D選項中不能將表達式“4+1”賦給常量5。故本題答案為
A選項。
20.B解析:若有以下定義:inta[3][4],i,j;且當(dāng)0<=i<3,0<=j<4則可以有以
下幾種方式來引用數(shù)組中的第i行,第j列的元
素:a國肛*(a[i]+j),*(*(a+i)+j),(*(a+i))|j],*(&a[0][0]+4*i+j)。
21.longfun(char*p)
(-
longn=0;
intflag=l;
if(*p=='-')/*負數(shù)時置flag為-1*/
{P++;Aag=-1;}
elseif(*p=='+')/*正數(shù)時置flag為1*/
P++;
while(*p!=’\0')
{n=n*10+*p-t\0,;/*將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)*/
P++;
)
returnn*flag;
1一
if語句的作用是判斷該字符串為正數(shù)還是負數(shù),while循環(huán)的作用是將
字符串轉(zhuǎn)換成相應(yīng)的整數(shù)。注意:*P是一個字符(如'夕、4),并不是一
個數(shù),要將其轉(zhuǎn)換成相應(yīng)的數(shù)字需令其減去'0'(而不是'\\0'),即*P-。'就
得到*P這個字符的相應(yīng)數(shù)字,如‘0'-'0'=0、8-0=8等。
22.
【解析】根據(jù)題目中要求刪除字符串中所有的*號,需要檢查字符串中
的每一個字符,將不是*號的字符放入原來的字符串中,形成新的字符
串,最后在新的字符串的末尾加上結(jié)束符。
23.voidproc(STRECa[])
(
inti,j;
STRECt;
for(i=l;i<M;i++)//用冒泡法來按從高到低排序
for(j=0;j++)
if(a[j].s)//按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前
{t=a[j];a[j]=a[j+l];a[j+l]=t;}
24.\n#include'stdio.h'
\nmain
\n{inti,j,a[10];
\nfor(i=l;i<=10;i++)
\nscanf('%d',&a[i]);
\nfor(i=0;i<9=;i++)
\nfor(j=9;j>i;j-)
\nif(a[j-l]{t=a[j-l];
\na[j-l]=a[j];
\na[j]=t;}
\nfor(i=0;i<10;i++)
\nprintfC%d',a[i]);
\n}
\n
25.\n#include“stdio.h"
\nintfun(inta)
\n{intI;
\nif(a==2)return1;1=2;
\nwhile((a%I)!=OI<=sqrt((float)a))
\nl++;
\nif(a%I==0)
\n{printf("%disnotaprime!,5,a);
\nretum0;}
\nprintf("%disaprime!,,,a);
\nretum1;}
\nmain
\n{intx;
\nprintf("\\npleaseenteranumber:^^);
\nscanf("%d",&x);
\nprintf(ct%d\\n,,,fun(x));}
\n
26.
【答案】
vcidfun(('har*s,chart[J)
I.
inti.j-0.n;
n=stricn(s);
fbr(isO;i<n;i++)
迎%2!聞&&m[%2!國)
{/*將下標(biāo)為奇數(shù)同時ASCH碼值為奇數(shù)的字符放人數(shù)組t中*/
J++;
)
產(chǎn)最后加上結(jié)束標(biāo)識符*/
)
【解析】
用循環(huán)遍歷字符串,通過if語句將下標(biāo)和ASCII碼都為奇數(shù)的字符保
存到數(shù)組中,在字符串末尾加上結(jié)束標(biāo)識符。
27.voidfun(inta[],intn,int*max,int*d)
(
inti;
*max=a[0];
*d=0;
for(i=l;i<=""p="">
if(*max<a[i])
{*max=a[i];*d=i;}
)
fun()函數(shù)形參max用來存放最大值,形參d用來存放最大值的下標(biāo)。由
于它們都是指針變量,因此在引用所指向的變量時,要進行指針運算。
循環(huán)語句用來遍歷數(shù)組元素,找出最大值。條件語句用來判斷該數(shù)組元
素是否最大。
28.
【解析】要求出數(shù)組周邊元素的平均值,首先要求出周邊元素的和,周
邊元素的特點為行或列下標(biāo)為0,或為N—1,根據(jù)其特點求出所有周
邊元素的和,再求出其平均值,并返回給主函數(shù)。
29.
【解析】要按分?jǐn)?shù)的高低排列學(xué)生的記錄,可以使用冒泡排序法。將每
一個學(xué)生的成績與其他學(xué)生的成績相比較,對不符合要求的記錄交換位
置。
30.voidproc(char*str)
\n(
\nchar*p=str;
\nwhile(*p==*)p++;//通過p的移動來達到使p指向第一個不是*
號的字符
\nfor(;*p!=\0;p++,str++)//把從第一個不是*號的字符放到a中
\n*str=*P:
\n*str=\0;//最后用\0作為字符串結(jié)束標(biāo)志
\n}
\n【解析】題目中要求將字符串中的前導(dǎo)*號全部刪除,首先將指針P移
動到第一個不是*的字符,將指針P之后的字符放入原來的字符串中,
并為新的字符串添加結(jié)束符。
\n
31.(l)t=t-1.0/i;或t-=l.0/i;或t—=(double)l/i;(2)retumt;
(l)t=t-1.0/i;或t一=1.0/i;或t—=(double)l/i;(2)returnt;
解析:本題中函數(shù)的功能是計算公式的值。首先根據(jù)題干中給出的公式
推出每一項之間的關(guān)系,求出每一項的表達式,然后求得數(shù)列的值。其
中,每一項的值為1/n。
32.(1)錯誤:fun(char*pstr[6])正確:voidfun(char*pstr[6])(2)錯誤:
if(strcmp(*(pstr+i)pstr+j)>0正確:if(strcmp(*(pstr+i)*(pstr+j))>0(3)錯
誤:*(pstr+i)=pstr+j;正確:*(pstr+i)=*(pstr+j);(l)錯誤:fun(char*pstr[6])
正確:voidfun(char*pstr[6])\r\n⑵錯誤:if(strcmp(*(pstr+i),pstr+j)>0正
確:if(strcmp(*(pstr+i),*(pstr+j))>0\r\n(3)錯誤:*(pstr+i)=pstr+j;正確:
*(pstr+i)=*(pstr+j);解析:冒泡法對字符串排序的方法是將相鄰兩個字
符比較,將小的調(diào)到前面。令x等于字符串的第i位字符,若該字符的
前一位字符大于X,則將該字符與X互換位置。從字符山中的第2位字
符到字符串的最后一們字符重復(fù)以上過稈,即可完成排序??捎醚h(huán)語
句實現(xiàn)。
33.(l)doublefun(intn)(2)s=s+(double)a/b;(l)doublefun(intn)
◎s=s+(double)a/b;解析:本題中函數(shù)的功能是求出分?jǐn)?shù)序列的前n
項之和。首先根據(jù)題干中給出的公式推出每一項之間的關(guān)系,求出每一
項的表達式,然后求得數(shù)列的和。每一項的分母是前一項的分子,分子
是前一項分子和分母的和。
34.(1)錯誤;(l)f(doublex)正確:doublef(doublex)(2)錯誤;returns正
確:returns;(1)錯誤;(l)f(doublex)正確:doublef(doublex)\r\n(2)錯
誤;returns正確:returns;解析:該程序的流程是,fun()程序?qū)(n)
項循環(huán)累加,fun()程序采用條件選擇語句計算函數(shù)f(x)的值。本題錯誤
在于未定義函數(shù)f(doublex)的返回值類型。C語言規(guī)定,在未顯式聲明
的情況下,函數(shù)返回值默認為int型。
35.錯誤:正確:錯誤:正確:
t[i]=s[sl-l-i];解析:該題也是幾個循環(huán)語句的嵌套使用,難度并不大,
重要的足要讀懂程序,題目中賦值語句;并不能完成累計循
環(huán),所以正確的應(yīng)該是
36.(1)錯誤:p=j正確:p=j;(2)錯誤:p=j;正確:p=i;⑴錯誤:p=j正確:
p=j;\r\n(2)錯誤:p=j;正確:p=i;解析:題中所提到的“從小到大,的順
序。這類題都可以利用選擇法,即從后N個比較過程中,選擇一個最小
的與第一個元素交換,依次類推,即用第二個元素與后N-1個進行比較,
并進行交換。該題也是與我們常見的C語言排序題類似,當(dāng)然也是改錯
和編程題中的重點,請看同類試題
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年珠寶首飾銷售年度合同模板3篇
- 深圳2025年度物流服務(wù)合作協(xié)議2篇
- 2025年物業(yè)租賃合同變更擔(dān)保合同正規(guī)范范本3篇
- 2025年水電站水資源優(yōu)化配置轉(zhuǎn)讓合同3篇
- 二零二五版出租車企業(yè)品牌形象授權(quán)使用合同3篇
- 2025年企業(yè)集團合作項目解除和解協(xié)議
- 2025年《辦公室裝修合同》
- 2025年度二零二五版媒體內(nèi)容授權(quán)使用合同4篇
- 合伙股份協(xié)議書(四人2025年版)3篇
- 二零二五年度2025版非全日制用工人員服務(wù)協(xié)議3篇
- 小學(xué)一年級20以內(nèi)加減法混合運算3000題(已排版)
- 智慧工廠數(shù)字孿生解決方案
- 病機-基本病機 邪正盛衰講解
- 品管圈知識 課件
- 非誠不找小品臺詞
- 2024年3月江蘇省考公務(wù)員面試題(B類)及參考答案
- 患者信息保密法律法規(guī)解讀
- 老年人護理風(fēng)險防控PPT
- 充電樁采購安裝投標(biāo)方案(技術(shù)方案)
- 醫(yī)院科室考勤表
- 鍍膜員工述職報告
評論
0/150
提交評論