譚浩強(qiáng)C程序設(shè)計(jì)第三版習(xí)題參考解答全_第1頁
譚浩強(qiáng)C程序設(shè)計(jì)第三版習(xí)題參考解答全_第2頁
譚浩強(qiáng)C程序設(shè)計(jì)第三版習(xí)題參考解答全_第3頁
譚浩強(qiáng)C程序設(shè)計(jì)第三版習(xí)題參考解答全_第4頁
譚浩強(qiáng)C程序設(shè)計(jì)第三版習(xí)題參考解答全_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第10章 指針10.1輸入3個(gè)整數(shù),按由小到大的順序輸出。解:main ( )int n1,n2,n3; int * p1,* p2,* p3; printf(“Input three integers n1,n2,n3:”); scanf(“%d,%d,%d”,&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; if (n1>n2) swap (p1,p2);if (n1>n3) swap (p1,p3);if (n1>n3) swap (p2,p3);printf(“Now,the order is:

2、%d,%d,%dn”,n1,n2,n3);swap (int * p1,int * p2)int p; p=* p1;* p1= * p2;* p2=p;運(yùn)行結(jié)果Input three integers n1,n2,n3:34,21,25Now,the order is:21,25,3410.2輸入3個(gè)字符串,按由小到打的順序輸出。解:main ( )char * str120,* str220,* str320; char swap( ); printf(“Input three linesn”); gets(str1); gets(str2); gets(str3); if(strcmp(

3、str1,str2)>0)swap(str1,str2); if(strcmp(str1,str3)>0)swap(str1,str3); if(strcmp(str2,str3)>0)swap(str2,str3); pritnf(“Now,the order is:n”); printf(“%sn%sn%sn”,str1,str2,str3);char swap(char * p1,char * p2) /* 交換兩個(gè)字符串 */char * p20; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);運(yùn)行結(jié)果:Input three lin

4、es:I study very hard.C language is very interesting.He is a professor.Now,the order is:C language is very interesting.He is a professor.I study very hard.10.3輸入10個(gè)整數(shù),將其中最小的數(shù)與第一個(gè)數(shù)對換,把最大的一個(gè)數(shù)與最后一個(gè)對換。寫3個(gè)函數(shù):(1)輸入10個(gè)數(shù);(2)進(jìn)行處理;(3)輸出10個(gè)數(shù)。解:main ( )int number10; input(number); /* 調(diào)用輸入10個(gè)數(shù)的函數(shù) */ max_min_value

5、(number); /* 調(diào)用交換函數(shù) */ output(number); /* 調(diào)用輸出函數(shù) */input(int number10) /* 輸入10個(gè)數(shù)的函數(shù) */int i; print(“Input 10 number:”); for (i=0;i<10;i+)scanf(“%d”,&numberi);max_min_value(int array10) /* 交換函數(shù) */int * max,* min, * p, * array_end; array_end=array+10; max=min=array; for (p=array+1;p<array_en

6、d;p+)if (* p> * max) max=p; /* 將大數(shù)地址賦給max */else if (* p<* min) min=p; /* 將小數(shù)地址賦給min */ * p=array0;array0=* min;min=* p; /*將最小數(shù)與第一個(gè)數(shù)交換*/ * p=array9;array9=* max;max=* p; /*將最大數(shù)與第最后一個(gè)數(shù)交換*/ return;output(int array10) /* 輸出函數(shù) */int * p; printf(“Now,they are:”); for (p=array;p<=array+9;p+)print

7、f(“%d”,* p);運(yùn)行結(jié)果:Input 10 numbers: 32 24 56 78 1 98 36 44 29 6Now ,they are: 1 24 56 78 32 6 36 44 29 9810.4有n個(gè)整數(shù),使其前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成前面m個(gè)數(shù)。寫一函數(shù)實(shí)現(xiàn)以上功能,在主函數(shù)中輸入n個(gè)整數(shù),并輸出調(diào)整后的n個(gè)數(shù)。解:main ( )int number20,n,m,I; /* 共有多少個(gè)數(shù) */ printf(“How many numbers?”); scanf(“%d”,&n); printf(“Input %d numbers:n”,n);

8、 /* 輸入n個(gè)數(shù) */ for (i=0;i<n;i+)scanf(“%d”,&numberi); printf(“How many place you want to move?”); /* 后移多少個(gè)位置 */ scanf(“%d”,&m); /* 調(diào)用move函數(shù) */ move(number,n,m); printf(“Now,they are:n”);for (i=0;i<n;i+) printf(“%d”,numberi);move(int array20,int n,int m) /* 循環(huán)后移一次的函數(shù) */int * p,array_end; a

