二级C语言复习_第1页
二级C语言复习_第2页
二级C语言复习_第3页
二级C语言复习_第4页
二级C语言复习_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C程序设计复习,(一)要点 (二)概念 50% -疑难举例 (三)编程 50% -部分编程题解,衷心祝愿各位取得好成绩!,学好C程序设计关键 在于用好“两脑两手”: 两脑-大脑和电脑 两手-左手和右手 除了多编程多上机外 别无选择!,C程序设计复习,阅读讲义(含例题) 复习习题(55道) (一)要点,C语言基础,1 C 语言基础 基本数据类型(int, float, double, char) 变量(命名规则,类型,值,占用内存大小,地址) 变量(作用域,存储类,生存期,可见性) 表达式 表达式的种类 表达式的计算规则 逗号表达式 赋值语句 C程序的基本结构-顺序结构,选择结构,循环结构 运算

2、符的优先级和结合性 一维数组和二维数组,2 函数-C程序的基本积木块,如何编写(定义)函数? 如何使用(调用)函数? 函数的类型和返回值 函数的形式参数和实在参数 函数的参数传递(单向传值) 哪些类型的变量可以作函数的参数? 如何编写递归函数?,3 指针-C语言的一大特色,指针与指针变量的概念 运算符则 *(p+i)与si等价, p+i与 则*(p+i),*(a+i),pi,ai同值; *(*(p+i)+j),*(*(a+i)+j),*(pi+j),pij,aij同值。 指向函数的指针变量,4 结构体-有广泛的应用背景,结构体类型与结构体变量的定义 结构体类型与结构体变量的区别 如何引用结构体

3、变量(即存取数据)? 如何计算结构体变量的大小? 单向链表的建立,插入,删除与排序,5 文件-有广泛的应用背景,文本文件与二进制文件 文本文件的打开与关闭(fopen , fclose) 文本文件的读与写操作(fgetc,fputc,fgets,fputs,fscanf,fprintf) 二进制文件的读与写操作(fread,fwrite) 其它的文件操作(fseek),C程序设计复习,(二)基本知识疑难举例 做完习题集中的选择题部分对掌握C语言的基本知识大有助益。若能加做其中的填空题更有好处。,标识符大小区分 Sum=i=j=5; sum=(j-,i+,i+); printf(“%d”,Sum

4、); 关键字不能作为标识符(用户标识符) 指出不合法的标识符: A)nameB)_oldC)charD)turbo_c,赋值号不能与等号相混淆 下述循环的循环次数是 int k=2; while(k=0) printf(%d,k), k-; printf(n); A) 无限次B) 0 次C)1 次D)2 次 数学中的不等式不能与C语言中关系表达式相混淆 00.51 00.5 i=10;j=15; k=10*MIN(i,j); printf(%dn,k); A)15B)100C)10D)150,(2)执行下列语句后a,b,c的值分别为 a=1;b=2;c=3; a=(a+)+(b+)+(c+);

5、 1)2 3 4 2)7 3 4 3)6 3 44)10 3 4 (3)设a,b,c为整型变量,且a=2,b=3,c=4,则执行完以下语句: a*=16+(b+)-(+c);后,a的值是 28,如何计算字符串常量的长度? main() char m =ABC,x7a107A,%m659; clrscr(); printf(%d,%d,%dn,strlen(m0),strlen(m1),strlen(m2); printf(%s,%s,%sn,m0,m1,m2); ,7,5,5 ABC ,zGA ,%m59,有符号整数与无符号整数,指出下列程序的输出 main() int i=65536,j=6

6、5535,k=-1; clrscr(); printf(%dn,i);/* 0 */ printf(signed j=%d,unsigned j=%un,j,j); printf(signed k=%d,unsigned k=%un,k,k); ,switch 语句的执行规则 (1) main() int c; while(c=getchar()!=n) switch(c-2) case 0: case 1: putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); default:putchar(c+2);break; 若执行

