C程序设计第三版谭浩强习题答案全下_第1页
C程序设计第三版谭浩强习题答案全下_第2页
C程序设计第三版谭浩强习题答案全下_第3页
C程序设计第三版谭浩强习题答案全下_第4页
C程序设计第三版谭浩强习题答案全下_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章预处理命令9.1 定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。解:#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=%n”d,a,b);运行结果如下:Inputtwointegersa,b:3,4/Now,a=4,b=39.2 输入两个整数,求它们相除的余数。用带参的宏来实现,编程序。解:#defineSURPLUS(a,b)a%bma

2、in()inta,b;printf(“Inputtwointegersa,b:”);scanf(“%d,%d”,&a,&b);printf(“Rememberisn%”d,SURPLUS(a,b);运行结果如下:Inputtwointegersa,b:60,13/Rememberis89.3 三角形的面积为:area=其中s=(a+b+c),a,b,c为三角形的三边。定义两个带参的宏,一个用来求求area。写程序,在s,另一个用来程序中用带实参的宏名来求面积area。解:# include<math.h># defineS(a,b,c)(a+b+c)/2# defi

3、neAREA(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:%8n.2”f.,AREA(a,b,c);else);printf(“Itisnotatriangle!运行结果:Inputa,b,c:3,4,5/area:6.00Inputa,b,c:12

4、,3,5/Itisnotatriangle!9.4 给年份year定义一个宏,以判断该年份是否为闰年。提示:宏名可定义为LEAP_YEAR,形参为y,即定义宏的形式为:# defineLEAP_YEAR(y)(读者设计的字符串)在程序中用以下语句输出结果: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(n“Inputye

5、ar:”);scanf(“%d”,&year);if(LEAP_YEAR(year)printf(“%disaleapyena”r.,year);elseprintf(“%disnotaleapyena”r.,year);运行结果: Inputyear:1990/1990isnotaleapyear. Inputyear:2000/2000isaleapyear.9.5请分析以下一组宏所定义的输出格式# defineNLputchar(n')# definePR(format,value)printf(“valtu”e=%,(vfaolrumea)t# definePRINT(

6、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);解:展开后为:写出宏展开后的情况,并写出应输出的结果,设x=5,x1=3,x2=8printf(“value=%formtat,x);printf(“value=%formtat,x);putchar(n');printf(“value=%formtat,x1);printf(value=%t”for,mx2a)t;putchar(n');如果运行以下程序:# in

7、clude<stdio.h># defineNLputchar(n')valtu ” e=%,(vfaolrumea)t# definePR(format,value)printf(# 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);输出结果如下:value=5.000000ormatvalue=5.000000ormatvalue=3

8、.000000ormatvalue=8.000000ormat通过本习题可以看到:如果用 Turbo C,则不能用这种方法将输出格式和输出项都作为参数。在宏替换时对字符串中的字符不予替换,一律保留原状。9.6请设计输出实数的格式。实数用“6.2f格式输出。解:#definePRprintf#defineNLn”#defineFs%f”#defineF“%6.2f”#defineF1FNL#defineF2Ft”“FNL#defineF3Ft”“Ft“”FNLmain()floata,b,c;PR(“Inputthreefloatingnumbersa,b,c:n);scanf(Fs,&

9、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/Outputonefloatingnumbereachl

10、ine:2.405.909.10Outputtwofloatingnumbers:5.909.10Outputthreefloatingnumbers:2.405.909.109.7分别用函数和带参的宏,从3个数中找出最大数。解:(1)用函数实现main()inta,b,c;printf(“Enterthreeintegers:”);scanf(“%d,%d,%d”,&a,&b,&c);printf(“max=n%”d,max(a,bc);max(intx,inty,intz)intt;t=(x>y?x:y);return(t>z?t:z);运行结果:Inp

11、utthreeintegers:12,34,9/max=34(2)用带参的宏实现#defineMAX(a,b)(a)>(b)?(a):(b)main()inta,b,c;printf(“Inputthreeintegers:”);scanf(“%d,%d,%d”,&a,&b,&c);printf(max=n%d,MAX(MAX(a,b),c);运行结果:Inputthreeintegers:12,34,9/max=349.8 试述“文件包含”和程序文件的连接(link)的概念,二者有何不同?解:“文件包含”是事先将程序中需要用到的信息分别存放在不同的“头文件”中(

12、文件后缀为.h),用户在编写程序时,利用#inelude命令将该头文件的内容包含进来,成为程序的一部分。特别应当注意的是,该头文件与它所在的源文件共同组成一个文件模块(而不是两个文件模块)。在编译时它是作为一个文件进行编译的。如果有两个或多个源程序文件,(后缀为 .obj ),在连接阶段,把这些目标连接则与此不同,它的作用是将多个目标文件连接起来。先对它们分别进行编译,得到两个或多个目标文件.exe) 。文件与系统提供的函数库等文件连接成一个可执行的文件(后缀为9.9 用条件编译法实现以下功能:输入一行电报文字,可以任选两种输出:一为原文输出;一为将字母变成其下一字母(如a变成b'z变

13、成a'。非字母的字符不变)。用#3仙3命令来控制是否要译成密码。例如:#defineCHANGE1则输入密码。若改为#defineCHANGE0则不译成密码,按原码输出。解:#include“stdio.h”#defineMAX80#defineCHANGE1main()charstrMAX;inti;printf(“Inputtenx”t:);gets(str);# if(CHANGE)for(i=0;i<MAX;i+)if(stri!=0')'if(stri>='a'&&stri<='z'|stri=

