《C語言程序設計》(吳軍良)思考與練習答案_第1頁
《C語言程序設計》(吳軍良)思考與練習答案_第2頁
《C語言程序設計》(吳軍良)思考與練習答案_第3頁
《C語言程序設計》(吳軍良)思考與練習答案_第4頁
《C語言程序設計》(吳軍良)思考與練習答案_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計課后答案第1章C語言概述一、選擇題1.D2.C3.D4.C5.A6.C7.D二、填空題1..c.obj.exe2.需求分析算法設計編寫程序編譯程序連接程序編寫程序文檔3./**/三、編程題1.參考代碼如下:#include<stdio.h>intmain(){ printf("***這是我的第一個C語言程序!***\n"); return0;}2.參考代碼如下:#include<stdio.h> /*編譯預處理指令*/intmain() /*主函數的函數頭*/{ /*函數體的開始標記*/ printf("***這是我的第一個C語言程序!***\n"); /*輸出要顯示的字符串*/ return0; /*程序返回值0*/} /*函數的結束標記*/

第2章算法一、選擇題1.A2.A3.C4.B二、簡答題1.計算n!算法的流程圖如圖2-1所示。圖2-1計算n!算法的流程圖2.計算n!算法的N-S流程圖如圖2-2所示。圖2-2計算n!算法的N-S流程圖3.計算兩個數a和b最大公約數算法的流程圖如圖2-3所示。圖2-3求最大公約數流程圖4.計算兩個數a和b最大公約數算法的N-S流程圖如圖2-4所示。圖2-4求最大公約數N-S流程圖

第3章數據類型及其運算一、選擇題1.A2.A3.A4.B5.C6.D7.D8.C9.C10.B二、填空題1.整型浮點型2.03.264.95.1.56.76.9,11,9,10三、編程題1.參考代碼如下:#include<stdio.h>intmain(){ inta,b,c; a=10; b=20; c=a; a=b; b=c; printf("a=%d,b=%d\n",a,b); return0;}2.參考代碼如下:#include<stdio.h>intmain(){ intnum,a,b,c; printf("Pleaseinputthenumber:"); scanf("%d",&num); a=num/100; b=(num-100*a)/10; c=num-100*a-10*b; a+=b*10+c*100; printf("Theresultis%d\n",a); return0;}3.參考代碼如下:#definePI3.14159#include<stdio.h>intmain(){ floatr,l,s,v; printf("請輸入圓半徑:"); scanf("%f",&r); l=2*PI*r; s=PI*r*r; v=4*PI*r*r*r/3; printf("半徑為%f的圓周長為%f,面積為%f,圓球體積為%f\n",r,l,s,v); return0;}

第4章順序結構程序設計一、選擇題1.D2.C3.D4.B5.B二、填空題1.27\n2.123.scanf("%d",&a);三、編程題1.參考代碼如下:#include<stdio.h>intmain(){ intx; floaty,s; printf("請輸入商品的單價"); scanf("%f",&y); printf("請輸入購買商品的個數"); scanf("%d",&x); s=x*y; printf("商品總價為:%f\n",s); return0;}2.參考代碼如下:#include<stdio.h>intmain(){ inta,b; printf("請輸入a和b的值"); scanf("a=%d,b=%d",&a,&b); a=a+b; b=a-b; a=a-b; printf("a=%d,b=%d\n",a,b); return0;}3.參考代碼如下:#include<stdio.h>intmain(){ printf("****\n"); printf("*\n"); printf("*\n"); printf("****\n"); return0;}4.參考代碼如下:#include<stdio.h>intmain(){ inta=5; floatb=1.332; charc='A'; printf("a=%4db=%.3f\n",a,b); printf("a+b=%.1f\n",a+b); printf("c=\'%c\'or%d\n",c,c); return0; }