7、时从键盘上输入2473,则程序的输出结果_。 /*668977*/,(2)有以下程序: main() int i; scanf(%d, 输入数据1,则执行以上程序输出结果是 1234,for循环(continue语句的作用) (1) main() int y=9; for(;y0;y-) if(y%3=0) printf(%d,-y);continue; A)741B)852C)963D)875421,(2) void main( ) (break语句的作用) int s=0,k; for(k=7;k 4;k-) switch(k) case 1: case 4: case 7: s+; br

8、eak; case 2: case 3: case 6: break; case 0: case 5: s+=2;break; printf(s=%d,s);/*s=3*/ ,(3)执行语句for(i=0;i+10;);后变量 i 的值是 (表达式中自加) A)9B) 10 C) 11D) 不变 若有以下定义语句,则sizeof(x) 和sizeof(y)的值是 struct int hour; int minute;int second x, *y ; y= A) 6,2B)6,6 C)3,2D)3,3,函数的定义与调用,内部静态变量 运行以下程序,输出的结果是 #include main(

9、) int a=1,b=2; printf(%d,func(a,b); printf(%d,func(a,b); func(int x,int y) static int a=0,b=1; a=b*2;,b=a+x+y; return(b); A)5,5B)4,7 C)5,13D)5,7 变量的作用域 下面程序的输出是 #inckude int a5,k; main() fun1(); fun3(); fun2(); fun3();,fun1() for(k=0;k5;k+) ak=0; fun2() int a5; for(k=0;k5;k+) ak=k; fun3() for(k=0;k5

10、;k+) printf(%d,*(a+k); A)0000000000B)0000001234 C)0000012345D)0123400000,用下列语句定义a,b,c,然后执行b=a,c=b+b,则b,c的值为 (宽度不同的整数之间相互赋值) long a=0 xffffff; int b; char c; A) 0 xffffff 和 ox61B) -1 和 98 C)-1 和 97 D)指向同一地址 执行下面程序片段后的输出结果是 float f1=111.111; printf(%f f1=%8.3fn,f1); A)%f f1= 111.111 B)%f f1=111.111 C)

11、f1=111.111 D)f1= 111.111,设x,y为int型变量,z为float型变量,有以下语句: scanf(%2d%*2d%2d%f, A) 100 B) 200 C) 100,200D) 编译出错,下列程序输出结果是 (阅读程序的方法) #include main() int n2,i,j,k; for(i=0;i2;i+) ni=0; k=2; for(i=0; ik ; i+) for(j=0; jk; j+) nj=ni+1; printf(%dn,nk); 上面程序的 )不确定的值),下列程序运行结果为 。 #define P 3 #define S(a) P*a*a

12、main() int ar; ar=S(3+5); printf(n%d,ar); A) 192B) 29 C) 27D) 25,设有以下程序: #include main() int a9=1,2,3,4,5,6,7,8,9, *p; p=a; printf(%d,p); printf(%x,p+5); 执行此程序,如果第一个printf语句输出的值是200,则第二个printf语句的输出是 A)210 B)205 C)D2D)195,若有以下说明和语句,则对a数组元素的正确引用的选项是 int a45, (*p)5; p=a; A) p+1B) *(p+3) C) *(p+1)+3D) *

13、(*p+2) 执行下面语句后,表达式*(p0+1)+*(q+2)的值为 。 int a=5,4,3,2,1,*p4=a+3,a+2,a+1,a,*q=p; /*p0=a+3;p1=a+2;p2=a+1;p3=a;*/ /* p01+q20=1+4=5 */ A) 8B) 7 C) 6D) 5,若有以下程序片段: int a12=0,*p3, *pp,i; for(i=0;i3;i+) pi= 则对数组的错误引用是 A) pp01B) a10 C) p31D) *(*(p+2)+2),以下程序执行结果是 。 point(cahr *pt); main() char b4=a,c,s,h, *pt

