版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2021-2022學(xué)年山東省濟(jì)南市全國(guó)計(jì)算機(jī)等級(jí)考試C語言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________
一、單選題(12題)1.下列程序執(zhí)行后的輸出結(jié)果是()。voidfunc(int*a,intb[]){b[0]=*a+b;}main{inta,b[5];a=0;b[0]=3;func(&a,b);printf("%d\n",b[0]);}A.6B.7C.8D.9
2.若有函數(shù)首部“intfun(doublex[10],int*n)”,則下列針對(duì)此函數(shù)的函數(shù)聲明語句中正確的是()。
A.intfun(double,int);
B.intfun(double*,int*);
C.intfun(double*x,intn);
D.intfun(doublex,int*n);
3.
4.設(shè)有定義:structcomplex{intreal,unreal;}data1={1,8},data2;則以下賦值語句中錯(cuò)誤的是()。
A.data2=(2,6);
B.data2=data1;
C.data2.real=data1.real;
D.data2.real=data1.unreal;
5.C語言中,組成數(shù)據(jù)文件的成分是()。A.A.記錄
B.數(shù)據(jù)行
C.數(shù)據(jù)塊
D.字符(字節(jié))序列
6.若串S=,software,其子串的數(shù)目是()。
A.8B.37C.36D.9
7.
8.具有20個(gè)結(jié)點(diǎn)的二叉樹,其深度最多為_______。
A.4B.5C.6D.20
9.下面程序的輸出結(jié)果是()。
#include<stdio.h>
main()
{inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};
inti,j,n;
n=9;
i=n/5;
j=n-i*5-1;
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
}
執(zhí)行后輸出結(jié)果是()。A.A.a[1][3]=6
B.a[1][3]=-3
C.a[1][3]=2
D.不確定
10.C語言中不合法的字符串常量是
A.\121B.'Y'C.\n\nD.ABCD\x6d
11.以下程序運(yùn)行后,輸出結(jié)果是______。fut(int**s,intp[2][3]){**s=p[1][1];}main(){inta[2][3]={1,3,5,7,9,11},*p;p=(int*)malloc(sizeof(int));fut(&p,a);printf("%d\n",*p);}
A.1B.7C.9D.11
12.有三個(gè)關(guān)系R、s和T如下:
由關(guān)系R和s通過運(yùn)算得到關(guān)系T,則所使用的運(yùn)算為()。
A.并B.自然連接C.笛卡爾積D.交
二、2.填空題(12題)13.以下程序的運(yùn)行結(jié)果是()。
main()
(inta=2,b=7,c=5;
switch(a>0)
{case1:switch(b<0)
{case1:switch(");break;
case2:printf("!");break;
}
case0:switch(c==5)
{case0:printf("*");break;
case1:printf("#");break;
case2:printf("$");break;
}
default:printf("&");
}
printf("\n");
}
14.函數(shù)sstrcmp的功能是對(duì)兩個(gè)字符串進(jìn)行比較。當(dāng)s所指字符串和t所指字符串相等時(shí),返回值為0;當(dāng)s所指字符串大于t所指字符串時(shí),返回值大于0;當(dāng)s所指字符串小于t所指字符串時(shí),返回值小于0(功能等同于庫(kù)函數(shù)strcmp)。請(qǐng)?zhí)羁铡?/p>
#include<stdio.h>
intsstrcmp(char*s,char*t)
{while(*s&&*t&&*s==【】)
{s++;t++;}
return【】;
}
15.數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊(duì)列屬于[]。
16.以下程序運(yùn)行后的輸出結(jié)果是【】。
main()
{chars[]="9876",*p;
for(p=s;p<s+2;p++)printf("%s\n",p);
}
17.寫出下列程序的輸出結(jié)果______。
main()
{int=0;
while(n++<=1);
printf("%d,",n);
printf("%d",n++);
}
18.以下程序運(yùn)行后的輸出結(jié)果是______。
voidfun(intx,inty)
{
x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);
}
main()
{
intx=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
19.數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和______兩大類。
20.下述函數(shù)用于統(tǒng)計(jì)一行字符中的單詞個(gè)數(shù),單詞之間用空格分隔。
word_num(str)
charstr[];
{inti,num=0,word=0;
fo(i=0;str[i]!=【】;i++)
if(【】=='')word=0;
elseif(word==0)
{
word=1;
【】;
}
return(num);
}
21.以下程序中函數(shù)huiwen.的功能是檢查一個(gè)字符串是否是回文,當(dāng)字符串是回文時(shí),函數(shù)返回字符串:yes!,否則函數(shù)返回字符串:no!,并在主函數(shù)中輸出,所謂回文即正向與反向的拼寫都一樣,例如:adgda。請(qǐng)?zhí)羁铡?/p>
#include<string.h>
char*huiwen(char*str)
{char*p1,*P2;inti,t=0;
P1=str;p2=【】;
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--){t=1;break;}
if(【】)return("yes!");
elsereturn("no!");
}
main()
{charstr[50];
printf("Input:");scanf("%s",str);
printf("%s\n",【】);
}
22.以下程序運(yùn)行后的輸出結(jié)果是______。
main()
{
inti,m=0,n=0,k=0;
for(i=9;i<=11;i++)
switch(i/10)
{
case0:m++;n++;break;
case10:n++;;break;
default:k++;n++;
}
printf("%d%d%d\n",m,n,k);
}
23.以下程序是從終端讀入數(shù)據(jù)到數(shù)組中,統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù),并計(jì)算它們的和。請(qǐng)?zhí)羁铡?/p>
main()
{
inti,a[20],sum,count;
sum=count=【】;
for(i=0;i<20;i++)scanf("%d",【】);
for(i=0;i<20;i++)
{
if(a[i]>0)
{count++:
sum+=【】;
}
}
printf("sum=%d,count=%d\n",sum.count);
}
24.下述函數(shù)統(tǒng)計(jì)—個(gè)字符串中的單詞個(gè)數(shù),單詞是指處在空格之間的字符序列,請(qǐng)?zhí)羁铡?/p>
intword(char*s)
{intnum=0,flag=0;
while(*s)
{if(【】='')flag=0;
elseif(【】){flag=1;num++}
}
return【】;}
三、3.程序設(shè)計(jì)題(10題)25.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。
注意:部分源程序給出如下.
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fum的花括號(hào)中填入所編寫的若啡:語句。
試題程序:
#include<stdio.h>
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STRECa[])
{
}
main()
{
STRECsIN]={{"GA005",85},{"GA003",76},
{"GA002",69},{"GA004",85},{"GA001",91},
{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},
{"GA014",91},{"GA011",66},{"GA017",64},
{"GA018",64},{"GA016",72}};
inti;
FILE*out;
fun(s);
printf("Thedataaftersorted:In");
for(i=0;i<N;i++)
{if((i)%4=-0)
/*每行輸出4個(gè)學(xué)生記錄*/
printf("\n");
printf("%s%4d",s[i].num,s[i].s);
}
printf("\n");
out=fopen("out16.dat","w");
for(i=0;i<N;i++);
{if((i)%4==0&&i)
fprintf(out,"\n");
fprintf(out,"%4d",s[i].s);
}
fprintf(out,"\n");
fclose(out);
}
26.請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根之和。
例如,在主函數(shù)中從鍵盤給n輸入100后,輸出為:sum=148.874270。
注意:要求n的值大于2但不大于100。部分源程序在文件PROGl.C中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
27.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),它的功能是:把指定分?jǐn)?shù)范圍之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函數(shù)值返回。
例如,輸入的分?jǐn)?shù)是80和89,則應(yīng)當(dāng)把分?jǐn)?shù)低于80和高于89的學(xué)生數(shù)據(jù)進(jìn)行輸出,不包含80分和89分的學(xué)生數(shù)據(jù)。主函數(shù)中把80放在low中,把89放在heigh中。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序
#include<stdio.h>
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b,int1,inth)
{
}
main()
{
STRECs[N]={{“GA005”,55},{“GA003”,96},
{“GA002”,80},{“GA004”,68},{“GA001”,88},
{“GA007”,74},{“GA008”,85},{“GA006”,99},
{“GA015”,90},{“GA013”,53},{“GA012”,66},
{“GA014”,82},{“GA0ll”,73},{“GA017”,69},
{“GA018”,64},{“GA016”,86}};
STECh[N],tt;
FILE*out;
inti,j,n,low,heigh,t;
printf(“Enter2integernumberlow&heigh:”);
scanf(“%d%d”,&low,&heigh);
if(heigh<low)
{
t=heigh;
heigh=low;
low=t;
}
n=fun(S,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);
/*輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄*/
printf(“\n”);
ut=fopen(“out23.dat”,“w”);
fprintf(out,“%d\n”,n);
n=fun(s,h,70,79);
for(i=0;i<n-1;i++)
/*分?jǐn)?shù)在70~79之外的學(xué)生記錄按分?jǐn)?shù)從低到高排列*/
for(j=i+l;i<n;j十+)
if(h[i].s>h[j].s)
{
tt=h[i];
h[i]=h[j];
h[j]=tt;
}
for(i=0;i<n;i++)
fprintf(out,“%4d\n”,h[i].s);
fprintf(out,“\n”);
fclose(out);
}
28.請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出下列多項(xiàng)式的值:
例如,在主函數(shù)中從鍵盤給n輸入15,則輸出為:s=2.718282。
注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
29.假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun(),它的功能是:使字符串中前部的*號(hào)不得多余n個(gè);若多余n個(gè),則刪除多余的*號(hào);若少于或等于n個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪除。
例如,字符串中的內(nèi)容為****A*BC*DEF*G*******,若n的值為2,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G*******;若n的值為4,則字符串中的內(nèi)容仍為****A*BC*DEF*G******。n的值在主函數(shù)中輸入。在編寫函數(shù)時(shí),不得使用C語言提供的字符串函數(shù)。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
voidfun(charAa,intn)
{
}
main()
{chars[81];intn;
printf("Enterastring:\n");gets(s);
printf("Entern:");scanf("%d",&n);
fun(s,n);
printf("Thestringafterdeleted:\n");
puts(s);
}
30.函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的千位和十位上,b中的十位和個(gè)位數(shù)依次放在變量c的個(gè)位和百位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=4251。
注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
31.已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是;找出成績(jī)最高的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最高分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#defineN10
typedefstructss/*定義結(jié)構(gòu)體*/
{charnum[10];
ints;
}STU;
fun(STUa[],STU*s)
{
}
main()
{
STUa[N]={{"A01",81},{"A02",89},
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}},m;
inti;
clrscr();
printf("*****Theoriginaldata*****");
for(i=0;i<N;i++)
printf("No=%sMark=%d\n",a[i].hum,
a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thetop:%s,%d\n",m.num,m.s);
}
32.請(qǐng)編寫一個(gè)函數(shù),用來刪除字符串中的所有空格。
例如:輸入asdafaaz67,則輸出為asdafaz67。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
intfun(char*str)
{
}
main()
{
charstr[81];
intn;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
fun(str);
printf("***Str:%s\n",str);
}
33.函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位和個(gè)位數(shù)依次放在變量c的千位和十位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=1425。
注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件in.dat中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
34.請(qǐng)編寫一個(gè)函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是將大于整數(shù)m且緊靠m的k個(gè)非素?cái)?shù)存入所指的數(shù)組中。
例如,若輸入15,5,則應(yīng)輸出16,18,20,21,22。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
四、單選題(0題)35.若需要0(nlog2n)的時(shí)間內(nèi)完成對(duì)數(shù)組的排序,且要求排序是穩(wěn)定的,則可選擇排序方法是()。A.快速排序B.堆排序C.歸并排序D.直接插入排序
五、單選題(0題)36.以下對(duì)C語言函數(shù)的有關(guān)描述中,正確的是
A.在C語言中調(diào)用函數(shù)時(shí),只能把實(shí)參的值傳給形參,形參的值不能傳送給實(shí)參
B.C函數(shù)既可以嵌套定義又可以遞歸調(diào)用
C.函數(shù)必須有返回值,否則不能使用函數(shù)
D.函數(shù)必須有返回值,返回值類型不定
六、單選題(0題)37.在存儲(chǔ)數(shù)據(jù)時(shí),通常不僅要存儲(chǔ)各數(shù)據(jù)元素的值,而且還要存儲(chǔ)()。
A.數(shù)據(jù)的處理方法B.數(shù)據(jù)元素的類型C.數(shù)據(jù)元素之間的關(guān)系D.數(shù)據(jù)的存儲(chǔ)方法
參考答案
1.A本題考查函數(shù)的調(diào)用,從主函數(shù)傳遞到調(diào)用函數(shù)中,*a的值為0,因此當(dāng)執(zhí)行完調(diào)用函數(shù)后,b[0]的值為6。
2.B函數(shù)聲明有兩種形式:①類型說明符函數(shù)名(類型形參,類型形參……);②類型說明符被調(diào)函數(shù)名(類型,類型……)。由于函數(shù)首部為“intfun(doublex[10],int*n)”。故本題答案為B選項(xiàng)。
3.A
4.A結(jié)構(gòu)體變量初始化的具體成員值使用花括號(hào)標(biāo)注,選項(xiàng)A錯(cuò)誤。故本題答案為A選項(xiàng)。
5.D解析:C語言中的文件是流式文件。流式文件是一種無結(jié)構(gòu)文件,即整個(gè)文件是一串字符流或二進(jìn)制流。文件的存取以字符或字節(jié)為單位。
6.B
7.D
8.D
9.Bn=9,i=n/5=1;j=9-1*5-1=3,輸出為a[1][3]=-3
10.B解析:字符串常量是由雙引號(hào)括起來的一串字符,其中的雙引號(hào)不可缺少。由此可知,選項(xiàng)A)、C)、D)都是含法的字符串常量,而選B)是一個(gè)字符常量。
11.C
12.D關(guān)系R與s經(jīng)交運(yùn)算后所得到的關(guān)系是由那些既在R內(nèi)又在S內(nèi)的共有元組組成的,記為RnS。
13.#&#&解析:剛開始時(shí),switch后面的表達(dá)式a>0為真(1),與case1匹配,然后執(zhí)行case1后面的switch語句,表達(dá)式b<0值為0,沒有與其匹配的語句,返回外層,因?yàn)橥鈱記]有break語句,順序執(zhí)行case0后面的switch語句,表達(dá)式“c==5”值為1,與其后面的case1匹配,因此輸出#,遇到break返回外層,又因?yàn)橥鈱記]有break語句,順序執(zhí)行default后的語句,輸出&。
14.*t或t[0]*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]*t或t[0]\r\n*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]解析:函數(shù)sstrcmp()有兩個(gè)字符型指針變量,用來指向兩個(gè)字符串。比較兩個(gè)字符串的大小方法是:從第一個(gè)字符開始依次向后比較,若對(duì)應(yīng)的字符相等則接著比較下一個(gè)字符,一直到兩個(gè)字符串中對(duì)應(yīng)字符不等,或者有一個(gè)為\\0,此時(shí)字符的ASCII碼大的字符串就大。故循環(huán)條件是*s和*t不為\\0,且*s和*t相同,第一處應(yīng)填“*t”或其他等價(jià)形式。根據(jù)題意可知第二處應(yīng)填*s-*t或其等價(jià)形式。
15.線性結(jié)構(gòu)線性結(jié)構(gòu)解析:與棧類似,隊(duì)列也是線性表,也町以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
16.98768769876\r\n876解析:指針是一種數(shù)據(jù)類型,這種數(shù)據(jù)類型的變量用來存放內(nèi)存中分配的存儲(chǔ)單元的首地址。指針的定義:
類型說明符*指針變量名;
17.333,3解析:本題在while(n++<=1)語句后,直接加了分號(hào),說明如果while()的條件為真時(shí),該循環(huán)什么都不做;n++是先取n的當(dāng)前值和I做比較,然后再將n加1。第一次循環(huán),n=0時(shí),循環(huán)條件n++=0<=1成立,執(zhí)行循環(huán),然后得到n=1。第二次循環(huán),n=1時(shí),循環(huán)條件n++=1<=1成立,執(zhí)行循環(huán),然后得到n=2。第三次循環(huán),n=2時(shí),循環(huán)條件n++=2<=1不成立,不執(zhí)行循環(huán),但在判斷循環(huán)條件時(shí)仍將n加1,得到n=3。退出循環(huán)后執(zhí)行printf語句,第二個(gè)printf語句輸出n++,是先輸出n的當(dāng)前值3,然后再將n加1,即程序結(jié)束后得到n=4,但輸出的是3。
18.32233,2,2,3解析:主函數(shù)中首先定義了整型變量x和y,并分別給它們賦初值為2和3,接著調(diào)用fun()函數(shù),fun()函數(shù)把實(shí)參x和y的值傳給形式參數(shù)x和y,實(shí)參和形參不再有聯(lián)系.在fun()函數(shù)中通過運(yùn)算使x和y的值交換過來,所以fun()函數(shù)中的輸出結(jié)果是“3,2”。fun()函數(shù)調(diào)用返回輸出x和y依舊是原來的x和y,為“2,3”原因是變量作為形參傳值的,對(duì)形參的修改并不影響對(duì)應(yīng)的實(shí)參。所以最后輸出為3,2,2,3。
19.非線性結(jié)構(gòu)非線性結(jié)構(gòu)
20.\0'或0或NULLstr[i]num++或num=num+1或num+=1\\0'或0或NULL\r\nstr[i]\r\nnum++或num=num+1或num+=1解析:觀察題目要求,可以知道以下幾點(diǎn):
①for循環(huán)的結(jié)束條件應(yīng)當(dāng)是:str[i]已是字符串的最后—個(gè)字符;
②str[i]代表字符串str中的第i+1個(gè)字符;
③整型變量num的值是要記錄的單詞的個(gè)數(shù)。
C語言中規(guī)定字符串的最后一個(gè)字符是一個(gè)隱含的字符串結(jié)束符“\\0”,所以在題中第—個(gè)空中應(yīng)填寫“\\0”;題中第二個(gè)空應(yīng)填寫“str[i]”,以判斷當(dāng)前位置的字符是否為空格;題中第三個(gè)空中應(yīng)當(dāng)填寫“num++”,通過變量num的加1累加得到字符串中的單詞個(gè)數(shù)。
21.str+strlen(str)-1i>strlen(str)/2huiwen(str)str+strlen(str)-1\r\ni>strlen(str)/2\r\nhuiwen(str)解析:首先使指針p1指向字符串的首地址,指針p2指向字符串的尾地址(不包括字符串結(jié)束標(biāo)記'\\0'),然后指針p1從前往后,指針p2從后往前,直到移至字符串的中間元素,若兩者所指的元素不相等,則跳出循環(huán),此時(shí)i<=strlen(str)/2,若兩者所指的元素均相等,則此時(shí)i>strlen(str)/2。
通過if語句判斷,如果i>strlen(str)/2,則返回“yes!”,否則返回“no!”。
主函數(shù)中要求輸出函數(shù)huiwen(str)的返回值。
22.132132解析:本題考核的知識(shí)點(diǎn)是for循環(huán)與switch語句的綜合運(yùn)用。主函數(shù)中用了一個(gè)for循環(huán),for循環(huán)里嵌套了一個(gè)switch語句,for循環(huán)了三次,當(dāng)i=9時(shí),i/10=0,執(zhí)行switch語句中case0分支,m和n的值各加1,變?yōu)?和1,然后遇到breake語句,退出switch語句;當(dāng)i=10,i/10=1,執(zhí)行switch語句中default分支,使k和n的值各加1,變?yōu)?和1,退出switch語句:當(dāng)i=11時(shí),i/10=1,執(zhí)行switch語句中default分支,k和n的值各加1變,為2和3,退出switch語句,循環(huán)結(jié)束。故該空格處應(yīng)該填132。
23.0&a[i]a[i]0\r\n&a[i]\r\na[i]解析:本題要求從終端讀入數(shù)據(jù)到數(shù)組中,統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù),井計(jì)算它們的和。程序中首先要對(duì)存放正數(shù)個(gè)數(shù)的變量count及存放和值的變量sum初始化為0,所以第一空應(yīng)填0。接著要求從終端讀入數(shù)據(jù)到數(shù)組中,可以通過scanf函數(shù)實(shí)現(xiàn),因此第二空應(yīng)填&a[i]。最后通過sum+=a[i];語句累加正數(shù)a[i]的值到sum中,因此第三空應(yīng)填a[i]。
24.*s++flag=0或*(s-1)=''num*s++\r\nflag=0或*(s-1)=''\r\nnum解析:在統(tǒng)計(jì)字符串單詞個(gè)數(shù)的算法中,本題的flag是為了記錄—個(gè)單詞是否結(jié)束。第18空應(yīng)填*s++;如果某個(gè)字符不是空格,則必須判斷它是否是單詞,如是,則使得flag的標(biāo)志為1,num的值加1。本題判斷方法是:先判斷s所指向的字符是否為空格,如果是則使得flag=0,否則判斷前—個(gè)字符是否是空格,如果是則說明這個(gè)字符是—個(gè)單詞的開始,將flag標(biāo)志為1,num的值加1,如果不是,則不必記錄。故第19空應(yīng)填flag=0或*(s-1)='';最后—個(gè)空格需填寫的是返回的單詞的個(gè)數(shù),即num。
25.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法進(jìn)行排序進(jìn)行N-1次比較*/for(j=0;j<N-1;j++)/*在每一次比較中要進(jìn)行N-1次兩兩比較*/if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分?jǐn)?shù)的高低排列學(xué)生的記錄高分在前*/}intfun(STRECa[])\r\n{\r\ninti,j;\r\nSTRECt;\r\nfor(i=1;i<N;i++)/*用冒泡法進(jìn)行排序,進(jìn)行N-1次比較*/\r\nfor(j=0;j<N-1;j++)/*在每一次比較中要進(jìn)行N-1次兩兩比較*/\r\nif(a[j].s<a[j+1].s)\r\n{t=a[j];a[j]=a[j+1];a[j+1]=t;}/*按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前*/\r\n}解析:冒泡法算法思路:如果有N個(gè)數(shù),則要進(jìn)行N-1次比較,在每一次比較中要進(jìn)行N-1次兩兩比較(這種算法較好理解但不是最精的)。所謂兩兩比較就是從頭到尾依次將相鄰兩個(gè)數(shù)進(jìn)行比較并將其中大的數(shù)放在前或在后(若要求從小到大排序,則大的數(shù)要放在后。反之則對(duì)調(diào)),即兩兩比較后這兩個(gè)數(shù)要形成題中所要求的順序。由于總是從頭到尾進(jìn)行比較,所以第1次比較結(jié)束后,最大(或最小)數(shù)肯定在最后,第2次比較結(jié)束后,次最大(或次最小)數(shù)肯定在倒數(shù)的第2個(gè)數(shù),依次類推,所以進(jìn)行第一次比較時(shí)必須比較到最后一個(gè)數(shù),而進(jìn)行第2次比較時(shí)只要比較到倒數(shù)的第2個(gè)數(shù)即可,所以進(jìn)行第i次比較時(shí)只需比較N-i次即可(這種算法較難理解,但它是最好的)。
選擇法算法思路:如果有N個(gè)數(shù)則從頭到倒數(shù)的第2個(gè)數(shù)一個(gè)一個(gè)往后走動(dòng),每走動(dòng)1個(gè)數(shù)總是將這個(gè)數(shù)與其后的所有數(shù)進(jìn)行比較并找出它們的最大(或最小)數(shù),找出最大(或最小)數(shù)后再將所得的最大(或最小)數(shù)與該數(shù)進(jìn)行交換,交換后再走到下一個(gè)數(shù)依次交換到結(jié)束。此外,選擇法還可用如下思路:如果有N個(gè)數(shù),則從頭到倒數(shù)的第2個(gè)數(shù)—個(gè)一個(gè)往后走動(dòng),每走動(dòng)一個(gè)數(shù)總是將這個(gè)數(shù)與其后的所有數(shù)進(jìn)行兩兩比較,在比較時(shí)按順序?qū)⑦M(jìn)行比較的這兩個(gè)數(shù)排序(即交換)。
插入法算法思路:先對(duì)頭兩個(gè)數(shù)進(jìn)行排序。然后把第3個(gè)數(shù)插入到前兩個(gè)數(shù)中,插入后前3個(gè)數(shù)依然有序;再把第4個(gè)數(shù)插入到前3個(gè)數(shù)中,插入后前4個(gè)數(shù)依然有序;依次插完所有的數(shù)。具體執(zhí)行方式(假設(shè)從小到大排序):從第2個(gè)數(shù)開始往后一個(gè)一個(gè)走動(dòng)直到最后。每走到1個(gè)數(shù)總是將該數(shù)(先將其存到1個(gè)臨時(shí)變量中)與其前面的數(shù)進(jìn)行比較(比較的順序總是從后往前進(jìn)行),在比較時(shí)只要發(fā)現(xiàn)該數(shù)比被比較的數(shù)小,就將被比較的數(shù)往后移1位,然后該數(shù)還要冉與前1個(gè)數(shù)進(jìn)行比較,亢到發(fā)現(xiàn)該數(shù)比被比較的數(shù)大或己比較到頭(即第1個(gè)數(shù)的前面),并將該數(shù)存入當(dāng)前被比較數(shù)的后1位(存儲(chǔ)空間)。
如果有整型一維數(shù)組a其有N個(gè)元素,要求將其按從小到大排序。注意元素下標(biāo)是從0始的。
冒泡法:
for(i=1;i<N;i++)
for(j=0;N-1;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=a[j];}
選擇法
for(i=0i<N-1;i++)
{p=i;
for(ji+1;j<N;j++)
if(a[p]>a[j])p=j;
if{p!=i)
t=a[i];a[i]=a[p];a[p]=t;
}
插入法
for{i=1;i<N;i++}
{t=a[i];
for{j=i-1;a[j]>t&&j>=0;j--)
a[j+1]=a[j];
a[j+1]=t;
}
26.
解析:函數(shù)fun的功能是計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根之和,首先根據(jù)題干中的要求找出3到n之間的素?cái)?shù),并求出素?cái)?shù)的平方根,然后求得這些平方根的和。
27.intfun(STREC*aSTREC*bintlinth){intij=0;for(i=0;i<N;i++)if((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/b[j++]=a[i];returnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/}intfun(STREC*a,STREC*b,intl,inth)\r\n{\r\ninti,j=0;\r\nfor(i=0;i<N;i++)\r\nif((a[i].s>=0&&a[i].s<1)||(a[i].s>h&&a[i].s<=100))/*將各分?jǐn)?shù)低于1,高于h的學(xué)生記錄存于結(jié)構(gòu)體數(shù)組b中*/\r\nb[j++]=a[i];\r\nreturnj;/*返回分?jǐn)?shù)范圍內(nèi)的學(xué)生人數(shù)*/\r\n}解析:處理此類分段統(tǒng)計(jì)問題,可采用多分支選擇語句或條件選擇語句。此處采用條件選擇語句解答,具體見參考答案。使用條件選擇語句進(jìn)行分段統(tǒng)計(jì)時(shí)應(yīng)當(dāng)注意分段范圍。
28.
解析:該程序功能是計(jì)算并輸出多項(xiàng)式的值。該題的解題思路是。根據(jù)題干中給出的數(shù)列,首先推出每一項(xiàng)的表達(dá)式,然后再對(duì)多項(xiàng)式進(jìn)行累加求和。
29.voidfun(char*aintn){inti=0k=0;char*p*t;p=t=a;/*開始時(shí)p與t同時(shí)指向數(shù)組的首地址*/while(*t==‘*’)/*用k來統(tǒng)計(jì)前部星號(hào)的個(gè)數(shù)*/{k++;t++;}if(k>n)/*如果k大于n則佼p的前部保留n個(gè)星號(hào)其后的字符依次存入數(shù)組a中*/{while(*P){a[i]=*(p+k-n);i++p++;}a[i]=‘\0’;/*在字符串最后加上結(jié)束標(biāo)志位*/}}voidfun(char*a,intn)\r\n{\r\ninti=0,k=0;\r\nchar*p,*t;\r\np=t=a;/*開始時(shí),p與t同時(shí)指向數(shù)組的首地址*/\r\nwhile(*t==‘*’)/*用k來統(tǒng)計(jì)前部星號(hào)的個(gè)數(shù)*/\r\n{k++;t++;}\r\nif(k>n)/*如果k大于n,則佼p的前部保留n個(gè)星號(hào),其后的字符依次存入數(shù)組a中*/\r\n{while(*P)\r\n{a[i]=*(p+k-n);\r\ni++\r\np++;\r\n}\r\na[i]=‘\\0’;/*在字符串最后加上結(jié)束標(biāo)志位*/\r\n}\r\n}解析:while()循環(huán)的作用是計(jì)算出前部星號(hào)的個(gè)數(shù);if()的作用是判斷星號(hào)個(gè)數(shù)是否多于n個(gè),若是則只保留n個(gè)星號(hào),即從字符串前部的倒數(shù)第n個(gè)星號(hào)開始,到最后一個(gè)字符都存入數(shù)組a中,最后記得在字符串最后加上結(jié)束標(biāo)志位。
30.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:該程序功能是將正整數(shù)a、b合并形成一個(gè)新整數(shù)。本題類型首先要考慮整數(shù)的位數(shù)分離,然后要進(jìn)行位數(shù)合成。也就是先將數(shù)字的各位數(shù)拆開,改變排列順序后,再組合成新的數(shù)字。
31.fun(STUa[]STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成績(jī)最高的學(xué)生記錄*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}fun(STUa[],STU*s)\r\n{\r\ninti;\r\n*s=a[0];\r\nfor(i=0;i<N;i++)/*找出成績(jī)最高的學(xué)生記錄*/\r\nif(s->s<a[i].s)\r\n*s==a[i];\r\n}解析:本題的流程是這樣的,先使s指向第1個(gè)學(xué)生,我們的題干目的是找出分?jǐn)?shù)最高的學(xué)生,所以if語句的條件是s->s<a[i].s。此外,在做本題時(shí),我們應(yīng)該熟練掌握“指向運(yùn)算符”和“成員運(yùn)算符”的相關(guān)知識(shí)。題中“s->s”也可換成“(*s).s”。
32.intfun(char*str){intij=0;for(i=0;str[i]!='\0';i++)if(str[i]!='')/*將字符串中的空格刪去*/str[j++]=str[i];/*注意該程序中空格字符的表達(dá)方法*/str[j]='\0';/*在字符串最后加上結(jié)束標(biāo)記符*/}intfun(char*str)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i]!='\\0';i++)\r\nif(str[i]!='')/*將字符串中的空格刪去*/\r\nstr[j++]=str[i];/*注意該程序中空格字符的表達(dá)方法*/\r\nstr[j]='\\0';/*在字符串最后加上結(jié)束標(biāo)記符*/\r\n}解析:前面我們接觸到的題是刪除字符,但本題要求刪除所有空格,即除了空格以外的其他所有字符都要留下。由于C語言中沒有直接刪除字符的操作,所以我們對(duì)于刪除字符的操作都是采用“留下”字符的算法,以前的題目亦是如此。用str[i]從串頭到串尾逐一走動(dòng),每走到一個(gè)字符都判斷其是否為空格,若不是空格(注意在if()的單引號(hào)之間有一個(gè)空格),則將其保存str[j]中。注意j的下標(biāo)變化、初值及最后加串結(jié)束符'\\0'。
33.*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);解析:該程序功能是將正整數(shù)a、b合并形成一個(gè)新整數(shù)。本題類型首先要考慮整數(shù)的位數(shù)分離,然后要進(jìn)行位數(shù)合成。也就是先將數(shù)字的各位數(shù)拆開,改變排列順序后,再組合成新的數(shù)字。
34.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的非素?cái)?shù)循環(huán)k次即找出緊靠m的k個(gè)非素?cái)?shù)*/for(j=2;j<i;j++)/*判斷一個(gè)數(shù)是否為素?cái)?shù)*/if(i%j==0){xx[n++]=i;/*如果不是素?cái)?shù)放入數(shù)組xx中*/break;/*并跳出本層循環(huán)判斷下一個(gè)數(shù)*/}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的非素?cái)?shù),循環(huán)k次,即找出緊靠m的k個(gè)非素?cái)?shù)*/\r\nfor(j=2;j<i;j++)/*判斷一個(gè)數(shù)是否為素?cái)?shù)*/\r\nif(i%j==0)\r\n{\r\nxx[n++]=i;/*如果不是素?cái)?shù),放入數(shù)組xx中*/\r\nbreak;/*并跳出本層循環(huán),判斷下一個(gè)數(shù)*/\r\n}\r\n}解析:本題只要掌握了判斷非素?cái)?shù)和素?cái)?shù)的算法即不難完成了,其實(shí)程序缺少部分也正是這部分。
35.C
36.A解析:C語言中的函數(shù)可以進(jìn)行遞歸調(diào)用,但不能在函數(shù)中定義函數(shù),即函數(shù)不能嵌套定義。函數(shù)可以沒有返回值,若有返回值,則返回值類型必須確定。
37.C2021-2022學(xué)年山東省濟(jì)南市全國(guó)計(jì)算機(jī)等級(jí)考試C語言程序設(shè)計(jì)模擬考試(含答案)學(xué)校:________班級(jí):________姓名:________考號(hào):________
一、單選題(12題)1.下列程序執(zhí)行后的輸出結(jié)果是()。voidfunc(int*a,intb[]){b[0]=*a+b;}main{inta,b[5];a=0;b[0]=3;func(&a,b);printf("%d\n",b[0]);}A.6B.7C.8D.9
2.若有函數(shù)首部“intfun(doublex[10],int*n)”,則下列針對(duì)此函數(shù)的函數(shù)聲明語句中正確的是()。
A.intfun(double,int);
B.intfun(double*,int*);
C.intfun(double*x,intn);
D.intfun(doublex,int*n);
3.
4.設(shè)有定義:structcomplex{intreal,unreal;}data1={1,8},data2;則以下賦值語句中錯(cuò)誤的是()。
A.data2=(2,6);
B.data2=data1;
C.data2.real=data1.real;
D.data2.real=data1.unreal;
5.C語言中,組成數(shù)據(jù)文件的成分是()。A.A.記錄
B.數(shù)據(jù)行
C.數(shù)據(jù)塊
D.字符(字節(jié))序列
6.若串S=,software,其子串的數(shù)目是()。
A.8B.37C.36D.9
7.
8.具有20個(gè)結(jié)點(diǎn)的二叉樹,其深度最多為_______。
A.4B.5C.6D.20
9.下面程序的輸出結(jié)果是()。
#include<stdio.h>
main()
{inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};
inti,j,n;
n=9;
i=n/5;
j=n-i*5-1;
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
}
執(zhí)行后輸出結(jié)果是()。A.A.a[1][3]=6
B.a[1][3]=-3
C.a[1][3]=2
D.不確定
10.C語言中不合法的字符串常量是
A.\121B.'Y'C.\n\nD.ABCD\x6d
11.以下程序運(yùn)行后,輸出結(jié)果是______。fut(int**s,intp[2][3]){**s=p[1][1];}main(){inta[2][3]={1,3,5,7,9,11},*p;p=(int*)malloc(sizeof(int));fut(&p,a);printf("%d\n",*p);}
A.1B.7C.9D.11
12.有三個(gè)關(guān)系R、s和T如下:
由關(guān)系R和s通過運(yùn)算得到關(guān)系T,則所使用的運(yùn)算為()。
A.并B.自然連接C.笛卡爾積D.交
二、2.填空題(12題)13.以下程序的運(yùn)行結(jié)果是()。
main()
(inta=2,b=7,c=5;
switch(a>0)
{case1:switch(b<0)
{case1:switch(");break;
case2:printf("!");break;
}
case0:switch(c==5)
{case0:printf("*");break;
case1:printf("#");break;
case2:printf("$");break;
}
default:printf("&");
}
printf("\n");
}
14.函數(shù)sstrcmp的功能是對(duì)兩個(gè)字符串進(jìn)行比較。當(dāng)s所指字符串和t所指字符串相等時(shí),返回值為0;當(dāng)s所指字符串大于t所指字符串時(shí),返回值大于0;當(dāng)s所指字符串小于t所指字符串時(shí),返回值小于0(功能等同于庫(kù)函數(shù)strcmp)。請(qǐng)?zhí)羁铡?/p>
#include<stdio.h>
intsstrcmp(char*s,char*t)
{while(*s&&*t&&*s==【】)
{s++;t++;}
return【】;
}
15.數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊(duì)列屬于[]。
16.以下程序運(yùn)行后的輸出結(jié)果是【】。
main()
{chars[]="9876",*p;
for(p=s;p<s+2;p++)printf("%s\n",p);
}
17.寫出下列程序的輸出結(jié)果______。
main()
{int=0;
while(n++<=1);
printf("%d,",n);
printf("%d",n++);
}
18.以下程序運(yùn)行后的輸出結(jié)果是______。
voidfun(intx,inty)
{
x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);
}
main()
{
intx=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
19.數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和______兩大類。
20.下述函數(shù)用于統(tǒng)計(jì)一行字符中的單詞個(gè)數(shù),單詞之間用空格分隔。
word_num(str)
charstr[];
{inti,num=0,word=0;
fo(i=0;str[i]!=【】;i++)
if(【】=='')word=0;
elseif(word==0)
{
word=1;
【】;
}
return(num);
}
21.以下程序中函數(shù)huiwen.的功能是檢查一個(gè)字符串是否是回文,當(dāng)字符串是回文時(shí),函數(shù)返回字符串:yes!,否則函數(shù)返回字符串:no!,并在主函數(shù)中輸出,所謂回文即正向與反向的拼寫都一樣,例如:adgda。請(qǐng)?zhí)羁铡?/p>
#include<string.h>
char*huiwen(char*str)
{char*p1,*P2;inti,t=0;
P1=str;p2=【】;
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--){t=1;break;}
if(【】)return("yes!");
elsereturn("no!");
}
main()
{charstr[50];
printf("Input:");scanf("%s",str);
printf("%s\n",【】);
}
22.以下程序運(yùn)行后的輸出結(jié)果是______。
main()
{
inti,m=0,n=0,k=0;
for(i=9;i<=11;i++)
switch(i/10)
{
case0:m++;n++;break;
case10:n++;;break;
default:k++;n++;
}
printf("%d%d%d\n",m,n,k);
}
23.以下程序是從終端讀入數(shù)據(jù)到數(shù)組中,統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù),并計(jì)算它們的和。請(qǐng)?zhí)羁铡?/p>
main()
{
inti,a[20],sum,count;
sum=count=【】;
for(i=0;i<20;i++)scanf("%d",【】);
for(i=0;i<20;i++)
{
if(a[i]>0)
{count++:
sum+=【】;
}
}
printf("sum=%d,count=%d\n",sum.count);
}
24.下述函數(shù)統(tǒng)計(jì)—個(gè)字符串中的單詞個(gè)數(shù),單詞是指處在空格之間的字符序列,請(qǐng)?zhí)羁铡?/p>
intword(char*s)
{intnum=0,flag=0;
while(*s)
{if(【】='')flag=0;
elseif(【】){flag=1;num++}
}
return【】;}
三、3.程序設(shè)計(jì)題(10題)25.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。
注意:部分源程序給出如下.
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fum的花括號(hào)中填入所編寫的若啡:語句。
試題程序:
#include<stdio.h>
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STRECa[])
{
}
main()
{
STRECsIN]={{"GA005",85},{"GA003",76},
{"GA002",69},{"GA004",85},{"GA001",91},
{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},
{"GA014",91},{"GA011",66},{"GA017",64},
{"GA018",64},{"GA016",72}};
inti;
FILE*out;
fun(s);
printf("Thedataaftersorted:In");
for(i=0;i<N;i++)
{if((i)%4=-0)
/*每行輸出4個(gè)學(xué)生記錄*/
printf("\n");
printf("%s%4d",s[i].num,s[i].s);
}
printf("\n");
out=fopen("out16.dat","w");
for(i=0;i<N;i++);
{if((i)%4==0&&i)
fprintf(out,"\n");
fprintf(out,"%4d",s[i].s);
}
fprintf(out,"\n");
fclose(out);
}
26.請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出3到n之間(含3和n)所有素?cái)?shù)的平方根之和。
例如,在主函數(shù)中從鍵盤給n輸入100后,輸出為:sum=148.874270。
注意:要求n的值大于2但不大于100。部分源程序在文件PROGl.C中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
27.學(xué)生的記錄由學(xué)號(hào)和成績(jī)組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請(qǐng)編寫函數(shù)fun(),它的功能是:把指定分?jǐn)?shù)范圍之外的學(xué)生數(shù)據(jù)放在b所指的數(shù)組中,分?jǐn)?shù)范圍之外的學(xué)生人數(shù)由函數(shù)值返回。
例如,輸入的分?jǐn)?shù)是80和89,則應(yīng)當(dāng)把分?jǐn)?shù)低于80和高于89的學(xué)生數(shù)據(jù)進(jìn)行輸出,不包含80分和89分的學(xué)生數(shù)據(jù)。主函數(shù)中把80放在low中,把89放在heigh中。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序
#include<stdio.h>
#defineN16
typedefstruct
{charnum[10];
ints;
}STREC;
intfun(STREC*a,STREC*b,int1,inth)
{
}
main()
{
STRECs[N]={{“GA005”,55},{“GA003”,96},
{“GA002”,80},{“GA004”,68},{“GA001”,88},
{“GA007”,74},{“GA008”,85},{“GA006”,99},
{“GA015”,90},{“GA013”,53},{“GA012”,66},
{“GA014”,82},{“GA0ll”,73},{“GA017”,69},
{“GA018”,64},{“GA016”,86}};
STECh[N],tt;
FILE*out;
inti,j,n,low,heigh,t;
printf(“Enter2integernumberlow&heigh:”);
scanf(“%d%d”,&low,&heigh);
if(heigh<low)
{
t=heigh;
heigh=low;
low=t;
}
n=fun(S,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);
/*輸出指定分?jǐn)?shù)范圍內(nèi)的學(xué)生記錄*/
printf(“\n”);
ut=fopen(“out23.dat”,“w”);
fprintf(out,“%d\n”,n);
n=fun(s,h,70,79);
for(i=0;i<n-1;i++)
/*分?jǐn)?shù)在70~79之外的學(xué)生記錄按分?jǐn)?shù)從低到高排列*/
for(j=i+l;i<n;j十+)
if(h[i].s>h[j].s)
{
tt=h[i];
h[i]=h[j];
h[j]=tt;
}
for(i=0;i<n;i++)
fprintf(out,“%4d\n”,h[i].s);
fprintf(out,“\n”);
fclose(out);
}
28.請(qǐng)編寫函數(shù)fun,其功能是:計(jì)算并輸出下列多項(xiàng)式的值:
例如,在主函數(shù)中從鍵盤給n輸入15,則輸出為:s=2.718282。
注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
29.假定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫函數(shù)fun(),它的功能是:使字符串中前部的*號(hào)不得多余n個(gè);若多余n個(gè),則刪除多余的*號(hào);若少于或等于n個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪除。
例如,字符串中的內(nèi)容為****A*BC*DEF*G*******,若n的值為2,刪除后,字符串中的內(nèi)容則應(yīng)當(dāng)是**A*BC*DEF*G*******;若n的值為4,則字符串中的內(nèi)容仍為****A*BC*DEF*G******。n的值在主函數(shù)中輸入。在編寫函數(shù)時(shí),不得使用C語言提供的字符串函數(shù)。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<conio.h>
voidfun(charAa,intn)
{
}
main()
{chars[81];intn;
printf("Enterastring:\n");gets(s);
printf("Entern:");scanf("%d",&n);
fun(s,n);
printf("Thestringafterdeleted:\n");
puts(s);
}
30.函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的千位和十位上,b中的十位和個(gè)位數(shù)依次放在變量c的個(gè)位和百位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=4251。
注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件IN.DAT中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
31.已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun(),該函數(shù)的功能是;找出成績(jī)最高的學(xué)生記錄,通過形參返回主函數(shù)(規(guī)定只有一個(gè)最高分)。已給出函數(shù)的首部,請(qǐng)完成該函數(shù)。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#defineN10
typedefstructss/*定義結(jié)構(gòu)體*/
{charnum[10];
ints;
}STU;
fun(STUa[],STU*s)
{
}
main()
{
STUa[N]={{"A01",81},{"A02",89},
{"A03",66},{"A04",87},{"A05",77},
{"A06",90},{"A07",79},{"A08",61},
{"A09",80},{"A10",71}},m;
inti;
clrscr();
printf("*****Theoriginaldata*****");
for(i=0;i<N;i++)
printf("No=%sMark=%d\n",a[i].hum,
a[i].s);
fun(a,&m);
printf("*****THERESULT*****\n");
printf("Thetop:%s,%d\n",m.num,m.s);
}
32.請(qǐng)編寫一個(gè)函數(shù),用來刪除字符串中的所有空格。
例如:輸入asdafaaz67,則輸出為asdafaz67。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
intfun(char*str)
{
}
main()
{
charstr[81];
intn;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
fun(str);
printf("***Str:%s\n",str);
}
33.函數(shù)fun的功能是:將a、b中的兩個(gè)兩位正整數(shù)合并形成一個(gè)新的整數(shù)放在c中。合并的方式是:將a中的十位和個(gè)位數(shù)依次放在變量c的百位和個(gè)位上,b中的十位和個(gè)位數(shù)依次放在變量c的千位和十位上。
例如,當(dāng)a=45,b=12。調(diào)用該函數(shù)后,c=1425。
注意:部分源程序存在文件PROGl.C中。數(shù)據(jù)文件in.dat中的數(shù)據(jù)不得修改。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫的若干語句。
34.請(qǐng)編寫一個(gè)函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是將大于整數(shù)m且緊靠m的k個(gè)非素?cái)?shù)存入所指的數(shù)組中。
例如,若輸入15,5,則應(yīng)輸出16,18,20,21,22。
注意:部分源程序給出如下。
請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
四、單選題(0題)35.若需要0(nlog2n)的時(shí)間內(nèi)完成對(duì)數(shù)組的排序,且要求排序是穩(wěn)定的,則可選擇排序方法是()。A.快速排序B.堆排序C.歸并排序D.直接插入排序
五、單選題(0題)36.以下對(duì)C語言函數(shù)的有關(guān)描述中,正確的是
A.在C語言中調(diào)用函數(shù)時(shí),只能把實(shí)參的值傳給形參,形參的值不能傳送給實(shí)參
B.C函數(shù)既可以嵌套定義又可以遞歸調(diào)用
C.函數(shù)必須有返回值,否則不能使用函數(shù)
D.函數(shù)必須有返回值,返回值類型不定
六、單選題(0題)37.在存儲(chǔ)數(shù)據(jù)時(shí),通常不僅要存儲(chǔ)各數(shù)據(jù)元素的值,而且還要存儲(chǔ)()。
A.數(shù)據(jù)的處理方法B.數(shù)據(jù)元素的類型C.數(shù)據(jù)元素之間的關(guān)系D.數(shù)據(jù)的存儲(chǔ)方法
參考答案
1.A本題考查函數(shù)的調(diào)用,從主函數(shù)傳遞到調(diào)用函數(shù)中,*a的值為0,因此當(dāng)執(zhí)行完調(diào)用函數(shù)后,b[0]的值為6。
2.B函數(shù)聲明有兩種形式:①類型說明符函數(shù)名(類型形參,類型形參……);②類型說明符被調(diào)函數(shù)名(類型,類型……)。由于函數(shù)首部為“intfun(doublex[10],int*n)”。故本題答案為B選項(xiàng)。
3.A
4.A結(jié)構(gòu)體變量初始化的具體成員值使用花括號(hào)標(biāo)注,選項(xiàng)A錯(cuò)誤。故本題答案為A選項(xiàng)。
5.D解析:C語言中的文件是流式文件。流式文件是一種無結(jié)構(gòu)文件,即整個(gè)文件是一串字符流或二進(jìn)制流。文件的存取以字符或字節(jié)為單位。
6.B
7.D
8.D
9.Bn=9,i=n/5=1;j=9-1*5-1=3,輸出為a[1][3]=-3
10.B解析:字符串常量是由雙引號(hào)括起來的一串字符,其中的雙引號(hào)不可缺少。由此可知,選項(xiàng)A)、C)、D)都是含法的字符串常量,而選B)是一個(gè)字符常量。
11.C
12.D關(guān)系R與s經(jīng)交運(yùn)算后所得到的關(guān)系是由那些既在R內(nèi)又在S內(nèi)的共有元組組成的,記為RnS。
13.#&#&解析:剛開始時(shí),switch后面的表達(dá)式a>0為真(1),與case1匹配,然后執(zhí)行case1后面的switch語句,表達(dá)式b<0值為0,沒有與其匹配的語句,返回外層,因?yàn)橥鈱記]有break語句,順序執(zhí)行case0后面的switch語句,表達(dá)式“c==5”值為1,與其后面的case1匹配,因此輸出#,遇到break返回外層,又因?yàn)橥鈱記]有break語句,順序執(zhí)行default后的語句,輸出&。
14.*t或t[0]*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]*t或t[0]\r\n*s-*t或*s-t[0]或s[0]-*t或s[0]-t[0]解析:函數(shù)sstrcmp()有兩個(gè)字符型指針變量,用來指向兩個(gè)字符串。比較兩個(gè)字符串的大小方法是:從第一個(gè)字符開始依次向后比較,若對(duì)應(yīng)的字符相等則接著比較下一個(gè)字符,一直到兩個(gè)字符串中對(duì)應(yīng)字符不等,或者有一個(gè)為\\0,此時(shí)字符的ASCII碼大的字符串就大。故循環(huán)條件是*s和*t不為\\0,且*s和*t相同,第一處應(yīng)填“*t”或其他等價(jià)形式。根據(jù)題意可知第二處應(yīng)填*s-*t或其等價(jià)形式。
15.線性結(jié)構(gòu)線性結(jié)構(gòu)解析:與棧類似,隊(duì)列也是線性表,也町以采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
16.98768769876\r\n876解析:指針是一種數(shù)據(jù)類型,這種數(shù)據(jù)類型的變量用來存放內(nèi)存中分配的存儲(chǔ)單元的首地址。指針的定義:
類型說明符*指針變量名;
17.333,3解析:本題在while(n++<=1)語句后,直接加了分號(hào),說明如果while()的條件為真時(shí),該循環(huán)什么都不做;n++是先取n的當(dāng)前值和I做比較,然后再將n加1。第一次循環(huán),n=0時(shí),循環(huán)條件n++=0<=1成立,執(zhí)行循環(huán),然后得到n=1。第二次循環(huán),n=1時(shí),循環(huán)條件n++=1<=1成立,執(zhí)行循環(huán),然后得到n=2。第三次循環(huán),n=2時(shí),循環(huán)條件n++=2<=1不成立,不執(zhí)行循環(huán),但在判斷循環(huán)條件時(shí)仍將n加1,得到n=3。退出循環(huán)后執(zhí)行printf語句,第二個(gè)printf語句輸出n++,是先輸出n的當(dāng)前值3,然后再將n加1,即程序結(jié)束后得到n=4,但輸出的是3。
18.32233,2,2,3解析:主函數(shù)中首先定義了整型變量x和y,并分別給它們賦初值為2和3,接著調(diào)用fun()函數(shù),fun()函數(shù)把實(shí)參x和y的值傳給形式參數(shù)x和y,實(shí)參和形參不再有聯(lián)系.在fun()函數(shù)中通過運(yùn)算使x和y的值交換過來,所以fun()函數(shù)中的輸出結(jié)果是“3,2”。fun()函數(shù)調(diào)用返回輸出x和y依舊是原來的x和y,為“2,3”原因是變量作為形參傳值的,對(duì)形參的修改并不影響對(duì)應(yīng)的實(shí)參。所以最后輸出為3,2,2,3。
19.非線性結(jié)構(gòu)非線性結(jié)構(gòu)
20.\0'或0或NULLstr[i]num++或num=num+1或num+=1\\0'或0或NULL\r\nstr[i]\r\nnum++或num=num+1或num+=1解析:觀察題目要求,可以知道以下幾點(diǎn):
①for循環(huán)的結(jié)束條件應(yīng)當(dāng)是:str[i]已是字符串的最后—個(gè)字符;
②str[i]代表字符串str中的第i+1個(gè)字符;
③整型變量num的值是要記錄的單詞的個(gè)數(shù)。
C語言中規(guī)定字符串的最后一個(gè)字符是一個(gè)隱含的字符串結(jié)束符“\\0”,所以在題中第—個(gè)空中應(yīng)填寫“\\0”;題中第二個(gè)空應(yīng)填寫“str[i]”,以判斷當(dāng)前位置的字符是否為空格;題中第三個(gè)空中應(yīng)當(dāng)填寫“num++”,通過變量num的加1累加得到字符串中的單詞個(gè)數(shù)。
21.str+strlen(str)-1i>strlen(str)/2huiwen(str)str+strlen(str)-1\r\ni>strlen(str)/2\r\nhuiwen(str)解析:首先使指針p1指向字符串的首地址,指針p2指向字符串的尾地址(不包括字符串結(jié)束標(biāo)記'\\0'),然后指針p1從前往后,指針p2從后往前,直到移至字符串的中間元素,若兩者所指的元素不相等,則跳出循
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版智能便利店技術(shù)授權(quán)及門店運(yùn)營(yíng)合同4篇
- 個(gè)人財(cái)務(wù)規(guī)劃服務(wù)合同2024
- 2025年水電設(shè)施智能化改造安裝合同4篇
- 二零二五版光盤復(fù)制與創(chuàng)意設(shè)計(jì)及制作合同3篇
- 三方協(xié)作2024年勞務(wù)分包協(xié)議模板版A版
- 2025版民爆物品安全評(píng)估與風(fēng)險(xiǎn)管理合同模板4篇
- 2024通信工程智能化設(shè)備采購(gòu)及安裝服務(wù)協(xié)議3篇
- 2025年度腳手架安裝與拆卸工程承包合同范本4篇
- 校園心理劇在學(xué)生群體中的運(yùn)用
- 小學(xué)科學(xué)課程資源的創(chuàng)新利用與教育效果
- 2025年度房地產(chǎn)權(quán)證辦理委托代理合同典范3篇
- 柴油墊資合同模板
- 湖北省五市州2023-2024學(xué)年高一下學(xué)期期末聯(lián)考數(shù)學(xué)試題
- 城市作戰(zhàn)案例研究報(bào)告
- 【正版授權(quán)】 ISO 12803:1997 EN Representative sampling of plutonium nitrate solutions for determination of plutonium concentration
- 道德經(jīng)全文及注釋
- 2024中考考前地理沖刺卷及答案(含答題卡)
- 多子女贍養(yǎng)老人協(xié)議書范文
- 彩票市場(chǎng)銷售計(jì)劃書
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 支付行業(yè)反洗錢與反恐怖融資
評(píng)論
0/150
提交評(píng)論