程序設(shè)計(jì)基礎(chǔ)——C語(yǔ)言課后習(xí)題參考答案完整版_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)——C語(yǔ)言課后習(xí)題參考答案完整版_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)——C語(yǔ)言課后習(xí)題參考答案完整版_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)——C語(yǔ)言課后習(xí)題參考答案完整版_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)——C語(yǔ)言課后習(xí)題參考答案完整版_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課后習(xí)題1答案一、選擇題1、A 2、D 3、C二、編程題1. #include int main()printf(*n);printf(* Hello World! *n);printf(*n);return 0;2. #include int main()printf( *n);printf( *n);printf( *n);printf(*n);return 0;課后習(xí)題2答案一、選擇題1-5、 DDBAB6-10、 DDABA11-15、CAABA16、 B二、填空題1、54,146,2552、字母,數(shù)字,下劃線3、(換行字符)換行,(退格字符)移動(dòng)到當(dāng)前行的前一個(gè)位置,(反斜杠字符)產(chǎn)

2、生反斜杠字符4、float,double,char5、(10101010)2,(00010000)26、(11111011)2,(373)8,(fb)167、0000000010011101, 0000000010011101,1000000010011001,1111111101100111課后習(xí)題3答案一、選擇題1-5、 CB DACD6-10、 CCBAC11-15、CADDB16-17、CD二、填空題1、-162、12,43、m/100,m/10%10,m%104、(注:表示空格)12#12#3.1415926000#3.1415926000#5、55,A,B三、編程題1. #defi

3、ne PI 3.14#include #include int main()float r,s,l;scanf(%f,&r); /*輸入圓的半徑*/s= PI*r*r; /*計(jì)算圓的面積*/l=2*PI*r; /*計(jì)算圓的周長(zhǎng)*/printf(r=%4.1f,s=%4.1f,l=%4.1fn,r,s,l);return 0;運(yùn)行結(jié)果:3r= 3.0,s=28.3,l=18.82 #include int main()float x,y,z,s,v;scanf(%f%f%f,&x,&y,&z); /*輸入長(zhǎng)方體的長(zhǎng)、寬和高*/s=2*(x*y+x*z+y*z); /*計(jì)算長(zhǎng)方體的表面積*/v=x

4、*y*z; /*計(jì)算長(zhǎng)方體的體積*/printf(Area=%.2f,Volume=%.2fn,s,v);return 0;運(yùn)行結(jié)果:3 4 5Area=94.00,Volume=60.003#include #include int main()float x1,y1,x2,y2,x3,y3,a,b,c,p,s;/*輸入3個(gè)頂點(diǎn)的坐標(biāo)*/scanf(%f%f%f%f%f%f,&x1,&y1,&x2,&y2,&x3,&y3);/*求第一條邊的長(zhǎng)度*/a=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);/*求第二條邊的長(zhǎng)度*/b=sqrt(x1-x3)*(x1-x3)+(

