二級C語言復(fù)習(xí)_第1頁
二級C語言復(fù)習(xí)_第2頁
二級C語言復(fù)習(xí)_第3頁
二級C語言復(fù)習(xí)_第4頁
二級C語言復(fù)習(xí)_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C程序設(shè)計復(fù)習(xí),(一)要點 (二)概念 50% -疑難舉例 (三)編程 50% -部分編程題解,衷心祝愿各位取得好成績!,學(xué)好C程序設(shè)計關(guān)鍵 在于用好“兩腦兩手”: 兩腦-大腦和電腦 兩手-左手和右手 除了多編程多上機外 別無選擇!,C程序設(shè)計復(fù)習(xí),閱讀講義(含例題) 復(fù)習(xí)習(xí)題(55道) (一)要點,C語言基礎(chǔ),1 C 語言基礎(chǔ) 基本數(shù)據(jù)類型(int, float, double, char) 變量(命名規(guī)則,類型,值,占用內(nèi)存大小,地址) 變量(作用域,存儲類,生存期,可見性) 表達式 表達式的種類 表達式的計算規(guī)則 逗號表達式 賦值語句 C程序的基本結(jié)構(gòu)-順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu) 運算

2、符的優(yōu)先級和結(jié)合性 一維數(shù)組和二維數(shù)組,2 函數(shù)-C程序的基本積木塊,如何編寫(定義)函數(shù)? 如何使用(調(diào)用)函數(shù)? 函數(shù)的類型和返回值 函數(shù)的形式參數(shù)和實在參數(shù) 函數(shù)的參數(shù)傳遞(單向傳值) 哪些類型的變量可以作函數(shù)的參數(shù)? 如何編寫遞歸函數(shù)?,3 指針-C語言的一大特色,指針與指針變量的概念 運算符則 *(p+i)與si等價, p+i與 則*(p+i),*(a+i),pi,ai同值; *(*(p+i)+j),*(*(a+i)+j),*(pi+j),pij,aij同值。 指向函數(shù)的指針變量,4 結(jié)構(gòu)體-有廣泛的應(yīng)用背景,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的定義 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的區(qū)別 如何引用結(jié)構(gòu)體

