版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2021年廣東省揭陽市全國計算機等級考試
C語言程序設(shè)計真題(含答案)
學(xué)校:班級:姓名:考號:
一、2.填空題(10題)
1.樹中度為零的結(jié)點稱為O
2.以下程序的運行結(jié)果為【】。
#defineN5
main()
{inta[N]={1,2,3,4,5},i,temp;
for(i=0;i<N/2;i++)
{temp=a[i];
a[i]=a[N-i-l];
a[N-i-l)=temp;
}
printf("\n");
for(i=0;i<n;i++)printf("%d",a[i]);
}
3.長度為n的順序存儲線性表中,當(dāng)在任何位置上插入一個元素概率
都相等時,插入一個元素所需移動元素的平均個數(shù)為【】。
4.下列的for語句的循環(huán)次數(shù)為o
for(x=1,y=0;(y!=19)&&(x<7);x++);
5.在面向?qū)ο蠓椒ㄖ校?)是具有相似性質(zhì)的對象的集合。
6.設(shè)a、b、c為整形數(shù),且a=2,b=3,c=4則執(zhí)行完以下語句后,a
的值是【】。
a*=16+(b++)-(++c);
7.數(shù)據(jù)模型按不同的應(yīng)用層次分為三種類型,它們是____數(shù)據(jù)模型、
邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型。
8.以下程序的輸出結(jié)果是()。
#include<stdio.h>
voidfun(intx)
{if(x/2>0)fun(x/2);
printf("%d",x);
)
main()
{fun(3);printf("\n");
)
9.已知字符A的ASCH碼值為65,以下語句的輸出結(jié)果是【】。
charch='B';
printf("%c%d\n",ch,ch);
10.有以下程序:
#definef(x)x*x
main()
{inti;
i=f(4+4)/f(2+2);
printf("%d\n",i);
)
執(zhí)行后的輸出結(jié)果是【】°
二、單選題(10題)
11.以下函數(shù)的時間復(fù)雜度和空間復(fù)雜度為()
Functionfn)
(n<=1)
Functkx)(n-1)?Function(n-2);
A.T(n)=O(2An),S(n)=O(n)
B.T(n)=O(l),S(n)=O(l)
C.T(n)=O(2An),S(n)=O(1)
D.T(n)=O(n),S(n)=O(n)
12.
(23)以下是while語句的基本形式:
while(表達式){語句;)
其中“表達式”()。
A)必須是邏輯表達式B)必須是關(guān)系表達式
C)必須是邏輯表達式或關(guān)系表達式D)可以是任意合法的表達式
13.有以下程序
include<stdio.h>
main()
{chara[30],b[30];
scanf("%s",a);
gets(b);
printf("%s\n%s\n”,a,b);
)
程序運行時若輸入:
howareyou?Iamfine<回車>
則輸出結(jié)果是
A.howareyou?Iamfine
B.howareyou?1amfine
C.howareyou?Iamfine
D.howareyou?
14.定義無符號整數(shù)類為UInt,下面可以作為類UInt實例化值的是
A)B)369C)0.369D)
A.-369B.369C.0.369D.整數(shù)集合{1,2,3,4,5}
15.有以下程序
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d%d\n",*p,*q);
)
程序運行后的輸出結(jié)果是
A.運行后報錯B.66C.611D.510
16.有以下程序:
#include<stdio.h>
#defineSUB(a)(a)-(a)
main()
(
inta=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n,,,d);
)
程序的運行結(jié)果是()o
A.0B.-12C.-20D.10
17.輸入序列為(A,B,C,D),不可能得到的輸出序列是____.
A.(A,B,C,D)B.(D,C,B,A)C.(A,C,D,B)D.(C,A,B,D)
18.設(shè)有以下函數(shù):voidfun(intn,char*s){...}則下面對函數(shù)指針的定
義和賦值均正確的是()o
A.void(*pf)();pf=fun;
B.void*pf();pf=fun
C.void*pf();*pf=fun;
D.void(*pf)(int,char);pf=&fun;
19.向一個棧頂指針為HS的鏈式棧中插入一個s所指的結(jié)點時,則執(zhí)行
Oo
A.HS->next=s
B.S->next=HS->nextHS->next=s
C.s->next=HSHS=s
D.S->next=HSHS=HS->next
20.下面是有關(guān)C語言字符數(shù)組的描述,其中錯誤的是()。
A.不可以用賦值語句給字符數(shù)組名賦字符串
B.可以用輸入語句把字符串整體輸入給字符數(shù)組
C.字符數(shù)組中的內(nèi)容不一定是字符串
D.字符數(shù)組只能存放字符串
三、程序設(shè)計題(10題)
21.請編寫函數(shù)proc,它的功能是計算:
s=(In(l)4+ln(2)4+ln(3)+...+In(m))0.5
在C語言中可調(diào)用log(n)函數(shù)求ln(n)o
例如,若m的值為30,則proc函數(shù)值為8.640500。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號
中填人所編寫的若干語句。
試題程序:
#include<stdlib.h>
#include<conio.h>
#inclllde<stdio.h>
#include<math.h>
doubleproc(intm)
)
voidmain
system("CLS");
printf("%f\n",proc(30));
22.有N個學(xué)生,每個學(xué)生的信息包括學(xué)號、性別、姓名、四門課的成
績,從鍵盤上輸入N個學(xué)生的信息,要求輸出總平均成績最高的學(xué)生信
息,包括學(xué)號、性別、姓名和平均成績。
23.
編寫一個函數(shù),該函數(shù)可以統(tǒng)計一個長度為2的字符串在另一個字符串
中出現(xiàn)的次數(shù)。例如,假定輸入的字符串為abcdefabcdeabceabcdef,子
字符串為cd,則應(yīng)當(dāng)輸出3。注意:部分源程序給出如下。請勿改動
主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括號中填入
所編寫的若干語句。試題程序:
8mcludehJ>
#MiclwdrVcoato.
*IBcIttd*<BtdKKk>
9iarlwdrV,icng.
atpmiclmr?Mftchar?sobirtrI
*oidMMIH>
cliav)}?
MMfll
?yulMnl*ClJBT)t
e)i
g#(?(B(F)I
pnMf<attAfV,
*<t.(?i?bstr)e
pwts(?ub?tr>?
■-prac<Mr.MiiMr>s
prauR'■=KW\B*?■)!
24.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放
人結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,它的功能是:把指定分數(shù)范圍
之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分數(shù)范圍之外的學(xué)生人數(shù)由函
數(shù)值返回。
例如,輸入的分數(shù)是70和79,則應(yīng)當(dāng)把分數(shù)低于70和高于79的學(xué)生
數(shù)據(jù)輸出,不包含70分和79分的學(xué)生數(shù)據(jù)。主函數(shù)中把70放在low
中,把79放在heigh中。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括
號中填人所編寫的若干語句。
試題程序:
#include<stdio.h>
#defineM16
typedefstruct
(
charnum[10];
ints:
)
STREC;
intproc(STREC*a,STREC*b,int1,inth)
(
)
voidmain
(
STRECstu[M]={{"GA005",55),{"GA003",96},
{"GA002",80),{"GA004",68),
{"GA001"88},{"GA007",74},
{"GA008",85),{"GA006",89},
{"GAO15",90),{"GA013,,?53),
{"GAO12",66},{"GAO14",82)
{"GAOH",73},{"GAO17",69),
{"GA018",64),{"GA016",86}};
STRECh[M];
inti,n,low,heigh,t;
printf("Enter2integernumberlow&
heigh:");
scanf("%d%d",&low,&heigh);
if(heigh<low)
t=heigh:
heigh=low;
low=t;
)
n=proc(stu,h,low,heigh);
printf("Thestudent'sdataout
%d--%d:\n",low,heigh);
for(i=0;i<n;i++)
printf("%S%4d\n",h[i].num,h[i].s);
//輸出指定分數(shù)范圍內(nèi)的學(xué)生記錄
printf("\n");
)
25.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項目中包含一個源程序文件progl.co在此程序中,編寫函數(shù)fun(),
其功能是將a、b兩個兩位正整數(shù)合并成一個新的整數(shù)放在c中。合并
的方式是將a中的十位數(shù)和個位數(shù)依次放在變量c的千位和十位上,b
中的十位數(shù)和個位數(shù)依次放在變量c的個位和百位上。
例如,當(dāng)a=45,例如,調(diào)用該函數(shù)后c=4251。
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(inta,intb,long*c)
(
)
main()
{
inta,b;
longc;
printff'Inputa,b:");
scanf("%d%d”,&a,&b);
fun(a,b,&c);
printf("Theresultis:%ld\n,,,c);
)
26.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方
案的項目中包含一個源程序文件progl.c。在此程序中,編寫一個函
數(shù),其功能是從傳入的num個字符串中找出最長的一個字符串,并通
過形參指針max傳回該字符串的地址(用****作為結(jié)束輸入的標識)。
注意:部分源程序在文件progl.c中。請勿改動主函數(shù)main()和其他函數(shù)
中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。
試題程序:
1#include<conio.h>
2#include<stdio.h>
3#include<string.h>
4#include<stdlib.h>
5char*fun(char(*a)[81],intnum,char*max)
6{
7
8)
9voidmain()
10{
11FILE*wf;
12charss[10][81],*ps=NULL;
13chars[3][81]={"abed","deg","diegns"),*p=NULL;
14inti=0,n;
15system("CLS");
16printf("輸入若干個字符串:");
17gets(ss[i]);
18puts(ss[i]);
19while(!stremp(ss[i],"****")==0)/*用4個星號作為結(jié)束輸入的標志
*/
20{
21i++;
22gets(ss[i]);
24puts(ss[i]);
25)
26n=i;
27ps=fun(ss,n,ps);
28printf("\nmax=%s\n",ps);
30wf=fopen("out.dat","w");
31p=fun(s,3,p);
32fprintf(wf,"%s",p);
33fclose(w0;
27.使用VC++2010打開考生文件夾析下progl中的解決方案。此解決
方案的項目中包含一個源程序文件progl.c。在此程序中,請編寫一個
函數(shù)fun(),它的功能是將ss所指字符串中所有下標為奇數(shù)的字母轉(zhuǎn)換
為大寫字母(若該位置上不是字母,則不轉(zhuǎn)換)。
例如,若輸入“abc4E螃”,則應(yīng)輸出“aBc4EFg”。
注意:部分源程序在文件progl.c中。請勿改動主函數(shù)main()和其他函
數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花括號中填入你編寫的若干語句。
試題程序:
1#include<conio.h>
2#include<stdio.h>
3frinclude<string.h>
4#include<stdlib?h>
5voidfun(char*ss)
6{
7
8}
9voidmain()
10{
IlFILE*wf;
MM
12chartt[81]zs[81]?abc4Efg;
13system(MCLSM);
14printf(M\nPleaseenteranstring
within80characters:\nM);
15gets(tt);
16printf(n\n\nAfterchanging,
M
thestringVn%srtt);
17fun(tt);
18printf(M\nbecomes\ng
19//
MMMM
20wf=fopen(out.datrw);
21fun(s);
22fprintf(wf,w%sw,s);
23fclose(wf);
24//
251
28.使用VC++2010打開考生文件夾下progl中的解決方案。此解決方案
的項目中包含一個源程序文件progl.c。在此程序中,編寫函數(shù)fun(),
其功能是根據(jù)以下公式計算S,并將計算結(jié)果作為函數(shù)值返回,通過形
參傳入。
5=1+-一--+;+...+-----------
1+21+2+3I+2+3+—+n
例如,若n的值為11時,函數(shù)的值為1.833333。
注意:部分源程序給出如下。
請勿改動主函數(shù)main()和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun()的花
括號中填入你編寫的若干語句。
試題程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
floatfun(intn)
{
)
voidmain()
(
intn;
floats;
system(“CLS”);
printffAnPleaseenterN:");
scanf("%d”,&n);
s=fun(n);
printf("Theresultis:%f\n”,s);
}
29.學(xué)生的記錄由學(xué)號和成績組成,M名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入
結(jié)構(gòu)體數(shù)組stu中,請編寫函數(shù)proc,其功能是:按分數(shù)的高低排列學(xué)
生的記錄,高分在前。
注意:部分源程序給出如下。
請勿改動main函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc的花括
號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#defineM16
typedefstruct
{
charnumflO];
intS;
)
STREC:
voidproc(STRECa[])
(
inti,j;
STRECt;
for(i=l;i++)/*用冒泡法來按從高到低
排序*/
for(j=0;j<M-l;j++)o
if(a[j].s)//*按分數(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),
{"GA015",85),{"GA013",91),{"GAO12",64),
{"GAO14",91),{"GA011",66),{"GAO17",64},
{"GA018",64),{"GAO16",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");
)
30.
請編寫一個函數(shù)voidproc(intm,intk,intxxE3),該函數(shù)的功能是:
將大于整數(shù)m且緊靠m的k個素數(shù)存入所指的數(shù)組中。例如,若輸入
206,則應(yīng)輸出232931374143。注意:部分源程序給出如下。請勿
改動main()函數(shù)和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)proc()的花括
號中填入所編寫的若干語句。試題程序:
與includehj>
9includeVcooflo.h>
>include<stdiah>
vo?dprocimtmttnlk?mt
voedouirtlC)
mim?n*?rv{lCXM>]i
aEe?n《*CLS*>i
pn?tf("\nP1?i?cmirrtwoiategers?*)i
—"XdMd*.K.m.K.n)?
四、2.程序修改題(10題)
31.給定程序MODII.C中fun函數(shù)的功能是:根據(jù)整型形參m,計算
如下公式的值。
23m
例如,若主函數(shù)中輸入5,則應(yīng)輸出-0.283333。
請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使
它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1tinclude<stdio.h>
2doublefun(intm)
3
doublet=1.0;
5inti;
6for(i?2;i<-m;1?+)
**********found**********
8t-1.0-1/i;
9****found**********
10
11
12main()
13
14intm;
15printf(H\nPleaseenter1integer
numbers:\n");
RR
16scanf(%dr&m);
w
17printf("\n\nTheresultis%lf\nr
fun(m));
18
32.給定程序MODU.C中fun函數(shù)的功能是:分別統(tǒng)計字符串中大寫
字母和小寫字母的個數(shù)。
例如,給字符串s輸入:AAaaBBbl23CCccccd,則應(yīng)輸出結(jié)果:upper=
6,lower=8o
請改正程序中的錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1#include<stdio.h>
2/………?found………?/
3voidfun(char*srinta,intb)
4
5while(*s)
6{if(*s>-'A'4&*s<?'Z')
7/……?…found………■/
8
9if(*s>?,a*&&*s<??z1)
10/…?……found……★…/
11*b,b+l;
12s++;
13
14)
15main()
16{chars[100];intupper-Q,lower
?0;
17printf("\nPleaseastring:n);
gets(s);
18fun(sr&upper,slower);
19printf(H\nupper-%dlower■
w
%d\nrupperzlower);
20)
33.給定程序MOD11.C中函數(shù)fun的功能是:根據(jù)整型形參m,計算
如下公式的值。
11.1..1
V=一十——十?一一?一+…+‘’
!004100200*200300*300m*m
例如,若m=2000,則應(yīng)輸出:0.000160。
請改正程序中的語法錯誤,使它能計算出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1ilinclude<stdio.h>
i/*?**?*******found************/
3!fun(intm)
?
4;(doubley,0,d;
5\inti;
6!/…………found…………/
7for(i,100,i<?mri+=100)
8(d=(double)i?(double)i;
9!y+-1.0/d
10;}
I
11ireturn(y);
12\}
13!main()
14i{intn?2000;
wH
15;printf(\nTheresultis%lf\ng
;fun(n));
16i}
34.下列給定程序中,函數(shù)fun()的功能是:計算并輸出下列級數(shù)的的
N項之和SN,直到SN+1大于q為止,q的值通過形參傳入。
SN=2/1+3/2+4/3+(N+1)/N
例如,若q的值為50.0,則函數(shù)值為49.394948°
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意;不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu).
試題程序:
#include<conio.h>
#include<stdio.h>
/**************found***************/
doublefun(doubleq)
{intn;doubles,t;
n=2;
s=2.0;
while(s<=q)
t=s
/*************found*************/
s=s+(n+l)/n;
n++;
printf("n=%d\n",n);
/************found***************/
returns;
main()
{clrscr();
printf("%f\n",fun(50));
35.下列給定函數(shù)中,函數(shù)fun()的功能是:統(tǒng)計字符串中各元音字母(即
A,E,I,O,U)的個數(shù)。注意:字母不分大小寫。例如,輸入THIsis
aboot,貝IJ應(yīng)輸出是10220。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
/*************found**************/
fun(char*s,intnum[5])
{intk,i=5;
for(k=0;k<i;k++)
/*************found**************/
num[i]=0;
for{;*s;s++)
{i=-l;
/*************found**************/
switch(s)
{case'a':case'A':{i=0;break;}
case'e':case'E':{i=l;break;}
case'i':caseT:{i=2;break;}
case'o':case'O':{i=3;break;}
case'u':case'U':{i=4;break;}
)
if(i>=0)
numfi]++;
)
}
main()
{charsl[81];intnuml[5],i;
clrscr();
printf("\nPleaseenterastring:");
gets(si);
fun{sl,numl);
for(i=0;i<5;i++)printf("%d",numl[i]);
printf("\n");
)
36.給定程序MODD.C中函數(shù)fun的功能是:從低位開始取出長整型
變量s中奇數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在1中。高位仍在高位,
低位仍在低位。
例如,當(dāng)s中的數(shù)為:7654321時,t中的數(shù)為:7531。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1linclude<stdio.h>
2/…………"und…………/
3voidfun(longs,longt)
4{longsl-10;
5*t-s%10;
6while(s>0)
7(s■s/100;
8*t■s%10*si?*t;
9/****w*******found*********??*/
10si?sl*100;
11
12
13main()
14{longs,t;
15printf("\nPleaseenters:w);
scanf(N%ldN,&s);
16fun(s,&t);
17printf(wTheresultis:%ld\nn^t);
IS
37.給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計算如下公式的
值。
例如,若m中的值為5,則應(yīng)輸出:1.463611。
請改正程序中的錯誤,使它能得到正確結(jié)果。
[注意]不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
[試題源程序]
#include<stdiO.h>
doublefun(intm)
(
doubley=1.0;
inti;
/*************found*************/
for(i=2;i<m;i++)
y+=l/(i*i);
return(y);
main()
(
intn=5;
printf("\nTheresultis%lf\n",fun(n));
)
38.下列給定程序中,函數(shù)fun()的功能是:求出以下分數(shù)序列的前n項
之和。
2/1,3/2,5/3,8/5,13/8,21/13...........
和值通過函數(shù)值返回main。函數(shù)。例如,若輸入n=5,則應(yīng)輸出8.391667。
請改正程序中的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include<conio.h>
#include<stdio.h>
/*************found**************/
fun(intn)
{inta=2,b=l,c,k;
doubles=0.0;
for(k=l;k<=n;k++)
{s=s+1.0*a/b;
/*************found**************/
c=a;a+=b;b+=c;
}
return(s);
)
main()
{intn=5;
clrscr();
printf("\nThevalueoffunctionis:
%lf\n",fun(n));
39.給定程序M0D11.C中函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整
型值),判斷能否構(gòu)成三角形:構(gòu)成的是等邊三角形,還是等腰三角形。
若能構(gòu)成等邊三角形函數(shù)返回3,若能構(gòu)成等腰三角形函數(shù)返回2,若
能構(gòu)成一般三角形函數(shù)返回1,若不能構(gòu)成三角形函數(shù)返回0。
請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!
1*include<stdio.h>
2tinclude<math.h>
3/??一★★★★…?■found
4voidfun(inta,intb,intc)
5(if(a*b>c&&b+c>a&&a+c>b){
6if(aMb&&bMc)
7return3;
8elseif(aMb||b--c||a~c)
9return2;
10???????foundn/
elsereturn1
12}
13elsereturn0;
14;}
main()
16{intarbrcrshape;
nn
17printf(\nlnputarbrc:);scanf
(“d%d%d-,&a,
HR
18printf(\na-%drb=%d,c-%d\n,
a,b,c);
19shape-fun(arb,c);
R
20printf(\n\nTheshape:%d\n*r
shape);
21
40.下列給定程序中,函數(shù)fun()的功能是:對N名學(xué)生的學(xué)習(xí)成績,按
從高到低的順序找出前叫mSO)名學(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[kl.s=bfjls;
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",89},
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}};
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);
)
五、程序改錯題(2題)
41.下列給定程序中,函數(shù)proc()的功能是:從m個學(xué)生的成績中統(tǒng)
計出低于平均分的學(xué)生人數(shù),此人數(shù)由函數(shù)值返回,平均分存放在形參
aver所指的存儲單元中。例如輸入8名學(xué)生的成績:
987867563489.578.576.5則低于平均分的學(xué)生人數(shù)為3(平均分為
72.187500)o請修改程序中的錯誤,使它能得出正確的結(jié)果。注意:
不要改動main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試
題程序:
於includeVsidlib.h>
includeVxtdio.h>
include<conio.h>
於defineM20
intproc(float?inin?float?aver).
(
floatave?t=0.0>
intcount=O?k?it
for<k=0ik<nik4--F)
//???*found????
ave^t/m
for(i=?0ii<nii++)
if(s£i]<ave)count++?
//????found????
*aver-&avei
returncounti
)
voidmain()
(
floatstu[30]?avcn
inim?ii
systcm("CI-Sw)?
prind(*\nPlcascenterm:*)tscanf
("%d"?&m),
primfC"\nPlcascenter%dmark:\nw?m);
for(i=0ii<inii4-+)scanf("%f*.Mu-bi)?
printfCw\nThcnumberofstudents:
%d\n"wproc(stu.m.&.avcr))i
printfC"Ave%f\n*?avcr)i
42.下列給定程序中,函數(shù)proc的功能是:讀入一個字符串(長度<20),
將該字符串中的所有字符按ASCII碼升序排序后輸出。
例如,輸入opdye,則應(yīng)輸出deopy。
請修改程序中的錯誤,使它能得到正確結(jié)果。
注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#include%string.h>
#include%stdlib.h>
#include<conio.h>
#include<stdio.h>
//***und****
intproc(charstr[])
(
charC;
unsignedi,j;
for(i=0;i<strlen(str)-1;i++)
for(j=i+l;j<strlen(str);j4-+)
if(str[i]>str[j])
(
c=str[j]:
//****^Qund****
str[j]=str[i++];
str[i]=C;
)
)
voidmain
(
charst/[81];
system("CLS");
printf("\nPleaseenteracharacter
string:");
gets(str);
printf("\nknBeforesorting:\n%s",str);
proc(str);
printf("\nAftersortingdecendingly:\n
%S",str);
)
六、操作題(2題)
43.以下程序的輸出結(jié)果是【】。
main()
{charc='z';
printf("%c",c-25);}
44.當(dāng)m=l,n=2,a=3,b=2,c=4時,執(zhí)行d=(m=a!=B)&&(n=b>C)后,
m的值為()。
參考答案
1.葉子結(jié)點葉子結(jié)點解析樹中度為零的結(jié)點,也就是沒有后件的結(jié)點,
稱為葉子結(jié)點。
2.54321
3.n/2性表的任何位置插入一個元素的概率相等,即概率為p=l/(n+l),
則插入一個元素時所需移動元素的平均次數(shù)為E=l/(n+l)(n-i+l)=
n/2o
4.66解析:分析程序可知,每循環(huán)一次,x的值加1,然后檢測循環(huán)控
制條件(y!=19)&&(x<7),因y的值不變,故滿足x<7時循環(huán)6次。
5.類類解析:將屬性、操作相似的對象歸為類,也就是說,類是具有共
同屬性、共同操作性質(zhì)的對象的集合,是已經(jīng)定義了的關(guān)于對象的特征、
外觀和行為的模板。所以類是對象的抽象,它描述了屬于該對象類型的
所有對象的性質(zhì),而一個對象則是其劃應(yīng)類的一個實例。
6.28
7.概念概念
8.1313解析:函數(shù)fun是一個遞歸函數(shù)。執(zhí)行fun(3);,x=3,x/2=l>0,
又調(diào)用f(l),此時,x=l,x/2=0,不滿足繼續(xù)遞歸調(diào)用的條件,輸出1,
返回到fun(3)中,輸出3。所以本題的輸出結(jié)果為13。
9.B66B66解析:字符B的ASCII碼值為66,因此,按%c形式輸出
B,按%d形式輸出66,輸出結(jié)果為:B66。
10.2828解析:i=f(4+4)/f(2+2)=4+4x4+4/2+2x2+2=4+16+2+4+2=28。
11.A
12.D
13.B
14.B
15.C
解析:本題中第一行代碼對指針P進行了初始化,其指向數(shù)組a的第6
個元素,在其后的操作中p的值也沒有改變過,所以最后輸出
*p=*\u3000\u3000(p+0)\u3000\u3000=a\u3000[5]\u3000=6,而第二行代
碼中對q指向的值進行賦值,等價于*q=a[10]=ll,所以輸出結(jié)果*q為
Ik
16.C宏定義只是做簡單的替換,本題中SUB(a+b)*c=(a+b)-(a+b)*c=-20。
故本題答案為C選項。
17.D
18.A
函數(shù)指針的定義格式為函數(shù)類型(*指針變量名X形參列表);函數(shù)名和
數(shù)組名一樣代表了函數(shù)代碼的首地址,因此在賦值時,直接將函數(shù)指
針指向函數(shù)名就行了。所以選項A正確。
19.C
2O.D\n用來存放字符量的數(shù)組稱為字符數(shù)組。字符數(shù)組也可以是二維或
多維數(shù)組,對一個字符數(shù)組,如果不作初始化賦值,則必須說明數(shù)組長
度,還可用printf函數(shù)和scarlf函數(shù)一次性輸出/輸入一個字符數(shù)組中
的字符串,而不必使用循環(huán)語句逐個地輸入/輸出每個字符。通常用一個
字符數(shù)組來存放一個字符串。所以D選項不正確。
\n
21.doubleproc(intm)
\n{
\ninti;
\ndoubles=0.0;//s是表示其和
\nfor(i=1;i<=m;i++)
\ns=s+log(i);〃計算s=ln(l)+ln(2)+ln(3)+…+ln(m)
\nreturnsqrt(s);〃最后將其開平方的值返回到主函數(shù)中
\n}
\n【解析】由題目中所給表達式可知,表達式的值為m項表達式的和然
后開平方??梢允紫韧ㄟ^m次循環(huán)求得m項表達式的和,然后將其和
開平方并返回到主函數(shù)當(dāng)中。
\n
22.\n#include'stdio.h'
\n#defineN3
\nstructstudent
\n{longstu_num;charsex;
\ncharname[15];intscore[4];
\nfloataverage;};
\nmain
\n{intl,j,index;floatsum,max;
\nstructstudentstuarrfN];
\nfor(I=0;I{printf('pleaseinput%dstudentinformation:\\n',I+1);
\nscanf('%ld,%c,%s',&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);
\nfor(j=0;j<4;j++)
\nscanf('%d',&stuarr[I].scorefj]);}
\nfor(I=0;I{sum=0.0;
\nfor(j=0;j<4;j++)
\nsum+=stuarr[I].score[jl;
\nstuarr[I].average=sum/4.0;}
\nmax=stuarr[0].average;
\nindex=0;
\nfor(I=1;Iif(stuarr[I].average>max)
\n{max=stuarr[I].average;
\nindex=I;}
\nprintf(,總平均成績最高的學(xué)生信息是學(xué)號=%ld,性別=%c,姓名=%s,平
均成績
=%4.lf\\n',stuarr[index].stu_num,stuarr[index].sex,stuarr[index].nam
e,stuarr[index].average);
\n}\n
23.
【解析】要計算出主字符串中包含子字符串的個數(shù),應(yīng)該檢查主字符串
中從第一個到最后一個字符。每出現(xiàn)一個計數(shù)變量加1,最后將得到的
個數(shù)返回給主函數(shù)。
24.\n\tintproc(STREC*a,STREC*b,intLinth)\n
\n
\n\t{\n
\n
\n\tinti,j=0;\n
\n
\n\tfor(i=0;i<M;i++)\n
\n
\n\tif((a[i].s>=0&&a[i].s<l)||(a[i].s>h&&a\n
\n
\n\t[i].s<=100))//通過if語句,來判斷指定范圍替
\n
\n\t之外的數(shù)巾
\n
\n\tb[j++]=a[i];//放到b數(shù)組中\(zhòng)n
\n
\n\treturnj;//最后把其個數(shù)返回到主函數(shù)中\(zhòng)n
\n
\n\t}\n
\n
\n\t【解析】題目要求把指定范圍之外的數(shù)放到b中,將每一個學(xué)生的
成績與指定的成績相比較,將符合條件的學(xué)生成績放在數(shù)組b中,并
將符合要求的學(xué)生個數(shù)返回給主函數(shù)。\n
25.voidfun(inta,intb,long*c){/*b%10獲取b的個位數(shù),a/10獲取a的
十位數(shù),a%10獲取a的個位數(shù),b/10獲取b的十位數(shù)*/
*c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;}本題主要考核如何取
出a和b的個位數(shù)和十位數(shù),取出后如何將其表示成c中相應(yīng)的位數(shù)。
由于a和b都是只有兩位的整數(shù),因此分別對它們除以10可得到它們
的十位數(shù),分別用10對它們求余可得到它們的個位數(shù)。將得到的數(shù)對
應(yīng)乘以1000、100、10、1,即可得到c的千位數(shù)、百位數(shù)、十位數(shù)、個
位數(shù)。注意使用c時要進行指針運算。
26.1char*fun(char(*a)[81],intnum,char*max)
2{
3inti=0;
4max=a[0];
5for(i=0;i<num;i++)/*找出最長的一個字符串*/
6if(strlen(max)<strlen(a[i]))
7max=afi];
8retummax;/*傳回最長字符串的地址*/
9)
<strlen(a[i]))
解答本題之前,首先應(yīng)該明白ss是數(shù)組名,是指數(shù)組首元素的地址。
max是字符指針變量,可以指向一個字符串。假定max指向數(shù)組中第
1個字符串,它的長度最長。再使用循環(huán)語句遍歷字符串?dāng)?shù)組,使用條
件語句判斷該字符串的長度是否大于max指向的字符串的長度,如大
于,則max指向該字符串。保證max指向的字符串最長,并將其作為
函數(shù)值返回。</strlen(a[i]))
27.1voidfun(char*ss)
2{
3inti;
4for(i=0;ss[i]!='\\0';i++)/*將ss所指字符串中所有下標為奇數(shù)的字母
轉(zhuǎn)換為大寫字母*/
5if(i%2==l&&ss[i]>='a'&&ss[i]<='z')
6ss[i]=ss[i]-32;
7)
本題要求將給定字符串ss中下標為奇數(shù)的字母轉(zhuǎn)換為大寫字母。需要
先判斷下標為奇數(shù)的字母是否是小寫字母,如果是再通過其轉(zhuǎn)換方法
進行轉(zhuǎn)換。從C語言的學(xué)習(xí)中知道,只要將小寫字母減去32即轉(zhuǎn)換成
大寫宇母,將大寫字母加上32即換轉(zhuǎn)成小寫字母。本程序用if語句實
現(xiàn)轉(zhuǎn)換功能。
28.floatfun(intn)
(
inti,sl=0;
floats=0.0;
for(i=l;i<=n;i++)
(
sl=sl+i;/*求每一項的分母*/
s=s+1.0/sl;/*求多項式的值*/
)
returns;
)
首先需要根據(jù)題意分析表達式的規(guī)律,得出通項,然后再完成程序語句。
本題中公式的規(guī)律類似于求l+2+...+n的倒數(shù)之和??梢酝ㄟ^for循環(huán)
語句來實現(xiàn)第1項到第n項的變化。先根據(jù)題目要求定義變量,注意
該變量的數(shù)據(jù)類型。然后對其進行初始化操作,因為該變量相當(dāng)于累
加器,所以初值應(yīng)為0(或0.0,根據(jù)變量數(shù)據(jù)類型來確定),再通過for
循環(huán)語句來完成累加過程。
本題中si用來表示每一項的分母,每一項的分母都是由前一項分母加
項數(shù)得到的。注意,由于si定義成一個整型,因此在s=s+1.0/sl語句
中不能把1.0寫成1。
29.voidproc(STRECa[])
{
inti,j;
STRECt;
for(i=l;i++)//用冒泡法來按從高到低排序
fbr(j=O;j<M-l;j++)
if(a[j].s)//按分數(shù)的高低排列學(xué)生的記錄,高分在前
{t=a[j];a[j]=a[j+l];a[j+l]=t;)
)
30.
【解析】要將大于整數(shù)m且緊靠m的k個素數(shù)存入所指的數(shù)組中,首
先應(yīng)該判斷大于整數(shù)m且緊靠m的整數(shù)是否為素數(shù)。將緊靠m且為素
數(shù)的k個整數(shù)放入數(shù)組xx中。
31.(l)t=t-1.0/i;或t-=1.0/i;或t—=(double)l/i;(2)retumt;
(l)t=t-1.0/i;或t-=l.0/i;或t—=(double)l/i;(2)returnt;
解析:本題中函數(shù)的功能是計算公式的值。首先根據(jù)題干中給出的公式
推出每一項之間的關(guān)系,求出每一項的表達式,然后求得數(shù)列的值。其
中,每一項的值為1/n。
32.(l)voidfun(char*sint*aint*b)(2)*a=*a+1;(3)*b=*b+1;(l)void
fun(char*s,int*a,int*b)\r\n(2)*a=*a+1;\r\n(3)*b=*b+1;解析:
該程序功能是統(tǒng)計字符串中的大小寫字母的個數(shù)。從已給定源程序的
main主函數(shù)開始入手,調(diào)用函數(shù)“fUn(s,&uper,&lower);”,傳參數(shù)uper,
lower的地址,對字符串s中的字符進行判斷,求得該字符串中大小寫
字母的個數(shù)。
33.(l)doublefun(intm)(2)for(i=100;i<=m;i+=100)(l)doublefun(int
m)(2)for(i=100;i<=m;i+=100)解析:本題中函數(shù)的功能是計算公式
的值。關(guān)于題干公式的求解過程,首先根據(jù)題干中給出的公式推出每一
項之間的關(guān)系,求出每一項的表達式,然后求得數(shù)列的值。
34.(1)錯誤:doublefun(doubleq)正確:doublefun(intq)(2)錯誤:
s=s+(n+l)/n;正確:s=s+(double)(n+l)/n;(3)錯誤:returns;正確:
returnt;(1)錯誤:doublefun(doubleq)正確:doublefun(intq)\r\n(2)錯
誤:s=s+(n+l)/n;正確:s=s+(double)(n+l)/n;\r\n(3)錯誤:returns;正
確:returnt;解析:該程序中多次出現(xiàn)了函數(shù)調(diào)用過程中定義混亂的錯
誤,關(guān)于類似問題,我們在前面的試題中已經(jīng)做過比較詳細的解釋,主
要是對基礎(chǔ)知識的把握。在這里我們再對函數(shù)調(diào)用規(guī)則做一簡單說明。
C語言規(guī)定,在以下幾種情況下可以不在調(diào)用函數(shù)前對被調(diào)用函數(shù)做類
型說明。
⑴如果函數(shù)的值(函數(shù)的返回值)是整型或字符型,可以不必進行說明,
系統(tǒ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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國低輻射(LowE)玻璃行業(yè)十三五規(guī)劃及發(fā)展策略研究報告
- 2025-2030年中國樂器制造市場競爭格局及前景趨勢預(yù)測報告
- 2025-2030年中國不干膠標簽行業(yè)市場競爭格局及未來投資趨勢分析報告
- 2025-2030年中國L谷氨酰胺行業(yè)運行動態(tài)及投資戰(zhàn)略研究報告
- 2025-2030年中國CVT無級變速箱行業(yè)競爭格局與前景發(fā)展策略分析報告
- 福建省寧德市福安松羅中學(xué)高一生物期末試題含解析
- 2024版簡易房屋租賃合同模板
- 2024版欄桿施工合同
- 2024模具購銷及國內(nèi)市場拓展合同范本3篇
- 福建省寧德市東僑經(jīng)濟開發(fā)區(qū)中學(xué)高一物理聯(lián)考試題含解析
- 湖南省建設(shè)工程施工階段監(jiān)理服務(wù)費計費規(guī)則【實用文檔】doc
- GB/T 6913-2008鍋爐用水和冷卻水分析方法磷酸鹽的測定
- GB/T 18717.2-2002用于機械安全的人類工效學(xué)設(shè)計第2部分:人體局部進入機械的開口尺寸確定原則
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 中國文化概論(第三版)全套課件
- 117-鋼結(jié)構(gòu)工程質(zhì)量常見問題與管控措施
- SHS5230三星指紋鎖中文說明書
- 諾和關(guān)懷俱樂部對外介紹
- 保定市縣級地圖PPT可編輯矢量行政區(qū)劃(河北省)
- 新蘇教版科學(xué)六年級下冊全冊教案(含反思)
- 供方注冊指南-ZTE
評論
0/150
提交評論