上海市計(jì)算機(jī)二級(jí)的考試C語言復(fù)習(xí)資料題目答案_第1頁
上海市計(jì)算機(jī)二級(jí)的考試C語言復(fù)習(xí)資料題目答案_第2頁
上海市計(jì)算機(jī)二級(jí)的考試C語言復(fù)習(xí)資料題目答案_第3頁
上海市計(jì)算機(jī)二級(jí)的考試C語言復(fù)習(xí)資料題目答案_第4頁
上海市計(jì)算機(jī)二級(jí)的考試C語言復(fù)習(xí)資料題目答案_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

上海理工大學(xué)上海市計(jì)算機(jī)二級(jí)考試(C語言)復(fù)習(xí)資料題目解答第一部份:基礎(chǔ)知識(shí)1.B2.C3.C4.B5.D6.A7.A8.C9.C10.A11.C12.A13.B14.B15.C16.B17.D18.B19.A20.C21.C22.B23.B24.C25.D26.B27.B28.D29.C30.C31.D32.C33.C34.B35.C36.D37.C38.B39.C40.B41.C42.B43.C44.B45.B46.A47.D48.D49.D50.D51.A52.C53.(Sqrt(x)+sqrt(y))/2/(x+y)orsimilar54.The"234"isnamelythestring23455B56.D57.D58.B59C60.D61.B62.D63.A64.D65.C66.B67.C68.D69.C70.C71.A72.A73.B74.B75.C76.C77.C78.A79.D80.B81.D82.D83.C84.D85.B86.D87.B88.D89.B90.C91.C92.B93.B94.B95.N+'0'96.0Thex1400movesisex-,binarysystem00010100Bsoreightenterthe024ofsystem97.Thefirstanswer65dsor41hsesorathesecondanswer1ornot098.8599.14100.x=-60第二部分讀程序,寫結(jié)果0,2,4,33.1428m/10%10*100+m/100*10+m%105.6.5.6.7.7,354656Athe=biggestnumber,b=ismostthefraction15,5987654321013579j=0m=4Thefirstk:4j=1m=4Thesecondk:5Count=0,position=0(didnotfindout)16.0-30輸出121422243234,函數(shù)s是用插入法對(duì)數(shù)組a的前n個(gè)元素從小到大排序輸出23571113函數(shù)p的功能是求k(包括k)以內(nèi)的質(zhì)數(shù)輸出n=91,a[]=0,10,21,31輸出Feith輸出7256384981818181k=51926.用遞歸函數(shù)實(shí)現(xiàn)10->2進(jìn)制轉(zhuǎn)換第三部分程序改錯(cuò)#4scanf(“%d”,&x);#10low=m+1#11high=m-1#7scanf(“%c”,&str[i]);#8break#7x,n#13n==0#15x*xn(x,n-1)#5t=t*x/i#15e=ex(x)#4scanf(%d”,&x);#10low=m+1#11high=m-1#3fun(str[])#5while(*(str+num)!='\0')num++;#9charstr[10],*p=str;#14flag=0;#19flag=1;i++;#3func(str[])#5while(*(str+num)!='\0')num++;#9{charstr[10],*p=str;#5n=n/10;#6while(!n);#12scanf(“%ld”,&n);10.#10elseif(x>a[m])low=m+1;#11elsehigh=m-1;11.#6a=1.0;#8a/=i;#9e+=a;12.#6char*temp;#10if(strcmp(temp,name[i])>0)#12printf(“%s\n”,temp);13.#3str[i]!='\0'#4str[i]>='0'&&str[i]<=