14、'A'&&stri='Z')stri+=1;elseif(stri='z'|stri='Z')stri-=25;#endifprintf(“Outpnu%t:s”,str);运行结果:Inputtext:ALazyBrownFoxJumpsOverADog./Output:BMbazCspxoGpyKvnqtPwfsBEph.如果想输出原文,可以将程序第3行改为:# defineCHANGE0修改后在运行:Inputtext:ALazyBrownFoxJumpsOverADog./Output:ALazyBrown

15、FoxJumpsOverADog.第九章编译预处理9.1#defineSWAP(a,b)t=b;b=a;a=tmain()inta,b,t;printf("请输入两个整数a,b:");scanf("%d,%d",&a,&b);SWAP(a,b);printf("交换结果为:a=%d,b=%dn",a,b);9.2#defineSURPLUS(a,b)(a)%(b)main()inta,b;printf("请输入两个整数a,b:");scanf("%d,%d",&a,&am

16、p;b);printf("a,b相除的余数为:%dn",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>

17、;a)printf("其面积为:%8.2f.n",AREA(a,b,c);elseprintf("不能构成三角形!");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",yea

18、r);9.5 解:展开后:printf("#118alue=%formatt",x);printf("#118alue=%formatt",x);putchar('n');printf("#118alue=%formatt");printf("#118alue=%formatt",x2);putchar('n');输出结果#118alue=5.000000ormat#118alue=5.000000ormat#118alue=3.000000ormat#118alue=8.00000

19、0ormat9.8main()inta,b,c;printf("请输入三个整数:");scanf("%d,%d,%d",&a,&b,&c);printf("三个之中最大值为:%dn",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()charstrMAX;inti;printf("请输入文本行:n");scanf(&q

20、uot;%s",str);#if(CHANGE)for(i=0;iif(stri!='0'if(stri>='a'&&stri<'z'|stri>='A'&&stri<'Z')stri+=1;elseif(stri='z'|stri='Z')stri-=25;#endifprintf("输出电码为:n%s",str);第10章指针10.1输入3个整数,按由小到大的顺序输出。解:main()intn1

21、,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);d ,n1,n2,n3); printf(“Now,theorderis:%d,%d,%nswap(int*p1,int*p2)intp;p=*p1;*p1=*p2;*p2=p;运行结果

22、Inputthreeintegersn1,n2,n3:34,21,25Now,theorderis:21,25,3410.2输入3个字符串,按由小到打的顺序输出。解:main()char*str120,*str220,*str320;charswap();printf(“Inputthreeline”s);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)swa