3、變量(即存取數(shù)據(jù))? 如何計算結(jié)構(gòu)體變量的大??? 單向鏈表的建立,插入,刪除與排序,5 文件-有廣泛的應(yīng)用背景,文本文件與二進制文件 文本文件的打開與關(guān)閉(fopen , fclose) 文本文件的讀與寫操作(fgetc,fputc,fgets,fputs,fscanf,fprintf) 二進制文件的讀與寫操作(fread,fwrite) 其它的文件操作(fseek),C程序設(shè)計復(fù)習(xí),(二)基本知識疑難舉例 做完習(xí)題集中的選擇題部分對掌握C語言的基本知識大有助益。若能加做其中的填空題更有好處。,標識符大小區(qū)分 Sum=i=j=5; sum=(j-,i+,i+); printf(“%d”,Sum

4、); 關(guān)鍵字不能作為標識符(用戶標識符) 指出不合法的標識符: A)nameB)_oldC)charD)turbo_c,賦值號不能與等號相混淆 下述循環(huán)的循環(huán)次數(shù)是 int k=2; while(k=0) printf(%d,k), k-; printf(n); A) 無限次B) 0 次C)1 次D)2 次 數(shù)學(xué)中的不等式不能與C語言中關(guān)系表達式相混淆 00.51 00.5 i=10;j=15; k=10*MIN(i,j); printf(%dn,k); A)15B)100C)10D)150,(2)執(zhí)行下列語句后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)設(shè)a,b,c為整型變量,且a=2,b=3,c=4,則執(zhí)行完以下語句: 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,有符號整數(shù)與無符號整數(shù),指出下列程序的輸出 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 語句的執(zhí)行規(guī)則 (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; 若執(zhí)行

7、時從鍵盤上輸入2473,則程序的輸出結(jié)果_。 /*668977*/,(2)有以下程序: main() int i; scanf(%d, 輸入數(shù)據(jù)1,則執(zhí)行以上程序輸出結(jié)果是 1234,for循環(huán)(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)執(zhí)行語句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,函數(shù)的定義與調(diào)用,內(nèi)部靜態(tài)變量 運行以下程序,輸出的結(jié)果是 #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,然后執(zhí)行b=a,c=b+b,則b,c的值為 (寬度不同的整數(shù)之間相互賦值) long a=0 xffffff; int b; char c; A) 0 xffffff 和 ox61B) -1 和 98 C)-1 和 97 D)指向同一地址 執(zhí)行下面程序片段后的輸出結(jié)果是 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,設(shè)x,y為int型變量,z為float型變量,有以下語句: scanf(%2d%*2d%2d%f, A) 100 B) 200 C) 100,200D) 編譯出錯,下列程序輸出結(jié)果是 (閱讀程序的方法) #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); 上面程序的 )不確定的值),下列程序運行結(jié)果為 。 #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,設(shè)有以下程序: #include main() int a9=1,2,3,4,5,6,7,8,9, *p; p=a; printf(%d,p); printf(%x,p+5); 執(zhí)行此程序,如果第一個printf語句輸出的值是200,則第二個printf語句的輸出是 A)210 B)205 C)D2D)195,若有以下說明和語句,則對a數(shù)組元素的正確引用的選項是 int a45, (*p)5; p=a; A) p+1B) *(p+3) C) *(p+1)+3D) *

13、(*p+2) 執(zhí)行下面語句后,表達式*(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= 則對數(shù)組的錯誤引用是 A) pp01B) a10 C) p31D) *(*(p+2)+2),以下程序執(zhí)行結(jié)果是 。 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個結(jié)點的單向鏈表的功能的選項是 。 (其中,head 指向鏈表的第一個結(jié)點,new指向新結(jié)點) 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; 則執(zhí)行完以上語句后x和y 的值分別是 A) x=1,y=2B) x=2,y=2 C) x=2,y=1D) x=1,y=1,C程序設(shè)計復(fù)習(xí) (三)編程重點,選擇語句,循環(huán)語句 數(shù)組 函數(shù) 結(jié)構(gòu)體 文件,復(fù)習(xí)上機題(55題),需要掌握的上機題(譚浩強著,C程序設(shè)計): 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習(xí)題5.7(用循環(huán)結(jié)構(gòu)更簡單)*/ 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”, ,習(xí)題6.3求S=a+aa+aaa+aaaa 的值。假設(shè)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( )/*習(xí)題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” /* 習(xí)題7.4 */講解 #define N 5 main( ) int aN+1=1,4,6,8,10,x,i,j; printf(“Enter x: ”); /*輸入一個數(shù)*/ scanf(%d, ,#include stdio.h #define N 10 main( )/*習(xí)題7-5 */ int aN; int i,j,t; for(i=0;iN;i+) scanf(%d, ,#define N 10 main( )/*習(xí)題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()/*習(xí)題7.8找鞍點,用宏定義指定M,N的值*/ int i,j,k,aMN,a,maxj; 輸入數(shù)組a的數(shù)據(jù)。 for(i=0;iaimaxj) maxj=j;/*循環(huán)結(jié)束后,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()/*習(xí)題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() /*習(xí)題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()/*習(xí)題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, ,講解習(xí)題8-1,#include stdio.h” #include math.h“/*講解習(xí)題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” /*講解習(xí)題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“/*講解習(xí)題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“ /*習(xí)題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)/*習(xí)題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“/*習(xí)題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“/*講解習(xí)題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, ,習(xí)題9.1 #define exchange(x,y)t=x,x=y,y=t main() int a,b,t; scanf(“%d%d”, ,/*P199 9.2 習(xí)題*/ #define Mod(a,b) (a)%(b) main( ) int x,y,t; printf(Input two integers: ); scanf(%d %d, ,p,begin,/* 10.3 */ /* 要求用 3 個函數(shù),一個輸入,一個處理,一個輸出 */ #define N 10 /*-*/ void input(int *p )