第5章選擇結構程序設計一、選擇題1.C2.D3.B4.B5.D二、填空題1.0 2.a的值為2;b的值為13.20,30,30 4.15.①a>b ②a=b;b=t;三、編程題1.參考代碼如下:#include<stdio.h>intmain(){ intx,y; /*定義整型變量x、y*/ printf("Pleaseinputx:"); /*輸出屏幕提示*/ scanf("%d",&x); /*從鍵盤輸入x的值*/ if(x<0) y=3*x+2; /*根據x的取值計算y的值*/ else y=-x+1; /*根據x的取值計算y的值*/ printf("y=%d\n",y); /*輸出y的值*/}2.參考代碼如下:#include<stdio.h>intmain(){ inta; printf("Pleaseenteraninteger:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("Error!\n"); } return0;}3.參考代碼如下:#include<stdio.h>intmain(){ floata,b; printf("inputetheincome:"); scanf("%f",&a); if(a<=3500) b=0; elseif(a<=5000) b=(a-3500)*0.03; elseif(a<=9500) b=(5000-3500)*0.03+(a-5000)*0.1; else b=(5000-3500)*0.03+(9500-5000)*0.1+(a-9500)*0.2; printf("thetaxis:%.2f",b); return0;}4.參考代碼如下:#include<stdio.h>intmain(){ intc,s; floatp,w,d,f; printf("Pleaseenterprice,weight,distance:"); /*提示輸入數據*/ scanf("%f,%f,%d",&p,&w,&s); /*輸入單價、重量、距離*/ if(s>=3000) c=12; /*3000km以上為同一折扣*/ else c=s/250; /*3000km以下各段折扣不同,c的值不相同*/ switch(c) { case0:d=0;break; /*c=0,代表250km以下,折扣d=0*/ case1:d=2;break; /*c=1,代表250km~500km,折扣d=2%*/ case2: case3:d=5;break; /*c=2和3,代表500km~1000km,折扣d=5%*/ case4: case5: case6: case7:d=8;break; /*c=4~7,代表1000km~2000km,折扣d=8%*/ case8: case9: case10: case11:d=10;break; /*c=8~11,代表2000km~3000km,折扣d=10%*/ case12:d=15;break; /*c=12,代表3000km以上,折扣d=15%*/ } f=p*w*s*(1-d/100.0); /*計算總運費*/ printf("freight=%10.2f\n",f); /*輸出總運費,取兩位小數*/ return0;}5.參考代碼如下:#include<stdio.h>intmain(){ inta,i,j,k; printf("inputethenumber(100-999):"); scanf("%d",&a); if(a%3==0&&a%5==0&&a%7==0) printf("canbedividedby3,5,7"); elseif(a%3==0&&a%5==0) printf("canbedividedby3,5"); elseif(a%3==0&&a%7==0) printf("canbedividedby3,7"); elseif(a%5==0&&a%7==0) printf("canbedividedby5,7"); elseif(a%3==0) printf("canbedividedby3"); elseif(a%5==0) printf("canbedividedby5"); elseif(a%7==0) printf("canbedividedby7"); else printf("notcanbedividedby3or5or7"); return0;}