#10data=data*16+n;14.#3intn1=0,n2=0,i;#6if(str[i]=='#')#8if(str[i]>='0'&&str[i]<='9')#9n2++;}15.#5i<N#7sum=max=min=a[0]#12aver=(float)(sum-max-min)/(N-2)16.#7scanf(“%c”,&str[i]);#8break17.#7x,n#13n==0#15x*xn(x,n-1)18.#4doublefun(doubleeps)#8while(t>=eps)#13return(2*s);19.#3longfun(char*p)#17num+二p[i]-48;或num+=p[i]-‘O';#29printf(“%ld\n”,n);/*必須有%ld*/20.#9a[j]<a[i]#15b[k]>a[j]&&a[j]#18a[j]=b[k]21.#2voidprintcol(int(*p)[N],introw,intcol)#6printf(“\t\t%d\n”,*(*(p+i)+col));#14}while(col<0||col>N-1);22.#2…(char*s)#4(*p)或…仕卩匸。)或…仕卩!二'\O')#9gets(x);23.#6t=n%10;#10n/=10;#11}while(n);或}while(n!=0);24.#4{for(j=0;j<=20-i;j++)#5printf("");#8printf("\n");25.#2char*fun(char*s,char*t)#4a=0;(或a=NULL;)#8if(*r==*p){r++;p++;}第四部分編程序設(shè)有鏈表結(jié)點(diǎn)的結(jié)構(gòu)及變量如下:)structst{intnum;structst*next;};structst*head,*p1,*p2;編寫函數(shù)create(),是個(gè)無參數(shù)函數(shù),創(chuàng)建鏈表,num=0結(jié)束,返回指針值,指向首結(jié)點(diǎn)head。#defineNULL0#defineLENsizeof(structst)structst{intnum;structst*next;};intn=0;structst*creat(){structst*head,*p1,*p2;p1=p2=(structst*)malloc(LEN);scanf("%u,%d",&p1->num,&p1->score);head=NULL;while(p1->num!=0){n=n+1;if(n==1)head=p1;elsep2->next=p1;p2=p1;p1=(structst*)malloc(LEN);scanf("%u,%d",&p1->num,&p1->score);}p2->next=NULL;return(head);}對(duì)N個(gè)數(shù)據(jù),降序排列并輸出#defineN10main(){inta[N]={1,5,0,3,-6,9,-8,7,2,4};inti,j,t;for(i=0;i<N-1;i++)for(j=i;j<N;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}for(i=0;i<N;i++)printf("%3d",a[i]);}有二維數(shù)組如下廣1234、56789101112J現(xiàn)要求輸入某元素所在的行和列,將其后的所有元素輸出,必須用指針技術(shù)編程。例如,輸入2,3表示從第二行第三列元素7開始輸出其余元素789101112main(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int*p,i,j;scanf("%d%d",&i,&j);p=&a[i-1][j-1];for(;p<&a[0][0]+12;p++)printf("%5d",*p);}將一個(gè)磁盤文件的數(shù)據(jù)讀到一個(gè)鏈表中去,隊(duì)列或堆棧不論。要求如下:磁盤文件放在A盤的一級(jí)目錄(即一級(jí)子文件夾)abc下,文件名是flile.dat鏈表結(jié)點(diǎn)的結(jié)構(gòu)為structnode{charval;strctnode*next;}工作用的指針名為h和p#include<stdio.h>#include<string.h>structnode{charval;structnode*next;};structnode*create(FILE*fp){structnode*p,*h;chard;h=NULL;fp=fopen("a:\\abc\\file.dat","r");while(!feof(fp)){fread(&d,2,1,fp);p=(structnode*)malloc(sizeof(structnode));p->val=d;p->next=h;h=p;}fclose(fp);printf("\n");printlk(h);returnh;}printlk(structnode*h){structnode*p;printf("printlink...\n");p=h;while(p){printf("%c",p->val);p=p->next;}}main(){structnode*h,*p;FILE*fp;fp=fopen("rd_data","r");if(fp==NULL){printf("readdataerror!\n");exit(0);}h=create(fp);printlk(h);exit(0);}試寫一個(gè)函數(shù)(函數(shù)名為f),以十進(jìn)制正整數(shù)n為整型參數(shù),函數(shù)的返回值是n的位數(shù)(例:278是三位數(shù))。要求循環(huán)結(jié)構(gòu)需用do_while控制結(jié)構(gòu)。intf(longn){intc=0;do{c++;n=n/10;}while(n);returnc;}main(){longn;intnum;scanf("%ld",&n);num=f(n);printf("%ldhas%dnumbers\n",n,num);}6?將一個(gè)nXn的矩陣行列轉(zhuǎn)置后輸出,轉(zhuǎn)置功能由函數(shù)reverse實(shí)現(xiàn),試編程。#defineN3voidreverse(floatx[][N],intn){inti,j;floatt;for(i=0;i<n;i++)for(j=i;j<n;j++){t=x[i][j];x[i][j]=x[j][i];x[j][i]=t;}}voidprtable(floatx[][N],intn){inti,j;for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%10.4f",x[i][j]);printf("\n");}}main(){inti,j;floata[][N]={{1,2,3},{4,5,6},{7,8,9}};prtable(a,N);reverse(a,N);prtable(a,N);}試用do_while控制結(jié)構(gòu),計(jì)算下列級(jí)數(shù)的和s=l+3+5+...+(2i-l)+...當(dāng)累加到某項(xiàng)s的值大于100時(shí),該項(xiàng)及以后各項(xiàng)不再累加,結(jié)束循環(huán)求和。main(){ints,i;s=0;i=0;do{i++;s+=2*i-1;}while(s+(2*i+1)<=100);printf("sum=%d,i=%d\n",s,i);}編程序用于將原字符串按某種規(guī)律變成密碼:即將字母A變成E,B變成F,…;W變成A,X變成B,…,Z變成D,對(duì)小寫字母也是如此編碼,標(biāo)點(diǎn)符號(hào)、空格維持原狀。#defineN4#include<stdio.h>decode(){charc;while((c=getchar())!='\n'){if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){c=c+4;if(c>'Z'&&c<='Z'+N||c>'z')c=c-26;}printf("%c",c);}}main(){decode();}編寫一個(gè)帶參數(shù)宏trans(F),輸入一個(gè)華氏溫度F,要求輸出攝氏溫度c。公式是9(F-32)=c,取2位小數(shù)。#definetrans(F)(F-32)*5/9.0main(){floatc,F;scanf("%f",&F);c=trans(F);printf("F=%.2f,c=%.2f\n",F,c);}f(x)對(duì)非線性方程f(x)=O,可用牛頓迭代公式x二x-仁求解,要求方程式用函n+1nf(x)n數(shù)名f,導(dǎo)函數(shù)f'名為fl,迭代函數(shù)名為g,假設(shè)函數(shù)f和f'已有定義,編寫出迭代函數(shù)g(x),精度小于10-5。floatg(floatx){floatxi;do{xi=x-f(x)/f1(x);x=xi;}while(fabs(f(x))>=1e-5);returnx;}編寫ptstar無參數(shù)函數(shù)打印如下圖形,頂端的*定位在屏幕第25字符位置,編出完整程序,寫出對(duì)ptstar的調(diào)用。123456789012345678901234567890*

