版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海理工大学上海市计算机二级考试(C语言)复习资料题目解答第一部份:基础知识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第二部分读程序,写结果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,函数s是用插入法对数组a的前n个元素从小到大排序输出23571113函数p的功能是求k(包括k)以内的质数输出n=91,a[]=0,10,21,31输出Feith输出7256384981818181k=51926.用递归函数实现10->2进制转换第三部分程序改错#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++;}第四部分编程序设有链表结点的结构及变量如下:)structst{intnum;structst*next;};structst*head,*p1,*p2;编写函数create(),是个无参数函数,创建链表,num=0结束,返回指针值,指向首结点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);}对N个数据,降序排列并输出#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]);}有二维数组如下广1234、56789101112J现要求输入某元素所在的行和列,将其后的所有元素输出,必须用指针技术编程。例如,输入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);}将一个磁盘文件的数据读到一个链表中去,队列或堆栈不论。要求如下:磁盘文件放在A盘的一级目录(即一级子文件夹)abc下,文件名是flile.dat链表结点的结构为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);}试写一个函数(函数名为f),以十进制正整数n为整型参数,函数的返回值是n的位数(例:278是三位数)。要求循环结构需用do_while控制结构。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•将一个nXn的矩阵行列转置后输出,转置功能由函数reverse实现,试编程。#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控制结构,计算下列级数的和s=l+3+5+...+(2i-l)+...当累加到某项s的值大于100时,该项及以后各项不再累加,结束循环求和。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);}编程序用于将原字符串按某种规律变成密码:即将字母A变成E,B变成F,…;W变成A,X变成B,…,Z变成D,对小写字母也是如此编码,标点符号、空格维持原状。#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();}编写一个带参数宏trans(F),输入一个华氏温度F,要求输出摄氏温度c。公式是9(F-32)=c,取2位小数。#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)对非线性方程f(x)=O,可用牛顿迭代公式x二x-仁求解,要求方程式用函n+1nf(x)n数名f,导函数f'名为fl,迭代函数名为g,假设函数f和f'已有定义,编写出迭代函数g(x),精度小于10-5。floatg(floatx){floatxi;do{xi=x-f(x)/f1(x);x=xi;}while(fabs(f(x))>=1e-5);returnx;}编写ptstar无参数函数打印如下图形,顶端的*定位在屏幕第25字符位置,编出完整程序,写出对ptstar的调用。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();}试写一个函数(函数名为f),以正整数n为整型参数,函数的返回值是下列级数的前n项的和1+3+5+...+(2n-1)要求用递归法计算级数的和。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);}本程序的主程序为:main(){intb[]={24,12,14,32,22,34};printf("%d\n",f(b,6));}其中调用函数f,该函数有二个参数,依次为整型数组a和整型数n,函数的返回值是数组的a[0]到a[n-1]中的最大值。试写出函数f。要求循环结构需用for控制结构。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函数,对N个int型数据降升序排列,该函数有2个形参: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;}}}编写一个名为prime的函数,以m为整型参数,判别m是否为素数。若m为素数,则返回1;若m不是素数,则返回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;}编写一个名为cntatoz的函数,输入一行字符,统计其中的英文字母个数(大小写不论)。#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);}设有3名学生成绩存在如下的数组中::intscore[3][4]={{65,57,70,60},{90,87,50,81},{90,65,100,98}}编程输出有成绩低于60分的某学生所有成绩(按C语言的规则,允许第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控制结构,计算下列公式的近似值x2x4x6s=1—+—+2x1!4x3!6x5!当计算某项的绝对值小于0.0001时,该项及以后各项不再累加,结束循环求和。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控制结构,求数组a[N]的前k(k<=N)个元素的最大值和最小值。将统计结果分别存于变量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个数,输出这10个数中仅出现一次的数如输入: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]);}}试设计一个函数,它能求出两个整型数的和与积,同时,再编写一个主程序main,调用上述函数以验证该函数的功能与正确性。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实数,直到输入0时停止,要求输入的实数最多不超过20个,统计其中正数的个数,负数的个数。#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);}输入一行字符,统计其中的英文字母个数。#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);}}编写完整的程序,用公式TOC\o"1-5"\h\z\o"CurrentDocument"1111\o"CurrentDocument"e=1++++…+…\o"CurrentDocument"1!2!3!n!计算e的近似值,直到某项小于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);}定义一个带参数的宏,其功能是求一个数的绝对值。#defineABSX(x)(x)〈0?-1*(x):(x)或类似求出1—1000之间“水仙花数”。要求的水仙花数是个三位数,它的各位数字之和等于该数本身,例如:153=13+53+53,所以153是个水仙花数。#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);}}应用递归算法求某数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));将十进制正整数m转换成k(2〈=k〈=9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制的表示是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个a,a和n的值在1至9之间)。例如,若a=3,n=6,则以上表达式为s=333333-33333-3333-333-33-3,其值是:296298。a和n是fun函数的形参,表达式的值作为函数值传回main函数。#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));}编写函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为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•编写函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上的各元素之和,返回此和数。#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));}编程,对输入的字符串s,删除其中的所有空白字符(包括tab字符、回车符及换行符)。输入字符串时用“#”结束输入。#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);}编写函数fun的功能是:将s所指字符串中最后一次出现的t1所指字符串替换成t2所指的子串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的程度相同。例如,当s所指字符串中的内容为:“abcdabfabc”,t1所指的子串中的内容为:“ab”,t2所指子串中的内容为:“99”,结果,在w所指的数组中的内容应为:“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");}编写函数fun的功能是:将a所指字符串中的字符和b所指字符串中的字符按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为:“abcdefg”,b所指字符串中的内容为“1234”时,c所指数组中的内容应该为“alb2c3d4efg”;而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abcdefg”时,c所指数组中的内容应该为“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);}编写函数fun的功能是:从传入的num个字符串只能找出最长的一个字符串,并通过形参指针max传回该串地址。(用****作为结束输入的标志)#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);}编写函数fun的功能是:将s所指字符串的反序和正序进行连接,形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为'ABCD”时,t所指数组中的内容为'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()函数获取用户输入的字符串si,用s和s2分别指向其首地址,通过扫描让s2指向最后一个字符,依次交换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.编写程序,要求函数match(s,t)完成在字符串s中寻找与t匹配的字符,若存在一个匹配,则返回t在字符串中的下标;否则,返回一1。其中字符指针*b始终指向s的第一个元素。要求字符串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);}编写程序,用于把两个链表{3,12,8,9,11}和{1,2,3}连接起来。其中create_list用来创建链表,链表结点的数据从数组中导入,并返回链表的首结点指针。函数concatenate用来把由实参传进来的两个链表连接起来,返回第一个链表的首结点指针。函数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);}函数reverse()实现将已知链表的链接顺序颠倒的功能,即第1个表元素变为最后一个表元素,第2个表元素变为倒数第2个表元素……最后一个表元素变为第1个表元素。本程序的主要难点在reverse()函数,其它的程序段为验证该函数用,采用了head全局变量是为了简化程序中的参数传递。程序中先用指令p=q2->next;将p定位q2->next结点,再用指令ql=q2;将q1指向当前q2所指的结点,然后用指令q2->next=q1;进行逆向单链表的连接,如此循环至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;}}编程实现对一个文本文件中内容的反向显示。运行该程序前,必须先在c:\tc目录下编辑并保存一个名为“text.txt”的文本文件(可利用记事本)。该程序先利用读方式打开该文本文件,定位到文件尾,从文件尾向前定位,定位成功则读取一个字符并显示,达到反向显示的目的。#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);}编程序测试fgets()、fputs()、fopen()和fclose()的用法,程序运行后,在磁盘的当前目录下上生成名为“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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美德如光照亮人生路-小学主题班会课件
- 天水市2025-2026学年高考考前模拟生物试题含解析
- 远离交通危险生命至上警钟小学主题班会课件
- 强调科学防疫构筑健康堡垒小学主题班会课件
- 养成环保习惯,保护美丽家园小学主题班会课件
- 传统文化:小学传统文化与节日习俗学习主题班会课件
- 牙膏生产与功效评价作业指导书
- 企业成本控制有效策略手册
- 年度业务合作意向确认函(6篇)范文
- 家庭用餐计划方案指导书
- DB3305∕T 309-2024 现代小区治理与服务规范
- 建筑给排水及采暖工程质量验收标准
- 业务推广及推广费结算协议
- 拆除钢架棚安全协议书
- 2025年国家公务员考录《申论》真题及参考答案(行政执法卷)
- 沥青路面施工工艺流程
- 甘肃2025年甘肃省农业科学院招聘14人笔试历年参考题库附带答案详解
- 2023农药经营人员上岗证考核试题及答案
- T-CCMA 0055-2017 工程机械液压管路布局规范
- 消化道出血介入栓塞治疗
- 黑龙江哈尔滨历年中考作文题与审题指导(2001-2024)
评论
0/150
提交评论