第6章循環(huán)結構程序設計一、選擇題1.D2.A3.A4.D5.C6.C7.C8.B二、填空題1.do-while語句 2.553.10 4.x>05.15三、編程題1.參考代碼如下:#include<stdio.h>intmain(){ inti,k,max; printf("Pleaseinputk:"); scanf("%d",&max); for(i=2;i<6;i++) { scanf("%d",&k); if(max<k) max=k; } printf("max=%d\n",max); return0;}2.參考代碼如下:#include<stdio.h>intmain(){ intn,i,j,k; for(n=100;n<1000;n++)/*對所有的3位數循環(huán)*/ { i=n/100;/*的百位數字*/ j=n/10%10;/*的十位數字*/ k=n%10;/*的個位數字*/ if(n==i*i*i+j*j*j+k*k*k) { printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",n,i,i,i,j,j,j,k,k,k); break;/*只要求找第一個滿足條件的數,所以找到后立即退出循環(huán)*/ } } return0;}3.參考代碼如下:#include<stdio.h>intmain(){ intn; for(n=10;n<100;n++) { if(n%3!=0||n%5!=0) continue;/*n不滿足要求,結束本次循環(huán)*/ printf("%5d",n); } return0;}4.參考代碼如下:#include<stdio.h>intmain(){ inti,j; for(i=1;i<=10;i++) { for(j=1;j<=i;j++) printf("#"); printf("\n"); } return0;}5.參考代碼如下:#include<stdio.h>intmain(){ inti,j; for(i=1;i<=9;i++)/*外循環(huán)控制輸出的行數*/ { for(j=1;j<=i;j++)/*內循環(huán)輸出表中的一行*/ printf("%d*%d=%-3d",j,i,i*j); printf("\n");/*換行控制,使下一次的式子輸出在新行上*/ } return0;}6.參考代碼如下:#include<stdio.h>intmain(){ intA,B,C,D,E;/*定義5個整型變量*/ for(A=1;A<6;A++)/*將A在1~5的名次中循環(huán)*/ for(B=1;B<6;B++)/*將B在1~5的名次中循環(huán)*/ if(A!=B)/*判斷變量與已有變量值不相等*/ for(C=1;C<6;C++)/*將C在1~5的名次中循環(huán)*/ if(C!=A&&C!=B)/*判斷變量與已有變量值不相等*/ for(D=1;D<6;D++)/*將D在1~5的名次中循環(huán)*/ if(D!=A&&D!=B&&D!=C)/*判斷變量與已有變量值不相等*/ for(E=1;E<6;E++)/*將E在1~5的名次中循環(huán)*/ if(E!=D&&E!=C&&E!=B&&E!=A)/*判斷變量與已有變量值不相等*/ if((C!=1)&&(D-E==2)&&(E!=2)&&(A!=1)&&(A!=5)&&(B-C==1))/*根據問題設置的條件*/ printf("A=%d,B=%d,C=%d,D=%d,E=%d\n",A,B,C,D,E);/*輸出*/ return0;}7.參考代碼如下:#include<stdio.h>intmain(){ intcock,hen,chick; /*定義變量為基本整型*/ for(cock=0;cock<=20;cock++) /*雞翁范圍在0到20之間*/ for(hen=0;hen<=33;hen++) /*雞母范圍在0到33之間*/ for(chick=3;chick<=99;chick++) /*雞雛范圍在3到99之間*/ if(5*cock+3*hen+chick/3==100) /*判斷錢數是否等于100*/ if(cock+hen+chick==100) /*判斷購買的雞數是否等于100*/ if(chick%3==0) /*判斷雞雛數是否能被3整除*/ printf("雞翁:%d只,雞母:%d只,雞雛:%d只\n", cock,hen,chick); return0;}