23、p(str2,str3);pritnf(“Now,theon”);printf(“%sn”,str1,str2,str3);/*交换两个字符串*/charswap(char*p1,char*p2)char*p20;strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);运行结果:Inputthreelines:Istudyveryhard./CIanguageisveryinteresting./Heisaprofessor./Now,theorderis:CIanguageisveryinteresting.Heisaprofessor.main()int/* 调用输

24、入 10 个数的函数*/* 调用交换函数*/number10;input(number);max_min_vaIue(numIstudyveryhard.10.3输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。解:for(i=0;i<10;i+)scanf(“%d”,&numberi);max_min_value(intarray10)int*max,*min,*p,*array_end;array_end=array+10;max=min=array;for(p=array+1;p&

25、lt;array_end;p+)if(*p>*max)max=p;elseif(*p<*min)min=p;* p=array0;array0=*min;min=*p;* p=array9;array9=*max;max=*p;return;output(intarray10)int*p;printf(“Now,theyare:”);for(p=array;p<=array+9;p+)printf(“%d”,*p);/*交换函数*/*将大数地址赋给max*/*将小数地址赋给min*/*将最小数与第一个数交换*/*将最大数与第最后一个数交换*/*输出函数*/运行结果:Input

26、10numbers:322456781983644296/Now,theyare:12456783263644299810.4有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数实现以上功能,在主函数中输入n个整数,并输出调整后的n个数。解:main()intnumber20,n,m,I;printf(“Howmanynumbers?”);scanf(“%d”,&n);printf(“Input%dnumbers:n”,n);for(i=0;i<n;i+)scanf(“%d”,&numberi);printf(“Howmanyplaceyouwa

27、nttomove?scanf(“%d”,&m);move(number,n,m);printf(“Now,theyanr/*共有多少个数*/*输入n个数*/”);/*后移多少个位置*/*调用move函数*/e:);for(i=0;i<n;i+)printf(“%d”,numberi);move(intarray20,intn,intm)/*循环后移一次的函数*/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)mo

28、ve(array,n,m);/*递归调用,当循环次数m减至0时,停止调用*/运行结果:Howmanynumber?8/Input8numbers:1243656782711/Howmanyplaceyouwanttomove?4/Now,theyare:727111243656710.5有一字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。解:main()intm;char*str120,*str220;printf(“inputstring:”);gets(str1);printf(“Whichcharacterthatbegintocopy?”)

29、;scanf(“%d”,&m);if(strlen(str1)<m)printf(“inputerror!”);elsecopystr(str1,str2,m);printf(“result:%s”,str2);copystr(char*p1,char*p2,intm)/*字符串部分复制函数*/intn;n=0;while(n<m-1)n+;p1+;while(*p1!=0'')*p2=*p1;p1+;p2+;*p2='0';运行结果:Inputstring:reading-room/Whichcharacterthatbegintocopy

30、?9/Result:room10.6输入一行文字,找出其中大写字母,小写字母,空格,数字及其他字符各有多少。解:#include<stdio.h>main()intupper=0,lower=0,digit=0,space=0,other=0,i=0;char*p,s20;printf("Inputstring:");while(si=getchar()!=n'')i+;p=&s0;while(*p!=n'')if('A'<=*p)&&(*p<='Z')+uppe

31、r;elseif('a'<=*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:%n"d,space,digit,other);运行结果:Inputstri

32、ng:Todayis2000/1/1uppercase:1lowercase:6space:2digit:6other:210.7写一个函数,将一个3x3的矩阵转置。解:main()inta33,*p,i;printf(“Inputmatrnix”:)'for(i=0;i<3;i+)scanf(“%d,%d,%d”,&ai0,&ai1,&ai2);p=&a00;move(p);printf(“Now,matrnix”:);for(i=0;i<3;i+)printf(“%d%dn%”d,ai0,&ai1,&ai2);move(i

33、nt*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;运行结果:Inputmatrix:123/456/789/Now,matrix:1479.8将一个5X5的矩阵中最大的元素放在中心,4个角分别放在4个最小的元素(按从左到右,从上到下的顺序,依次从小到大存放)main()inta55,*p,i,j;printf(“Inputmatrnix”:);for(i=0;i<5;i+)for(

34、j=0;j<5;j+)scanf(“%d”,&aij);p=&a00;change(p);main函数调用。解:/*输入矩阵*/*使p指向0行0列元素*/*调用函数,实现交换*/*输出已交换的矩阵*/printf(Now,matrnix":)for(i=0;i<5;i+)for(j=0;j<5;j+)printf("d”,aij);printf(n"");change(int*p)inti,j,temp;int*pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i+)for(j=i;j<

35、;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+)for(j=0;j<5;j+)/*交换函数*/*找最大值和最小值的地址,并赋给pmax,pmin*/*将最大值换给中心元素*/*将最小值换给左上角元素*/*找第二最小值的地址赋给pmin*/if(p+5*i+j)!=p)&&(*pm

36、in>*(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+)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+)for