5、y1-y3)*(y1-y3);/*求第三條邊的長(zhǎng)度*/c=sqrt(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);p=(a+b+c)/2;/*求三角形的面積*/s=sqrt(p*(p-a)*(p-b)*(p-c);printf(Area=%fn,s);return 0;運(yùn)行結(jié)果:5 6 3 8 0 23Area=12.000013課后習(xí)題4答案一、選擇題1-5、 CCCCC 6-8、 DBB二、填空題1、02、y%2或y%2=13、(x0 & y0) | (x0 & z0 & y0 & z2 & x3 | xc & a+cb & b+ca = 2 * GB3 a=b & b=c

6、 = 3 * GB3 a=b | a=c | b=c9、0.60000010、 = 1 * GB3 x=0 = 2 * GB3 xamin11、 = 1 * GB3 4-i = 2 * GB3 2*i-112、#*#*#*13、a=16,y=60三、編程題1. #include int main()int a,b,num;scanf(%d,%d,&a,&b); if(a*a+b*b100)num=(a*a+b*b)/100;else num=a+b;printf(%d,num);return 0;運(yùn)行結(jié)果:(1)測(cè)試數(shù)據(jù)一:3 47(2)測(cè)試數(shù)據(jù)二:9 512. #include int ma

7、in()int x;float y;scanf(%d,&x);if(x=0)y=0;else if(x=10)y=x;else if(x=20)y=10;else if(x40)y=-0.5*x+20;printf(%fn,y);return 0;3. #includeint main()int score;char grade;scanf(%d,&score); /*輸入百分制成績(jī)*/switch(score/10)case 10: case 9: grade=A; break;case 8: grade=B; break;case 7: grade=C; break;case 6: gra

8、de=D; break;default: grade=E;printf(%cn,grade);return 0;運(yùn)行結(jié)果:96A4. #includeint main()int i;for(i=1;i=99;i+)if(i*i%10=i | i*i%100=i)printf(%dn,i);return 0;運(yùn)行結(jié)果:15625765. #includeint main()int n,i,j;printf(請(qǐng)輸入行數(shù):);scanf(%d,&n);/*外層循環(huán)控制輸出的行數(shù)*/for(i=1;i=n;i+)/*輸出每行的空格*/for(j=1;j=i-1;j+)printf( );/*輸出每行的

9、星號(hào)*/for(j=1;j=2*n+1-2*i;j+)printf(*);/*輸出換行符*/printf(n);return 0;6. #include #define EPS 1E-7int main()int n;double x,an,sum;printf(input x:);scanf(%lf,&x);sum=0;an=1;n=1;dosum+=an; an*=(-x*x)/(n+1)*(n+2);n+=2;while(fabs(an)=EPS);printf(sin(%.4lf)=%.4lfn,x,sum);return 0;課后習(xí)題5答案一、選擇題1-5、 DABDC6-8、 DC

10、B二、填空題1、 = 1 * GB3 j=2 = 2 * GB3 j=02、Search Successful!The index is:53、 = 1 * GB3 j+=2 = 2 * GB3 aiaj4、#&*&%三、編程題1.#include #define N 30int main()int arrayN,i,j,sum=0;float arrAver6;for(i=0;iN;i+)arrayi=2*(i+1);for(i=0;i6;i+)/*按順序求5個(gè)數(shù)的和*/for(j=0;j5;j+)sum+=array5*i+j;/*求5個(gè)數(shù)的平均值*/arrAveri=sum/5.0;fo

11、r(i=0;i6;i+)printf(%.2f ,arrAveri);printf(n);return 0;運(yùn)行結(jié)果:6.00 22.00 48.00 84.00 130.00 186.002.#include #define M 5#define N 4int main()int arrMN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0,0,0,0;int i,j;for(j=0;jN;j+)for(i=0;iM-1;i+)arrM-1j+=arrij;for(j=0;jN;j+)printf(%d ,arrM-1j);printf(n);return 0

12、;運(yùn)行結(jié)果:28 32 36 403.#include#define M 5#define N 4int main()int aMN;int i,j,maxj,count=0,flag;printf(請(qǐng)輸入%d*%d階矩陣A:n,M,N );for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,&aij); for(i=0;iM;i+)maxj=0;for(j=1;jN;j+)/*找到第i行中最大的那個(gè)元素的列下標(biāo)*/if(aimaxjaij)maxj=j;flag=1;/*定位第maxj列,看看aimaxj是否是該列中最小的那個(gè)元素 如果是不是,則flag為0;如果是,則

13、flag保持為1*/for(j=0;jM;j+)if(ajmaxjaimaxj)flag=0;if(flag=1)count+;printf(第%d個(gè)鞍點(diǎn):a%d%d=%dn,count,i,maxj,aimaxj);if(count=0)printf(沒(méi)有鞍點(diǎn)); return 0;4.#include#define N 40int main() int i,j=0,iMax,max,count;char strN;char insertStr5=(,m,a,x,);/待插入的多個(gè)字符“(max)”printf(輸入一個(gè)字符串:);gets(str);/*用假設(shè)法求字符串str中最大的元素m

14、ax和最大元素所在的下標(biāo)iMax*/count=strlen(str);/*字符串str中字符元素的個(gè)數(shù)*/max=str0; /*假設(shè)字符串的第一個(gè)字符最大*/iMax=0; /*字符串中最大字符的下標(biāo)置為0*/for(i=1;imax)max=stri;/*字符串中最大的字符存放到max中*/iMax=i; /*字符串中最大的字符的下標(biāo)存放到iMax中*/*字符串最大的字符后的字符依次往后移動(dòng)5個(gè)字符*/for(i=count-1;iiMax;i-)stri+5=stri;/*字符串最大的字符后插入字符串“(max)”*/for(i=iMax+1;i=iMax+5;i+)stri=inse

15、rtStrj;j+;/*新串的末尾加上0*/strcount+5=0;puts(str); return 0;運(yùn)行結(jié)果:MyFriendMy(max)Friend5.#include#define M 40#define N 20int main()char strAM,strBN,cntB,i=0,j=0;printf(請(qǐng)輸入字符串a(chǎn):);gets(strA);printf(請(qǐng)輸入字符串b:);gets(strB);cntB=strlen(strB);/*找到a串的末尾*/while(strAi!=0)i+;if(cntB5)/*將b串的所有字符都連接到a串末尾*/while(strBj!=

16、0)strAi+j=strBj;j+;else/*將b串的前5個(gè)字符連接到a串末尾*/while(j5)strAi+j=strBj;j+;/*新串的末尾加上串結(jié)束標(biāo)志0*/ strAi+j=0;puts(strA); return 0;運(yùn)行結(jié)果:(1)測(cè)試數(shù)據(jù)一:請(qǐng)輸入字符串a(chǎn):hubei請(qǐng)輸入字符串b:wuhanhubeiwuhan(2)測(cè)試數(shù)據(jù)二:請(qǐng)輸入字符串a(chǎn):shanxi請(qǐng)輸入字符串b:xianhubeiwuhan6.略7.#include #define N 6int main()/*學(xué)生的學(xué)號(hào)數(shù)組*/char numN9=99077101,99077102,99077103,990

17、77104,99077105,99077106,tmpNum9;/*學(xué)生的姓名數(shù)組*/char nameN8=張紅,王建,王連,李立,劉虹,丁平,tmpName8;/*學(xué)生的四門(mén)課程數(shù)組*/int scoreN4=85,90,92,88,90,95,95,90,76,78,80,70,56,36,66,97,78,79,87,89,89,79,70,87,tmpScore;int sumN,i,j,k;float averN,tmpAver; /*學(xué)生平均分?jǐn)?shù)組*/*求每個(gè)學(xué)生4門(mén)課程成績(jī)的總分sum和平均分ave*/for(i=0;iN;i+)sumi=0; /*每個(gè)學(xué)生4門(mén)課程成績(jī)總分置0

18、*/for(j=0;j4;j+)sumi+=scoreij;averi=(float)sumi/4;/*用冒泡排序法將學(xué)生信息按升序排序*/for(i=1;iN;i+)for(j=0;javerj+1)/*交換平均成績(jī)*/tmpAver=averj;averj=averj+1;averj+1=tmpAver;/*交換學(xué)號(hào)*/strcpy(tmpNum,numj);strcpy(numj,numj+1);strcpy(numj+1,tmpNum);/*交換姓名*/strcpy(tmpName,namej);strcpy(namej,namej+1);strcpy(namej+1,tmpName)

19、;/*交換成績(jī)*/for(k=0;k4;k+)tmpScore=scorejk;scorejk=scorej+1k;scorej+1k=tmpScore;/*按格式輸出學(xué)生所有信息*/printf( 學(xué)號(hào)t 姓名t 數(shù)學(xué)t 物理t 英語(yǔ)t計(jì)算機(jī)t平均成績(jī)n);for(i=0;iN;i+)printf(%st%st,numi,namei); /*輸出學(xué)號(hào)和姓名*/for(j=0;j4;j+)printf(%4dt,scoreij);/*輸出4科成績(jī)*/printf(%6.1fn,averi);/*輸出平均分*/return 0;課后習(xí)題6答案一、選擇題1-5、 DBADB6-10、 BABBB二

20、、填空題1、0 2 4 6 8 10 12 14 16 180 2 4 6 8 10 12 14 16 182、8,173、10104、7三、編程題1#include int F(int);int main()int a;printf(input a number:);scanf(%d,&a);if (F(a)=0)printf(不是水仙花數(shù)。n);elseprintf(是水仙花數(shù)。n);return 0;int F(int a)int b,c,d;b=a/100;/*百位*/c=a%100/10;/*十位*/d=a%10;/*個(gè)位*/if (a=b*b*b+c*c*c+d*d*d)retur

21、n 1;elsereturn 0;2#include#define N 30/*函數(shù)名:提取str數(shù)組中的數(shù)字字符,轉(zhuǎn)換成數(shù)字存放到num數(shù)組中 函數(shù)參數(shù):str為字符數(shù)組 num為整型數(shù)組返回值:num數(shù)組中數(shù)字的個(gè)數(shù)*/int fun(char str,int num)int i,f=0,n=0,j=0;for(i=0;stri!= 0;i+)/*遍歷整個(gè)數(shù)組str元素 */if(stri=0 & stri=9) /*為數(shù)字字符*/numj=stri- 0; /*將數(shù)字字符轉(zhuǎn)換為數(shù)字*/j+;return j; /*返回num數(shù)組中有多少個(gè)數(shù)字*/int main()char string

22、N;int numberN;int n,i;long sum=0;gets(string);n=fun(string,number);/*number數(shù)組中有n個(gè)數(shù)字元素*/*將number數(shù)組中的數(shù)字轉(zhuǎn)換成整數(shù)值,存放到sum變量中*/sum=number0;for(i=1;in;i+) sum=sum*10+numberi; printf(%ldn,sum);return 0;3(1)遞歸程序#include int half(int s,int a,int b,int key)int mid;if(a=b)if(key=sa)return (a);elsereturn (-1);else

23、mid=(a+b)/2;if(keysmid)return(half(s,mid+1,b,key);if(key=smid)return (mid); (2)非遞歸程序#include int half(int s,int a,int b,int key)int left=0;int right=n-1;int middle;while(leftsmiddle)left=middle+1;elseright=middle-1;return -1;課后習(xí)題7答案一、選擇題1-5、 CBDCD6-10、 CBACA11-12、DC二、填空題1、302、12,10,10,123、*(p+5)4、*p

24、p-str5、46、98768767、*(p+4*i+j)8、pij 或 *(*(p+i)+j) 或 (*(p+i)j9、 = 1 * GB3 p = 2 * GB3 qmax = 4 * GB3 *qmin三、程序設(shè)計(jì)題1.方法一:#include #include /*函數(shù)功能:將字符串str2逆序后放入字符串str1中 函數(shù)參數(shù):字符串指針str1 字符串指針str2 函數(shù)返回值:void*/void strreverse(char *str1,char *str2)char *p1,*p2;int len2;/*獲取str2所指向的字符串的長(zhǎng)度*/len2=strlen(str2);p

25、1=str1;p2=str2+len2-1;/*將str2所指向的字符串其逆序放入str1中*/while(p2=str2)*p1=*p2;p1+;p2-;/*str1所指向的字符串的末尾增加串結(jié)束標(biāo)志*/*p1=0;int main()char str120;char str220;scanf(%s,str2);strreverse(str1,str2);printf(逆序后的字符串為:%sn,str1);return 0;方法二:#include #include /*函數(shù)功能:將字符串str2逆序后放入字符串str1中 函數(shù)參數(shù):字符串指針str1 字符串指針str2 函數(shù)返回值:voi

26、d*/void strreverse(char *str1,char *str2)int len2,i;char tmp;/*獲取str2所指向的字符串的長(zhǎng)度*/len2=strlen(str2);/*將str2所指向的數(shù)組元素全部逆序*/for(i=0;ilen2/2;i+)tmp=*(str2+i);*(str2+i)=*(str2+len2-1-i);*(str2+len2-1-i)=tmp;/*將str2所指向的數(shù)組中的元素依次拷貝到str1所指向的數(shù)組中*/for(i=0;ilen2;i+)*str1+=*str2+;/*str1所指向的數(shù)組的末尾加0*/*str1=0;int ma

27、in()char str120;char str220;scanf(%s,str2);strreverse(str1,str2);printf(逆序后的字符串為:%sn,str1);return 0;運(yùn)行結(jié)果:abcdefg逆序后的字符串為:gfedcba2.方法一:#include #include /*函數(shù)功能:將書(shū)名按照由大到小的順序排序 函數(shù)參數(shù):書(shū)名的二維數(shù)組bookName 書(shū)的本數(shù)n 函數(shù)返回值:void*/void sort(char bookName8,int n)char tempName8; int i,j; for(i=1;i=n-1;i+) /*冒泡法排序*/for(

28、j=1;j0)strcpy(tempName,bookNamej-1);strcpy(bookNamej-1,bookNamej);strcpy(bookNamej,tempName);/*函數(shù)功能:輸出各字符串 函數(shù)參數(shù):書(shū)名的二維數(shù)組bookName 書(shū)的本書(shū)n 函數(shù)返回值:void*/void print(char bookName8,int n)int i; for(i=0;in;i+)printf(%sn,bookNamei);int main()char name8=Java,C,PHP,HTML,Pascal;int n=5;sort(name,n); /*對(duì)字符串排序*/pri

29、nt(name,n); /*輸出排序好的各字符串*/return 0;方法二:#include #include /*函數(shù)功能:將書(shū)名按照由大到小的順序排序 函數(shù)參數(shù):指針數(shù)組name 數(shù)組元素個(gè)數(shù)n 函數(shù)返回值:void*/void sort(char *name,int n)char* temp=NULL; int i,j; for(i=1;i=n-1;i+) /*冒泡法排序*/for(j=1;j0)temp=namej-1;namej-1=namej;namej=temp;/*函數(shù)功能:輸出各字符串 函數(shù)參數(shù):指針數(shù)組name 數(shù)組元素個(gè)數(shù)n 函數(shù)返回值:void*/void print

30、(char *name,int n)int i; for(i=0;iday2、ex3、 = 1 * GB3 2 = 2 * GB3 34、2002Shangxian5、 = 1 * GB3 char *data; = 2 * GB3 struct link *next;6、 = 1 * GB3 struct list *next; = 2 * GB3 int data;7、x.link=z;8、134319、 = 1 * GB3 (struct list *) malloc(sizeof(struct list); = 2 * GB3 (struct list *)malloc(sizeof(

31、struct list); = 3 * GB3 return(h); 或 return h;10、 = 1 * GB3 break; = 2 * GB3 pre-next=newp; = 3 * GB3 newp-next=suc;三、編程題1. 難度系數(shù):解題思路:用daytab數(shù)組存放非閏年和閏年各月份的天數(shù)。對(duì)于年year,判斷其是否為閏年的條件為: leap=(year%4=0&year%100!=0|year%400=0);用一個(gè)結(jié)構(gòu)體類型date的變量dt存放用戶輸入的日期。程序如下:#include/*數(shù)組daytab存放非閏年和閏年各月份的天數(shù)*/int daytab213=0

32、,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31;/*日期struct date結(jié)構(gòu)體*/struct date int year;int month;int day;dt;/*函數(shù)功能:求指定日期是該年的第幾天 函數(shù)參數(shù):年year 月month 日day 函數(shù)返回值:整數(shù)第幾天day*/int day_of_year(int year,int month,int day)int i,leap;/*是閏年leap=1,非閏年leap=0*/leap=(year%4=0&year%100!=0|

33、year%400=0);for(i=1;idaytableapi;i+)yearday-=daytableapi;*pmonth=i;*pday=yearday;int main()int k,days;while(1) /*用戶選擇:起到菜單的作用*/printf(1:日期天數(shù)n2:年,天數(shù)日期n其他:退出n請(qǐng)選擇:n);scanf(%d,&k);if(k=1)printf(輸入日期(年 月 日):n);scanf(%d%d%d,&dt.year,&dt.month,&dt.day);printf(%d年%d月%d日是這一年的第%d天n,dt.year,dt.month,dt.day,day

34、_of_year(dt.year,dt.month,dt.day);else if(k=2)printf(輸入年份 天數(shù):n);scanf(%d%d,&dt.year,&days);month_day(dt.year,days,&dt.month,&dt.day);printf(對(duì)應(yīng)日期是%d年%d月%d日n,dt.year,dt.month,dt.day);else break;return 0;運(yùn)行結(jié)果:2. 難度系數(shù):算法設(shè)計(jì):step 1 定義學(xué)生鏈表節(jié)點(diǎn)。step 2 參照教材中的程序8-7,定義創(chuàng)建鏈表函數(shù)create,顯示鏈表節(jié)點(diǎn)數(shù)據(jù)信息函數(shù)display,釋放鏈表所有節(jié)點(diǎn)內(nèi)存函

35、數(shù)destroy。其中創(chuàng)建鏈表函數(shù)create與程序8-7中不同之處在于:程序8-7中心創(chuàng)建節(jié)點(diǎn)插入到鏈表的尾部,而本題中新創(chuàng)建節(jié)點(diǎn)是插入到鏈表的頭部。step 3 main函數(shù)中依次調(diào)用create函數(shù)實(shí)現(xiàn)鏈表的創(chuàng)建,display函數(shù)實(shí)現(xiàn)鏈表元素的顯示,destroy函數(shù)實(shí)現(xiàn)鏈表元素空間釋放。程序如下:#include #include /*學(xué)生鏈表節(jié)點(diǎn)*/struct studentint num;/*學(xué)號(hào)*/char name10;/*姓名*/int age;/*年齡*/struct student *next;/*指針域next*/;/*函數(shù)功能:創(chuàng)建1個(gè)鏈表,當(dāng)輸入的學(xué)號(hào)為0時(shí),建

36、立鏈表結(jié)束 函數(shù)參數(shù):無(wú) 函數(shù)返回值:創(chuàng)建鏈表的頭指針*/struct student *create()/*head為頭指針,tail為尾指針,p為指向當(dāng)前節(jié)點(diǎn)的指針*/struct student *head,*tail,*p;int stuNum,stuAge; char stuName10;head=tail=NULL;printf(請(qǐng)輸入學(xué)生的學(xué)號(hào):);scanf(%d,&stuNum);getchar();printf(請(qǐng)輸入學(xué)生的姓名:);gets(stuName);printf(請(qǐng)輸入學(xué)生的年齡:);scanf(%d,&stuAge);while(stuNum!=0)/*當(dāng)輸入

37、的學(xué)號(hào)為0時(shí),建立鏈表結(jié)束*/*為新添加的節(jié)點(diǎn)申請(qǐng)內(nèi)存*/p=(struct student *)malloc(sizeof(struct student);if(p=NULL)/*若申請(qǐng)內(nèi)存失敗,打印錯(cuò)誤信息,退出程序*/printf(開(kāi)辟內(nèi)存失敗);exit(0);p-num=stuNum;/*為新添加節(jié)點(diǎn)的學(xué)號(hào)域賦值*/strcpy(p-name,stuName);/*為新添加節(jié)點(diǎn)的姓名域賦值*/p-age=stuAge;/*為新添加節(jié)點(diǎn)的年齡域賦值*/p-next=NULL;/*將新添加節(jié)點(diǎn)置為鏈表尾*/if(head=NULL)/*若原鏈表為空表,則將新添加節(jié)點(diǎn)設(shè)為首節(jié)點(diǎn)*/head

38、=tail=p;/*若原鏈表為非空,則將新節(jié)點(diǎn)添加到鏈表頭*/elsep-next=head;/*新節(jié)點(diǎn)添加到鏈表頭*/head=p;/*頭指針指向新添加節(jié)點(diǎn)*/printf(請(qǐng)輸入學(xué)生的學(xué)號(hào):);scanf(%d,&stuNum);getchar();printf(請(qǐng)輸入學(xué)生的姓名:);gets(stuName);printf(請(qǐng)輸入學(xué)生的年齡:);scanf(%d,&stuAge);return head;/*返回鏈表的頭指針*/*函數(shù)功能:顯示所有已經(jīng)建立好的節(jié)點(diǎn)中數(shù)據(jù)項(xiàng)的內(nèi)容 函數(shù)參數(shù):鏈表的頭指針 函數(shù)返回值:無(wú)*/void display(struct student *head)

39、struct student *p=head;printf(鏈表的所有節(jié)點(diǎn)數(shù)據(jù)為:n);while(p!=NULL)/*若不是表尾,則循環(huán)打印*/printf(%8d%10s%8dn,p-num,p-name,p-age);p=p-next;/*p指向下一個(gè)節(jié)點(diǎn)*/*函數(shù)功能:釋放head指向的鏈表中所有節(jié)點(diǎn)占用的內(nèi)存 函數(shù)參數(shù):鏈表的頭指針 函數(shù)返回值:無(wú)*/void destroy(struct student *head)struct student *p=head,*pTmp=NULL;while(p!=NULL) /*若不是表尾,則釋放節(jié)點(diǎn)占用的內(nèi)存*/pTmp=p;p=p-next

40、;/*讓p指向下一個(gè)節(jié)點(diǎn)*/free(pTmp);/*釋放pTmp指向的當(dāng)前節(jié)點(diǎn)占用的內(nèi)存*/int main()struct student *head=NULL;head=create();/*創(chuàng)建鏈表*/display(head);/*顯示鏈表中節(jié)點(diǎn)信息*/destroy(head);/*釋放鏈表節(jié)點(diǎn)信息*/return 0;運(yùn)行結(jié)果:3. 難度系數(shù):算法設(shè)計(jì):step 1 定義鏈表節(jié)點(diǎn)。step 2 參照教材中的程序8-7,定義創(chuàng)建鏈表函數(shù)create,釋放鏈表所有節(jié)點(diǎn)內(nèi)存函數(shù)destroy。step 3 創(chuàng)建查找鏈表中數(shù)據(jù)域的值為value的節(jié)點(diǎn)函數(shù)search。循環(huán)遍歷鏈表中的每一

41、個(gè)節(jié)點(diǎn),如果找到,函數(shù)返回1;如果未找到,函數(shù)返回0。step 4 main函數(shù)中依次調(diào)用create函數(shù)實(shí)現(xiàn)鏈表的創(chuàng)建,search函數(shù)實(shí)現(xiàn)查找,打印輸出查找結(jié)果,destroy函數(shù)實(shí)現(xiàn)鏈表元素空間釋放。程序如下:#include #include /*鏈表節(jié)點(diǎn)*/struct nodeint data;/*數(shù)據(jù)域*/struct node *next;/*指針域*/;/*函數(shù)功能:查找鏈表中數(shù)據(jù)域的值為value的節(jié)點(diǎn)函數(shù)參數(shù):鏈表頭指針head 待查找的值value函數(shù)返回值:若找到,返回1,若未找到,返回0*/int search(struct node *head,int value

42、)struct node *p=head;while(p!=NULL)/*若不是表尾,則循環(huán)查找*/if(p-data=value)/*找到了鏈表中的數(shù)據(jù)域的值為value*/return 1;else/*如果未找到,讓p指向下一個(gè)節(jié)點(diǎn)繼續(xù)尋找*/p=p-next;return 0;/*函數(shù)功能:創(chuàng)建一個(gè)鏈表,當(dāng)輸入的數(shù)為0時(shí),建立鏈表結(jié)束。函數(shù)的參數(shù):無(wú)函數(shù)的返回值:創(chuàng)建鏈表的頭指針*/struct node * create()/*head為頭指針,tail為尾指針,p為指向當(dāng)前節(jié)點(diǎn)的指針*/struct node *head,*tail,*p;int x;head=tail=NULL;p

43、rintf(請(qǐng)輸入一個(gè)整數(shù),輸入0時(shí),建立鏈表結(jié)束:);scanf(%d,&x); /*輸入節(jié)點(diǎn)數(shù)據(jù)*/while(x!=0) /*當(dāng)輸入的數(shù)為0時(shí),建立鏈表結(jié)束*/*為新添加的節(jié)點(diǎn)申請(qǐng)內(nèi)存*/p=(struct node *)malloc(sizeof(struct node);if(p=NULL) /*若申請(qǐng)內(nèi)存失敗,打印錯(cuò)誤信息,退出程序*/printf(開(kāi)辟內(nèi)存失敗n);exit(0);p-data=x; /*為新添加節(jié)點(diǎn)的數(shù)據(jù)域賦值*/p-next= NULL; /*將新添加節(jié)點(diǎn)置為表尾*/*若原鏈表為空表,則將新添加節(jié)點(diǎn)設(shè)為首節(jié)點(diǎn)*/if(head = NULL) head = t

44、ail = p;/*若原鏈表為非空,則將新建節(jié)點(diǎn)添加到表尾*/elsetail-next = p; /*將新添加節(jié)點(diǎn)置為表尾*/tail=p; /*尾指針指向新添加節(jié)點(diǎn)*/printf(請(qǐng)輸入一個(gè)整數(shù),輸入0時(shí),建立鏈表結(jié)束:);scanf(%d,&x);return head; /*返回鏈表的頭指針*/*函數(shù)功能:釋放head指向的鏈表中所有節(jié)點(diǎn)占用的內(nèi)存。函數(shù)的參數(shù):鏈表的頭指針函數(shù)的返回值:無(wú)*/void destroy(struct node *head)struct node *p=head,*pTmp=NULL;while(p!=NULL) /*若不是表尾,則釋放節(jié)點(diǎn)占用的內(nèi)存*/

45、pTmp=p; /*保存當(dāng)前節(jié)點(diǎn)指針*/p=p-next; /*讓p指向下一個(gè)節(jié)點(diǎn)*/free(pTmp); /*釋放pTmp指向的當(dāng)前節(jié)點(diǎn)占用的內(nèi)存*/int main()struct node *head=NULL;int value,result;head=create(); /*創(chuàng)建鏈表*/printf(請(qǐng)輸入待查找的值:);scanf(%d,&value);/*查找鏈表中數(shù)據(jù)域的值為value的節(jié)點(diǎn),函數(shù)返回值放到result中*/result=search(head,value);if(result=1)printf(找到了待查找的值:%dn,value);if(result=0)

46、printf(未找到!n);destroy(head); /*釋放鏈表節(jié)點(diǎn)信息*/return 0;運(yùn)行結(jié)果:(1)未找到的測(cè)試數(shù)據(jù)。(2)找到了的測(cè)試數(shù)據(jù)。4. 難度系數(shù):算法設(shè)計(jì):step 1 定義鏈表節(jié)點(diǎn)。step 2 參照教材中的程序8-7,定義創(chuàng)建鏈表函數(shù)reverse,顯示鏈表節(jié)點(diǎn)數(shù)據(jù)信息函數(shù)display,釋放鏈表所有節(jié)點(diǎn)內(nèi)存函數(shù)destroy。其中創(chuàng)建鏈表函數(shù)reverse與程序8-7中create函數(shù)不同之處在于:程序8-7中創(chuàng)建節(jié)點(diǎn)插入到鏈表的尾部,而本題中是從數(shù)組x中讀取元素,創(chuàng)建新節(jié)點(diǎn),插入到鏈表的頭部。step 3 main函數(shù)中依次調(diào)用reverse函數(shù)實(shí)現(xiàn)鏈表的創(chuàng)

47、建,display函數(shù)實(shí)現(xiàn)鏈表節(jié)點(diǎn)數(shù)據(jù)域信息的輸出,destroy函數(shù)實(shí)現(xiàn)鏈表元素空間釋放。程序如下:#include #include #define N 6/*鏈表節(jié)點(diǎn)*/struct nodeint data; /*數(shù)據(jù)域*/struct node *next;/*指針域*/;/*函數(shù)功能:數(shù)組xn中存放的數(shù)據(jù),逆序創(chuàng)建鏈表H。函數(shù)的參數(shù):數(shù)組x 數(shù)組元素n函數(shù)的返回值:創(chuàng)建鏈表的頭指針*/struct node *reverse(int x,int n)/*head為頭指針,tail為尾指針,p為指向當(dāng)前節(jié)點(diǎn)的指針*/struct node *head,*tail,*p;int i;h

48、ead=tail=NULL;for(i=0;idata=xi; /*為新添加節(jié)點(diǎn)的數(shù)據(jù)域賦值*/p-next= NULL; /*將新添加節(jié)點(diǎn)置為表尾*/*若原鏈表為空表,則將新添加節(jié)點(diǎn)設(shè)為首節(jié)點(diǎn)*/if(head = NULL) head = tail = p;/*若原鏈表為非空,則將新建節(jié)點(diǎn)添加到表頭*/elsep-next = head; /*將新添加節(jié)點(diǎn)置為表頭*/head = p; /*頭指針指向新添加節(jié)點(diǎn)*/return head; /*返回鏈表的頭指針*/*函數(shù)功能:顯示所有已經(jīng)建立好的節(jié)點(diǎn)中數(shù)據(jù)項(xiàng)的內(nèi)容。函數(shù)的參數(shù):鏈表的頭指針函數(shù)的返回值:無(wú)*/void display(str

49、uct node *head)struct node *p=head;printf(鏈表的所有節(jié)點(diǎn)數(shù)據(jù)為:n);while(p!=NULL) /*若不是表尾,則循環(huán)打印*/printf(%5d,p-data); /*打印節(jié)點(diǎn)的數(shù)據(jù)*/p=p-next; /*讓p指向下一個(gè)節(jié)點(diǎn)*/printf(n);/*函數(shù)功能:釋放head指向的鏈表中所有節(jié)點(diǎn)占用的內(nèi)存。函數(shù)的參數(shù):鏈表的頭指針函數(shù)的返回值:無(wú)*/void destroy(struct node *head)struct node *p=head,*pTmp=NULL;while(p!=NULL) /*若不是表尾,則釋放節(jié)點(diǎn)占用的內(nèi)存*/pT

50、mp=p; /*保存當(dāng)前節(jié)點(diǎn)指針*/p=p-next; /*讓p指向下一個(gè)節(jié)點(diǎn)*/free(pTmp); /*釋放pTmp指向的當(dāng)前節(jié)點(diǎn)占用的內(nèi)存*/int main()struct node *head=NULL;int arrN=1,2,3,4,5,6;head=reverse(arr,N); /*創(chuàng)建鏈表*/display(head);/*顯示鏈表中的節(jié)點(diǎn)數(shù)據(jù)域信息*/destroy(head); /*釋放鏈表節(jié)點(diǎn)信息*/return 0;運(yùn)行結(jié)果:5. 難度系數(shù):算法設(shè)計(jì):step 1 定義鏈表節(jié)點(diǎn)。step 2 參照教材中的程序8-7,定義創(chuàng)建鏈表函數(shù)reverse,顯示鏈表節(jié)點(diǎn)數(shù)據(jù)

51、信息函數(shù)display,釋放鏈表所有節(jié)點(diǎn)內(nèi)存函數(shù)destroy。step 3 創(chuàng)建merger函數(shù)合并兩個(gè)鏈表,使得新鏈表節(jié)點(diǎn)元素按照遞增順序排列。step 4 main函數(shù)中依次調(diào)用create函數(shù)實(shí)現(xiàn)鏈表A和B的創(chuàng)建,merge函數(shù)實(shí)現(xiàn)鏈表A和B的合并,display函數(shù)輸出合并后鏈表節(jié)點(diǎn)數(shù)據(jù)域信息,destroy函數(shù)實(shí)現(xiàn)合并后鏈表元素空間釋放。程序如下:#include #include /*鏈表節(jié)點(diǎn)*/struct nodeint data;/*數(shù)據(jù)域*/struct node *next;/*指針域*/;/*函數(shù)功能:將兩個(gè)元素已按升序排序的鏈表合并為一個(gè)新鏈表。函數(shù)的參數(shù):鏈表頭指

52、針pA 鏈表頭指針pB函數(shù)的返回值:合并后的新鏈表頭指針*/struct node *merge(struct node *pA,struct node *pB)struct node *pNew,*r,*p,*q;/*為合并后的新鏈表節(jié)點(diǎn)申請(qǐng)內(nèi)存*/pNew=(struct node *)malloc(sizeof(struct node);if(pNew=NULL) /*若申請(qǐng)內(nèi)存失敗,打印錯(cuò)誤信息,退出程序*/printf(開(kāi)辟內(nèi)存失敗n);exit(0);pNew-next=NULL;/*節(jié)點(diǎn)的指針域置為NULL*/r=pNew;/*保存pNew指針到r中*/p=pA;/*p指向鏈表p

53、A的第一個(gè)節(jié)點(diǎn)*/q=pB;/*q指向鏈表pB的第一個(gè)節(jié)點(diǎn)*/while(p&q)/*p不為NULL且q也不為NULL,則繼續(xù)循環(huán)*/*如果A鏈表節(jié)點(diǎn)比B鏈表節(jié)點(diǎn)小,則將A鏈表節(jié)點(diǎn)插入到新鏈表中*/if(p-datadata)r-next=p;/*新鏈表節(jié)點(diǎn)的指針域存放A鏈表節(jié)點(diǎn)指針*/r=p;/*新鏈表節(jié)點(diǎn)指針存放A鏈表節(jié)點(diǎn)指針*/p=p-next;/*A鏈表節(jié)點(diǎn)指針指向下一個(gè)節(jié)點(diǎn)*/*如果A鏈表節(jié)點(diǎn)比B鏈表節(jié)點(diǎn)大,則將B鏈表節(jié)點(diǎn)插入到新鏈表中*/elser-next=q;/*新鏈表節(jié)點(diǎn)的指針域存放B鏈表節(jié)點(diǎn)指針*/r=q;/*新鏈表節(jié)點(diǎn)指針存放B鏈表節(jié)點(diǎn)指針*/q=q-next;/*B鏈表

54、節(jié)點(diǎn)指針指向下一個(gè)節(jié)點(diǎn)*/if(q)/*B鏈表后續(xù)的節(jié)點(diǎn)插入到新鏈表中*/r-next=q;if(p)/*A鏈表后續(xù)的節(jié)點(diǎn)插入到新鏈表中*/r-next=p;return pNew-next;/*返回合并后的新鏈表指針*/*函數(shù)功能:創(chuàng)建一個(gè)鏈表,當(dāng)輸入的數(shù)為0時(shí),建立鏈表結(jié)束。函數(shù)的參數(shù):無(wú)函數(shù)的返回值:創(chuàng)建鏈表的頭指針*/struct node * create()/*head為頭指針,tail為尾指針,p為指向當(dāng)前節(jié)點(diǎn)的指針*/struct node *head,*tail,*p;int x;head=tail=NULL;printf(請(qǐng)輸入一個(gè)整數(shù),輸入0時(shí)建立鏈表結(jié)束:);scanf(%d,&x); /*輸入節(jié)點(diǎn)數(shù)據(jù)*/while(x!=0) /*當(dāng)輸入的數(shù)為0時(shí),建立鏈表結(jié)束*/*為新添加的節(jié)點(diǎn)申請(qǐng)內(nèi)存*/p=(struct node *)malloc(sizeof(struct node);if(p=NULL) /*若申請(qǐng)內(nèi)存失敗,打印錯(cuò)誤信息,退出程序*/printf(開(kāi)辟內(nèi)存失敗n);e

溫馨提示

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