第7章數組一、選擇題1.D2.B3.A4.C5.B6.B7.C8.C9.A10.A二、填空題1.200 2.windows20003.①s=count=0; ②i=0;i<20;i++ ③continue; ④count++;三、編程題1.參考代碼如下:#include<stdio.h>#include<math.h>#defineN101intmain(){ inti,j,line,a[N]; for(i=2;i<N;i++) a[i]=i; for(i=2;i<sqrt(N);i++) for(j=i+1;j<N;j++) { if(a[i]!=0&&a[j]!=0) if(a[j]%a[i]==0) a[j]=0; } printf("\n"); for(i=2,line=0;i<N;i++) { if(a[i]!=0){ printf("%5d",a[i]); line++; } if(line==10){ printf("\n"); line=0; } } return0;}2.參考代碼如下:#include"stdio.h"intmain(){ inta[20],i,max,n; for(i=0;i<20;i++) scanf("%d",&a[i]); max=a[0]; n=0; for(i=1;i<20;i++) if(max<a[i]) { max=a[i]; n=i; } printf("max=%d,n=%d",max,n); return0;}3.參考代碼如下:#include<stdio.h>intmain(){ inti,n,k=16,a[16]={0}; printf("Pleaseenteradigit:"); scanf("%d",&n); while(n>0) /*將十進制數轉變?yōu)槎M制數*/ { a[--k]=n%2; n=n/2; } for(i=0;i<16;i++) printf("%2d",a[i]); return0;}4.參考代碼如下:#include<stdio.h>intmain(){ intmonth_tab[2][13]={{0,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}}; intyear,month,day; intyearday,leap,i; printf("\nEnteryear_month_day:"); scanf("%d%d%d",&year,&month,&day); leap=((year%4==0)&&(year%100!=0)||(year%400==0)); yearday=day; for(i=1;i<month;i++) yearday+=month_tab[leap][i]; printf("yearday=%d",yearday); return0;}5.參考代碼如下:#include<stdio.h>intmain(){ charstr1[100],str2[100],c; inti,s; printf("Enterstring1:"); gets(str1); printf("Enterstring2:"); gets(str2); i=0; while((str1[i]==str2[i]&&str1[i]!='\0'))/*比較兩字符串第一個不同的字符*/ i++; s=str1[i]-str2[i]; printf("%d\n",s); return0;}

第8章函數一、選擇題1.A2.B3.C4.A5.A6.C7.C8.D二、填空題1.5,6 2.11,43.①intfun(intx,inty); ②max=fun(fun(a,b),c);4.①i+1 ②&a[i]三、編程題1.參考代碼如下:#include<stdio.h>longrfact(intn){ if(n<0) { printf("Negativeargumenttofact!\n"); exit(-1); } elseif(n<=1) return(1); else return(n*rfact(n-1)); /*遞歸調用自己*/}intmain(){ intn; longf; printf("Pleaseinputanintegralnumber:"); scanf("%d",&n); f=rfact(n); printf("%d!=%ld\n",n,f); return0;}2.參考代碼如下:#include<stdio.h>intmain(){ doubleturn(charx[]); charstr[10]; doublea; gets(str); a=turn(str); printf("%f\n",a); return0;}doubleturn(charx[]){ inti; doublem=0; for(i=0;x[i]!='\0';i++) if(x[i]>='0'&&x[i]<='9')m=m*16+x[i]-'0'; elseif(x[i]>='A'&&x[i]<='F')m=m*16+x[i]-'A'+10; elseif(x[i]>='a'&&x[i]<='f')m=m*16+x[i]-'a'+10; returnm;}3.參考代碼如下:#include<stdio.h>floatmax=0,min=0; /*定義全局變量,max最高分,min最低分*/intmain(){ floataverage(floatarray[],intn); /*函數說明*/ floatave,score[10]; inti; printf("Pleaseenter10scores:"); for(i=0;i<10;i++) scanf("%f",&score[i]); ave=average(score,10); /*函數調用*/ printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,ave); return0;}floataverage(floatarray[],intn) /*自定義函數*/{ inti; floataver,sum=array[0]; max=min=array[0]; for(i=1;i<n;i++) { if(array[i]>max) max=array[i]; elseif(array[i]<min) min=array[i]; sum+=array[i]; } aver=sum/n; return(aver);}4.參考代碼如下:#include<stdio.h>intmain(){ inta[10],b[10],i,n=0,m=0,k=0; printf("Pleaseenterarraya:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("Pleaseenterarrayb:\n"); for(i=0;i<10;i++) scanf("%d",&b[i]); for(i=0;i<10;i++) { if(large(a[i],b[i])==1) n=n+1; elseif(large(a[i],b[i])==0) m=m+1; else k=k+1; } printf("a[i]>b[i]%dtimes\na[i]=b[i]%dtimes\na[i]<b[i]%dtimes\n",n,m,k); if(n>k) printf("arrayaislargerthanarrayb\n"); elseif(n<k) printf("arrayaissmallerthanarrayb\n"); else printf("arrayaisequalarrayb\n"); return0;}intlarge(intx,inty){ intflag; if(x>y) flag=1; elseif(x<y) flag=-1; else flag=0; return(flag);}5.參考代碼如下:#include<stdio.h>doublefun(intm){ doubley=1.0; inti; for(i=2;i<=m;i++) y-=1.0/(i*i); return(y);}intmain(){ intm; printf("pleaseinputm:"); scanf("%d",&m); printf("\nTheresultis%lf\n",fun(m)); return0;}