35、 int *begin ; printf(n Enter 10 numbers: ); for(begin=p;pbegin+N;p+) scanf(%d,p); ,/*-*/ /* 將最大的一個與最后一個互換,將最小的一個與第一個數(shù)互換*/ void process(int *p)/*此算法有錯,如下圖的數(shù)據(jù),則結(jié)果錯*/ int *max,*min,*begin,t; max=min=p; /* 開始時,將最大和最小指針指向第一數(shù) */ for(begin=p;p*max) max=p; if(*p*min) min=p; /* 交換操作:最大數(shù) */ t=*(begin+N-1); *(

36、begin+N-1)=*max; *max=t; /* 交換操作:最小數(shù) */ t=*begin; *begin=*min; *min=t; ,max,min,void process(int *p) /*修改后*/ int *max,*min,*begin,t; begin=p; max=min=p; /* 開始時,將最大和最小指針指向第一數(shù) */ for(;p*max) max=p; /* 交換操作:最大數(shù) */ t=*(begin+N-1); *(begin+N-1)=*max; *max=t; for(p=begin;pbegin+N;p+) if(*p*min) min=p; /*

37、交換操作:最小數(shù) */ 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);/*從倒數(shù)第二個數(shù)開始各數(shù)右移一位*/ *a=t;/*將t存入第一個位置*/ ,/*-10.4的主函數(shù)-*/ 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記報數(shù),m記在位人數(shù)*/ for(i=0;i1) if(*(p+i)=1) k+;/*報數(shù)*/ 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 ,/*習(xí)題10.8的主函數(shù)*/ 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,習(xí)題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個學(xué)生數(shù)*/ #define M 3 /*各修M門課程*/ typedef struct /*學(xué)生結(jié)構(gòu)*/ int no; char name20; int scoreM; int ave; STUD; /*-*/ void input(STUD *s)/*從鍵盤上輸入N個學(xué)生的信息*/ int i,j,temp; /*計算各學(xué)生的平均成績*/ 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個學(xué)生的總平均成績*/ int i,sum=0; for(i=0;iave; printf(tTotal average is :%dn,sum/N); ,/*-*/ void printMax(STUD *s)/*輸出N個學(xué)生中平均分最高的學(xué)生信息*/ 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個學(xué)生的信息*/ printAver(stu); /*輸出N個學(xué)生的總平均成績*/ printMax(stu); /*輸出N個學(xué)生中平均分最高的學(xué)生信息*/ ,11.8 #include stdio.h #define LEN sizeof(struct student) typedef struct student int no; int score; struct student *next; STUD;,/*輸出head指針所指的鏈表(帶頭結(jié)點)*/ 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);/* 申請一個頭節(jié)點 */ last-next=NULL; while(new=(STUD *)malloc(LEN)!=NULL) /* 申請一個數(shù)據(jù)節(jié)點 */ printf(“nEnter No /* 返回鏈表的表頭 */ ,vo

48、id insert(STUD *head,STUD *pt) /*將pt節(jié)點按學(xué)號從小到大插入到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 將單鏈表倒置 將帶表頭結(jié)點的單鏈表倒置(先看下頁的算法思想) STUD *reverse(STUD *head) STUD *movenode,*remains; remains=head-nex

50、t;/*remains指向剩余部分*/ head-next=NULL;/*此時head指向的鏈表只有一個表頭結(jié)點*/ while(remains!=NULL)/*若鏈表未處理完*/ movenode=remains;/*movenode指向卸下的結(jié)點*/ remains=remains-next;/*remains指向剩余部分*/ movenode-next=head-next; /*movenode的下一個結(jié)點應(yīng)是原第一個結(jié)點*/ head-next=movenode;/*movenode作為新的第一個結(jié)點*/ return head; ,head,head,remains,head,rem

51、ains,head,remains,movenode,movenode,將不帶表頭結(jié)點的單鏈表倒置(先看下頁的算法思想) STUD *reverse(STUD *head) STUD *movenode,*remains; remains=head;/*remains指向剩余部分*/ head=NULL;/*此時head指向的鏈表為空*/ while(remains!=NULL)/*若鏈表未處理完*/ movenode=remains;/*movenode指向卸下的結(jié)點*/ remains=remains-next;/*remains指向剩余部分*/ movenode-next=head; /

52、*movenode的下一個結(jié)點應(yīng)是原第一個結(jié)點*/ head=movenode;/*movenode作為新的第一個結(jié)點*/ 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中的字符裝入內(nèi)存*/ 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(); ,獲得“獲得知識的能力”比獲得知識更重要。,學(xué)習(xí)方法之一:,舉一反三,觸類旁通,思考題: A,B為兩個文本文件,各存放若干整數(shù),試將A,B中的字母 按字從小到大順序合并后輸出到新文件C中。 注:空格為整數(shù)的分隔符,#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中的整數(shù)裝入內(nèi)存*/ while(f

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論