9、rray_end=* (array+n-1); for (p=array+n-1;p>array;p-)* p = * (p-1); * array=array_end; m-; if (m>0) move(array,n,m); /* 遞歸調(diào)用,當(dāng)循環(huán)次數(shù)m減至0時(shí),停止調(diào)用 */運(yùn)行結(jié)果:How many number? 8Input 8 numbers:12 43 65 67 8 2 7 11How many place you want to move? 4Now,they are:4 2 7 1 1 1 2 4 3 6 5 6 710.5有一字符串,包含n個(gè)字符。寫一個(gè)函

10、數(shù),將此字符串中從第m個(gè)字符開始的全部字符復(fù)制成為另一個(gè)字符串。解:main ( )int m; char * str120, * str220; printf(“input string:”); gets(str1); printf(“Which character that begin to copy?”); scanf(“%d”,&m); if (strlen(str1)<m) printf(“input error!”); else copystr(str1,str2,m);printf(“result:%s”,str2); copystr(char * p1,char

11、* p2,int m) /* 字符串部分復(fù)制函數(shù) */int n; n=0; while (n<m-1) n+;p1+;while (* p1!=0) * p2= * p1;p1+;p2+; * p2=0;運(yùn)行結(jié)果:Input string:reading-roomWhich character that begin to copy? 9Result:room10.6輸入一行文字,找出其中大寫字母,小寫字母,空格,數(shù)字及其他字符各有多少。解:# include <stdio.h>main ( )int upper=0,lower=0,digit=0,space=0,other

12、=0,i=0; char * p,s20; printf(“Input string:”); while (si=getchar( )!=n) i+; p=&s0; while (* p!=n)if (A<=* p) && (* p<=Z) +upper;else if (a<=* p) && (* p<=z) +lower;else if (* p= ) +space;else if (* p<=9) && (* p>=0) +digit;else +other;p+; printf(“upper c

13、ase:%d lower case:%d”,upper,lower); printf(“space:%d digit:%d other:%dn”,space,digit,other);運(yùn)行結(jié)果:Input string:Today is 2000/1/1upper case:1 lower case:6 space: 2 digit: 6 other:210.7寫一個(gè)函數(shù),將一個(gè)3×3的矩陣轉(zhuǎn)置。解:main ( )int a33,* p,i; printf(“Input matrix:n”) for (i=0;i<3;i+) scanf(“%d,%d,%d

14、”,&ai0,&ai1,&ai2); p=&a00; move(p); printf(“Now,matrix:n”); for (i=0;i<3;i+) printf(“%d %d %dn”,ai0,&ai1,&ai2); move(int * pointer)int i,j,t; for (i=0;i<3;i+) for (j=i;j<3;j+)t= * (pointer+3*i+j); * (pointer +3*i+j)= * (pointer + 3*j +i); * (pointer +3*j+i)=t; 運(yùn)行結(jié)果:I

15、nput matrix:1 2 34 5 67 8 9Now,matrix:1 4 72 5 83 6 99.8將一個(gè)5×5的矩陣中最大的元素放在中心,4個(gè)角分別放在4個(gè)最小的元素(按從左到右,從上到下的順序,依次從小到大存放),寫一個(gè)函數(shù)實(shí)現(xiàn)之,并用main函數(shù)調(diào)用。解:main ( )int a55,* p,i,j; printf(“Input matrix:n”); for (i=0;i<5;i+) /* 輸入矩陣 */for (j=0;j<5;j+) scanf(“%d”,&aij); p=&a00; /* 使p指向0行0列元素 */ change