第9章指針一、選擇題1.B2.D3.A4.B5.C6.A7.C8.C9.A10.A二、填空題1.①int*p; ②int*p[4];③int(*p)[4]; ④int*p();⑤int(*p)(); ⑥int**p;2.4 123.8 104.1355.①num=*b; ②num=*c;三、編程題1.參考代碼如下:#include<stdio.h>voidswap(int*p1,int*p2){ intt; t=*p1; *p1=*p2; *p2=t;}intmain(){ int*a,*b,*c,x,y,z; a=&x; b=&y; c=&z; printf("輸入3個整數:"); scanf("%d%d%d",a,b,c); printf("%d,%d,%d\n",*a,*b,*c); if(*a<*b) swap(a,b); if(*a<*c) swap(a,c); if(*b<*c) swap(b,c); printf("x=%d,y=%d,z=%d\n",x,y,z); return0;}2.參考代碼如下:#include<stdio.h>intmain(){ charstr[50],*p,*s,c; printf("Enterstring:"); gets(str); p=s=str; /*指針p和s指向str*/ while(*p) p++; /*找到串結束標記'\0'*/ p--; /*指針回退一個字符,指針p指向字符串中的最后一個字符*/ while(s<p) /*當串前面的指針s<(小于)串后面的指針p時,進行循環(huán)*/ { c=*s; /*交換兩個指針所指向的字符*/ *s++=*p; /*串前面的指針s向后(+1)移動*/ *p--=c; /*串后面的指針p向前(-1)移動*/ } puts(str); return0;}3.參考代碼如下:#include<stdio.h>intmain(){ charstr1[80],str2[80],str[80]; char*p,*q,*r,*s; printf("Enterstring1:"); gets(str1); printf("Enterstring2:"); gets(str2); for(p=str1,q=str2,r=str;*p!='\0'&&*q!='\0';) /*完成串合并*/ if(*p<*q) /*比較str1和str2中的字符*/ *r++=*p++; /*若str1中的字符較小,則將它復制到str中*/ else *r++=*q++; /*若str2中的字符較小,則將它復制到str中*/ s=(*p!='\0')?p:q; /*判斷哪個字符串還沒有處理完畢*/ while(*s!='\0') /*繼續(xù)處理(復制)尚未處理完畢的字符串*/ *r++=*s++; *r='\0'; /*向str中存入串結束標記*/ printf("Result:"); puts(str); return0;}4.參考代碼如下:#include<stdio.h>voidinverte(int*x,intn){ int*p,temp,*i,*j,m=(n-1)/2; /*聲明變量*/ i=x; /*變量I存放數組首地址*/ j=x+n-1; /*變量j存放數組末尾元素地址*/ p=x+m; /*變量P存放數組中間元素地址*/for(;i<=p;i++,j--) /*交換數組前半部分和后半部分元素*/ { temp=*i; *i=*j; *j=temp; }}intmain(){ inti,a[10]={1,2,3,4,5,6,7,8,9,0}; /*定義數組*/ printf("輸入數組元素:\n"); for(i=0;i<10;i++) /*輸出數組*/ printf("%d,",a[i]); printf("\n"); inverte(a,10); /*使數組元素逆序*/ printf("逆序輸出數組元素:\n"); for(i=0;i<10;i++) /*輸出逆序后數組*/ printf("%d,",a[i]); printf("\n"); return0;}5.參考代碼如下:#include<stdio.h>intmain(){ inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; /*定義數組*/ int*p,(*pt)[4],i,j; /*聲明指針、指針型數組等變量*/ printf("顯示數組:"); for(p=a[0];p<a[0]+12;p++) { if((p-a[0])%4==0)printf("\n"); /*每行輸出4個元素*/ printf("%4d",*p); /*輸出數組元素*/ } printf("\n"); printf("請輸入要輸出的位置:i=,j=\n"); pt=a; scanf("i=%d,j=%d",&i,&j); /*輸入元素位置*/ printf("a[%d,%d]=%d\n",i,j,*(*(pt+i)+j)); /*輸出指定位置的數組元素*/ return0;}6.參考代碼如下:#include<stdio.h>#include<string.h>voidsort(char*strings[],intn) /*對字符串排序*/{ char*temp; inti,j; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(strcmp(strings[i],strings[j])>0) /*比較字符大小,交換位置*/ { temp=strings[i]; strings[i]=strings[j]; strings[j]=temp; } } }}intmain(){ intn=5; inti; char*strings[]={"Clanguage","Basic","Worldwide","Helloworld","Oneworld,onedream!"}; /*構造字符串數組*/ sort(strings,n); /*排序*/ for(i=0;i<n;i++) printf("%s\n",strings[i]); return0;}

