版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2022年山東省東營市全國計算機等級考試
C語言程序設(shè)計真題(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.排序是計算機程序設(shè)計中的一種重要操作,常見的排序方法有插入排
序、【】和選擇排序等。
2.為了便于對照檢查,測試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的【】兩部分組
成。
3.表示條件;10<x<100或x<0的C語言表達式是[】。
4.以下程序的運行結(jié)果為【】。
#include<stdio.h>
main()
{staticintb[2][3]={{l,2,3},{4,5,6));
staticint*pb[]={b[0],b[l]};
inti,j;
i=0;
for(j=0;j<3;j++)
printf("b[%d][%d]=%d",i,j,*(pb[i]+j));
printf("\n");
5.模式/內(nèi)模式映射為數(shù)據(jù)庫提供了【】數(shù)據(jù)獨立性。
6.軟件工程的出現(xiàn)是由于【】。
7.Windows3.X中,所有的系統(tǒng)程序和應(yīng)用程序都處于[】的集中管理
之下。
8.設(shè)順序輸入數(shù)列為:24,30,8,5,1,27,24,26,10,21,9,28,
7,13,15。假定每個結(jié)點的查找概率相同,若用順序存儲方式組織該數(shù)
列,則查找一個數(shù)成功的平均比較次數(shù)為【】;若按二叉排序樹結(jié)構(gòu)組
織該數(shù)列,則查找一個數(shù)成功的平均比較次數(shù)為【】。
9.數(shù)據(jù)流圖的類型有[]和事務(wù)型。
10.以下sum函數(shù)的功能是計算下列級數(shù)之和:
23n
八.XXX
s=i+*+元+乳+”?+商
請給函數(shù)中的各變量正確賦初值。
doublesum(douLlex,intn)
{inti;
doublea,b,s;
[1
for(i=l;i<=n;i++){a=a*x;b=b*i;s=s+a/b;}
returns;
二、單選題(10題)
11.有以下程序:
#include<stdio.h>
main()
{FILE*fp;
inti,a[6]={1,2,3,4,5,6);
々=fopen("d.dat”,“w+b”);
for(i=0;i<6;i++)
fwrite(&a[i],sizeof(int),1,fp);
rewind(fp);
fread(&a[3],sizeof(int),3,fp);
fclose(fp);
for(i=0;i<6;i++)
printf(“%d,”,a[i]);
)
程序運行后的輸出結(jié)果是()O
A.4,5,6,4,5,6,B.1,2,3,4,5,6,C.4,5,6,1,2,3,D.1,2,3,1,2,3,
12.以下是正確的C語言實型常量的是()。
A..8e+8.B.e+8C.+8e.8D.+8.8e+8
13.有以下程序
#include<stdio.h>
structst{
intx,y;
}data[2]={1,10,2,20);
main()
structst*p=data;
printf("%d,",p->y);
printf("%d\n",(++p)->x);
}
程序的運行結(jié)果是O
A.10,1B.20,1C,10,2D,20,2
14.軟件詳細設(shè)計生產(chǎn)的圖如右圖:該圖是()。
1MJ
A.N—S圖B.PAD圖C.程序流程圖D.E—R圖
15.考慮一個特殊的hash函數(shù)h,能將任一字符串hash成一個整數(shù)k,其
概率P(k)=2N-k),k=l,2,…8。對一個未知大小的字符串集合S中的每一
個元素取hash值所組成的集合為h(S)。若h(S)中最大的元素Maxh(S)=10,
那么S的大小的期望是()
A.1024B,512C,5D.10
16.以下敘述中錯誤的是()。
A.C語言編寫的函數(shù)源程序,其文件名后綴可以是C
B.C語言編寫的函數(shù)都可以作為一個獨立的源程序文件
C.C語言編寫的每個函數(shù)都可以進行獨立的編譯并執(zhí)行
D.一個C語言程序只能有一個主函數(shù)
17.
(24)有以下程序:
/include<stdio.h>
main()
{intc;
while((c=gctchar())!=,\n,)
{switch(c-3')
{case0:
case1:putchar(c+4);
case2:putchar(c+4);break;
case3:putchar(c+3);
case4:putchar(c+3);break;
}}
printR%");}
從第一列開始輸入數(shù)據(jù)(<CR>代表一個何車符):3845<CR>,則程序輸出結(jié)果為
().
A)77889B)77868C)776810D)77886610
(25)C語言規(guī)定,函數(shù)返回值的類型是().
A)由調(diào)用該函數(shù)時的主調(diào)函數(shù)類型所決定
B)由return語句中的表達式類型所決定
C)由調(diào)用該函數(shù)時系統(tǒng)臨時決定
18D)由定義該函數(shù)時所指定的數(shù)值類型決定
19.若一組記錄的排序碼為(46,79,56,38,40,84),則利用快速排序的方法,
以第一個記錄為基準(zhǔn)得到的一次劃分結(jié)果為()
A.38,40,46,56,79,84
B.40,38,46,79,56,84
C.40,38,46,56,79,84
D.40,38,46,84,56,79
20.下述程序的輸出結(jié)果是()。
#include<stdio.h>
mam)
{inti;
for(i=l;i<=10;i++)
{if(i*i>=20)(i*i<=100))
break;
)
printf("%d\n",i*i);
)
A.49B.36C.25D.64
三、程序設(shè)計題(10題)
21.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案
的項目中包含一個源程序文件progl.c。在此程序中,學(xué)生的記錄由學(xué)號
和成績組成,N名學(xué)生的記錄已放入主函數(shù)的結(jié)構(gòu)體數(shù)組s中。請編寫
函數(shù)fun(),其功能是把指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄存放在b所指的數(shù)
組中,分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)由函數(shù)值返回。
如輸入的分?jǐn)?shù)是60、69,則應(yīng)當(dāng)把分?jǐn)?shù)在60?69的學(xué)生記錄輸出,包
含60分和69分的學(xué)生記錄。主函數(shù)中把60放在low中,把69放在
high中o
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<stdio.h>
#defineN16
typedefstruct
charnum[10];
ints;
JSTREC;
intfun(STREC*a,STREC*b,int1,inth)
voidmain()
(
STRECs[N]={{"GA005”,85},{“GA003”,76},
{“GA002”,69},{“GA004”,
85},廣GAOOr,96},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GAO1
5”,85},{“GAO13”,
94},{“GAO12”,64},{“GAO14”,91},{“GAO11”,90},{“GAO17”,64},{“GAO
18”,64},{“GAO16”,72}};
STRECh[N];
inti,n,low,high,t;
printf("Enter2integernumberlow&high:^^);
scanf("%d%d”,&low,&high);,一
if(high<low)
{t=high;high=low;low=t;}
n=fun(s,h,low,high);
printf("Thestudenfsdatabetween%d-%d:\n”,low,high);
for(i=0;i<=""p="">一
printf("%s%4d\n,\h[i].num,h[i].s);
printf("\n”);
22.
編寫函數(shù)fun,其功能是:從字符串中刷除指定的字符“同字母的大、小寫按不同字符處理。
例如,若程序執(zhí)行時輸入字符串為:
“hirborandBorlandc++'
從鍵盤上輸入字符n,則輸出為:
“turbocadIwladC++”
如果輸入的字符在字符串中不存在,則字符串照原樣輸出a
注意:部分源程序給出如下,
請勿改動主函數(shù)mam和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)6m的花括號中填人你編寫的若干精句
試題程序:
#inrlu(ie<stdio.h>
voidfun(chars(]Jmc)
(
I.
main()
|staticcharstrfJ="turbocandhorlandC++”;
charrh:
charch:
printff11原始字符串:%s\n".str);
prints輸入一個字符An”);
soanf("%c":&ch);
fu?i(strj4i);
printf(hstr[]=%s\n"?strX
fitncpy(stf,"turbocandLxirlande+42);
fun(5;tr/a'):
23.請編寫函數(shù)proc,該函數(shù)的功能是:將M行N列的二維數(shù)組中的
數(shù)據(jù),按行的順序依次放到一維數(shù)組中,一維數(shù)組中數(shù)據(jù)的個數(shù)存放
在形參n所指的存儲單元中。
例如,若二維數(shù)組中的數(shù)據(jù)為
13233343
14243444
15253545
則一維數(shù)組中的內(nèi)容應(yīng)該是132333431424344415253545-
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括
號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
voidproc(int(*s)[103,int*b,int*n,intrain,intnn)
(
)
voidmain
(
intarr[10][10]={{33,33,33,33),{44,44,44,44},
{55,55,55,55}),i,j;
inta[100]={o),n=o;
printf("Thematrix:\n");
for(i=0;i<3;i++)
(
for(j=O;j<4;j++)
printf("%3d",arr[i][j]):
printf("\n");
)
proc(arr,a,&n,3,4):
printf("TheAarray:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]):
printf("\n\n");
24.
請編寫函數(shù)proc(),其功能是:將str所指字符串中除了下標(biāo)為奇數(shù)、
同時ASCII值為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成
的一個新串放在t所指的數(shù)組中。例如,若str所指字符串中的內(nèi)容為
edB2A4Dsdg,其中字符A的ASCII碼值為奇數(shù),因此應(yīng)當(dāng)刪除;其中
字符B的ASCII碼值為偶數(shù),但在數(shù)組中的下標(biāo)為偶數(shù),因此也應(yīng)當(dāng)
刪除;而字符2的ASCII碼值為偶數(shù),所在數(shù)組中的下標(biāo)為奇數(shù),因此
不應(yīng)當(dāng)刪除。依此類推,最后t所指的數(shù)組中的內(nèi)容應(yīng)是d24。注意:
部分源程序給出如下。請勿改動main()函數(shù)和其他函數(shù)中的任何內(nèi)
容,僅在函數(shù)proc()的花括號中填入所編寫的若干語句。試題程序:
atndudeOulhh
然MKIMCVconto.K>
Wmciude
9mclude
voidprac<ei?ar?Mr.HiariQ)
raidtMftC)
charttrflOOj
?rwtrm(*C1-S*>i
print"B\nHe?9ectiterairtng$w>i
pcoc<eiruh
pciMi(<*\BT1IC
25.請編寫一個函數(shù)voidproc(char*str),其功能是:將字符串str中所有
下標(biāo)為偶數(shù)位置上的字母轉(zhuǎn)化為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。
例如,若輸入字符串:“thankyou6verymuch”,則應(yīng)輸出:
“TbAnKYoU6vErYMuCh”。注意部分源程序給出如下。請勿改動main
()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入
所編寫的若干語句。試題程序:
giadudeVcooicub>
丹includeVstdioch>
修includeVmdhKh>
voidpruc<char?xr>
woldmainC)
ciiartt£31Ji
"Cl-S->?
printfC?ptejeenterancluracierRtnng
wtihift$0ciuira^i*r*i\nw)i
getsCtt)?
(KtotfCw\a\nA(tcfchan<tng?thc*tt)i
pcoc<tt)i
printfC*\nbcconK*\nXt-?n>4
26.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項目中包含一個源程序文件progl.co此程序定義了NxN的二維
數(shù)組,并在主函數(shù)中自動賦值。請編寫函數(shù)fun(),該函數(shù)的功能是將數(shù)
組下三角元素中的值全部置成0。如a數(shù)組中的值為
197
238
456
則返回主程序后a數(shù)組中的值應(yīng)為
097
008
000
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括
號中填入你編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#defineN5
voidfun(inta[][N])
(
)
voidmain()
(
inta[N][N],i,j;
system(“CLS”);
printf("****Thearray****\n");
for(i=0;i<n;i++)<p=""x/n;i++)<>
/*產(chǎn)生一個隨機的5x5矩陣*/
(
for(j=O;j<=""p="">
(
a[i][j]=rand()%10;
printf("%4d”,a[i][j]);
}
printf("\n”);
)
fun(a);
printf("TheResult\n,5);
for(i=0;i<n;i++)<p=""x/n;i++)<>
(
for(j=0;j<=""p="">
printf("%4d”,a[i]?;
printf("\n”);
27.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項目中包含一個源程序文件progl.Co程序中將m個人的成績存放
在score數(shù)組中,請編寫函數(shù)fun(),它的功能是將低于平均分的人數(shù)
作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指的數(shù)組中。
例如,當(dāng)score數(shù)組中的數(shù)據(jù)為10、20、30、40、50、60、70、80、
90時,函數(shù)返回的人數(shù)應(yīng)該是4,below中的數(shù)據(jù)應(yīng)為10、20、30、
40o注意:部分源程序在文件progl.c中。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
1#include<conio.h>
2finclude<stdio.h>
3#include<string.h>
4#include<stdlib-h>
5intfun(intscore[],intm,int
below[])
6{
7
8}
9voidmain()
W(
11FILE*wf;
12int1,n,below[9];
13intscore[9]={10,20,30,40,
50,60,70,80,90};
14system(MCLSM);
15n-fun(score,9,below);
16printf(M\nBelowtheaverage
scoreare:w);
17for(i=0;i<n;i4-+)
18printf(M%dbelow[i]);
19/*************"**/
20wf=fopenCout.dat;
21for(i=0;i<n;i++)
Wn
22fprintf(wfz%dzbelow[i]);
23fclose(wf);
24/*****************/
25)
28.請編寫一個函數(shù)proc(),它的功能是將一個數(shù)字字符串轉(zhuǎn)換為一個
整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)為整數(shù)的函數(shù))。
例如,若輸入字符串“1234”,則函數(shù)把它轉(zhuǎn)換為整數(shù)值1234。
注意:部分源程序給出如下。
請勿改動main。函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。
試題程序:
S:ndudr<sidiOkh>
Sinclude<Mnng.b>
kxMCpror(rKa.r?p)
voidmain()
charMfTCli
lon<n?
prtntfc*Ln.i?faMrmgi\nM)i
gt<94MF)i
pvocCmr)i
pruit(<.Kld\na.a)i
29.從鍵盤上輸出10個整數(shù)存入一維數(shù)組中,按由大到小的順序輸出。
30.請編寫函數(shù)proc,其功能是將兩個兩位數(shù)的正整數(shù)a、b合并形成一
個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)
個位和十位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的百位和千位上。例
如,當(dāng)a=25,b=43,實際輸入時個數(shù)之間以Enter鍵分隔,調(diào)用該函數(shù)
后,c=3452o注意:部分源程序給出如下。請勿改動main()函數(shù)和
其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括號中填入所編寫的若
干語句。試題程序:
UmdudkVadLk.
SincludeVudio.
voidproc<mi??Mitb.kMMt?c>
roid>
mta?bi
1004K€?
"CLS>>?
pnntf(*Input
?c?目”?%d%d"&b),
proc(a?b?&-c)g
pnntf("THeroultIB:Hld\n*?c)i
四、2.程序修改題(10題)
31.下列給定程序中,函數(shù)fun()的功能是:從s所指字符串中,找出t
所指字符串的個數(shù)作為函數(shù)值返回。例如,當(dāng)s所指字符串中的內(nèi)容為
abcdabfab,t所指字符串的內(nèi)容為ab,則函數(shù)返回整數(shù)3。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
intfun(char*s,char*t)
{intn;char*p,*r;
n=0;
while(*s)
{P=s;
r=t;
while(*r)
if(*r==*p){r++;p++)
elsebreak;
/*************found**************/
if(r=='\O')
n++;
s++;
)
returnn;
)
main()
{chars[100],t[100];intm;
clrscr();
printf("\nPleaseenterstrings:");
scanf("%s",s);
printf("\nPleaseentersubstringt:");
scanf("%s",t);
m=fun(s,t);
printf("\nTheresultis:m=%d\n",m);
)
32.給定程序M0D11.C中函數(shù)fun的功能是:將長整型數(shù)中每一位上
為奇數(shù)的數(shù)依次取出,構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍
在低位。
例如,當(dāng)s中的數(shù)為:87653142時,t中的數(shù)為:7531。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1tinclude<stdio.h>
2voidfun(longs,long*t)
3{intd;
4longsl*l;
5
6t■0;
7while(s>0)
8(d=s%10;
9/……??…?found
10if(d%2-0)
11{*t-d*si4-*t;
12si*=10;
13}
14s/-10;
15)
16)
17main()
18(longs,t;
19printf("XnPleaseenters:R);scanf
&s);
20fun(sr&t);
w
21printf(Theresultis:%ld\n°ft);
22
33.給定程序MOD11.C中函數(shù)fun的功能是:先從鍵盤上輸入一個3
行3列矩陣的各個元素的值,然后輸出主對角線元素之和。
請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使
它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1?include<stdio.h>
2tinclude<string.h>
3voidfun()
4
5inta[3][3],sum;
6intirj;
7/………found………?/
8!;
i-----------
9jprintf("Inputdata:R);
10jfor
11{for(j?0;j<3;j++)
12/………found………■/
RR
13scanf(%dra(i][j]);
14}
15for(i,0;i<3;i++)
16sum-sum-^a(i)[i];
nw
17printf(Sum-%ci\nrsum);
18
19main()
20
21fun();
22
34.已知一個數(shù)列從第。項開始的前三項分別為0,0,1,以后的各項
都是其相鄰的前三項之和。給定程序M0D11.C中函數(shù)fun的功能是:
計算并輸出該數(shù)列前n項的平方根之和。n的值通過形參傳入。
例如,當(dāng)n=10時,程序的輸出結(jié)果應(yīng)為:23.197745。
請改正程序中的錯誤,使程序能輸出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1finclude<stdio.h>
2finclude<math.h>
3/??********w*found*????**????*/
4fun(intn)
5{doublesum,sOrslfs2,s;intk;
6sum-1.0;
7if(n<-2)sum-0.0;
8sO=0.0;si=0.0;s2=1.0;
9for(k?4;k<-n;k*+)
10(s=sO?si?s2;
11sum"sqrt(s);
12sO?si;si-s2;s2?s;
13}
14/************found**w***??***?/
15returnsum
16
17main()
intn;
19Jprintf("InputN-n);
20iscanf("%d",&n);
21\Rw
printf(%f\nrfun(n));
22!)
35.給定程序MOD11.C中函數(shù)fun的功能是:判斷一個整數(shù)是否是素
數(shù),若是返回1,否則返回0。
在mai()函數(shù)中,若fun返回1輸出YES,若fun返回。輸出NO!。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù)。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1j*include<stdio.h>
2jintfun(intm)
3!{intk-2;
4?while(k<?m&&(m%k))
5;/…………found…………/
6
7i/…………found…………/
8if(m-k)
9ireturn1;
10;elsereturn0;
11!
12(imain()
13;{intn;
14!printf(w\nPleaseentern:
wR
iscanf(%dr&n);
15if(fun(n))printf(MYES\n");
16!elseprintf(WNO!\nw);
17;)
36.下列給定程序中,函數(shù)fun。的功能是:根據(jù)整型參數(shù)m,計算如下
公式的值。
y=l/(100xl00)+l/(200x200)+l/(300x300)+...+l/(mxm)
例如,若m=2000,則應(yīng)輸出0.000160。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
/*************found**************/
fun(intm)
{doubley=0,d;
inti;
/*************found**************/
for(i=100,i<=m,i+=100)
{d=(double)i*(double)i;
y+=l.0/d;
)
return(y);
1
main()
{intn=2000;
clrscr();
printf("\nTheresultis%lf\n",fun(n));
37.下列給定程序中函數(shù)fun()的功能是;從低位開始取出長整型變量s
中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。例如,當(dāng)s中的數(shù)為
4576235時,t中的數(shù)為4725。
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<stdio.h>
#include<conio.h>
/************found*************/
intfun(longS,long*t)
(
longsi=10;
*tiS%10;
while(s>0)
(
/*************found*************/
s=s%100;
*t=S%10*Sl+*t;
sl=sl*10;
main()
longS,t;
clrscr();
printf("\nPIeaseenterS:");
scanf("%ld”,&s);
fun(S,&t);
printf("Theresultis:%ld\n”,t);
)
38.下列給定程序中,函數(shù)fun()的功能是將字符串s中位于偶數(shù)位置的
字符或ASCII碼為奇數(shù)的字符放入字符串t中(規(guī)定第一個字符放在第0
位中)。
例如:字符串中的數(shù)據(jù)為ADFESHDI,則輸出應(yīng)當(dāng)是AFESDIO
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意;不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#defineN80
voidfun(chars,chart[])
inti,j=0;
for(i=0;i<strlen(s);i++)
/*********^Qund*************/
if(i%2=0||s[i]%2!=0)
t[j++]=s[i];
t[j]='\O';
)
main()
(
chars[N],t[N];
clrscr();
printf("\nPleaseenterstrings:");
gets(s);
fun(s,t);
printf("\nTheresultis:%s\n",t);
)
39.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按
從高到低的順序找出前叫mS10)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一
個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<alloc.h>
#defineN10
typedefstructss
{charnum[10];
ints;
}STU;
STU*fun{STUa[],intm)
{STUb[N],*t;
inti,j,k;
/*************found**************/
*t=calloc(m,slzeof(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=O;
)
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");
)
main()
{STUa[N]={{"AOI",81},{"A02",89J,
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}J;
STU*pOrder;
inti,m;
clrscr();
printf(”*****THERESULT*****\n");
outresult(a,stdout);
printf("\nGivethenumberofthestudents
whohavebetterscore:");
scanf("%d",&m);
while(m>10)
{printf("lnGivethenumberofthe
studentswhohavebetterscore:");
scanf("%d",%m);
pOrder=fun(a,m);
printf,*****THERESULT*****kn");
printf("Thetop:\n");
for(i=0;i<m;i++)
printf("%s%d\n",pOrder[i].num,
pOrder[i].s);
free(pOrder);
)
40.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按
從低到高的順序找出前m(mS10)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一
個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。
請改正程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<alloc.h>
#defineN10
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++)
/*************found*************/
for(i=j=0;i<N;j++)
if(b[i].s<b[j],s)
JT,
/*************found*************/
t[k].s=b[j].s;
b[j].s=100;
)
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");
)
main()
(
STUa[N]={{“A01”,77},{“A02”,85},
{“A03”,96},{“A04”,65},{“A05”,75},
{“A06”,96},{“A07”,76},{“A08”,63),
{“A09”,69},{“A10",78)};
STU*porder;
inti,m;
clrscr();
printf(“*****THERESULT*****\n");
outresult(a,stdout);
printf("\nGivethenumberofthestudentswhohavelowerscore:");
scanf("%d",&m);
while(m>10)
(
printf("\nGivethenumberofthestudentswhohavelowerscore:,5);
scanf("%d",&m);
)
porder=fun(a,m);
printR“*****THERESULT*****\n");
printf("Thelow:\n");
for(i=0;i<m;i++)
printf("%s%d\n”,porder[i].num,
porder[i].s);
free(porder);
)
五、程序改錯題(2題)
41.下列給定程序中,函數(shù)proc的功能是:先將字符串s中的字符按
順序存放到t中,然后把S中的字符按正序連接到t的后面。例如,當(dāng)
s中的字符串為WXYZ時,則t中的字符串應(yīng)為WXYZWXYZo
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)
構(gòu)。
試題程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidproc(char*s,char*t)
(
inti,si;
sl=strlen(s);
for(i=0;i<sl;i++)
//****^)und****
t[i]=s[sl];
for(i=0;i<sl;i++)
t[sl+i]—s[i];
t[2*sl]=\O0;
)
voidmain
(
chars[100],t[100];
system("CLS");
print{("\nPleaseenterstrings:");
scanf("%s'\s);
proc(s,t);
printf("Theresultis:%s\n",t);
)
42.
下列給定程序中,函數(shù)proc()的功能是:利用插入排序法對字符串中
的字符按從小到大的順序進行排序。插入法的基本方法是:先對字符串
中的頭2個元素進行排序,然后把第3個字符插入到前2個字符中,插
入后前3個字符依然有序;再把第4個字符插人到前3個字符中,待排
序的字符串已在主函數(shù)中賦予。請修改程序中的錯誤,使它能得出正
確的結(jié)果。注意:不要改動main()函數(shù),不得增行或刪行,也不得
更改程序的結(jié)構(gòu)。試題程序:
gmcludeVslfi”
&mcludcVzdiab>
9(MineM80
voidproc<char?arv)
(mt卜j?niduirdii
n*xrlwi(4ur>i
(orCtM+)
//????IQMMI????
Ic-?rr£i]i
產(chǎn)1一1s
whiWC?j〉-0)&&(d*<arr{j〕>J
?rrtj41
一.i
arrfj+l3-cht
voidm*in(>
(
char?(M]-?QWERTYUKJPASDFGHJKLMNB
VCXZ"i
printf(eTb*origiiuilMnngiX*\ne?a>i
proc<a)i
pnntf("TlwMringafterwortirqti
六、操作題(2題)
43.使用VC++打開考生文件夾下modil中的解決方案。此解決方案的項
目中包含一個源程序文件modil.c。在此程序中,函數(shù)fun()的功能是求
出s所指字符串中最后一次出現(xiàn)的t所指字符串的地址,并將此地址通
過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串;若未找到,則
函數(shù)值為NULLO
例如,當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中內(nèi)容為“ab”時,輸出
結(jié)果應(yīng)是“abcdx”。
當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中內(nèi)容為“abd”時,則程序輸出
未找到信息“Notfound!”。請改正程序中的錯誤,使它能得出正確的
結(jié)果。
注意:不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)
構(gòu)!
試題程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
char*fun(char*s,char*t)
(
char*p,*r,*a;
/*********^Qund*********/
a=Null;
while(*s)
(
p=s;r=t;
while(*r)
/*********^Qund*********/
if(r==p)
{r++;p++;}
elsebreak;
if(*r=='\0')a=s;
s++;}
returna;
)
voidmain()
(
chars[100],t[100],*p;
system(“CLS”);
printf("\nPleaseenterstrings:");
scanf("%s”,s);
printf("\nPleaseentersubstringt:");
scanf("%s”,t);
p=fun(s,t);
if(P)
printf("WTheresultis:%s\n”,p);
else
printf("\nNotfound!\n^^);
)
44.請編寫fun函數(shù),其功能是:計算并輸出3?m所有素數(shù)的平方根
之和。
例如,若主函數(shù)從鍵盤給m輸入50后,則輸出為s=68.665791o
請勿改動main函數(shù)與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號
中填入所編寫的若干語句。
注意:m的值要大于2但不大于100。部分源程序給出如下。
試題程序:
#include<math.h>
#include<stdio.h>
doublefun(intm)
(
}
voidmain
(
intm;
doubles;
FILE*out:
printf("\n\nlnputm:");
scanf("%d",&m);
s=fun(m);
printf("\n\ns=%f\n\n",s);
ut=fopen("outfile.dat","w");
for(m=0;m<10;m++)
fprintf(out,fun(m+80));
felose(out);
)
參考答案
1.交換排序交換排序解析:常見的排序方法有插入排序(包括簡單插入
排序法和希爾排序法等)、交換排序(包括冒泡排序和快速排序法等)和選
擇排序(包括簡單選擇排序和堆排序等)。注意:常見的排序方法及其作
用機制和區(qū)別。
2.輸出結(jié)果輸出結(jié)果解析:注意:測試的基本方法和步驟。
3.(x>10&&x<100)||x<0
4.b[0][0]=lb[0][l]=2b[0][2]=3
5.物理物理
6.軟件危機的出現(xiàn)軟件危機的出現(xiàn)
7.程序管理器程序管理器
8.857/15
9.變換型典型的數(shù)據(jù)流類型有兩種:變換型和事務(wù)型。變換型是指信息
沿輸入通路進入系統(tǒng),同時由外部形式變換成內(nèi)部形式,進入系統(tǒng)的信
息通過變換中心,經(jīng)加工處理以后再沿輸出通路變換成外部形式離開軟
件系統(tǒng);在很多軟件應(yīng)用中,存在某種作業(yè)數(shù)據(jù)流,它可以引發(fā)一個或
多個處理,這些處理能夠完成該作業(yè)要求的功能,這種數(shù)據(jù)流就叫做事
務(wù)。
10.a=1.0;b=1.0;s=1.0;a=1.0;b=1.0;s=1.0;解析:各種數(shù)值型數(shù)據(jù)
間進行混合運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,再進行運算。
本題的結(jié)果為double型。
H.D程序首先以讀和寫二進制文件的方式打開文件d.dat;然后通過for
循環(huán),調(diào)用fwrite函數(shù)將數(shù)組a中的各個元素寫入d.dat中,?接下來調(diào)
用rewind函數(shù),將文件指針fp重定位到文件的開始位置;再調(diào)用fread
函數(shù)將文件的前3個整數(shù)1,2,3讀入a[3]開始的位置,所以此時數(shù)組a
中的元素值分別為:123,1,2,3。故本題答案為D選項。
12.DC語言中,實型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。其中
指數(shù)形式的一般形式為:尾數(shù)E(或e)整型指數(shù)。C語言規(guī)定,字母E
或e之前必須要有數(shù)字,且E或e后面的指數(shù)必須是整數(shù),所以選項
A、B、C錯誤,選項D正確。故本題答案為D選項。
13.C
解析:本題定義了一個包含兩個元素(data⑼、data[l])的結(jié)構(gòu)體數(shù)組
data,其中data[0],x=1;data[0].y=10;data[1].x=2;\u3000data[1].y=20□在
主函數(shù)中,定義了一個指向結(jié)構(gòu)體數(shù)組的結(jié)構(gòu)體指針變量p,使得p指
向結(jié)構(gòu)體數(shù)組的首地址,所以p-〉y訪問的是第一個蛤構(gòu)體數(shù)組元素
的第二個值,即data[0].y;(++p)->x訪問的是第二個結(jié)構(gòu)體數(shù)組元素
的第一個值,即\u3000data[l].x,所以程序輸出結(jié)果為10,2。
14.CN—s圖提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,所以A不對。
PAD圖是問題分析圖,它是繼承程序流程圖和方框圖之后提出的又一種
主要用于描述軟件詳細設(shè)計的圖形表示工具,所以8不對。E—R圖是
數(shù)據(jù)庫中的用于表示E—R模型的圖示工具,所以D不對。根據(jù)圖中所
示表示方法是進行軟件詳細設(shè)計時使用的程序流程圖。
15.A
16.C
函數(shù)是指預(yù)先定義功能塊,其目的是提高程序的重用性。在C語言中
函數(shù)的源程序,后綴名可以為C。C語言所編寫的函數(shù)都可以是一個
獨立的源文件。一個C語言程序只能有一個主函數(shù)。C語言中編寫的
函數(shù)不是每個都可以獨立地編譯和執(zhí)行的,因為C語言中程序的開始
為主函數(shù),如果程序中沒有主函數(shù)則無法進行編譯和執(zhí)行。
17.A
18.D
19.C
20.C
當(dāng)if執(zhí)行到第一個滿足(i*i>=20)(i*i<=100)這個條件的i出現(xiàn)時,通過
break語句跳出循環(huán),執(zhí)行下面的prinlf語句。
21.intfun(STREC*a,STREC*b,int1,inth)
(
inti,j=0;
for(i=0;i<=""p="">
if(a[i].s>=l&&a[i].s<=h)
/*將分?jǐn)?shù)高于1,低于h的學(xué)生記錄存入結(jié)構(gòu)體數(shù)組b中*/
b[j++]=a[i];
returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/
)
本題使用循環(huán)判斷結(jié)構(gòu)實現(xiàn)題目要求。循環(huán)語句用于遍歷結(jié)構(gòu)體數(shù)組;
條件語句用于判斷當(dāng)前元素是否符合條件,若符合條件則將其存入結(jié)構(gòu)
體數(shù)組b中。變量j為數(shù)組b元素下標(biāo),最后變量j+1為學(xué)生人數(shù),作
為函數(shù)值返回。
22.
【答案】
vni(ifun(cha-s[],intc)
IP
inti=0;.
char*p;
P=s;
while(*p)/*判斷是否為結(jié)束標(biāo)識符*/
{,
if(*p!=c)/*判斷字符串中字符是否與指定字符相同*/
(?
"如不同,將重新組合字符串*/
i++;
}/?如相同,則處理下一個字符*/
p++;)
小卜A0';
)
【解析】
通過循環(huán)將非指定字符重新保存,字符串末尾加上結(jié)束標(biāo)識符。
23.\r\n\tvoidproc(int(*s)[10],int*b,int*n,intmm,intnn)
inti,j,k=0;
for(i=0;i<mm;i++)//i是表示其行的下標(biāo)
for(j=0;j<nn;j++)//j是表示其列的下標(biāo)
b[k++]=s[i][j];//把其放到b的一維數(shù)組中
*n=k;//把b數(shù)組的長度通過形參n傳回到主函數(shù)中
)
【解析】要將M行N列的二維數(shù)組中的數(shù)據(jù),按行的順序依次放到一
維數(shù)組中,可以通過首先行循環(huán),然后列循環(huán)取出二維數(shù)組中的每一
個元素,并將其放入一維數(shù)組中。最后,將一維數(shù)組的長度通過形參
返回到主函數(shù)當(dāng)中。
24.
【解析】題目中要求將字符串str中下標(biāo)為奇數(shù),同時ASCII碼值為偶
數(shù)的字符放在數(shù)組t中,首先,需要檢查字符串str中下標(biāo)為奇數(shù)的字符
的ASCII碼值是否為偶數(shù),將符合要求的字符放在數(shù)組t中。最后,為
新的字符串?dāng)?shù)組添加結(jié)束符。
25.
【解析】要將字符串str中下標(biāo)為偶數(shù)位置上的字符轉(zhuǎn)化為大寫字母,
首先應(yīng)該判斷字符串str中下標(biāo)為偶數(shù)位置上的字符是否為小寫字母,
若是將其轉(zhuǎn)化為大寫字母.若不是不做任何變化。
26.voidfun(inta[][n])
(
inti,j;
for(i=0;i<=""p="">
for(j=0;j<=i;j++)
a[i][j]=O;/*將數(shù)組下三角元素中的值全部置成0*/
)
對于NxN二維數(shù)組,表示其下三角元素,可以通過以下語句實現(xiàn)。
for(i=0;i<n;i++)<p=""x/n;i++)<>
\tfor(j=0;j<=i;j++)
外層循環(huán)用來控制矩陣的行下標(biāo),內(nèi)層循環(huán)用來控制矩陣的列下標(biāo)。
注意列下標(biāo)的取值范圍,因為要表示下三角元素,所以j的范圍是
0-io
27.1intfun(intscore[],intm,intbe-low[])
2{
3inti,j=O;
4floatav=0.0;
5for(i=0;i
<m;i++)
6av=av+score[i]/m;/*求平均值*/</m;i++)
<m;i++)
7for(i=0;i<m;i++)
gif(score[i]</m;i++)
</m;i++)
<m;i++)
<m;i++)
<av)p*如果分?jǐn)?shù)<>8低于平均分,則將此分?jǐn)?shù)放入below數(shù)::組中
*/</av)p*如果分?jǐn)?shù)<></m;i++)
</m;i++)
<m;i++)
<m;i++)
<av)p*如果分?jǐn)?shù)<>9below[j++]=score[i];</av)p*如果分?jǐn)?shù)<></m;i++)
</m;i++)
<m;i++)
<m;i++)
<av)p*如果分?jǐn)?shù)<>10returnj;/*</av)p*如果分?jǐn)?shù)<></m;i++)
</m;i++)
<m;i++)
<m;i++)
<av)p*如果分?jǐn)?shù)<>返回低于平均分的人數(shù)*/U}要計算低于平均分的人
數(shù),首先應(yīng)該求出數(shù)組score中各元素的平均值。然后通過for循環(huán)語
句
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版門診設(shè)備設(shè)施租賃與承包合同4篇
- 2025年度航空航天零部件加工與供應(yīng)分包合同3篇
- 二零二五年度離婚財產(chǎn)分割與子女撫養(yǎng)權(quán)分配合同4篇
- 2025年度美團特色團購合作合同范本細則4篇
- 2 24-全國護理專業(yè)教學(xué) 資源庫-1738309514230
- 診斷與改進“應(yīng)知應(yīng)會”50問
- 2025年度特色培訓(xùn)學(xué)校股份合作發(fā)展合同3篇
- 2025年度校園春游活動團隊旅游合同
- 二零二五年企業(yè)員工出差通訊費用報銷及標(biāo)準(zhǔn)合同3篇
- 2025年度個人信用借款合同隱私保護措施2篇
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃氣限公司招聘工作人員14人高頻重點提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護理培訓(xùn)課件:《早產(chǎn)兒姿勢管理與擺位》
- 《論文的寫作技巧》課件
- 空氣自動站儀器運營維護項目操作說明以及簡單故障處理
- 2022年12月Python-一級等級考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識
- Hypermesh lsdyna轉(zhuǎn)動副連接課件完整版
評論
0/150
提交評論