14、=b; point(pt); printf(%cn,*pt); point(char *p) p+=3; A) sB) c C) hD) a,下面程序的输出是 main() struct cmplx int x; int y; cnum2=1,3,2,7; printf(%dn,cunm0.y/cnum0.x*cnum1.x); A) 0B) 1 C) 3 D) 6,下列语句中可以完成建立n个结点的单向链表的功能的选项是 。 (其中,head 指向链表的第一个结点,new指向新结点) A) head-next=new; new-next=head; B) new-next=head; head

15、=new; C) new-next=head; head=new; new-next=NULL; D) head-next=NULL; head-next=new; new-next=head;,若有运算符,sizeof, x=xy; y=yx; x=xy; 则执行完以上语句后x和y 的值分别是 A) x=1,y=2B) x=2,y=2 C) x=2,y=1D) x=1,y=1,C程序设计复习 (三)编程重点,选择语句,循环语句 数组 函数 结构体 文件,复习上机题(55题),需要掌握的上机题(谭浩强著,C程序设计): P65: 6, 8, 9, 10, 12 P85: 9, 10 P104:

16、 3, 5, 7, 9 P120: 1, 2, 3, 4, 6, 7, 8, 14 P141: 2, 4, 5, 6, 8, 11, 13, 14, 15 P186: 1, 3, 5, 6, 9, 10, 16, 17 P199 1, 2 P258: 3, 4, 5, 7, 8, 14, 17, 20 P296: 3, 5, 8, 12 P327: 5, 6, 7, 10, 12,main() /*讲解p105习题5.7(用循环结构更简单)*/ int a,b,c,d,e,count=0; long m; clrscr(); printf(Input m:); scanf(%ld,printf

17、(nleft to right:); switch(count) case 5:printf(%2d,a); case 4:printf(%2d,b); case 3:printf(%2d,c); case 2:printf(%2d,d); case 1:printf(%2d,e); break; case 0:printf(error data!); printf(nright to left:); switch(count), case 5:case 4:case 3:case 2: case 1:printf(%2d,e); if(count=1) break; printf(%2d,d

18、); if(count=2) break; printf(%2d,c); if(count=3) break; printf(%2d,b); if(count=4) break; printf(%2d,a); ,5.7 解法2 main() int a5,count=0; long n; printf(“Input n:”); scanf(“%ld”,for(n=count-1;n=0;n-) printf(“%2d”,an); printf(“ncount=%d”,count); ,/*6.1*/讲解 main() int a,b,temp,product; printf(“Input tw

19、o positive integers:”); scanf(“%d%d”, ,习题6.3求S=a+aa+aaa+aaaa 的值。假设a的值是2。 讲解:tn =tn-1*10+a main( ) int n,a,i; long s,t; printf(Enter a ,/*ex0604*/讲解 main() float fac,sum; int j; for(sum=0,j=1,fac=1;j=20;j+) fac*=j; sum+=fac; printf(“sum=%fn”,sum); ,/*ex0606*/讲解 main() int i,j,k,m; for(m=100;m=999,m+)

20、 i=m%10;/*个位*/ j=m/10%10;/*十位*/ k=m/100;/*百位*/ if(m=i*i*i+j*j*j+k*k*k) printf(%-4d”,m); printf(“n”); ,/*ex0608*/前项分子+分母为后项分子;前项分子为后项分母 main() int m; float a=2.0,b=1.0,sum=0.0;/*a为分子b为分母*/ for(m=1;m=20;m+) sum+=a/b; a=a+b; /*前项分子+分母为后项分子*/ b=a-b; /*前项分子为后项分母*/ printf(“sum=%fn”,sum); ,main()/*ex0614*/

21、讲解 int i,k; for(k=1;k5;k+) for(i=0;i4-k;i+) printf( ); for(i=0;i2*k-1;i+) printf(*); printf(n); for(;k8;k+) for(i=0;ik-4;i+) printf( ); for(i=0;i15-2*k;i+) printf(*); printf(n); ,#include stdio.h” #define N 10 main( )/*习题7-2*/讲解 int i,j,k,t, aN; printf(nn input is ); for(i=0;iaj) k=j; /*修改k*/ if(k!=

22、i) t=ak;ak=ai;ai=t; for(i=0;iN;i+) printf(%4d,ai); ,#include “stdio.h” /* 习题7.4 */讲解 #define N 5 main( ) int aN+1=1,4,6,8,10,x,i,j; printf(“Enter x: ”); /*输入一个数*/ scanf(%d, ,#include stdio.h #define N 10 main( )/*习题7-5 */ int aN; int i,j,t; for(i=0;iN;i+) scanf(%d, ,#define N 10 main( )/*习题7.6 方法一 *

23、/ int aNN, i,j; for(i=0;iN;i+) ai0=aii=1;/*第0列和对角线上元素置1*/ for(i=2;iN;i+)/*从第二行开始*/ for(j=1;ji;j+)/*前行j-1与j列之和为本行j列的值*/ aij=ai-1j+ai-1j-1; for(i=0;iN;i+) for(j=0;ji+1;j+) printf(%6d,aij); printf(n); ,main()/*习题7.8找鞍点,用宏定义指定M,N的值*/ int i,j,k,aMN,a,maxj; 输入数组a的数据。 for(i=0;iaimaxj) maxj=j;/*循环结束后,aimaxj

24、是i行上最大者*/ for(k=0;kakmaxj) break;/*不是maxj列上的最小者*/ if(k=M) break;/*aimaxj是鞍点*/ if(i=M) 无鞍点,否则aimaxj是鞍点 ,/* 打印图案 7.11 */ #include stdio.h #define N 5 main( ) int i,j; printf(nn); for(i=0;iN;i+) for(j=0;ji+20;j+) putchar( ); for(j=0;jN;j+) putchar(*); printf(n); ,#include stdio.h” #include #define N 20

25、 main()/*习题7-13*/ char str1N,str2N; int i,j; printf(ninput string1:); gets(str1); printf(ninput string2:); gets(str2); for(i=0;str1i!=0;i+) ; j=0; while(str1i+=str2j+)!=0); printf(n new string1 is: t %st,str1); ,#include #sefine MAX 100 main() /*习题7.14*/ char s1MAX,s2MAX; int i=0; printf(“Input the

26、first string:”); gets(s1); printf(“Input the second string:”); gets(s2); while(si!=0 ,#include stdio.h“ #include #define N 20 main()/*习题7-15 */ char str1N,str2N; int i=0; printf(ninput string2:); gets(str2); while(str1i=str2i)!=0) i+; printf(nstring1 is: t %s,str1); ,#include stdio.h /*-*/ int maxM(

27、int m,int n) int r; while(n!=0) r=m%n; m=n; n=r; return (m); /*-*/ int minM(int m,int n) return (m*n/maxM(m,n); ,void main() int a,b; printf(nt Enter two integers:); scanf(%d%d, ,讲解习题8-1,#include stdio.h” #include math.h“/*讲解习题8-3*/ int isPrimeNum(int n) int i,k; k=sqrt(n); for(i=2;i=k;i+) if(n%i=0)

28、 return 0; return 1; /*-*/ void main() int m; printf(ntInput an integer :); scanf(%d, ,#include stdio.h” /*讲解习题8-5*/ #include string.h void reverse(char s) int i=0, j=strlen(s)-1; char c; while(ij) c=si;si=sj;sj=c; i+; j-; void main() char str100; printf(ntInput a string :); gets(str); reverse(str);

29、 printf(nt New string is %s ,str); ,#include stdio.h“/*讲解习题8-6*/ void stringcat(char s,char t) int i,j; i=j=0; while(si!=0) i+; while(si=tj)!=0) i+; j+; /* while(si+=tj+)!=0) */ /*-*/ void main() char s1100,s230; printf(ntInput two strings :); scanf(%s %s,s1,s2); stringcat(s1,s2); printf(nt New stri

30、ng is %s : %s,s1,s2); ,#include “stdio.h“ /*习题8-9*/ int alpha,digit,blank,others; int is_pha(char c) /* if c is a char ,return true, else return false*/ return(c=A /*-*/,void count(char s) int is_pha(char),is_digit(char c),is_blank(char ); int i; alpha=digit=blank=others=0; for(i=0;si!=0;i+) if(is_p

31、ha(si) alpha+; else if(is_digit(si) digit+; else if(is_blank(si) blank+; else others+; void main() char s100; gets(s); count(s); printf(nt alpha: %d , digit: %d ,alpha,digit); printf(nt balnks: %d ,others: %d ,blank,others); ,#include stdio.h#include string.h#include ctype.h void getMaxLenWord(char

32、s,char t)/*习题8-10 */ int i=0,j; char sub30; /* 临时变量*/ strcpy(t ,); /*strset(t,0);*/ while(si!=0) while(si= ) i+ ; /*skip the blanks */ j=0; while(isalpha(si) /*save current word to sub*/ subj+=si+; subj=0; if(strlen(sub)strlen(t) strcpy(t,sub); void main() char str200,t30; gets(str); getMaxLenWord(s

33、tr,t); printf(ntMax length word : %s n,t); ,#include stdio.h“/*习题8-16 */ /*高位部*16+本位值*/ long int covert(char s) int i ; long int n=0; for(i=0;si!=0;i+) if(si=A ,#include stdio.h“/*讲解习题8-17 */ void print(int n) int i; if(i=n/10)!=0) print(i); putchar(t); putchar(n%10+0); /*-*/ void main() int n; prin

34、tf(nt Enter a integer:); scanf(%d, ,习题9.1 #define exchange(x,y)t=x,x=y,y=t main() int a,b,t; scanf(“%d%d”, ,/*P199 9.2 习题*/ #define Mod(a,b) (a)%(b) main( ) int x,y,t; printf(Input two integers: ); scanf(%d %d, ,p,begin,/* 10.3 */ /* 要求用 3 个函数,一个输入,一个处理,一个输出 */ #define N 10 /*-*/ void input(int *p )

35、 int *begin ; printf(n Enter 10 numbers: ); for(begin=p;pbegin+N;p+) scanf(%d,p); ,/*-*/ /* 将最大的一个与最后一个互换,将最小的一个与第一个数互换*/ void process(int *p)/*此算法有错,如下图的数据,则结果错*/ int *max,*min,*begin,t; max=min=p; /* 开始时,将最大和最小指针指向第一数 */ for(begin=p;p*max) max=p; if(*p*min) min=p; /* 交换操作:最大数 */ t=*(begin+N-1); *(

36、begin+N-1)=*max; *max=t; /* 交换操作:最小数 */ t=*begin; *begin=*min; *min=t; ,max,min,void process(int *p) /*修改后*/ int *max,*min,*begin,t; begin=p; max=min=p; /* 开始时,将最大和最小指针指向第一数 */ for(;p*max) max=p; /* 交换操作:最大数 */ t=*(begin+N-1); *(begin+N-1)=*max; *max=t; for(p=begin;pbegin+N;p+) if(*p*min) min=p; /*

37、交换操作:最小数 */ t=*begin; *begin=*min; *min=t; ,/*-*/ void output(int *p ) int *begin ; printf(n The result are: ); for(begin=p;pbegin+N;p+) printf(%4d,*p); /*-*/ main( ) int aN; input(a); process(a); output(a); ,/* 10.4 */ #define N 10 /*-*/ void exchange(int *a,int m ) int i,t,j; for(i=0;i=0;j-) *(a+j

38、+1)=*(a+j);/*从倒数第二个数开始各数右移一位*/ *a=t;/*将t存入第一个位置*/ ,/*-10.4的主函数-*/ main( ) int i,m,aN; printf(n Enter %d numbers: ,N); for(i=0;iN;i+) scanf(%d, /*-*/,#define MAX 50 /*10.5的解法*/ int ex1005(int *p,int n) int i,k=0,m=n;/*k记报数,m记在位人数*/ for(i=0;i1) if(*(p+i)=1) k+;/*报数*/ if(k=3) *(p+i)=0;k=0;m-; i=(i+1)%n

39、; /*未完,接下页*/,for(i=0;in;i+) if(*(p+i)=1) return i; main( ) int aMAX,n; clrscr(); printf(“Input the numbers of people:”); scanf(“%d”, ,/* 10.7 */ #define N 10 /*-*/ void copystring(char *s,int m ,char *t) char *p; for(p=s+m;p=s+strlen(s);p+,t+) *t=*p; /*-*/ main( ) char s100,t100; int m; printf(n Ent

40、er a string: ); gets(s); printf(n Enter m: ); scanf(%d, ,void count(char *p,int *pu,int *pl,int *pb,int *pd,int *po) /*10.8*/ *pu=*pl=*pb=*pd=*po=0; while(*p!=0) if(*p=A ,/*习题10.8的主函数*/ main( ) char s100; int upper,lower,blank,digiter,other; printf(“Input a string:”); gets(s); count(s, ,/* 10.14 */

41、#define N 10 /*-*/ void reverse(int *a,int n) int *p,t; p=a+n-1; while(ap) t=*a; *a=*p; *p=t; a+;p-; /*-*/ main( ) int i,aN; printf(nt Enter %d numbers: ,N); for(i=0;iN;i+) scanf(%d,a+i); reverse(a,N); printf(nt Results: ); for(i=0;iN;i+)printf(%4d,*(a+i); ,/*10.17*/ int strcomp(char *s1,char *s2) f

42、or(;*s1=*s2 ,/* 10.20 希望大家仔细阅读 */ #define N 5 /*-选择排序-*/ void sort(char *str , int n) char *t1,*t2,*p1,*p2; for(p1=str;p10) t1=p2;/*让t1始终指向小者*/ t2=*p1;/*p1中的地址与t1中的地址交换*/ *p1=*t1; *t1=t2; ,/*-*/ main( ) char *sN=Pascal,C,Basic,Fortran,Java; int i; sort(s,N); printf(nt Results: ); for(i=0;iN;i+) prin

43、tf( %st,si); /*-*/,“Pascal” “C” “Basic” “Fortran” “Java”,S0 S1 S2 S3 S4,“Pascal” “C” “Basic” “Fortran” “Java”,S0 S1 S2 S3 S4,习题11.3 struct student int num; char name20; int score3; stu5; main() int i,j; for(i=0;i5;i+) printf(“nInput num,for(j=0;jnum,pst-name); printf(“%d,%d,%d”,pst-score0,pst-score1

44、, pst-score2); pst+;,11.5#define N 10 /*有N个学生数*/ #define M 3 /*各修M门课程*/ typedef struct /*学生结构*/ int no; char name20; int scoreM; int ave; STUD; /*-*/ void input(STUD *s)/*从键盘上输入N个学生的信息*/ int i,j,temp; /*计算各学生的平均成绩*/ for(i=0;ino,s-name); for(temp=0,j=0;jscorej); temp+=s-scorej; s-ave=temp/M; ,/*-*/ v

45、oid printAver(STUD *s)/*输出N个学生的总平均成绩*/ int i,sum=0; for(i=0;iave; printf(tTotal average is :%dn,sum/N); ,/*-*/ void printMax(STUD *s)/*输出N个学生中平均分最高的学生信息*/ int i; STUD *p=s; for(i=0;iaveave) p=s; printf(tThe top student %d %s ,p-no,p-name); for(i=0;iscorei); printf(%dn,p-ave); ,/*-*/ main() STUD stuN

46、; system(cls); input(stu); /*输入N个学生的信息*/ printAver(stu); /*输出N个学生的总平均成绩*/ printMax(stu); /*输出N个学生中平均分最高的学生信息*/ ,11.8 #include stdio.h #define LEN sizeof(struct student) typedef struct student int no; int score; struct student *next; STUD;,/*输出head指针所指的链表(带头结点)*/ void print(STUD * head) STUD *p; p=he

47、ad-next; if(p!=NULL) printf(ntThe list is : n); while(p!=NULL) printf(tNum=%d Score=%dn,p-no,p-score); p=p-next; ,STUD *create( ) STUD *head,*last,*new; head=last=(STUD *)malloc(LEN);/* 申请一个头节点 */ last-next=NULL; while(new=(STUD *)malloc(LEN)!=NULL) /* 申请一个数据节点 */ printf(“nEnter No /* 返回链表的表头 */ ,vo

48、id insert(STUD *head,STUD *pt) /*将pt节点按学号从小到大插入到head为头指针的链表*/ STUD *p; p=head; while(p-next!=NULL ,STUD * merge(STUD *pA,STUD *pB) /*将PA,PB两个链表合并*/ STUD *pH,*pT; pH=pA;pA=pA-next;pH-next=NULL; while(pA!=NULL)/*将pA链表按要求插入pH链表*/ pT=pA; pA=pA-next; insert(pH,pT); pB=pB-next; while(pB!=NULL)/*将pB链表按要求插入

49、pH链表*/ pT=pB; pB=pB-next; insert(pH,pT); return pH; ,main() STUD *pa,*pb,*pc; system(cls); printf(tCreate link An);pa=create(); printf(ntCreate link Bnn);pb=create(); pc=merge(pa,pb); print(pc); ,11.12 将单链表倒置 将带表头结点的单链表倒置(先看下页的算法思想) STUD *reverse(STUD *head) STUD *movenode,*remains; remains=head-nex

50、t;/*remains指向剩余部分*/ head-next=NULL;/*此时head指向的链表只有一个表头结点*/ while(remains!=NULL)/*若链表未处理完*/ movenode=remains;/*movenode指向卸下的结点*/ remains=remains-next;/*remains指向剩余部分*/ movenode-next=head-next; /*movenode的下一个结点应是原第一个结点*/ head-next=movenode;/*movenode作为新的第一个结点*/ return head; ,head,head,remains,head,rem

51、ains,head,remains,movenode,movenode,将不带表头结点的单链表倒置(先看下页的算法思想) STUD *reverse(STUD *head) STUD *movenode,*remains; remains=head;/*remains指向剩余部分*/ head=NULL;/*此时head指向的链表为空*/ while(remains!=NULL)/*若链表未处理完*/ movenode=remains;/*movenode指向卸下的结点*/ remains=remains-next;/*remains指向剩余部分*/ movenode-next=head; /

52、*movenode的下一个结点应是原第一个结点*/ head=movenode;/*movenode作为新的第一个结点*/ return head; ,head,head=NULL,remains,head,remains,head,remains,movenode,movenode,13.5 A,B为两个文本文件,各存放一行字母,试将A,B中的字母按字典顺序合并后输出到新文件C中。 #include stdio.h main() FILE *fpA,*fpB,*fpC; char s200; int i,j,k,t; if(fpA=fopen(“A.txt”,rt)=NULL) abort(

53、); if(fpB=fopen(“B.txt”,rt)=NULL) abort(); if(fpC=fopen(“C.txt”,wt)=NULL) abort();,i=0;/*将文件A和B中的字符装入内存*/ while(si=fgetc(fpA)!=EOF) i+; while(si=fgetc(fpB)!=EOF) i+; si=0; for(i=0;si!=0;i+)/*对字符串中的字符排序*/ k=i; for(j=i+1;sj!=0;j+) if(sksj)k=j; t=si;si=sk;sk=t; printf(“%sn”,s); fprintf(fpC,%s,s); fclos

54、eall(); ,获得“获得知识的能力”比获得知识更重要。,学习方法之一:,举一反三,触类旁通,思考题: A,B为两个文本文件,各存放若干整数,试将A,B中的字母 按字从小到大顺序合并后输出到新文件C中。 注:空格为整数的分隔符,#include stdio.h“ #define MAX200 main() FILE *fpA,*fpB,*fpC; int sMAX; int i,j,k,t,n; if(fpA=fopen(“A.txt”,rt)=NULL) abort(); if(fpB=fopen(“B.txt”,rt)=NULL) abort(); if(fpC=fopen(“C.txt”,wt)=NULL) abort();,i=0;/*将文件A和B中的整数装入内存*/ while(f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论