16、(p); /* 調(diào)用函數(shù),實(shí)現(xiàn)交換 */ printf(“Now ,matrix:n”) for (i=0;i<5;i+) /* 輸出已交換的矩陣 */for (j=0;j<5;j+) printf(“%d”,aij); printf(“n”);change(int * p) /* 交換函數(shù) */int i,j,temp; int * pmax, * pmin; pmax=p; pmin=p; for (i=0;i<5;i+) /* 找最大值和最小值的地址,并賦給pmax,pmin */ for(j=i;j<5;j+)if (* pmax< * (p+5*i+j)

17、 pmax=p+5*i+j; if (* pmin< * (p+5*i+j) pmin=p+5*i+j; temp= * (p+12); /* 將最大值換給中心元素 */ * (p+12)=* pmax; * pmax=temp; temp= * p; /* 將最小值換給左上角元素 */ * p= * pmin; * pmin=temp; pmin=p+1; for (i=0;i<5;i+) /* 找第二最小值的地址賦給pmin */for (j=0;j<5;j+) if (p+5*i+j)!=p) && (* pmin > *(p+5 * i+j) p

18、min =p+5 * i +j; temp= * pmin; /* 將第二最小值換給右上角元素 */ * pmin=* (p+4); * (p+4)=temp; pmin=p+1; for (i=0;i<5;i+) /* 找第三最小值的地址賦給pmin */ for (j=0;j<5;j+)if (p+5*i+j)!=(p+4) && (p+5*i+j)!=p) && (* pmin>* (p+5*i+j) pmin=p+5*i+j; temp=* pmin; /* 將第三最小值換給左下角元素 */ * pmin=* (p+20); * (p+

19、20)=temp; pmin=p+1; for (i=0;i<5;i+) /* 找第四最小值的地址賦給pmin */for (j=0;j>5;j+) if (p+5*i+j)!=p) && (p+5*i+j)!=(p+4) && (p+5*i+j)!=(p+20) && (* pmin>* (p+5*i+j) pmin=p+5*i+j; temp=* pmin; /* 將第四最小值換給右下角元素 */ * pmin=* (p+24); * (p+24)= temp;運(yùn)行結(jié)果:Input matrix:35 34 33 32 31

20、30 29 28 27 2625 24 23 22 2115 14 13 12 11Now,matrix:11 34 33 32 1230 29 28 27 2625 24 35 22 2120 19 18 17 1613 23 15 31 1410.9在主函數(shù)中輸入10個(gè)等長的字符串。用另一個(gè)函數(shù)對它們排序,然后在主函數(shù)輸出這10個(gè)已排好序的字符串。解:# include <string.h>main ( )void sort(char s ); int i; char str106; printf(“Input 10 strings:n”); for (i=0;i<10;

21、i+) scanf(“%s”,stri); sort(str); printf(“Now,the sequence is:n”); for (i=0;i<10;i+) printf(“%sn”,stri);void sort(char s106)int i,j; char * p,temp10; p=temp; for (i=0;i<9;i+) for (j=0;j<9-i;j+)if(strcmp(sj,sj+1)>0) strcpy(p,sj); strcpy(sj,s+j+1); strcpy(sj+1,p); 運(yùn)行結(jié)果:Input 10 strings:Chin

22、aJapanKoreaEgyptNepalBurmaGhanaSudanItalyLibyaNow,the sequence is:BurmaChinaEgyptGhanaItalyJapanKoreaLibyaNepalSudan10.10用指針數(shù)組處理上一題目,字符串不等長。解:main ( )int i; char * p10,str1020; for (i=0;i<10;i+)pi=stri; /* 將第i個(gè)字符串的首地址賦予數(shù)組p的第i個(gè)元素 */ printf(“Input 10 strings:n”); for (i=0;i<10;i+)scanf(“%s”,pi);

23、 sotr(p); printf(“Now,the sequence is:n”); for (i=0;i<10;i+)printf(“%sn”,pi);sotr(char * p )int i,j; char * temp; for (i=0;i<9;i+) for (j=0;j<9-i;j+) if (strcmp(* (p+j),* (p+j+1)>0) temp= * (p+j); * (p+j)= * (p+j+1); * (p+j+1)=temp; 運(yùn)行情況如下:ChinaJapanYemanPakistanMexicoKoreaBrazilIcelandC

24、anadaMongoliaNow, the sequence is:BrazilCanadaChinaIcelandJapanKoreaMexicoMongoliaPakistanYemen10.11將n個(gè)數(shù)按輸入輸出順序的逆序排列,用函數(shù)實(shí)現(xiàn)。解:main ( )int i,n; char * p,num20; printf(“input n:”); scanf(“%d”,&n); printf(“please input these numbers:n”); for (i=0;i<n;i+) scanf(“%d”,&numi); p=&num0; sort(p

25、,n); printf(“Now,the sequence is:n”); for (i=0;i<n;i+)printf(“%d”,numi);sort(char p,int m) /* 將n個(gè)數(shù)逆序排列函數(shù) */int i; char temp, * p1,* p2; for (i=0;i<m/2;i+)p1=p+i; p2=p+(m-1-i); temp=* p1; * p1=* p2; * p2=temp; 運(yùn)行結(jié)果:input n: 10please input these numbers:10 9 8 7 6 5 4 3 2 1Now,the sequence is:1

26、2 3 4 5 6 7 8 9 10 10.12有一個(gè)班4個(gè)學(xué)生,5門課。(1)求第一門課的平均分;(2)找出有兩門以上課程不及格的學(xué)生,輸出他們的學(xué)號和全部課程成績及平均成績;(3)找出平均成績在90分以上或全部課程成績在85分以上的學(xué)生。分別編3個(gè)函數(shù)實(shí)現(xiàn)上3個(gè)要求。解:main ( ) int i,j,* pnum,num4; float score45,aver4,* psco,* pave; char course510,* pcou; printf(“Input course:n”); pcou=course0; for (i=0;i<5;i+)scanf(“%s”,cour

27、sei); printf(“Input NO. and scores:n”); printf(“NO.”); for (i=0;i<5;i+)printf(“,%s”,coursei); printf(“n”); psco=&score00; pnum=&num0; for (i=0;i<4;i+)scanf (“%d”,pnum+i); for (j=0;j<5;j+) scanf(“,%f”,psco+5*i+j); pave=&aver0; printf(“nn”); avsco(psco,pave); /* 求出每個(gè)學(xué)生的平均成績 */ avc

28、ourl(pcou,psco); /* 求出第一門課的平均成績 */ printf(“nn”); fali2(pcou,pnum,psco,pave); /* 找出2門課不及格的學(xué)生 */ printf(“nn”); good(pcou,pnum,psco,pave); /* 找出成績好的學(xué)生 */avsco(float * psco,float * pave); /* 求每個(gè)學(xué)生的平均成績的函數(shù) */int I,j; float sum,average; for (i=0;i<4;i+)sum=0.0; for (j=0;j<5;j+) sum=sum+(* (psco+5*i+

29、j); /* 累計(jì)每個(gè)學(xué)生的各科成績 */ average=sum/5; /* 計(jì)算平均成績 */ * (pave+i)=average; avcourl(char * pcou,float * psco) /* 求第一門課的平均成績的函數(shù) */int i; float sum,average1; sum=0.0; for (i=0;i<4;i+)sum=sum+(* (psco+5*i); /* 累計(jì)每個(gè)學(xué)生的得分 */ average1=sum/4; /* 計(jì)算平均成績 */ printf(“course1: %s,average score: %6.2f. n”,pcou,aver

30、age1);fail2(char course510,int num ,float score45,float aver4)/* 找兩門以上課程不及格的學(xué)生的函數(shù) */int I,j,k,labe1; printf(“=Student who is fail=n”); printf(“NO.”); for (i=0;i<5;i+)printf(“%10s”,coursei); printf(“averagen”); for (i=0;i<>4;i+)label=0; for (j=0;j<5;j+) if (scoreij<60.0) label+; if (la

31、bel>=2) pintf(“%5d”,numi); for (k=0,k<5,k+) printf(“%10.2f”,scoreik); printf(“%10.2fn”,averi); good(char course510,int num4,float score45,float aver4)/* 找成績優(yōu)秀的學(xué)生(各門85分以上或平均90分以上)的函數(shù) */int i,j,k,n; printf(“=Student whose score is good=n”); printf(“NO.”); for (i=0;i<5;i+)printf(“%10s”,coursei

32、); printf(“averagen”); for (i=0;i<4;i+)n=0; for (j=0;j<5;j+) if (scoreij)>85.0) n+; if (n=5) | (averi>=90) printf(“%5d”,numi); for (k=0;k<5;k+) printf(“%10.2f”,scoreik); printf(“%10.2fn”,averi); 運(yùn)行情況如下:Input course: (輸入課程名稱)EnglishComputerMathPhysicsChemistryInput NO. and scores: (輸入學(xué)

33、號和各門課成績)NO.,English,Computer,Math,Physics,Chemistry,average (按此順序輸入)101,34,56,88,99,89102,77,88,99,67,78103,99,90,87,86,89104,78,89,99,56,77course 1:English ,average score : 72.00 (第一門課英語的平均成績)=Student who is fail= (有兩門課不及格者)NO. English Computer Math Physics Chemistry average101 34.00 56.00 88.00 99

34、.00 89.00 73.20=Student whose score is good= (成績優(yōu)良者)NO. English Computer Math Physics Chemistry average103 99.00 90.00 87.00 86.00 89.00 90.20程序中num是存放4各學(xué)生學(xué)號的一維數(shù)組,course是存放5門課名稱的二維字符數(shù)組,score是存放4個(gè)學(xué)生5門課成績的二維數(shù)組,aver是存放每個(gè)學(xué)生平均成績的數(shù)組,pnum是指向num數(shù)組的指針變量,pcou是指向course數(shù)組的指針變量,psco是指向score數(shù)組的指針變量,psco是指向score數(shù)組

35、的指針變量,pave是指向aver數(shù)組的指針變量。函數(shù)的形參用數(shù)組,調(diào)用函數(shù)時(shí)的實(shí)參用指針變量。形參也可以不用數(shù)組而用指針變量,請自己分析。10.13輸入一個(gè)字符串,內(nèi)有數(shù)字和非數(shù)字字符,如: a123x456 17960? 302tab5876將其中連續(xù)的數(shù)字作為一個(gè)整數(shù),依次存放到一數(shù)組a中。例如123放在a0中,456放在a1中統(tǒng)計(jì)共有多少個(gè)整數(shù),并輸出這些數(shù)。解:# include <stdio.h>main ( ) char str50, * pstr; int I,j,k,m,e10,digit,ndigit,a10, * pa; printf(“Input a str

36、ing:n”); gets(str); printf(“n”); pstr=&str0; /* 字符指針pstr置于數(shù)組str首地址 */ pa=&a0; /* 指針pa置于a數(shù)組首地址 */ ndigit=0; /* ndigit代表有多少個(gè)整數(shù) */ i=0; /* 代表字符串中第n個(gè)字符 */ j=0; /* 代表連續(xù)數(shù)字的位數(shù) */ while (* (pstr+i)!=0) if(* (pstr+i)>=0) && (* (pstr+i)<=9) j+;else if (j>0) digit=* (pstr+i-1)-48; /* 將

37、個(gè)位數(shù)賦予digit */ k=1; while (k<j) /* 將含有兩位以上的其他位的數(shù)值累計(jì)于digit */ e10=1; for (m=1;m<=k;m+) e10=e10*10; /* e10代表該位數(shù)所應(yīng)乘的因子 */ digit=digit+(*(pstr+i-1-k)-48)*e10; /* 將該位數(shù)的數(shù)值累加于digit */ k+; /* 位數(shù)k自增 */ * pa=digit; /* 將數(shù)值賦予數(shù)組a */ ndigit+; pa+; /* 指針pa指向a數(shù)組下一元素 */ j=0; i+;if (j>0) /* 以數(shù)字結(jié)尾字符串的最后一個(gè)數(shù)據(jù) */

38、 digit=* (pstr+i-1)-48; /* 將個(gè)位數(shù)賦予digit */ k=1;while(k<j) /* 將含有兩位以上數(shù)的其他位的數(shù)值累加于digit */e10=1;for (m=1;m<=k;m+) e10=e10*10; /* e10代表位數(shù)所應(yīng)乘的因子 */ digit=digit+(*(pstr+i-1-k)-48)*e10; /* 將該位數(shù)的數(shù)值累加于digit */ k+; /* 位數(shù)k自增 */* pa=digit; /* 將數(shù)值賦予數(shù)組a */ndigit+;j=0;printf(“There are %d numbers in this line

39、.They are:n”,ndigit);j=0;pa=&a0;for(j=0;j<ndigit;j+) /* 打印數(shù)據(jù) */printf(“%d”,* (pa+j);printf(“n”);運(yùn)行情況如下:Input a string:a123x456 17960? 302tab5876There are 6 numbers in this line. They are:123 456 17960 302 587610.14寫一函數(shù),實(shí)現(xiàn)兩個(gè)字符串的比較。即自己寫一個(gè)strcmp函數(shù),函數(shù)原型為:int strcmp(char * p1,char * p2)設(shè)p1指向字符串s1,

40、p2指向字符串s2。要求:當(dāng)s1=s2時(shí),返回值為0。當(dāng)s1s2時(shí),返回它們兩者的第一個(gè)不同字符的ASCII碼差值(如”BOY”與”BAD”,第二個(gè)字母不同,”O(jiān)”與”A”之差為796514);如果s1>s2,則輸出正值;如果s1<s2,則輸出負(fù)值。解:main ( )int m; char str120,str220,* p1,* p2; printf(“Input two strings:n”); scanf(“%s”,str1); scanf(“%s”,str2); p1=&str10; p2=&str20; m=strcmp(p1,p2); printf(“

41、result:%d,n”,m);strcmp(char * p1,char * p2) /* 兩個(gè)字符串比較的函數(shù) */int i; i=0; while (* (p1+i)=* (p2+i)if (* (p1+i+)=0) return(0); /* 相等時(shí)返回結(jié)果0 */ return (* (p1+i)-* (p2+i); /* 不等時(shí)返回結(jié)果為第一個(gè)不等字符ASCII碼的差值 */運(yùn)行情況如下:Input two strings: CHINA Chen Result:-32Input two strings: hello! hello! result:0Input two string

42、s: dog cat result:110.15編寫一個(gè)程序,打入月份號,輸出該月的英文月名。例如,輸入”3”,則輸出”March”,要求用指針數(shù)組處理。解:main ( )char * month_name13=“illegal month”,”January”,February”,”March”,”April”,”May”,”June”,”July”,”August”,”September”,”O(jiān)ctober”,”November”,”December”; int n; printf(“Input month:n”); scanf(“%d”,&n); if (n<=12) &

43、amp;& (n>=1) printf(“It is %s.”,* (month_name+n); else printf(“It is wrong.”);運(yùn)行結(jié)果:Input month:2 It is February.Input month:8 It is August.Input month:13 It is wrong.10.16用指向指針的指針的方法對5個(gè)字符串排序并輸出。解:# define LINEMAX 20 /* 定義字符串的最大長度 */main ( )int i; char * p, * pstr5,str5LINEMAX; for (I=0;I<5

44、;I+)pstri=stri; /* 將第i個(gè)字符串的首地址賦予指針數(shù)組pstr的第i個(gè)元素 */ printf(“Input 5 strings:n”); for (i=0;i<5;i+)scanf(“%s”,pstri); p=pstr; printf(“strings sorted:n”); for (i=0;i<5;i+)printf(“%sn”,pstri);sort(char * p) /* 冒泡法對5個(gè)字符串排序的函數(shù) */int i,j; char * temp; for (i=0;i<5;i+)for (j=i+1;j<5;j+) if (strcmp

45、(* (p+i),* (p+j)>0) /* 比較后交換字符串地址 */ temp=* (p+i); * (p+i)=* (p+j); * (p+j)=temp; 運(yùn)行情況如下:Input 5 strings:ChinaAmericaIndiaPhilippinesCanadaStrings sorted:AmericaCanadaChinaIndiaPhilippines10.17用指向指針的指針的方法對n個(gè)整數(shù)排序并輸出。要求將排序單獨(dú)寫成一個(gè)函數(shù)。n和正整數(shù)在主函數(shù)中輸入。最后在主函數(shù)中輸出。解:main ( )void sort(int * * p,int n); int i,n

46、,data10,* * p,* pstr10; printf(“Input n:”); scanf(“%d”,&n); for (i=0;i<n;i+)pstri=&datai; /* 將第i個(gè)整數(shù)的地址賦予指針數(shù)組pstr的第i個(gè)元素 */ printf(“Input %d integer numbers:n”,n); for (i=0;i<n;i+)scanf(“%d”,pstri); p=pstr; sort(p,n); printf(“Now,the sequence is:n”); for (i=0;i<n;i+)printf(“%d”,* pstr

47、i); printf(“n”);void sort (int * * p,int n) /* 排序函數(shù) */int i,j,* temp; for (i=0;i<n-1;i+)for (j=i+1;j<n;j+) if (* * (p+i)>* * (p+j) /* 比較后交換整數(shù)的地址 */ temp=* (p+i); * (p+i)=* (p+j); * (p+j)=temp; 運(yùn)行情況如下:Input n:7Input 7 integer numbers:34 98 56 12 22 65 1Now,the sequence is:1 12 22 34 56 65 98

48、data數(shù)組用來存放n 個(gè)整數(shù);pstr是指針數(shù)組,每一個(gè)元素指向data數(shù)組中的一個(gè)元素;p是指向指針的指針。第11章 結(jié)構(gòu)體與共用體11.1定義一個(gè)結(jié)構(gòu)體變量(包括年,月,日)。計(jì)算該日在本年中是第幾天,注意閏年問題。解:解法一:結(jié)構(gòu)體變量date中的成員對應(yīng)于輸入的年,月,日。days為天數(shù)。structint year; int month; int day;date;main ( )int days; printf(“Input year,month,day:”); scanf(“%d,%d,%d”,&date,year,&date,month,&date,day); switch(date,month) case 1:days=date.day; break; case 2:days=date.day+31; break; case 3:days=date.day+59; break; case 4:days=dat

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論