37、(j=0;j>5;j+)/*找第if(p+5*i+j)!=p)&&(p+5*i+j)!=(p+4)&&(p+5*i+j)!=pmin=p+5*i+j;(p+20)&&(*pmin>*(p+5*i+j)temp=*pmin;/*将第四最小值换给右下角元素*/* pmin=*(p+24);* (p+24)=temp;运行结果:Inputmatrix:3534333231/3029282726/2524232221/1514131211/Now,matrix:11343332123029282726252435222120191817161

38、32315311410.9在主函数中输入10个等长的字符串。用另一个函数对它们排序,然后在主函数输出这1 0个已排好序的字符串。解:#include<string.h>main()voidsort(chars);inti;charstr106;printf(“Input10strinng”s:);for(i=0;i<10;i+)scanf(“%s”,stri);sort(str);printf(“Now,thesequencen”is:);for(i=0;i<10;i+)printf(“n%”s,stri);voidsort(chars106)inti,j;char*p

39、,temp10;p=temp;for(i=0;i<9;i+)if(strcmp(sj,sj+1)>0)strcpy(p,sj);strcpy(sj,s+j+1);strcpy(sj+1,p);运行结果:Input10strings:China/Japan/Korea/Egypt/Nepal/Burma/Ghana/Sudan/Italy/Libya/Now,thesequenceis:BurmaChinaEgyptGhanaItalyJapanKoreaLibyaNepalSudan10.10用指针数组处理上一题目,字符串不等长。解:main()inti;char*p10,str1

40、020;for(i=0;i<10;i+)pi=stri;/*将第i个字符串的首地址赋予数组p的第i个元素*/printf(“Input10strinng”s:);for(i=0;i<10;i+)scanf(“%s”,pi);sotr(p);printf(“Now,thesequencen”is:);for(i=0;i<10;i+)printf(“n%”s,pi);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

41、);* (p+j)=*(p+j+1);* (p+j+1)=temp;运行情况如下:China/Japan/Yeman/Pakistan/Mexico/Korea/Brazil/Iceland/Canada/Mongolia/Now,thesequenceis:BrazilCanadaChinaIcelandJapanKoreaMexicoMongoliaPakistanYemen10.11将n个数按输入输出顺序的逆序排列,用函数实现。解:main()inti,n;char*p,num20;printf(“inputn:”);scanf(“%d”,&n);printf(“pleasein

42、putthesenumbne”rs:);for(i=0;i<n;i+)scanf(“%d”,&numi);p=&num0;sort(p,n);printf(“Now,thesequencen”is:);for(i=0;i<n;i+)printf(“%d”,numi);sort(charp,intm)/*将n个数逆序排列函数*/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;运行结果:inputn:10/pleaseinputthesen

43、umbers:10987654321/Now,thesequenceis:1234567891010.12有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现上3个要求。解:main()inti,j,*pnum,num4;floatscore45,aver4,*psco,*pave;charcourse510,*pcou;printf(“Inputcourns”e:);pcou=course0;for(i=0;i<5;i+)sca

44、nf(“%s”,coursei);printf(“InputNO.andscorne”s:);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(“n”);avsco(psco,pave);avcourl(pcou,psco);printf(“n”)

