版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第9章預(yù)處理命令9.1定義一個代參數(shù)的宏,使兩個參數(shù)的值互換,并寫出程序,輸入兩個數(shù)作為使用宏時的實參。輸出已交換后的兩個值。解:#defineSWAP(a,b)t=b;b=a;a=tmain(){inta,b,t;printf(“Inputtwointegersa,b:”);scanf(“%d,%d,”*a,*b);SWAP(a,b);printf(“Now,a=%d,b=%d\n”,a,b);}運行結(jié)果如下:Inputtwointegersa,b:3,4↙Now,a=4,b=39.2輸入兩個整數(shù),求它們相除的余數(shù)。用帶參的宏來實現(xiàn),編程序。解:#defineSURPLUS(a,b)a%bmain(){inta,b;printf(“Inputtwointegersa,b:”);scanf(“%d,%d”,&a,&b);printf(“Rememberis%d\n”,SURPLUS(a,b));}運行結(jié)果如下:Inputtwointegersa,b:60,13↙Rememberis89.3三角形的面積為:area=其中s=(a+b+c),a,b,c為三角形的三邊。定義兩個帶參的宏,一個用來求s,另一個用來求area。寫程序,在程序中用帶實參的宏名來求面積area。解:#include<math.h>#defineS(a,b,c)(a+b+c)/2#defineAREA(a,b,c)sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c))main(){floata,b,c;printf(“Inputa,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)printf(“area:%8.2f.\n”,AREA(a,b,c));elseprintf(“Itisnotatriangle!”);}運行結(jié)果:①Inputa,b,c:3,4,5↙area:6.00②Inputa,b,c:12,3,5↙Itisnotatriangle!9.4給年份year定義一個宏,以判斷該年份是否為閏年。提示:宏名可定義為LEAP_YEAR,形參為y,即定義宏的形式為:#defineLEAP_YEAR(y)(讀者設(shè)計的字符串)在程序中用以下語句輸出結(jié)果:if(LEAP_YEAR(year))printf(“%disaLeapyear”,year);elseprintf(“%disnotaleapyear”,year);解:#defineLEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400=0)main(){intyear;printf(“\nInputyear:”);scanf(“%d”,&year);if(LEAP_YEAR(year))printf(“%disaleapyear.\n”,year);elseprintf(“%disnotaleapyear.\n”,year);}運行結(jié)果:①Inputyear:1990↙1990isnotaleapyear.②Inputyear:2000↙2000isaleapyear.9.5請分析以下一組宏所定義的輸出格式:#defineNLputchar(‘\n’)#definePR(format,value)printf(“value=%format\t”,(value))#definePRINT(f,x1)PR(f,x1);NL#definePRINT(f,x1,x2)PR(f,x1);PRINT(f,x2)如果在程序中有以下的宏引用:PR(d,x);PRINT1(d,x);PRINT2(d,x1,x2);寫出宏展開后的情況,并寫出應(yīng)輸出的結(jié)果,設(shè)x=5,x1=3,x2=8。解:展開后為:printf(“value=%format\t”,x);printf(“value=%format\t”,x);putchar(‘\n’);printf(“value=%format\t”,x1);printf(“value=%format\t”,x2);putchar(‘\n’);如果運行以下程序:#include<stdio.h>#defineNLputchar(‘\n’)#definePR(format,value)printf(“value=%format\t”,(value))#definePRINT1(f,x1)PR(f,x1);NL#definePRINT2(f,x1,x2)PR(f,x1);PRINT1(f,x2)main(){floatx=5.0,x1=3.0,x2=8.0;chard;PR(d,x);PRINT1(d,x)PRINT2(d,x1,x2);}輸出結(jié)果如下:value=5.000000ormatvalue=5.000000ormatvalue=3.000000ormatvalue=8.000000ormat通過本習(xí)題可以看到:如果用TurboC,則不能用這種方法將輸出格式和輸出項都作為參數(shù)。在宏替換時對字符串中的字符不予替換,一律保留原狀。9.6請設(shè)計輸出實數(shù)的格式。實數(shù)用“6.2f”格式輸出。解:#definePRprintf#defineNL“\n”#defineFs“%f”#defineF“%6.2f”#defineF1FNL#defineF2F“\t”FNL#defineF3F“\t”F“\t”FNLmain(){floata,b,c;PR(“Inputthreefloatingnumbersa,b,c:\n”);scanf(Fs,&a);scanf(Fs,&b);scanf(Fs,&c);PR(NL);PR(“Outputonefloatingnumberseachline:\n”);PR(F1,a);PR(F1,b);PR(F1,c);PR(NL);PR(“Outputtwofloatingnumbers:\n”);PR(F2,a,b);PR(F1,c);PR(NL);PR(“Outputthreefloatingnumbers:\n”);PR(F3,a,b,c);}運行情況如下:Inputthreefloatingnumbera,b,c:2.45.99.1↙Outputonefloatingnumbereachline:2.405.909.10Outputtwofloatingnumbers: 5.909.10Outputthreefloatingnumbers:2.405.909.109.7分別用函數(shù)和帶參的宏,從3個數(shù)中找出最大數(shù)。解:(1)用函數(shù)實現(xiàn)main(){inta,b,c;printf(“Enterthreeintegers:”);scanf(“%d,%d,%d”,&a,&b,&c);printf(“max=%d\n”,max(a,b,c));}max(intx,inty,intz){intt;t=(x>y?x:y);return(t>z?t:z);}運行結(jié)果:Inputthreeintegers:12,34,9↙max=34(2)用帶參的宏實現(xiàn)#defineMAX(a,b)((a)>(b)?(a):(b))main(){inta,b,c;printf(“Inputthreeintegers:”);scanf(“%d,%d,%d”,&a,&b,&c);printf(“max=%d\n”,MAX(MAX(a,b),c));}運行結(jié)果:Inputthreeintegers:12,34,9↙max=349.8試述“文件包含”和程序文件的連接(link)的概念,二者有何不同?解:“文件包含”是事先將程序中需要用到的信息分別存放在不同的“頭文件”中(文件后綴為.h),用戶在編寫程序時,利用#include命令將該頭文件的內(nèi)容包含進來,成為程序的一部分。特別應(yīng)當(dāng)注意的是,該頭文件與它所在的源文件共同組成一個文件模塊(而不是兩個文件模塊)。在編譯時它是作為一個文件進行編譯的。連接則與此不同,它的作用是將多個目標(biāo)文件連接起來。如果有兩個或多個源程序文件,應(yīng)先對它們分別進行編譯,得到兩個或多個目標(biāo)文件(后綴為.obj),在連接階段,把這些目標(biāo)文件與系統(tǒng)提供的函數(shù)庫等文件連接成一個可執(zhí)行的文件(后綴為.exe)。9.9用條件編譯法實現(xiàn)以下功能:輸入一行電報文字,可以任選兩種輸出:一為原文輸出;一為將字母變成其下一字母(如’a’變成’b’……’z’變成’a’。非字母的字符不變)。用#define命令來控制是否要譯成密碼。例如:#defineCHANGE1則輸入密碼。若改為#defineCHANGE0則不譯成密碼,按原碼輸出。解:#include“stdio.h”#defineMAX80#defineCHANGE1main(){charstr[MAX];inti;printf(“Inputtext:\n”);gets(str);#if(CHANGE){for(i=0;i<MAX;i++){if(str[i]!=’\0’)if(str[i]>=’a’&&str[i]<=’z’||str[i]=’A’&&str[i]=’Z’)str[i]+=1;elseif(str[i]==’z’||str[i]==’Z’)str[i]-=25;}}#endifprintf(“Output:\n%s”,str);}運行結(jié)果:Inputtext:ALazyBrownFoxJumpsOverADog.↙Output:BMbazCspxoGpyKvnqtPwfsBEph.如果想輸出原文,可以將程序第3行改為:#defineCHANGE0修改后在運行:Inputtext:ALazyBrownFoxJumpsOverADog.↙Output:ALazyBrownFoxJumpsOverADog.第九章編譯預(yù)處理9.1#defineSWAP(a,b)t=b;b=a;a=tmain(){inta,b,t;printf("請輸入兩個整數(shù)a,b:");scanf("%d,%d",&a,&b);SWAP(a,b);printf("交換結(jié)果為:a=%d,b=%d\n",a,b);}9.2#defineSURPLUS(a,b)((a)%(b))main(){inta,b;printf("請輸入兩個整數(shù)a,b:");scanf("%d,%d",&a,&b);printf("a,b相除的余數(shù)為:%d\n",SURPLUS(a,b));}9.3#include#definS(a,b,c)((a+b+c)/2)#defineAREA(a,b,c)(sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(s(a,b,c)-c)))main(){floata,b,c;printf("請輸入三角形的三條邊:");scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)printf("其面積為:%8.2f.\n",AREA(a,b,c));elseprintf("不能構(gòu)成三角形!");}9.4#defineLEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400==0)main(){intyear;printf("\n請輸入某一年:");scanf("%d",&year);if(LEAP_YEAR(year))printf("%d是閏年.\n",year);elseprintf("%d不是閏年.\n",year);}9.5解:展開后:printf("&#118alue=%format\t",x);printf("&#118alue=%format\t",x);putchar('\n');printf("&#118alue=%format\t");printf("&#118alue=%format\t",x2);putchar('\n');輸出結(jié)果:&#118alue=5.000000ormat&#118alue=5.000000ormat&#118alue=3.000000ormat&#118alue=8.000000ormat9.8main(){inta,b,c;printf("請輸入三個整數(shù):");scanf("%d,%d,%d",&a,&b,&c);printf("三個之中最大值為:%d\n",max(a,b,c));}max(x,y,z)intx,y,z;{intt;t=(x>y?x:y);return(t>z?t:z);}9.10#include#defineMAX80#defineCHANGE1main(){charstr[MAX];inti;printf("請輸入文本行:\n");scanf("%s",str);#if(CHANGE){for(i=0;i{if(str[i]!='\0'if(str[i]>='a'&&str[i]<'z'||str[i]>='A'&&str[i]<'Z')str[i]+=1;elseif(str[i]=='z'||str[i]=='Z')str[i]-=25;}}#endifprintf("輸出電碼為:\n%s",str);}第10章指針10.1輸入3個整數(shù),按由小到大的順序輸出。解:main(){intn1,n2,n3;int*p1,*p2,*p3;printf(“Inputthreeintegersn1,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,theorderis:%d,%d,%d\n”,n1,n2,n3);}swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}運行結(jié)果Inputthreeintegersn1,n2,n3:34,21,25↙Now,theorderis:21,25,3410.2輸入3個字符串,按由小到打的順序輸出。解:main(){char*str1[20],*str2[20],*str3[20];charswap();printf(“Inputthreelines\n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);pritnf(“Now,theorderis:\n”);printf(“%s\n%s\n%s\n”,str1,str2,str3);}charswap(char*p1,char*p2)/*交換兩個字符串*/{char*p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}運行結(jié)果:Inputthreelines:Istudyveryhard.↙Clanguageisveryinteresting.↙Heisaprofessor.↙Now,theorderis:Clanguageisveryinteresting.Heisaprofessor.Istudyveryhard.10.3輸入10個整數(shù),將其中最小的數(shù)與第一個數(shù)對換,把最大的一個數(shù)與最后一個對換。寫3個函數(shù):(1)輸入10個數(shù);(2)進行處理;(3)輸出10個數(shù)。解:main(){intnumber[10];input(number);/*調(diào)用輸入10個數(shù)的函數(shù)*/max_min_value(number);/*調(diào)用交換函數(shù)*/output(number);/*調(diào)用輸出函數(shù)*/}input(intnumber[10])/*輸入10個數(shù)的函數(shù)*/{inti;print(“Input10number:”);for(i=0;i<10;i++)scanf(“%d”,&number[i]);}max_min_value(intarray[10])/*交換函數(shù)*/{int*max,*min,*p,*array_end;array_end=array+10;max=min=array;for(p=array+1;p<array_end;p++)if(*p>*max)max=p;/*將大數(shù)地址賦給max*/elseif(*p<*min)min=p;/*將小數(shù)地址賦給min*/*p=array[0];array[0]=*min;min=*p;/*將最小數(shù)與第一個數(shù)交換*/*p=array[9];array[9]=*max;max=*p;/*將最大數(shù)與第最后一個數(shù)交換*/return;}output(intarray[10])/*輸出函數(shù)*/{int*p;printf(“Now,theyare:”);for(p=array;p<=array+9;p++)printf(“%d”,*p);}運行結(jié)果:Input10numbers:322456781983644296↙Now,theyare:12456783263644299810.4有n個整數(shù),使其前面各數(shù)順序向后移m個位置,最后m個數(shù)變成前面m個數(shù)。寫一函數(shù)實現(xiàn)以上功能,在主函數(shù)中輸入n個整數(shù),并輸出調(diào)整后的n個數(shù)。解:main(){intnumber[20],n,m,I;/*共有多少個數(shù)*/printf(“Howmanynumbers?”);scanf(“%d”,&n);printf(“Input%dnumbers:\n”,n);/*輸入n個數(shù)*/for(i=0;i<n;i++)scanf(“%d”,&number[i]);printf(“Howmanyplaceyouwanttomove?”);/*后移多少個位置*/scanf(“%d”,&m);/*調(diào)用move函數(shù)*/move(number,n,m);printf(“Now,theyare:\n”);for(i=0;i<n;i++)printf(“%d”,number[i]);}move(intarray[20],intn,intm)/*循環(huán)后移一次的函數(shù)*/{int*p,array_end;array_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時,停止調(diào)用*/}運行結(jié)果:Howmanynumber?8↙Input8numbers:1243656782711↙Howmanyplaceyouwanttomove?4↙Now,theyare:7 27111243656710.5有一字符串,包含n個字符。寫一個函數(shù),將此字符串中從第m個字符開始的全部字符復(fù)制成為另一個字符串。解:main(){intm;char*str1[20],*str2[20];printf(“inputstring:”);gets(str1);printf(“Whichcharacterthatbegintocopy?”);scanf(“%d”,&m);if(strlen(str1)<m)printf(“inputerror!”);else{copystr(str1,str2,m);printf(“result:%s”,str2);}}copystr(char*p1,char*p2,intm)/*字符串部分復(fù)制函數(shù)*/{intn;n=0;while(n<m-1){n++;p1++;}while(*p1!=’\0’){*p2=*p1;p1++;p2++;}*p2=’\0’;}運行結(jié)果:Inputstring:reading-room↙Whichcharacterthatbegintocopy?9↙Result:room10.6輸入一行文字,找出其中大寫字母,小寫字母,空格,數(shù)字及其他字符各有多少。解:#include<stdio.h>main(){intupper=0,lower=0,digit=0,space=0,other=0,i=0;char*p,s[20];printf(“Inputstring:”);while((s[i]=getchar())!=’\n’)i++;p=&s[0];while(*p!=’\n’){if((‘A’<=*p)&&(*p<=’Z’))++upper;elseif((‘a(chǎn)’<=*p)&&(*p<=’z’))++lower;elseif(*p==’’)++space;elseif((*p<=’9’)&&(*p>=’0’))++digit;else++other;p++;}printf(“uppercase:%dlowercase:%d”,upper,lower);printf(“space:%ddigit:%dother:%d\n”,space,digit,other);}運行結(jié)果:Inputstring:Todayis2000/1/1uppercase:1lowercase:6space:2digit:6other:210.7寫一個函數(shù),將一個3×3的矩陣轉(zhuǎn)置。解:main(){inta[3][3],*p,i;printf(“Inputmatrix:\n”)’for(i=0;i<3;i++)scanf(“%d,%d,%d”,&a[i][0],&a[i][1],&a[i][2]);p=&a[0][0];move(p);printf(“Now,matrix:\n”);for(i=0;i<3;i++)printf(“%d%d%d\n”,a[i][0],&a[i][1],&a[i][2]);}move(int*pointer){inti,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;}}運行結(jié)果:Inputmatrix:123↙456↙789↙Now,matrix:1472583699.8將一個5×5的矩陣中最大的元素放在中心,4個角分別放在4個最小的元素(按從左到右,從上到下的順序,依次從小到大存放),寫一個函數(shù)實現(xiàn)之,并用main函數(shù)調(diào)用。解:main(){inta[5][5],*p,i,j;printf(“Inputmatrix:\n”);for(i=0;i<5;i++)/*輸入矩陣*/for(j=0;j<5;j++)scanf(“%d”,&a[i][j]);p=&a[0][0];/*使p指向0行0列元素*/change(p);/*調(diào)用函數(shù),實現(xiàn)交換*/printf(“Now,matrix:\n”)for(i=0;i<5;i++)/*輸出已交換的矩陣*/{for(j=0;j<5;j++)printf(“%d”,a[i][j]);printf(“\n”);}}change(int*p)/*交換函數(shù)*/{inti,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))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)))pmin=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+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;}運行結(jié)果:Inputmatrix:3534333231↙3029282726↙2524232221↙1514131211↙Now,matrix:1134333212302928272625243522212019181716132315311410.9在主函數(shù)中輸入10個等長的字符串。用另一個函數(shù)對它們排序,然后在主函數(shù)輸出這10個已排好序的字符串。解:#include<string.h>main(){voidsort(chars[][]);inti;charstr[10][6];printf(“Input10strings:\n”);for(i=0;i<10;i++)scanf(“%s”,str[i]);sort(str);printf(“Now,thesequenceis:\n”);for(i=0;i<10;i++)printf(“%s\n”,str[i]);}voidsort(chars[10][6]){inti,j;char*p,temp[10];p=temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(strcmp(s[j],s[j+1])>0){strcpy(p,s[j]);strcpy(s[j],s[+j+1]);strcpy(s[j+1],p);}}運行結(jié)果:Input10strings:China↙Japan↙Korea↙Egypt↙Nepal↙Burma↙Ghana↙Sudan↙Italy↙Libya↙Now,thesequenceis:BurmaChinaEgyptGhanaItalyJapanKoreaLibyaNepalSudan10.10用指針數(shù)組處理上一題目,字符串不等長。解:main(){inti;char*p[10],str[10][20];for(i=0;i<10;i++)p[i]=str[i];/*將第i個字符串的首地址賦予數(shù)組p的第i個元素*/printf(“Input10strings:\n”);for(i=0;i<10;i++)scanf(“%s”,p[i]);sotr(p);printf(“Now,thesequenceis:\n”);for(i=0;i<10;i++)printf(“%s\n”,p[i]);}sotr(char*p[]){inti,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;}}運行情況如下:China↙Japan↙Yeman↙Pakistan↙Mexico↙Korea↙Brazil↙Iceland↙Canada↙Mongolia↙Now,thesequenceis:BrazilCanadaChinaIcelandJapanKoreaMexicoMongoliaPakistanYemen10.11將n個數(shù)按輸入輸出順序的逆序排列,用函數(shù)實現(xiàn)。解:main(){inti,n;char*p,num[20];printf(“inputn:”);scanf(“%d”,&n);printf(“pleaseinputthesenumbers:\n”);for(i=0;i<n;i++)scanf(“%d”,&num[i]);p=&num[0];sort(p,n);printf(“Now,thesequenceis:\n”);for(i=0;i<n;i++)printf(“%d”,num[i]);}sort(charp,intm)/*將n個數(shù)逆序排列函數(shù)*/{inti;chartemp,*p1,*p2;for(i=0;i<m/2;i++){p1=p+i;p2=p+(m-1-i);temp=*p1;*p1=*p2;*p2=temp;}}運行結(jié)果:inputn:10↙pleaseinputthesenumbers:10987654321↙Now,thesequenceis:1234567891010.12有一個班4個學(xué)生,5門課。(1)求第一門課的平均分;(2)找出有兩門以上課程不及格的學(xué)生,輸出他們的學(xué)號和全部課程成績及平均成績;(3)找出平均成績在90分以上或全部課程成績在85分以上的學(xué)生。分別編3個函數(shù)實現(xiàn)上3個要求。解:main(){inti,j,*pnum,num[4];floatscore[4][5],aver[4],*psco,*pave;charcourse[5][10],*pcou;printf(“Inputcourse:\n”);pcou=course[0];for(i=0;i<5;i++)scanf(“%s”,course[i]);printf(“InputNO.andscores:\n”);printf(“NO.”);for(i=0;i<5;i++)printf(“,%s”,course[i]);printf(“\n”);psco=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){scanf(“%d”,pnum+i);for(j=0;j<5;j++)scanf(“,%f”,psco+5*i+j);}pave=&aver[0];printf(“\n\n”);avsco(psco,pave);/*求出每個學(xué)生的平均成績*/avcourl(pcou,psco);/*求出第一門課的平均成績*/printf(“\n\n”);fali2(pcou,pnum,psco,pave);/*找出2門課不及格的學(xué)生*/printf(“\n\n”);good(pcou,pnum,psco,pave);/*找出成績好的學(xué)生*/}avsco(float*psco,float*pave);/*求每個學(xué)生的平均成績的函數(shù)*/{intI,j;floatsum,average;for(i=0;i<4;i++){sum=0.0;for(j=0;j<5;j++)sum=sum+(*(psco+5*i+j));/*累計每個學(xué)生的各科成績*/average=sum/5;/*計算平均成績*/*(pave+i)=average;}}avcourl(char*pcou,float*psco)/*求第一門課的平均成績的函數(shù)*/{inti;floatsum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(psco+5*i));/*累計每個學(xué)生的得分*/average1=sum/4;/*計算平均成績*/printf(“course1:%s,averagescore:%6.2f.\n”,pcou,average1);}fail2(charcourse[5][10],intnum[],floatscore[4][5],floataver[4])/*找兩門以上課程不及格的學(xué)生的函數(shù)*/{intI,j,k,labe1;printf(“==========Studentwhoisfail=======\n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%10s”,course[i]);printf(“average\n”);for(i=0;i<>4;i++){label=0;for(j=0;j<5;j++)if((score[i][j]<60.0)label++;if(label>=2){pintf(“%5d”,num[i]);for(k=0,k<5,k++)printf(“%10.2f”,score[i][k]);printf(“%10.2f\n”,aver[i]);}}}good(charcourse[5][10],intnum[4],floatscore[4][5],floataver[4])/*找成績優(yōu)秀的學(xué)生(各門85分以上或平均90分以上)的函數(shù)*/{inti,j,k,n;printf(“======Studentwhosescoreisgood======\n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%10s”,course[i]);printf(“average\n”);for(i=0;i<4;i++){n=0;for(j=0;j<5;j++)if((score[i][j])>85.0)n++;if((n==5)||(aver[i]>=90)){printf(“%5d”,num[i]);for(k=0;k<5;k++)printf(“%10.2f”,score[i][k]);printf(“%10.2f\n”,aver[i]);}}}運行情況如下:Inputcourse:(輸入課程名稱)English↙Computer↙Math↙Physics↙Chemistry↙InputNO.andscores:(輸入學(xué)號和各門課成績)NO.,English,Computer,Math,Physics,Chemistry,average(按此順序輸入)101,34,56,88,99,89↙102,77,88,99,67,78↙103,99,90,87,86,89↙104,78,89,99,56,77↙course1:English,averagescore:72.00(第一門課英語的平均成績)==========Studentwhoisfail=======(有兩門課不及格者)NO.EnglishComputerMathPhysicsChemistryaverage10134.0056.0088.0099.0089.0073.20======Studentwhosescoreisgood======(成績優(yōu)良者)NO.EnglishComputerMathPhysicsChemistryaverage10399.0090.0087.0086.0089.0090.20程序中num是存放4各學(xué)生學(xué)號的一維數(shù)組,course是存放5門課名稱的二維字符數(shù)組,score是存放4個學(xué)生5門課成績的二維數(shù)組,aver是存放每個學(xué)生平均成績的數(shù)組,pnum是指向num數(shù)組的指針變量,pcou是指向course數(shù)組的指針變量,psco是指向score數(shù)組的指針變量,psco是指向score數(shù)組的指針變量,pave是指向aver數(shù)組的指針變量。函數(shù)的形參用數(shù)組,調(diào)用函數(shù)時的實參用指針變量。形參也可以不用數(shù)組而用指針變量,請自己分析。10.13輸入一個字符串,內(nèi)有數(shù)字和非數(shù)字字符,如:a123x45617960?302tab5876將其中連續(xù)的數(shù)字作為一個整數(shù),依次存放到一數(shù)組a中。例如123放在a[0]中,456放在a[1]中……統(tǒng)計共有多少個整數(shù),并輸出這些數(shù)。解:#include<stdio.h>main(){charstr[50],*pstr;intI,j,k,m,e10,digit,ndigit,a[10],*pa;printf(“Inputastring:\n”);gets(str);printf(“\n”);pstr=&str[0];/*字符指針pstr置于數(shù)組str首地址*/pa=&a[0];/*指針pa置于a數(shù)組首地址*/ndigit=0;/*ndigit代表有多少個整數(shù)*/i=0;/*代表字符串中第n個字符*/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;/*將個位數(shù)賦予digit*/k=1;while(k<j)/*將含有兩位以上的其他位的數(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++;pa++;/*指針pa指向a數(shù)組下一元素*/j=0;}}i++;}if(j>0)/*以數(shù)字結(jié)尾字符串的最后一個數(shù)據(jù)*/{digit=*(pstr+i-1)-48;/*將個位數(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(“Thereare%dnumbersinthisline.Theyare:\n”,ndigit);j=0;pa=&a[0];for(j=0;j<ndigit;j++)/*打印數(shù)據(jù)*/printf(“%d”,*(pa+j));printf(“\n”);}運行情況如下:Inputastring:a123x45617960?302tab5876↙Thereare6numbersinthisline.Theyare:12345617960302587610.14寫一函數(shù),實現(xiàn)兩個字符串的比較。即自己寫一個strcmp函數(shù),函數(shù)原型為:intstrcmp(char*p1,char*p2)設(shè)p1指向字符串s1,p2指向字符串s2。要求:當(dāng)s1=s2時,返回值為0。當(dāng)s1≠s2時,返回它們兩者的第一個不同字符的ASCII碼差值(如”BOY”與”BAD”,第二個字母不同,”O(jiān)”與”A”之差為79-65=14);如果s1>s2,則輸出正值;如果s1<s2,則輸出負(fù)值。解:main(){intm;charstr1[20],str2[20],*p1,*p2;printf(“Inputtwostrings:\n”);scanf(“%s”,str1);scanf(“%s”,str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf(“result:%d,\n”,m);}strcmp(char*p1,char*p2)/*兩個字符串比較的函數(shù)*/{inti;i=0;while(*(p1+i)==*(p2+i))if(*(p1+i++)==’\0’return(*(p1+i)-*(p2+i));/*不等時返回結(jié)果為第一個不等字符ASCII碼的差值*/}運行情況如下:①Inputtwostrings:CHINA↙Chen↙Result:-32②Inputtwostrings:hello!↙hello!↙result:0③Inputtwostrings:dog↙cat↙result:110.15編寫一個程序,打入月份號,輸出該月的英文月名。例如,輸入”3”,則輸出”March”解:main(){char*month_name[13]={“illegalmonth”,”January”,’’February”,”March”,”April”,”May”,”June”,”July”,”August”,”September”,”O(jiān)ctober”,”November”,”December”};intn;printf(“Inputmonth:\n”);scanf(“%d”,&n);if((n<=12)&&(n>=1))printf(“Itis%s.”,*(month_name+n));elseprintf(“Itiswrong.”);}運行結(jié)果:①Inputmonth:2ItisFebruary.②Inputmonth:8ItisAugust.③Inputmonth:13Itiswrong.10.16用指向指針的指針的方法對5個字符串排序并輸出。解:#defineLINEMAX20/*定義字符串的最大長度*/main(){inti;char**p,*pstr[5],str[5][LINEMAX];for(I=0;I<5;I++)pstr[i]=str[i];/*將第i個字符串的首地址賦予指針數(shù)組pstr的第i個元素*/printf(“Input5strings:\n”);for(i=0;i<5;i++)scanf(“%s”,pstr[i]);p=pstr;printf(“stringssorted:\n”);for(i=0;i<5;i++)printf(“%s\n”,pstr[i]);}sort(char**p)/*冒泡法對5個字符串排序的函數(shù)*/{inti,j;char*temp;for(i=0;i<5;i++){for(j=i+1;j<5;j++){if(strcmp(*(p+i),*(p+j))>0)/*比較后交換字符串地址*/{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}}}}運行情況如下:Input5strings:China↙America↙India↙Philippines↙Canada↙Stringssorted:AmericaCanadaChinaIndiaPhilippines10.17用指向指針的指針的方法對n個整數(shù)排序并輸出。要求將排序單獨寫成一個函數(shù)。n和正整數(shù)在主函數(shù)中輸入。最后在主函數(shù)中輸出。解:main(){voidsort(int**p,intn);inti,n,data[10],**p,*pstr[10];printf(“Inputn:”);scanf(“%d”,&n);for(i=0;i<n;i++)pstr[i]=&data[i];/*將第i個整數(shù)的地址賦予指針數(shù)組pstr的第i個元素*/printf(“Input%dintegernumbers:\n”,n);for(i=0;i<n;i++)scanf(“%d”,pstr[i]);p=pstr;sort(p,n);printf(“Now,thesequenceis:\n”);for(i=0;i<n;i++)printf(“%d”,*pstr[i]);printf(“\n”);}voidsort(int**p,intn)/*排序函數(shù)*/{inti,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;}}}}運行情況如下:Inputn:7↙Input7integernumbers:3498561222651↙Now,thesequenceis:1122234566598data數(shù)組用來存放n個整數(shù);pstr是指針數(shù)組,每一個元素指向data數(shù)組中的一個元素;p是指向指針的指針。第十章指針10.1main(){intn1,n2,n3;int*p1,*p2,*p3;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(n2>n3)swap(p2,p3);printf("%d,%d,%d\n",n1,n2,n3);}swap(p1,p2)int*p1,*p2;{intp;p=*p1;*p1=*p2;*p2=p;}10.2main(){char*str1[20],*str2[20],*str3[20];charswap();scanf("%s",str1);scanf("%s",str2);scanf("%s",str3);if(strcmp(str1,str2)>0)swap(str1,str2);if(strcmp(str1,str3)>0)swap(str1,str3);if(strcmp(str2,str3)>0)swap(str2,str3);printf("%s\n%s\n%s\n",str1,str2,str3);}charswap(p1,p2)char*p1,*p2;{char*p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}10.3main(){intnumber[10];input(number);max_min_&#118alue(number);output(number);}input(number)intnumber[10];{inti;for(i=0;i<10;i++)scanf("%d",&number[i]);}max_min_&#118alue(number)intnumber[10];{int*max,*min;int*p,*end;end=number+10;max=min=number;for(p=number+1;pif(*p>*max)max=p;elseif(*p<*min)min=p;*p=number[0];number[0]=*min;*min=*p;*p=number[9];number[9]=*max;*max=*p;return;}output(number)intnumber[10];{int*p;for(p=number;pprintf("%d,",*p);printf("%d\n",*p);}10.4main(){intnumber[20],n,m,i;scanf("%d",&n);scanf("%d",&m);for(i=0;iscanf("%d",&number[i]);move(number,n,m);for(i=0;iprintf("%8d",number[i]);}move(array,n,m)intarray[20],n,m;{int*p,end;end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=end;m--;if(m>0)move(array,n,m);}10.5#definenmax50main(){inti,k,m,n,num[nmax],*p;scanf("%d",&n);p=num;for(i=0;i*(p+i)=i+1;i=k=m=0;while(m{if(*(p+i)!=0)k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;}while(*p==0)p++;printf("%d",*p);}10.6main(){intlen;char*str[20];scanf("%s",str);len=length(str);printf("\nlen=%d\n",len);}length(p)char*p;{intn=0;while(*p!='\0'){n++;p++;}return(n);}10.7main(){intm;char*str1[20],*str2[20];scanf("%s",str1);scanf("%d",&m);if(strlen(str1)printf("error");else{copystr(str1,str2,m);printf("%s",str2);}}copystr(p1,p2,m)char*p1,*p2;intm;{intn=0;while(n{n++;p1++;}while(*p1!='\0'){*p2=*p1;p1++;p2++;}*p2='\0';}10.8#include"stdio.h"main(){intcle=0,sle=0,di=0,wsp=0,ot=0,i;char*p,s[20];for(i=0;i<20;i++)s[i]=0;i=0;while((s[i]=getchar())!='\n')i++;p=s;while(*p!='\n'){if(*p>='a'&&*p<='z')++sle;elseif(*p>='A'&&*p<='Z')++cle;elseif(*p=='')++wsp;elseif(*p>='0'&&*p<='9')++di;else++ot;p++;}printf("sle=%d,cle=%d,wsp=%d,di=%d,ot=%d\n",sle,cle,wsp,di,ot);}10.9main(){inta[3][3],*p,i;for(i=0;i<3;i++)scanf("%d,%d,%d",a[i][0],a[i][1],a[i][2]);p=a;move(p);for(i=0;i<3;i++)printf("%d%d%d\n",a[i][0],a[i][1],a[i][2]);}move(pointer)int*pointer;{inti,j,t;for(i=0;i<2;i++)for(j=i+1;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;}}10.10main(){inta[5][5],*p,i,j;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);p=a;change(p);for(i=0;i<5;i++){printf("\n");for(j=0;j<5;j++)printf("%8d",a[i][j]);}}change(p)int*p;{inti,j,change;int*pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++)for(j=0;j<5;j++){if(*pmax<*(p+5*i+j))pmax=p+5*i+j;if(*pmin>*(p+5*i+j))pmin=p+5*i+j;}change=*(p+12);*(p+12)=*pmax;*pmax=change;change=*p;*p=*pmin;*pmin=change;pmin=p+1;for(i=0;i<5;i++)for(j=0;j<5;j++)if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;change=*(p+4);*(p+4)=*pmin;*pmin=change;pmin=p+1;for(i=0;i<5;i++)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;change=*(p+20);*(p+20)=*pmin;*pmin=change;pmin=p+1;for(i=0;i<5;i++)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;change=*(p+24);*(p+24)=*pmin;*pmin=change;}10.11main(){inti;char*p,str[10][10];for(i=0;i<10;i++)scanf("%s",str[i]);p=str;sort(p);for(i=0;i<10;i++)printf("%s\n",str[i]);}sort(p)char*p;{inti,j;chars[10],*smax,*smin;for(i=0;i<10;i++){smax=p+10*i;for(j=i+1;j<10;j++){smin=p+10*j;if(strcmp(smax,smin)>0){strcpy(s,smin);strcpy(smin,smax);strcpy(smax,s);}}}}10.12#defineMAX20main(){inti;char*pstr[10],str[10][MAX];for(i=0;i<10;i++)pstr[i]=str[i];for(i=0;i<10;i++)scanf("%s",pstr[i]);sort(pstr);for(i=0;i<10;i++)printf("%s\n",pstr[i]);}sort(pstr)char*pstr[10];{inti,j;char*p;for(i=0;i<10;i++){for(j=i+1;j<10;j++){if(strcmp(*(pstr+i),*(pstr+j))>0){p=*(pstr+i);*(pstr+i)=*(pstr+j);*(pstr+j)=p;}}}}10.13#include"math.h"main(){intn=20;floata,b,a1,b1,a2,b2,c,(*p)(),jiff();scanf("%f,%f",&a,&b);scanf("%f,%f",&a1,&b1);scanf("%f,%f",&a2,&b2);p=sin;c=jiff(a,b,n,p);printf("sin=%f\n",c);p=cos;c=jiff(a1,b1,n,p);printf("cos=%f\n",c);p=exp;c=jiff(a2,
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年立柱廣告牌租賃合同(含廣告內(nèi)容更新維護)4篇
- 2025年度民辦學(xué)校教師職稱評定與晉升合同4篇
- 2025年度海上資源開發(fā)抽沙船租賃合同4篇
- 2025年度綠色環(huán)保門窗安裝與認(rèn)證服務(wù)合同4篇
- 2025年食品行業(yè)綠色包裝采購合同模板3篇
- 2025版煤礦安全生產(chǎn)責(zé)任轉(zhuǎn)讓合同協(xié)議4篇
- 2025年度重型打樁機租賃及運輸保障合同4篇
- 2025版養(yǎng)老院入住安全保障與緊急救援合同3篇
- 2025版中學(xué)生托管班學(xué)業(yè)輔導(dǎo)及心理關(guān)懷合同3篇
- 2025版綠色能源項目特許經(jīng)營合同示范文本4篇
- 《精密板料矯平機 第1部分:型式和基本參數(shù)》
- 舞蹈課家長會
- 自來水質(zhì)量提升技術(shù)方案
- 房地產(chǎn)銷售任務(wù)及激勵制度
- 并購指南(如何發(fā)現(xiàn)好公司)
- DL-T-1642-2016環(huán)形混凝土電桿用腳扣
- 銅礦成礦作用與地質(zhì)環(huán)境分析
- 30題紀(jì)檢監(jiān)察位崗位常見面試問題含HR問題考察點及參考回答
- 詢價函模板(非常詳盡)
- 《AI營銷畫布:數(shù)字化營銷的落地與實戰(zhàn)》
- 麻醉藥品、精神藥品、放射性藥品、醫(yī)療用毒性藥品及藥品類易制毒化學(xué)品等特殊管理藥品的使用與管理規(guī)章制度
評論
0/150
提交評論