版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
2022年山東省濟南市全國計算機等級考試C語言程序設(shè)計預(yù)測試題(含答案)學(xué)校:________班級:________姓名:________考號:________
一、單選題(12題)1.對于int*pa[5];的描述,()是正確的。
A.pa是一個指向數(shù)組的指針,所指向的數(shù)組是5個int型元素
B.pa是一個指向某數(shù)組中第5個元素的指針,該元素是int型變量
C.pa是一個具有5個元素的指針數(shù)組,每個元素是一個int型指針
D.pa[5]表示某數(shù)組的第5個元素的值
2.
3.若有語句“typedefstructTT{charc;inta[4];}CIN;”,則下列敘述中正確的是()。
A.CIN是structTT類型的變量
B.TT是struct類型的變量
C.可以用TT定義結(jié)構(gòu)體變量
D.可以用CIN定義結(jié)構(gòu)體變量
4.C語言規(guī)定,程序中各函數(shù)之間()
A.既允許直接遞歸調(diào)用也允許間接遞歸調(diào)用
B.不允許直接遞歸調(diào)用也不允許間接遞歸調(diào)用
C.允許直接遞歸調(diào)用不允許間接遞歸調(diào)用
D.不允許直接遞歸調(diào)用允許間接遞歸調(diào)用
5.下列條件語句中,輸出結(jié)果與其他語句不同的是()。
A.if(a)printf("%dn",x);elseprint[("%d\n",y)
B.if(a=0)pritf("%dn",y);elseprint[("%d\n",x)
C.if(a!一0)printf("%dn",x);elseprint[("%a\n",y)
D.if(a=O)print[("%dn",x);elseprintf("%d\n",y)
6.有以下程序
#include<stdio.h>
main()
{charc1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();c6=getchar();
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序運行后,若從鍵盤輸入(從第1列開始)
123<回車>
45678<回車>
則輸出結(jié)果是
A.1267B.1256C.1278D.1245
7.當(dāng)很頻繁的對序列中部進行插入和刪除操作時,應(yīng)該選擇使用的容器是()
A.vectorB.listC.dequeD.stack
8.以下敘述中正確的是()。
A.預(yù)處理命令行必須位于C源程序的起始位置
B.在C語言中,預(yù)處理命令行都以“#”開頭
C.每個C程序必須在開頭包含預(yù)處理命令行:#include
D.C語言的預(yù)處理不能實現(xiàn)宏定義和條件編譯的功能
9.若有說明語句:double*p,a;則通過scanf語句正確給輸入項讀人數(shù)據(jù)的程序段是()。
A.*p=&a;scanf("%1f”,p);
B.*p=&a;scanf("%f",p);
C.p=&a;scanf("%",*p);
D.p=&a;scanf("%1f",p);
10.
讀取二進制文件的函數(shù)調(diào)用形式為:fread(buffersize,count,fp);,其中buffer代表的是()。
A.一個文件指針,指向待讀取的文件
B.一個整型變量,代表待讀取的數(shù)據(jù)的字節(jié)數(shù)
C.一個內(nèi)存塊的首地址,代表讀人數(shù)據(jù)存放的地址
D.一個內(nèi)存塊的字節(jié)數(shù)
11.已知shortint類型變量占用兩個字節(jié),若有定義:shortintx[10]={0,2,4};,則數(shù)組x在內(nèi)存中所占字節(jié)數(shù)是()。
A.3B.6C.10D.20
12.以下程序中函數(shù)reverse的功能是將a所指數(shù)組中的內(nèi)容進行逆置。voidreverse(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf("%d\n",s);}程序運行后的輸出結(jié)果是
A.22B.10C.34D.30
二、2.填空題(12題)13.已有文本文件test.txt,其中的內(nèi)容為:Hello,everyone!。以下程序中,文件test.txt已正確為“讀”而打開,由此文件指針fr指向該文件,則程序的輸出結(jié)果是【】。
#include<stdio.h>
main()
{FILE*fr;charstr[40];
…
fgets(str,5,fr);
printf("%s\n",str);
felose(fr);
}
14.一個項目具有一個項目主管,一個項目主管可管理多個項目,則實體“項目主管”與實體“項目”的聯(lián)系屬于______的聯(lián)系。
15.輸出若干學(xué)生3門課程的成績。
#include<stdio.h>
【】
structstudent
{intnum;
floatscore[3];
}
main()
{inti=0,n;
floata[3];
【】*ptr[200];
printf("請輸入學(xué)生學(xué)號和3門課成績,學(xué)號為0表示數(shù)據(jù)輸入結(jié)束\n");
do
{ptr[i]=(structstudent*)malloc(sizeof(structstudent));
scanf("%d%f%f%f",&ptr[i]->num,&a[O],&a[1],&a[2]);
ptr[i]->score[O]=a[O];
ptr[i]->score[1]=a[1];
ptr[i]->score[2]=a[2];
if(【】)break;
i++;
}while(1);
n=i-1;
【】;
for(i=O;i<=n;i++)
printf("%-6d%.1f%.1f%.1f\n",ptr[i]->num,ptr[i]->score[0],
ptr[i]->score[1],ptr[i]->score[2]);}
16.下列程序段中循環(huán)體的執(zhí)行次數(shù)是______。
a=15;
b=0;
do{b+=2;a-=2+b;}while(a>=0);
17.以下程序的功能是輸出如下形式的方陣:
13141516
9101112
5678
1234
請?zhí)羁铡?/p>
main()
{inti,i,x;
for(j=4;j______;j--)
{for(i=1;i<4;i++)
{x=(j-1)*4+______;
printf("%4d",x);
}
printf("\n");
}
18.實體之間的聯(lián)系可以歸結(jié)為一對一的聯(lián)系,一對多的聯(lián)系與多對多的聯(lián)系。如果一個學(xué)校有許多學(xué)生,而一個學(xué)生只屬于一個學(xué)校,則實體集學(xué)校與實體集學(xué)生之間的聯(lián)系屬于【】的聯(lián)系。
19.以下說明語句中,【】是結(jié)構(gòu)體類型名。
typedefstruct
{intn;
charch[8];
}PER;
20.若有以下程序:
main()
{int,p,a=5;
if(P=a!=0)
printf("%d\n",p);
else
printf("%d\n",p+2);
}
執(zhí)行后輸出結(jié)果是【】。
21.下面程序的輸出結(jié)果是【】。
unsignedfun6(unsignednum)
{unsignedk=1;
do{k*=hum%10;
num/=10;}while(num);
return(k);}
main()
{unsignedn=26;
printf("%d\n",fun6(n));}
22.以下程序的運行結(jié)果是【】。
#include<stdio.h>
#defineMAX(a,b)(a>b?a:b)+1
main()
{inti=6,j=8,k;
printf("%d\n",MAX(i,j));
}
23.結(jié)構(gòu)化程序設(shè)計的3種基本結(jié)構(gòu)分別是順序、選擇和______。
24.十六進制數(shù)100轉(zhuǎn)換成十進制數(shù)為【】。
三、3.程序設(shè)計題(10題)25.請編寫函數(shù)fun(),其功能是:將s所指字符串中除了下標(biāo)為奇數(shù)、同時ASCII值為偶數(shù)的字符外,其余的全部刪除,串中剩余字符所形成的一個新串放在t所指的數(shù)組中。
例如,若s所指字符串中的內(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。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include<conio.h>
#include<stdio.h>
#include<string,h>
voidfun(char*s,chart[])
{
}
main()
{
chars[100],t[100];
clrscr();
printf("\nPleaseenterstringS:");
scanf("%s",s);
fun(s,t);
printf("\nTheresultis:%s\n",t);
}
26.請編寫函數(shù)fun(),該函數(shù)的功能是:移動字符串中的內(nèi)容,移動的規(guī)則是把第1到第m個字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的內(nèi)容為ABCDEFGHIJK,m的值為3,移動后,字符串中的內(nèi)容應(yīng)該是DEFGHIJKABC。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#include<string.h>
#defineN80
voidfun(char*w,intm)
{
}
main()
{
chara[N]="ABCDEFGHIJK";
intm;
printf("Theoriginastring:\n");
puts(a);
printf("\n\nEnterm:");
scanf("%d",&m);
fun(a,m);
printf("\nThestringaftermoving:\n");
puts(a);
printf("\n\n");
}
27.學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun(),它的功能是:按分?jǐn)?shù)的高低排列學(xué)生的記錄,高分在前。
注意:部分源程序給出如下.
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fum的花括號中填入所編寫的若啡:語句。
試題程序:
#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個學(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);
}
28.請編寫函數(shù)fun(),該函數(shù)的功能是:移動一維數(shù)組中的內(nèi)容,若數(shù)組中有n個整數(shù),要求把下標(biāo)從0到p(p≤n-1)的數(shù)組元素平移到數(shù)組的最后。
例如,一維數(shù)組中的原始內(nèi)容為1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值為3。移動后,一維數(shù)組中的內(nèi)容應(yīng)為5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
#defineN80
voidfun(int*w,intp,intn)
{
}
main()
{
inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("Theoriginaldata:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n\n");
}
29.請編寫一個函數(shù)voidfun(chara[],charb[],intn),其功能是:刪除一個字符串中指定下標(biāo)的字符。其中,a指向原字符串,刪除指定字符后的字符串存放在b所指的數(shù)組中,n中存放指定的下標(biāo)。
例如,輸入一個字符串:World,然后輸入3。則調(diào)用該函數(shù)后的結(jié)果為:Word。
注意:部分源程序在文件PROGl.C中。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
30.編寫一個函數(shù)fun,它的功能是:實現(xiàn)兩個字符串的連接(不使用庫函數(shù)strcat),即把p2所指的字符串連接到p1所指的字符串后。
例如,分別輸入下面兩個字符串:
FirstString--
SecondString
程序輸出:
FirtString--SecondStdng
注意:部分源程序在文件PROGl.C文件中。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
31.請編寫函數(shù)fun,其功能是將兩個兩位數(shù)的正整數(shù)a、b合并形成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位數(shù)依次放在c數(shù)個位和十位上,b數(shù)的十位和個位數(shù)依次放在c數(shù)的百位和千位上。
例如,當(dāng)a=16,b=35,調(diào)用該函數(shù)后,c=5361。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
voidfun(inta,intb/long*c)
{
}
main()
{
inta,b;
longc;
clrscr();
printf("Inputa,b;");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:%ld\n",c);
}
32.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、40。
注意:部分源程序在文件PROGl.C文件中。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。
33.請編寫一個函數(shù)voidfun(intm,intk,intxx[]),該函數(shù)的功能是將大于整數(shù)m且緊靠m的k個非素數(shù)存入所指的數(shù)組中。
例如,若輸入15,5,則應(yīng)輸出16,18,20,21,22。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#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");
}
34.請編寫一個函數(shù)fun(),它的功能是:比較兩個字符串的長度,(不得調(diào)用C語言提供的求字符串長度的函數(shù)),函數(shù)返回較短的字符串。若兩個字符串長度相等,則返回第1個字符串。
例如,輸入nanjing<CR>nanchang<CR>(<CR>為回車鍵),函數(shù)將返回nanjing。
注意:部分源程序給出如下。
請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include<stdio.h>
char*fun(char*S,char*t)
{
}
main()
{
chara[20],b[10],*p,*q;
inti;
printf("Inputlthstring:");
gets(a);
printf("Input2thstring:");
gets(b);
printf(“%s”,fun(a,b));
}
四、單選題(0題)35.在下列給出的表達(dá)式中,與while(E)中的(E)不等價的表達(dá)式是()。A.(!E==0)B.(E>0||E<0)C.(E==0)D.(E!=0)
五、單選題(0題)36.采用折半查找法查找長度為n的線性表時,每個元素的平均查找長度為()。
A.O(n2)B.O(nlog2n)C.O(n)D.O(log2n)
六、單選題(0題)37.
參考答案
1.A
2.B
3.DCIN為結(jié)構(gòu)體類型名,而不是結(jié)構(gòu)體變量。故本題答案為D選項。
4.A解析:C語言規(guī)定,程序中各函數(shù)之間既允許直接遞歸調(diào)用也允許間接遞歸調(diào)用。
5.D主要考查if判斷語句,A選項if(a),如果a為真,則輸出X,否則輸出Y。B選項if(a==0),如果a恒等于0,則輸出Y,否則輸出X。C選項a(!=o),如果a不等于0,則輸出X,否則輸出y。D選項if(a==0),如果a恒等于0,則輸出X,否則輸出y。由以上結(jié)論可知,輸出結(jié)果不同的為D選項。
6.D解析:putchar(c1)輸出1,putchar(c2)輸出2,printf('%c%c\\n',c5,c6)輸出45。
7.B
8.B本題是對基本知識點的理解,預(yù)處理命令行的位置沒有規(guī)定,只是習(xí)慣寫在起始位置而已,當(dāng)需要時才用#include<stdio.h>頭文件,預(yù)處理的作用就是實現(xiàn)宏定義和條件編譯。
9.Ddouble*p,a定義了一個指向雙精度型的指針變量P和雙精度型變量a,p=&a表示將變量a的地址賦給指針變量p;scanf("%If",p)表示用鍵盤輸入的數(shù)賦給指針變量P所指向的地址單元中,scanf函數(shù)要求在輸入double型數(shù)據(jù),格式控制符必須用%1f。否則,數(shù)據(jù)不能正確輸入。所以選項D正確。
10.Cfread函數(shù)中的參數(shù)buffer是內(nèi)存塊的首地址,輸入的數(shù)據(jù)存入此內(nèi)存塊中。
11.D
12.A解析:本題考查的知識點是數(shù)組名作為函數(shù)參數(shù)及函數(shù)調(diào)用。reverse()數(shù)的功能是將具有n個元素的數(shù)組a反序存放。在主函數(shù)中調(diào)用語句是“reverse(b,8);”,實現(xiàn)的功能是把b數(shù)組的前八個元素逆置,所以b數(shù)組中依次存放的值為“8,7,6,5,4,3,2,1,9,10”。for循環(huán)了4次,分別把b[6]、b[7]、b[8]和b[9]的值(分別是2、1、9、10)加到了s中,s的結(jié)果是22,所以最后輸出的s值為22。所以4個選項中A正確。
13.HellHell解析:文件的字符串讀寫函數(shù)fgets()有3個參數(shù),第三個參數(shù)是文件指針指向要讀取數(shù)據(jù)的文件,第二個參數(shù)是一個整數(shù)(假設(shè)為n),表示從文件中讀取n-1個字符并在其后加一個'0',第一個參數(shù)為存放讀取的字符串的內(nèi)存區(qū)的起始地址,讀取得數(shù)據(jù)保存在其中。可見本題的輸出結(jié)果為:Hell。
14.1對多(或1:N)1對多(或1:N)
15.#include<alloc.h>structstudentptr[i]->num==Ofree(ptr[i])#include<alloc.h>\r\nstructstudent\r\nptr[i]->num==O\r\nfree(ptr[i])
16.33解析:本題考查do…while語句形式:
do循環(huán)體
while表達(dá)式
首先執(zhí)行循環(huán)體語句,然后檢測循環(huán)控制條件表達(dá)式的值,若為真,則重復(fù)執(zhí)行循環(huán)體語句,否則退出循環(huán)。第1次循環(huán):b+=2,b=2,a-=2+b,a=11;第2次循環(huán):b=4,a=5;第3次循環(huán):b=6,a=-3,此時再判斷循環(huán)條件不滿足,退出循環(huán)。
17.ii解析:本題使用了一個兩重for循環(huán)輸出如題所示的方陣。從外層for循環(huán)的最后一條語句prinff('\\n');可以看出,外層for循環(huán)每次輸出方陣的一行,由于方陣是4行所以外層循環(huán)會循環(huán)4次,又從j=4和卜可以看出這4次循環(huán),循環(huán)變量i的值分別為4、3、2、1.故前一空應(yīng)該填j>=1或者j>0,以保證j等于0時循環(huán)結(jié)束。內(nèi)層循環(huán)控制每行輸出的4個數(shù),其循環(huán)變量i從1遞增到4,由于每行的4個結(jié)果也是差1遞增的,所以將每次結(jié)果減去循環(huán)變量i的值為一個常數(shù),每行分別是12、8、4、0,而這些值正好與4次外循環(huán)中表達(dá)式(j-1)*4的值相吻合,故后一空應(yīng)該填i。
18.一對多一對多解析:實體之間的聯(lián)系可以歸結(jié)為一對一、一對多與多對多。如果一個學(xué)校有許多學(xué)生,而一個教師只歸屬于一個學(xué)生,則實體集學(xué)校與實體集學(xué)生之間的聯(lián)系屬于一對多的聯(lián)系。
19.PERPER解析:本題中,typedef聲明新的類型名PER來代替已有的類型名,PER代表上面指定的一個結(jié)構(gòu)體類型,此時,也可以用PER來定義變量。
20.11解析:首先計算if語句后面的表達(dá)式,根據(jù)運算符的優(yōu)先級可知,先算“a!=0”,該值為1,再把1賦值給p,結(jié)果為1(真),執(zhí)行其后的printf語句,輸出的值為1。
21.1212解析:do…while循環(huán)的一個比較顯著的特點是:先執(zhí)行一次循環(huán)體然后再判斷循環(huán)的條件是否滿足,若滿足則接著進入下一次循環(huán),否則就退出循環(huán)。注意:3種循環(huán)結(jié)構(gòu)的比較。
22.99解析:本題考查宏定義與三目運算符的綜合應(yīng)用。宏定義是原樣替換,本題中,如果a>b成立,則a+1的值為整個表達(dá)式的值,否則b+1的值為整個表達(dá)式的值(應(yīng)注意后面的加1)。
23.重復(fù)(循環(huán))重復(fù)(循環(huán))解析:結(jié)構(gòu)化程序設(shè)計包括3種基本的結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)(循環(huán)結(jié)構(gòu)),利用這3種結(jié)構(gòu)就足以表達(dá)出各種其他形式結(jié)構(gòu)的程序設(shè)計方法。其中利用循環(huán)結(jié)構(gòu),可以簡化大量的程序執(zhí)行。
24.256
25.voidfun(char*schart[]){intij=0;for(i=0;s[i]!='\0';i++)if(i%2!=0&&s[i]%2==0)/*將s所指字符串下標(biāo)為奇數(shù)同時ASCII值為偶數(shù)的字符放入數(shù)組t中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上結(jié)束標(biāo)志位*/}voidfun(char*s,chart[])\r\n{\r\ninti,j=0;\r\nfor(i=0;s[i]!='\\0';i++)\r\nif(i%2!=0&&s[i]%2==0)/*將s所指字符串下標(biāo)為奇數(shù)同時ASCII值為偶數(shù)的字符放入數(shù)組t中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上結(jié)束標(biāo)志位*/\r\n}解析:本題要求除了下標(biāo)為奇數(shù)同時ASCII值為偶數(shù)的字符之外,其他字符都刪除。即題目要求留下下標(biāo)為奇數(shù)同時ASCII值為偶數(shù)的字符。C語言中并沒有直接刪除字符的算法,請大家在做題的時候注意。
26.voidfun(char*wintm){intij;chart;for(i=1;i<=m;i++)/*進行m次的循環(huán)左移*/{t=w[0];for(j=1/w[j]!='\0';j++)/*從第2個字符開始以后的每個字符都依次前移一個字符*/w[j-1]=w[j];w[j-1]=t;/*將第1個字符放到最后一個字符中*/}}voidfun(char*w,intm)\r\n{\r\ninti,j;\r\nchart;\r\nfor(i=1;i<=m;i++)/*進行m次的循環(huán)左移*/\r\n{t=w[0];\r\nfor(j=1/w[j]!='\\0';j++)/*從第2個字符開始以后的每個字符都依次前移一個字符*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;/*將第1個字符放到最后一個字符中*/\r\n}\r\n}解析:我們在學(xué)習(xí)C語言的時候,應(yīng)該廣泛地應(yīng)用到循環(huán)的方法,本題應(yīng)采用“循環(huán)左移”的算法。即從第2個字符開始以后的每個字符都依次前移一個字符,而原來的第1個字符放在串中的最后一個字符。當(dāng)要平移m個字符時,則要進行m次的循環(huán)左移。內(nèi)嵌的循環(huán)的作用是完成從第2個字符開始以后的每個字符都依次前移一個字符,w[j-1]=t的作用是將第1個字符放到最后一個字符中。
27.intfun(STRECa[]){intij;STRECt;for(i=1;i<N;i++)/*用冒泡法進行排序進行N-1次比較*/for(j=0;j<N-1;j++)/*在每一次比較中要進行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++)/*用冒泡法進行排序,進行N-1次比較*/\r\nfor(j=0;j<N-1;j++)/*在每一次比較中要進行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個數(shù),則要進行N-1次比較,在每一次比較中要進行N-1次兩兩比較(這種算法較好理解但不是最精的)。所謂兩兩比較就是從頭到尾依次將相鄰兩個數(shù)進行比較并將其中大的數(shù)放在前或在后(若要求從小到大排序,則大的數(shù)要放在后。反之則對調(diào)),即兩兩比較后這兩個數(shù)要形成題中所要求的順序。由于總是從頭到尾進行比較,所以第1次比較結(jié)束后,最大(或最小)數(shù)肯定在最后,第2次比較結(jié)束后,次最大(或次最小)數(shù)肯定在倒數(shù)的第2個數(shù),依次類推,所以進行第一次比較時必須比較到最后一個數(shù),而進行第2次比較時只要比較到倒數(shù)的第2個數(shù)即可,所以進行第i次比較時只需比較N-i次即可(這種算法較難理解,但它是最好的)。
選擇法算法思路:如果有N個數(shù)則從頭到倒數(shù)的第2個數(shù)一個一個往后走動,每走動1個數(shù)總是將這個數(shù)與其后的所有數(shù)進行比較并找出它們的最大(或最小)數(shù),找出最大(或最小)數(shù)后再將所得的最大(或最小)數(shù)與該數(shù)進行交換,交換后再走到下一個數(shù)依次交換到結(jié)束。此外,選擇法還可用如下思路:如果有N個數(shù),則從頭到倒數(shù)的第2個數(shù)—個一個往后走動,每走動一個數(shù)總是將這個數(shù)與其后的所有數(shù)進行兩兩比較,在比較時按順序?qū)⑦M行比較的這兩個數(shù)排序(即交換)。
插入法算法思路:先對頭兩個數(shù)進行排序。然后把第3個數(shù)插入到前兩個數(shù)中,插入后前3個數(shù)依然有序;再把第4個數(shù)插入到前3個數(shù)中,插入后前4個數(shù)依然有序;依次插完所有的數(shù)。具體執(zhí)行方式(假設(shè)從小到大排序):從第2個數(shù)開始往后一個一個走動直到最后。每走到1個數(shù)總是將該數(shù)(先將其存到1個臨時變量中)與其前面的數(shù)進行比較(比較的順序總是從后往前進行),在比較時只要發(fā)現(xiàn)該數(shù)比被比較的數(shù)小,就將被比較的數(shù)往后移1位,然后該數(shù)還要冉與前1個數(shù)進行比較,亢到發(fā)現(xiàn)該數(shù)比被比較的數(shù)大或己比較到頭(即第1個數(shù)的前面),并將該數(shù)存入當(dāng)前被比較數(shù)的后1位(存儲空間)。
如果有整型一維數(shù)組a其有N個元素,要求將其按從小到大排序。注意元素下標(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;
}
28.voidfun(int*wintpintn){intijt;for(i=0;i<=p;i++)/*循環(huán)左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/w[j-1]=w[j];w[j-1]=t;}}voidfun(int*w,intp,intn)\r\n{\r\ninti,j,t;\r\nfor(i=0;i<=p;i++)/*循環(huán)左移p+1次*/\r\n{t=w[0];\r\nfor(j=1/j<n;j++)/*實現(xiàn)循環(huán)左移*/\r\nw[j-1]=w[j];\r\nw[j-1]=t;\r\n}\r\n}解析:本題采用“循環(huán)左移”的算法(關(guān)于“循環(huán)左移”,我們在后面的試題中有詳細(xì)的解釋)。和我們在前面分析的稍有不同的是,一個是整型數(shù)組,一個是字符型數(shù)組。
29.
解析:(1)該程序功能是刪除一個字符串中指定下標(biāo)的字符。它的解題思路,可以分解為以下兩步:逐個判斷字符串中的下標(biāo)是否滿足條件,滿足條件的就放到題目要求的新串,否則就不放。
(2)從已給部分源程序的main主函數(shù)開始入手,核心函數(shù)“fun(str1,str2,n);”中的參數(shù)由題目可知,str1存放著原始字符串,str2存放刪除了下標(biāo)為n的字符的結(jié)果字符串,注意下標(biāo)是從“0”開始的。
30.
解析:該程序功能是實現(xiàn)兩個字符串的連接。本題要把串2連接到串1之后,則需要把串2的第一個字符放到串1的尾符的位置上,把串2的后面的字符放到串1的后面的位置。
31.voidfun(intaintblong*c){*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;}voidfun(inta,intb,long*c)\r\n{\r\n*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024離婚法律文件:標(biāo)準(zhǔn)合同范例版B版
- 2024育兒嫂住家服務(wù)合同特殊技能培訓(xùn)范本3篇
- 2024研學(xué)合同協(xié)議
- 2025年度新型環(huán)保材料鋪設(shè)打地坪合同范本3篇
- 2024聘用退休人員勞務(wù)合同范本
- 2025年度專業(yè)打印機租賃合同包含打印耗材及維護4篇
- 2025年度智能家居系統(tǒng)安裝與維護承包合同8篇
- 2025年度生物科技出借咨詢與服務(wù)協(xié)議4篇
- 2024年高端裝備制造與技術(shù)轉(zhuǎn)讓協(xié)議
- 2024版洗車服務(wù)單位協(xié)議2篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- 2025年度生物醫(yī)藥技術(shù)研發(fā)與許可協(xié)議3篇
- 電廠檢修安全培訓(xùn)課件
- 殯葬改革課件
- 2024企業(yè)答謝晚宴會務(wù)合同3篇
- 雙方個人協(xié)議書模板
- 車站安全管理研究報告
- 瑪米亞RB67中文說明書
- 中華人民共和國文物保護法
- 滬教牛津版初中英語七年級下冊全套單元測試題
- 因式分解法提公因式法公式法
評論
0/150
提交評論