45、;fali2(pcou,pnum,psco,pave);printf(“n”);good(pcou,pnum,psco,pave);avsco(float*psco,float*pave);int I,j;/*求出每个学生的平均成绩*/floatsum,average;for(i=0;i<4;i+)sum=0.0;/* 求出第一门课的平均成绩*/for(j=0;j<5;j+)sum=sum+(*(psco+5*i+j);average=sum/5;*(pave+i)=average;avcourl(char*pcou,float*psco)inti;floatsum,average

46、1;sum=0.0;for(i=0;i<4;i+)sum=sum+(*(psco+5*i);average1=sum/4;printf(course1:%s,averagescore:%6.n2/*找出2门课不及格的学生*/*找出成绩好的学生*/*求每个学生的平均成绩的函数*/*求第一门课的平均成绩的函数*/*累计每个学生的得分*/*计/*累计每个学生的各科成绩算平均成绩*/*/”f.,pcou,average1);fail2(charcourse510,intnum,floatscore45,floataver4)/*找两门以上课程不及格的学生的函数*/intI,j,k,labe1;p

47、rintf(=Studentwhoisfail);printf(“NO.”);for(i=0;i<5;i+)printf(“%10s”,coursei);printf(“averna”ge);for(i=0;i<>4;i+)label=0;for(j=0;j<5;j+)if(scoreij<60.0)label+;if(label>=2)pintf(“%5d”,numi);for(k=0,k<5,k+)printf(“%10.2f”,scoreik);printf(“%10n.”2f,averi);good(charcourse510,intnum4,

48、floatscore45,floataver4)/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数*/inti,j,k,n;printf(“=Studentwhosescoreisgood=n”);printf(“NO.”);for(i=0;i<5;i+)printf(“%10s”,coursei);printf(“averna”ge);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”,in)u;mfor(k=0;k<5;k+)

49、printf(“%10.2f”,scoreik);printf(“%10n.”2f,averi);运行情况如下:Inputcourse:(输入课程名称)English/Computer/Math/Physics/Chemistry/InputNO.andscores:(输入学号和各门课成绩)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,ave

50、ragescore:72.00=Studentwhoisfail=NO.EnglishComputerMath10134.0056.00(第一门课英语的平均成绩)(有两门课不及格者)PhysicsChemistryaverage99.0089.0073.2088.00=Studentwhosescoreisgood=(成绩优良者)NO.EnglishComputerMathPhysicsChemistryaverage10399.0090.0087.0086.0089.0090.20程序中num是存放4各学生学号的一维数组,course是存放5门课名称的二维字符数组,score是存放4个学生5

51、门课成绩的二维数组,aver是存放每个学生平均成绩的数组,向num数组的指针变量,pcou是指向course数组的指针变量,psco是指向score数组的指针变量,psco是指向score数组的指针变量,pave是指向aver数组的指针变量。函数的形参用数组,调用函数时的实参用指针变量。形参也可以不用数组而用指针变量,请自己分析。pnum是指10.13输入一个字符串,内有数字和非数字字符,如:a123x45617960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如123放在a0中,456放在a1中统计共有多少个整数,并输出这些数。解:#include<st

52、dio.h>main()charstr50,*pstr;intI,j,k,m,e10,digit,ndigit,a10,*pa;printf(“Inputastring”:);gets(str); printf( n “” );pstr=&str0; pa=&a0;ndigit=0; i=0;j=0;while (* (pstr+i)!= 0')'if(* (pstr+i)>=j+;0') && (* (pstr+i)<='9')/*字符指针pstr置于数组str首地址*/*指针pa置于a数组首地址*/*

53、ndigit代表有多少个整数*/*代表字符串中第n个字符*/*代表连续数字的位数*/elseif (j>0)digit=* (pstr+i-1)-48; k=1;while (k<j)e10=1;for (m=1;m<=k;m+)e10=e10*10;i+;/*将个位数赋予digit*/*将含有两位以上的其他位的数值累计于digit*/*e10代表该位数所应乘的因子*/digit=digit+(*(pstr+i-1-k)-48)*e10;/*将该位数的数值累加于digit*/k+;/*位数k自增*/* pa=digit;ndigit+;pa+;j=0;/*将数值赋予数组a*/*指针pa指向a数组下元素*/if (j>0)digit=* (pstr+i-1)-48;k=1;while(k<j)e10=1;*/*以数字结尾字符串的最后一个数据/*将个位数赋

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论