第10章預處理命令一、選擇題1.B2.B3.D4.A5.C二、填空題1.宏定義、文件包含、條件編譯2.不帶參數宏 帶參數宏3.①CIRCLE(R,L,S,V) ②S=PI*R*R;

第11章用戶自定義數據類型一、選擇題1.B2.A3.C4.D5.A6.D7.C8.D9.B10.C二、填空題1.structDATEd={2018,3,25}; 2.structstudent*3.structnode*三、編程題1.參考代碼如下:#include<stdio.h>#include<string.h>typedefstructMyComplex{ doublereal; doubleimg;}mc;mcPlus(mca,mcb){ mcresult; result.real=a.real+b.real; result.img=a.img+b.img; returnresult;}mcSub(mca,mcb){ mcresult; result.real=a.real-b.real; result.img=a.img-b.img; returnresult;}voidShow(mca){ if(a.real==0&&a.img==0) printf("0.000\n"); elseif(a.real==0) printf("%.4fi\n",a.img); elseif(a.img==0) printf("%.4f\n",a.real); else { if(a.img<0) printf("%.4f%.4fi\n",a.real,a.img); else printf("%.4f+%.4fi\n",a.real,a.img); }}intmain(){ mca,b; printf("輸入第一個復數a:\n"); scanf("%lf%lf",&a.real,&a.img); printf("輸入第二個復數b:\n"); getchar(); scanf("%lf%lf",&b.real,&b.img); printf("ab的和:"); Show(Plus(a,b)); printf("ab的差:"); Show(Sub(a,b)); return0;}2.參考代碼如下:#include<stdio.h>#defineN5typedefstructnode{ intnum; intscore1; intscore2;}STU;intmain(){ STUs[N]; intsum=0,ave,i; for(i=0;i<N;i++) { printf("請輸入第%d個學生的信息(學號、數學成績、英語成績):\n",i+1); scanf("%d%d%d",&s[i].num,&s[i].score1,&s[i].score2); } printf("所有學生的信息如下:\n"); printf("學號\t\t數學成績\t英語成績\n"); for(i=0;i<N;i++) printf("%5d:\t%10d\t%10d\t\n",s[i].num,s[i].score1,s[i].score2); for(i=0;i<N;i++) { sum=sum+s[i].score1+s[i].score2; if(s[i].score1==100||s[i].score2==100) { printf("學號為%d的學生有滿分成績\n",s[i].num); printf("其信息為:學號:%d,\t數學成績:%d,\t英語成績:%d\n",s[i].num,s[i].score1,s[i].score2); } } ave=sum/(N*2); printf("5名學生2門課程的總平均分為:%d\n",ave); return0;}3.參考代碼如下:#include<stdio.h>#include<malloc.h>#defineN5 /*單鏈表中結點的個數(不包括頭結點)*/typedefstructnode{ intnum; intscore1; intscore2; structnode*next;}STU;STU*creatList(intn) /*尾插法建立單鏈表,返回值為單鏈表的頭指針*/{ STU*head,*s,*r; /*head為頭指針;s指向當前結點;r指向當前結點的前一個結點*/ inti=0; if((head=(STU*)malloc(sizeof(STU)))==NULL) /*為頭結點分配內存空間,并檢測是否分配成功*/ { printf("error!"); return(0); } head->next=NULL; /*將頭結點的指針域置空*/ r=head; for(i=0;i<n;i++) { if((s=(STU*)malloc(sizeof(STU)))==NULL)/*s結點總指向當前處理結點*/ { printf("error!"); return(0); } printf("請輸入第%d個學生的信息(學號、數學成績、英語成績):\n",i+1); scanf("%d%d%d",&s->num,&s->score1,&s->score2); /*從鍵盤讀入數據,存入當前結點的數據域*/ r->next=s; /*將r的指針域指向s,形成單鏈表*/ r=s; } r->next=NULL; returnhead;}voidprintList(STU*L) /*輸出鏈表元素*/{ STU*p; p=L->next; printf("所有同學的信息如下:\n"); printf("學號\t\t數學成績\t英語成績\n"); while(p!=NULL) { printf("%5d:\t%10d\t%10d\t\n",p->num,p->score1,p->score2); p=p->next; } printf("\n");}intmain(){ intn=N,x,sum=0,ave; STU*s,*t; s=creatList(n); printList(s); t=s->next; while(t!=NULL) { sum=sum+t->score1+t->score2; if(t->score1==100||t->score2==100) { printf("學號為%d的學生有滿分成績\n",t->num); printf("其信息為:學號:%d,\t數學成績:%d,\t英語成績:%d\n",t->num,t->score1,t->score2); } t=t->next; } ave=sum/(n*2); printf("5名學生2門課程的總平均分為:%d\n",ave); return0;}4.參考代碼如下:#include<stdio.h>structstu{ intnum; intmid; intend; intave;}s[3];intmain(){ inti; structstu*p; for(p=s;p<s+3;p++) { scanf("%d%d%d",&(p->num),&(p->mid),&(p->end)); p->ave=(p->mid+p->end)/2; } for(p=s;p<s+3;p++) printf("%d%d%d%d\n",p->num,p->mid,p->end,p->ave); return0;}5.參考代碼如下:#include<stdio.h>#include<stdlib.h> /*包含動態(tài)內存分配函數的頭文件*/#defineN5 /*單鏈表中結點的個數(不包括頭結點)*/typedefstructnode{ intdata; structnode*next;}STU;structnode*creatList(intn) /*尾插法建立單鏈表,返回值為單鏈表的頭指針*/{ structnode*head,*s,*r; /*head為頭指針,s指向當前結點,r指向當前結點的前一個結點*/ inti=0; if((head=(structnode*)malloc(sizeof(structnode)))==NULL) /*為頭結點分配內存空間,并檢測是否分配成功*/ { printf("error!"); return0; } head->next=NULL; /*將頭結點的指針域置空*/ r=head; /*r指向頭結點*/ for(i=0;i<n;i++) { if((s=(structnode*)malloc(sizeof(structnode)))==NULL) /*s結點總指向當前處理結點*/ { printf("error!"); return0; } scanf("%d",&s->data); /*從鍵盤讀入數據,存入當前結點的數據域*/ r->next=s; /*將r的指針域指向s,形成單鏈表*/ r=s; /*r指向s結點*/ } r->next=NULL; /*r為尾結點其next指向NULL*/ returnhead; /*返回單鏈表的頭指針*/}void

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論