***printstar(){inti,j;printf("123456789012345678901234567890\n");for(i=0;i<4;i++){for(j=0;j<=23-i;j++)printf("");for(j=0;j<2*i+1;j++)printf("*");printf("\n");}}main(){printstar();}試寫一個(gè)函數(shù)(函數(shù)名為f),以正整數(shù)n為整型參數(shù),函數(shù)的返回值是下列級(jí)數(shù)的前n項(xiàng)的和1+3+5+...+(2n-1)要求用遞歸法計(jì)算級(jí)數(shù)的和。longf(intn){if(n==1)return1;elsereturn(2*n-1+f(n-1));}main(){longsum;intn;scanf("%d",&n);sum=f(n);printf("sum=%ld\n",sum);}本程序的主程序?yàn)椋簃ain(){intb[]={24,12,14,32,22,34};printf("%d\n",f(b,6));}其中調(diào)用函數(shù)f,該函數(shù)有二個(gè)參數(shù),依次為整型數(shù)組a和整型數(shù)n,函數(shù)的返回值是數(shù)組的a[0]到a[n-1]中的最大值。試寫出函數(shù)f。要求循環(huán)結(jié)構(gòu)需用for控制結(jié)構(gòu)。intf(inta[],intn){inti,max=-32768;for(i=0;i<n;i++)if(a[i]>max)max=a[i];returnmax;}main(){intb[]={24,12,14,32,22,34};printf("%d\n",f(b,6));編寫sort函數(shù),對(duì)N個(gè)int型數(shù)據(jù)降升序排列,該函數(shù)有2個(gè)形參:inta[]和intn,采用“冒泡法”或“選擇法”可任選。voidsort(inta[],intn)/*選擇法*/{inti,j,sub,temp;for(i=0;i<n-1;i++){sub=i;for(j=i+1;j<n;j++)if(a[sub]>a[j])sub=j;if(i!=sub){temp=a[i];a[i]=a[sub];a[sub]=temp;}}}編寫一個(gè)名為prime的函數(shù),以m為整型參數(shù),判別m是否為素?cái)?shù)。若m為素?cái)?shù),則返回1;若m不是素?cái)?shù),則返回0。#include<math.h>intprime(intm){inti,k;k=(int)sqrt(m);for(i=2;i<=k;i++)/*或i<m*/if(m%i==0)break;/*或!(m%i)*/if(i>k)return1;/*或i==m*/elsereturn0;}編寫一個(gè)名為cntatoz的函數(shù),輸入一行字符,統(tǒng)計(jì)其中的英文字母個(gè)數(shù)(大小寫不論)。#include<stdio.h>main(){charch;intn=0;printf("Inputastring:\n");while(1){ch=getchar();if(ch=='\n')break;if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')n++;}printf("Numberoflettersis%d.\n",n);}設(shè)有3名學(xué)生成績存在如下的數(shù)組中::intscore[3][4]={{65,57,70,60},{90,87,50,81},{90,65,100,98}}編程輸出有成績低于60分的某學(xué)生所有成績(按C語言的規(guī)則,允許第0行)。main(){voidsearch(float(*p)[4],intn);floatscore[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};search(score,3);}voidsearch(float(*p)[4],intn){inti,j,flag;for(j=0;j<n;j++){flag=0;for(i=0;i<4;i++)if(*(*(p+j)+i)<60)flag=1;if(flag==1){printf("No.%dfails,hisscoresare:\n",j+1);for(i=0;i<4;i++)printf("%6.1f",*(*(p+j)+i));printf("\n");}}}試用do-while控制結(jié)構(gòu),計(jì)算下列公式的近似值x2x4x6s=1—+—+2x1!4x3!6x5!當(dāng)計(jì)算某項(xiàng)的絕對(duì)值小于0.0001時(shí),該項(xiàng)及以后各項(xiàng)不再累加,結(jié)束循環(huán)求和。floatsum(floateps){floats=0.0;intt=1,i=0;do{s+=t;i++;t二-t*x*x/(2*i*(2*i-1.0));}while(fabs(t)>=eps);returns;}試用for控制結(jié)構(gòu),求數(shù)組a[N]的前k(k<=N)個(gè)元素的最大值和最小值。將統(tǒng)計(jì)結(jié)果分別存于變量max和min中。floatmax,min;voidmmai(inta[],intk){inti;max=min=a[0];for(i=1;i<k,i++){if(max<a[i])max=a[i];if(min>a[i])min=a[i];}}輸入10個(gè)數(shù),輸出這10個(gè)數(shù)中僅出現(xiàn)一次的數(shù)如輸入:12367236879987871235則輸出:729935main(){inta[10],i,j;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){}}}}for(j=0;j<10;j++)if(i!=j&&a[i]==a[j])break;if(j>=10)printf("%d",a[i]);}}試設(shè)計(jì)一個(gè)函數(shù),它能求出兩個(gè)整型數(shù)的和與積,同時(shí),再編寫一個(gè)主程序main,調(diào)用上述函數(shù)以驗(yàn)證該函數(shù)的功能與正確性。voidtest(inta,intb,int*ps,int*pt){*ps=a+b;*pt=a*b;}main(){inta,b,s,t;scanf("%d%d",&a,&b);test(a,b,&s,&t);printf("%d%d\n",s,t);}輸入若干非0實(shí)數(shù),直到輸入0時(shí)停止,要求輸入的實(shí)數(shù)最多不超過20個(gè),統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù),負(fù)數(shù)的個(gè)數(shù)。#include“stdio.h”main(){intn,posn,negn;doublea;n=posn=0;printf(“Inputrealnumbers:\n”);scanf(“%lf”,&a);while(a!=0&&n<20){if(a>0)posn++;n++;if(n<20)scanf(“%lf”,&a);}negn=n-posn;printf(“posn=%d,negn=%d\n”,posn,negn);}輸入一行字符,統(tǒng)計(jì)其中的英文字母個(gè)數(shù)。#include“stdio.h”main(){charch;intn=0;printf(“Inputastring:\n”);while(1){ch=getchar();if(ch==‘\n')break;if(ch>=‘a(chǎn)'&&ch<=‘z'||ch>=‘A'&&ch<=‘Z')n++;}printf(“Numberoflettersis%d.\n”,n);}}編寫完整的程序,用公式TOC\o"1-5"\h\z\o"CurrentDocument"1111\o"CurrentDocument"e=1++++…+…\o"CurrentDocument"1!2!3!n!計(jì)算e的近似值,直到某項(xiàng)小于10-為止。main(){doublee=1.0,u=1.0;intn=1;while(u>=1.0e-7){u=u/n;e=e+u;n=n+1;}printf(“e=%8.6f\n”,e);}定義一個(gè)帶參數(shù)的宏,其功能是求一個(gè)數(shù)的絕對(duì)值。#defineABSX(x)(x)〈0?-1*(x):(x)或類似求出1—1000之間“水仙花數(shù)”。要求的水仙花數(shù)是個(gè)三位數(shù),它的各位數(shù)字之和等于該數(shù)本身,例如:153=13+53+53,所以153是個(gè)水仙花數(shù)。#include〈math.h>main(){inti,j,k,num;for(i=1;i〈=9;i++)for(j=0;j〈=9;j++)for(k=0;k〈=9;k++){num=pow(i,3)+pow(j,3)+pow(k,3);if(num==i*100+j*10+k)printf("%5d",num);}}應(yīng)用遞歸算法求某數(shù)a的平方根。求平方根的迭代公式如下:i=i=2(xoa+)x0#include〈stdio.h>#include〈math.h>doublefun(doublea,doublex0){doublex1,y;x1=(x0+a/x0)/2.0;if(fabs(x1-x0)>=1e-5)y=fun(a,x1);elsey=x1;returny;}main(){doublex;printf("Enterx:");scanf("%lf",&x);printf("Thesquarerootof%lfis%lf\n",x,fun(x,1.0));將十進(jìn)制正整數(shù)m轉(zhuǎn)換成k(2〈=k〈=9)進(jìn)制數(shù),并按位輸出。例如,若輸入8和2,則應(yīng)輸出1000(即十進(jìn)制數(shù)8轉(zhuǎn)換成二進(jìn)制的表示是1000)。#include〈stdio.h>voidfun(intm,intk){intaa[20],i;for(i=0;m;i++){aa[i]=m%k;m/=k;}for(;i;i--)printf("%d",aa[i-1]);}main(){intb,n;clrscr();printf("Pleaseenteranumberandabase:\n");scanf("%d%d",&n,&b);fun(n,b);printf("\n");}求s=aa?…aa—aaa?…-aa-a(此處aa???aa表示n個(gè)a,a和n的值在1至9之間)。例如,若a=3,n=6,則以上表達(dá)式為s=333333-33333-3333-333-33-3,其值是:296298。a和n是fun函數(shù)的形參,表達(dá)式的值作為函數(shù)值傳回main函數(shù)。#include〈stdio.h>longfun(inta,intn){intj;longs=0,t=0;for(j=0;j〈n;j++)t=t*10+a;s=t;for(j=1;j〈n;j++){t=t/10;s=s-t;}returns;}main(){inta,n;clrscr();printf("\nPleaseenteraandn:");scanf("%d%d",&a,&n);printf("Thevalueoffunctionis:%ld\n",fun(a,n));}編寫函數(shù)fun的功能是:從低位開始取出長整型變量s中偶數(shù)位上的數(shù),依次構(gòu)成一個(gè)新數(shù)放在t中。例如,當(dāng)s中的數(shù)為7654321時(shí),t中的數(shù)為642。#include〈stdio.h>voidfun(longs,long*t){longs1=10;s/=10;*t=s%10;while(s>0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;clrscr();printf("\nPleases:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}31?編寫函數(shù)fun的功能是:輸出M行M列整數(shù)方陣,然后求兩條對(duì)角線上的各元素之和,返回此和數(shù)。#include<stdio.h>#defineM5intfun(intn,intxx[][M]){inti,j,sum=0;printf("\nThe%dx%dmatrix:\n",M,M);for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%4d",xx[i][j]);printf("\n");}for(i=0;i<n;i++)sum+=xx[i][i]+xx[n-i-1][i];returnsum;}main(){intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};clrscr();printf("\nthesumofallelementson2diagnalsis%d.",fun(M,aa));}編程,對(duì)輸入的字符串s,刪除其中的所有空白字符(包括tab字符、回車符及換行符)。輸入字符串時(shí)用“#”結(jié)束輸入。#include<string.h>#include<stdio.h>#include<ctype.h>voidfun(char*p){inti,t;charc[80];for(i=0,t=0;p[i];i++)if(!isspace(*(p+i)))c[t++]=p[i];c[t]='\0';strcpy(p,c);main(){charc,s[80];inti=0;printf("Inputastring:");c=getchar();while(c!='#'){s[i]=c;i++;c=getchar();}s[i]='\0';fun(s);puts(s);}編寫函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的t1所指字符串替換成t2所指的子串,所形成的新串放在w所指的數(shù)組中。在此處,要求t1和t2所指字符串的程度相同。例如,當(dāng)s所指字符串中的內(nèi)容為:“abcdabfabc”,t1所指的子串中的內(nèi)容為:“ab”,t2所指子串中的內(nèi)容為:“99”,結(jié)果,在w所指的數(shù)組中的內(nèi)容應(yīng)為:“abcdabf99c”。#include<conio.h>#include<stdio.h>#include<string.h>intfun(char*s,char*t1,char*t2,char*w){inti;char*p,*r,*a;strcpy(w,s);while(w){p=w;r=t1;while(*r)if(*r==*p){r++;p++;}elsebreak;if(*r=='\0')a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],t1[100],t2[100],w[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf("\nError:strlen(t1)!=strlen(t2)\n");}編寫函數(shù)fun的功能是:將a所指字符串中的字符和b所指字符串中的字符按排列的順序交叉合并到c所指數(shù)組中,過長的剩余字符接在c所指數(shù)組的尾部。例如,當(dāng)a所指字符串中的內(nèi)容為:“abcdefg”,b所指字符串中的內(nèi)容為“1234”時(shí),c所指數(shù)組中的內(nèi)容應(yīng)該為“alb2c3d4efg”;而當(dāng)a所指字符串中的內(nèi)容為“1234”,b所指字符串中的內(nèi)容為“abcdefg”時(shí),c所指數(shù)組中的內(nèi)容應(yīng)該為“1a2b3c4defg”。#include<stdio.h>#include<string.h>voidfun(char*a,char*b,char*c){while(*a&&*b){*c=*a;c++;a++;*c=*b;c++;b++;}if(*a=='\0')while(*b){*c=*b;c++;b++;}elsewhile(*a){*c=*a;c++;a++;}*c='\0';}main(){chars1[100],s2[100],t[100];clrscr();printf("\nEnters1string:");scanf("%s",s1);printf("\nEnters2string:");scanf("%s",s2);fun(s1,s2,t);printf("\nTheresultis:%s\n",t);}編寫函數(shù)fun的功能是:從傳入的num個(gè)字符串只能找出最長的一個(gè)字符串,并通過形參指針max傳回該串地址。(用****作為結(jié)束輸入的標(biāo)志)#include<stdio.h>#include<string.h>fun(char(*a)[81],intnum,char**max){inti,p,len;len=strlen(a[0]);p=0;for(i=1;i<num;i++)if(len<strlen(a[i])){len=strlen(a[i]);p=i;}strcpy(*max,a[p]);}main(){charss[10][81],*ps;intn,i=0;clrscr();printf("\nPleaseinputsomestrings:");gets(ss[i]);puts(ss[i]);while(!strcmp(ss[i],"****")==0){i++;gets(ss[i]);puts(ss[i]);}n=i;fun(ss,n,&ps);printf("\nmax=%s",ps);}編寫函數(shù)fun的功能是:將s所指字符串的反序和正序進(jìn)行連接,形成一個(gè)新串放在t所指的數(shù)組中。例如,當(dāng)s所指字符串的內(nèi)容為'ABCD”時(shí),t所指數(shù)組中的內(nèi)容為'DCBAABCD”#include<string.h>voidfun(char*s,char*t){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[d-1-i];for(i=0;i<d;i++)t[d+i]=s[i];t[2*d]='\0';}main(){chars[100],t[100];clrscr();printf("\nPleaseenterstrnigS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}利用gets()函數(shù)獲取用戶輸入的字符串si,用s和s2分別指向其首地址,通過掃描讓s2指向最后一個(gè)字符,依次交換si和s2所指字符,直到s1Ws2為止。最后輸出的s字符串即為所求。編寫程序。#include<stdio.h>voidmain(){chartemp,*s,*si,*s2;si=(char*)malloc(sizeof(i00));printf("Inputstring:");gets(si);s=s2=si;while(*s2!='\0')s2++;s2--;while(si<s2){temp=*si;*si=*s2;*s2=temp;si++;s2--;}printf("\nreversstring:%s",s);}38.編寫程序,要求函數(shù)match(s,t)完成在字符串s中尋找與t匹配的字符,若存在一個(gè)匹配,則返回t在字符串中的下標(biāo);否則,返回一1。其中字符指針*b始終指向s的第一個(gè)元素。要求字符串s的長度大于字符串t的長度,本例中chars[81],t[20]。#include<stdio.h>#include<string.h>intmatch(char*s,char*t){char*b=s,*p,*r;for(;*s!='\0';s++){for(p=s,r=t;*r!='\0'&&*p==*r;p++,r++);if(*r=='\0')return(s-b);}return(-1);}main(){chars1[81],t1[20];char*s=s1,*t=t1;inti;printf("\ninputsourcestring:");gets(s);printf("\ninputsubstring:");gets(t);i=match(s,t);printf("positionis:%d\n",i);}編寫程序,用于把兩個(gè)鏈表{3,12,8,9,11}和{1,2,3}連接起來。其中create_list用來創(chuàng)建鏈表,鏈表結(jié)點(diǎn)的數(shù)據(jù)從數(shù)組中導(dǎo)入,并返回鏈表的首結(jié)點(diǎn)指針。函數(shù)concatenate用來把由實(shí)參傳進(jìn)來的兩個(gè)鏈表連接起來,返回第一個(gè)鏈表的首結(jié)點(diǎn)指針。函數(shù)printlink用來遍歷打印鏈表。#include<stdio.h>structlist{intdata;structlist*next;};structlist*create_list(intarray[],intnum){structlist*tmp1,*tmp2,*pointer;inti;pointer=(structlist*)malloc(sizeof(structlist));pointer->data=array[0];tmp1=pointer;for(i=1;i<num;i++){tmp2=(structlist*)malloc(sizeof(structlist));tmp2->next=NULL;tmp2->data=array[i];tmp1->next=tmp2;tmp1=tmp1->next;}returnpointer;}structlist*concatenate(structlist*pointer1,structlist*pointer2){structlist*tmp;tmp=pointer1;while(tmp->next)tmp=tmp->next;tmp->next=pointer2;returnpointer1;}printlink(structlist*head){structlist*p;p=head;while(p){printf("%4d",p->data);p=p->next;}}main(){intarr1[]={3,12,8,9,11};intarr2[]={1,2,3};structlist*ptr1,*ptr2,*ptr3;ptr1=create_list(arr1,5);ptr2=create_list(arr2,3);ptr3=concatenate(ptr1,ptr2);printlink(ptr3);}函數(shù)reverse()實(shí)現(xiàn)將已知鏈表的鏈接順序顛倒的功能,即第1個(gè)表元素變?yōu)樽詈笠粋€(gè)表元素,第2個(gè)表元素變?yōu)榈箶?shù)第2個(gè)表元素……最后一個(gè)表元素變?yōu)榈?個(gè)表元素。本程序的主要難點(diǎn)在reverse()函數(shù),其它的程序段為驗(yàn)證該函數(shù)用,采用了head全局變量是為了簡化程序中的參數(shù)傳遞。程序中先用指令p=q2->next;將p定位q2->next結(jié)點(diǎn),再用指令ql=q2;將q1指向當(dāng)前q2所指的結(jié)點(diǎn),然后用指令q2->next=q1;進(jìn)行逆向單鏈表的連接,如此循環(huán)至q2=NULL。#include<stdio.h>structnode{chardata;structnode*next;}*head;voidcreate(structnode*q){if(head==NULL){q->next=NULL;head=q;}else{q->next=head;head=q;}}voidreverse(){structnode*p,*q1,*q2;q2=head;q1=NULL;while(q2!=NULL){p=q2->next;q2->next=q1;q1=q2;q2=p;}head=q1;}main(){charch;structnode*p;head=NULL;while((ch=getchar())!='\n'){p=(structnode*)malloc(sizeof(structnode));p->data=ch;create(p);}p=head;while(p!=NULL){printf("%c",p->data);p=p->next;}reverse();p=head;while(p!=NULL){printf("%c",p->data);p=p->next;}}編程實(shí)現(xiàn)對(duì)一個(gè)文本文件中內(nèi)容的反向顯示。運(yùn)行該程序前,必須先在c:\tc目錄下編輯并保存一個(gè)名為“text.txt”的文本文件(可利用記事本)。該程序先利用讀方式打開該文本文件,定位到文件尾,從文件尾向前定位,定位成功則讀取一個(gè)字符并顯示,達(dá)到反向顯示的目的。#include<stdio.h>voidmain(){charc;FILE*fp;if((fp=fopen("text.txt","r"))==NULL){printf("Cannotopenfile.\n");exit(1);}fseek(fp,1,2);while((fseek(fp,-1L,1))!=-1){c=fgetc(fp);putchar(c);if(c=='\n')fseek(fp,-2L,1);elsefseek(fp,-1L,1);fclose(fp);}編程序測(cè)試fgets()、fputs()、fopen()和fclose()的用法,程序運(yùn)行后,在磁盤的當(dāng)前目錄下上生成名為“test.txt”的文本文件。#include<stdio.h>charx[4][8]={"First","second","Third","Fourth"};inta[4]={6,7,6,5};voidmain(){inti;chary[4][8];FILE*fp;fp=fopen("test.txt","w");for(i=0;i<4;i++)fputs(x[i],fp);fclose(fp);fp=fopen("test.txt","r");

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論