C语言程序设计教程课后习题答案.docx
《C语言程序设计教程课后习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程课后习题答案.docx(36页珍藏版)》请在冰豆网上搜索。
C语言程序设计教程课后习题答案
第1章
1-3CAB
4.c.obj.exe
5/**/
6;
7算法
8①中级语言:
C语言具有高级语言的先进思想又能直接对存储器进行操作,能进行位运算,能实现汇编语言的大部分功能,生成目标代码质量高,程序执行效率高。
②结构化语言:
C语言用函数作为程序模块,以实现程序的模块化,语言简洁、紧凑,具有结构化的特点。
③可移植性好:
C语言不包含依赖硬件的输入输出机制,使C语言本身不依赖于硬件系统,可移植性好。
9#include<>
main(){;}
10#include“”
main()
{
printf(“ThisismyfirstCProgram!
”);
}
第2章
1.yes
2.-3
3.2,1
4.1)a!
=b||a<=c2)x>=4||x<=-4
5.x>20&&x<30||x<-100
6.#include<>
intx;
printf(“pleaseinputanintegar:
scanf("%d",&x);
if(x%5==0&&x%7==0)printf("yes\n");
elseprintf("no\n");
7.
#include<>
intyear,month;
printf("pleaseinputtheyearandmonth:
");
scanf("%d%d",&year,&month);
switch(month)
case1:
case3:
case5:
case7:
case8:
case10:
case12:
printf("thismonthhave31days.");
break;
case4:
case6:
case9:
case11:
printf("thismonthhave30days.");
case2:
if(year%4==0&&year%100!
=0||year%400==0)
printf("thismonthhave29days.");
else
printf("thismonthhave28days.");
8.
floatmoney;
intyear;
printf("\npleaseinputthemoneyandtheyear:
scanf("%f%d",&money,&year);
if(year==1)money+=money**12*year;
if(year==2)money+=money**12*year;
if(year==3||year==4)money+=money**12*year;
if(year>=5&&year<=7)money+=money**12*year;
if(year>=8)money+=money**12*year;
printf("themoneyis:
%f",money);
第3章
1
#include""
{floatx[10],sum=0;
inti=0;
printf("pleaseinput10numbers(-10e6while(i<10){scanf("%f",&x[i]);sum=sum+1/x[i];i=i+1;}printf("thesumof10numbersis%.2f\n",sum);}2#include""main(){intx[100],sum=0,aver,i=0;printf("pleaseinputnumbersuntil0\n");scanf("%d",&x[i]);while(x[i]!=0){sum=sum+x[i];i=i+1;scanf("%d",&x[i]);}printf("thesumis%d\n",sum);printf("theaverageis%.2f\n",float(sum)/i);}3#include""#include""main(){inti=1,j,f;longints=0;while(i<=10){for(f=1,j=1;j<=i;j++)f=f*j;s=s+pow(-1,i-1)*f;i=i+1;}printf("s=%ld\n",s);}4#include""#include""main(){inti=0;floats=;while(2*i+1<=101){s=s+pow(-1,i)/float(2*i+1);i=i+1;}printf("s=%f\n",s);}5#include""#include""main(){inti,j,k,n=0;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)printf("the%d:%d\n",++n,i*100+j*10+k);printf("theallis%d.\n",n--);}6#include""main(){intn,i,j;printf("pleaseinputn:");scanf("%d",&n);for(i=0;i{for(j=0;jprintf("*");printf("\n");}}7#include""main(){chara[81];inti,j=0,k=0,m=0;printf("pleaseinputa$(length<=80)\n");for(i=0;(a[i]=getchar())!='\n';i++){if(a[i]>=65&&a[i]<=90)j++;elseif(a[i]==32)k++;elsem++;}printf("theupperletteris%d\n",j);printf("theblankis%d\n",k);printf("theotheris%d\n",m);}8#include""main(){inti,j,k,m=0;for(i=0;i<=20;i++){for(j=0;j<=50;j++)for(k=0;k<=100;k++)if(i*5+j*2+k==100)printf("the%dwagis1:%d,2:%d,5:%d\n",++m,k,j,i);}printf("thewagsis%d\n",m--);}9#include""main(){inti,j,k,m=0;for(i=0;i<=3;i++){for(j=0;j<=3;j++)for(k=0;k<=6;k++)if(i+j+k==8)printf("the%dwagiswhite:%d,red:%d,black:%d\n",++m,i,j,k);}printf("thewagsis%d\n",m--);}10#include""main(){longintn;inti,j,k;printf("pleaseinpurn:");scanf("%ld",&n);if(n%2==1||n<=1){printf("theinputiserror.\n");return(1);}for(i=2;i<=n/2;i++){for(j=2;jif(i/j*j==i)break;if(j==i){for(k=2;kif((n-i)/k*k==(n-i))break;if(k==n-i)printf("%ld=%d+%d\n",n,i,n-i);}}}11#include""main(){inti,j,k,m;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(m=0;m<=9;m++)if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))printf("thenumberis:%d\n",i*1000+j*100+k*10+m);}第4章1-5ABDCB6-10BCBCA11-13ABA14#include""main(){floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;printf("Pleaseinputthefirstnumber:");scanf("%f%f",&a1,&b1);printf("Pleaseinputthesecondnumber:");scanf("%f%f",&a2,&b2);re1=a1+a2;im1=b1+b2;printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);re2=a1-a2;im2=b1-b2;printf("(%f+j%f)-(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re2,im2);re3=a1*a2-b1*b2;im3=a1*b2+a2*b1;printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);}第5章1-5CACCD6-7DA8#include""main(){charstr[100];intnum1=0,num2=0,i=0;scanf("%s",str);while(str[i]!='\0'){if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')num1++;elseif(str[i]>='0'&&str[i]<='9')num2++;i++;}printf("num1=%d,num2=%d",num1,num2);}9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。#include""main(){inta[5]={2,4,1,3,0},i,j,temp;for(i=0;i<=4;i++)printf("%d,",a[i]);printf("\n");for(j=1;j<=4;j++)for(i=j;i<=4;i++)if(a[i]{temp=a[j-1];a[j-1]=a[i];a[i]=temp;}for(i=0;i<=4;i++)printf("%d,",a[i]);}第6章1-5AADBA6C70246810121416180246810121416188a+b=995+4+1=1010+4+2=1620+4+3=2710加密:#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun1(string,number);printf("%s",string);}fun1(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')str[i]+=4;elseif(str[i]>'V'&&str[i]<='Z')str[i]-=22;elseif(str[i]>'v'&&str[i]<='z')str[i]-=22;elseif(str[i]>'5'&&str[i]<='9')str[i]-=6;}解密#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun2(string,number);printf("%s",string);}fun2(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')str[i]-=4;elseif(str[i]>='A'&&str[i]<'E')str[i]+=22;elseif(str[i]>='a'&&str[i]<'e')str[i]+=22;elseif(str[i]>='0'&&str[i]<'4')str[i]+=6;}第8章一、下列语句是否合法语句:int*p=&x,x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x时,x变量的定义在后面。参考:intx=13,*p=&x;语句:int*p=&x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x=13时,x变量没有定义。参考:intx=13,*p;p=&x;语句:intx=13,*p=x;点评:不合法,不能把x变量的值赋给指针p。应该把变量x的地址值赋给指针p。参考:intx=13,*p;p=&x;语句:inty[5]={1,2,3,4,5},*p=y[3];点评:不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。参考:inty[5]={1,2,3,4,5},*p;p=&y[3];语句:int*p=y,y[5]={1,2,3,4,5};点评:不合法,因为数组y没有定义。参考:inty[5]={1,2,3,4,5},*p;p=y;语句:inty[5]={1,2,3,4,5},*p=&y;点评:不合法,不能把数组y的地址值赋给指针p。数组名y本身是数组y的地址常量值。参考:inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];语句:int*c=&ch,ch="HelloWorld";点评:不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。参考:char*ch="HelloWorld!";或char*ch;ch="HelloWorld";语句:charch[12]="HelloWorld",*c=ch;点评:合法。思考:charch[12]="HelloWorld!!!",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。语句:char*c=ch[12]="HelloWorld"点评:不合法,数组ch没有定义。数组ch没有第12个元素。参考:char*c,ch[12]="HelloWorld";c=ch;语句:char*c,c='X',c=&c;点评:不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。参考:char*c,ch;ch='X',c=&ch;二、综合练习题参考答案1.将一字符串复制到另一字符串中。#include<>voidmain(){charstr1[128],str2[128]={"WelcometoCLanguage"};char*cp1,*cp2;cp1=str1;cp2=str2;while(*cp1++=*cp2++);puts(str1);}2.将一字符串与另一字符串相连接。#include<>voidmain(){charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};char*cp1,*cp2;inti=0,n=0;while(n++,str1[++i]!=0);cp1=str1+n;cp2=str2;while(*cp1++=*cp2++);puts(str1);}3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。#include<>voidmain(){charstr1[128]={"WelcometoCLanguage"};char*cp1=str1;while(*cp1){if(*cp1>='A'&&*cp1<='Z')*cp1=*cp1+32;elseif(*cp1>='a'&&*cp1<='z')*cp1=*cp1-32;else*cp1=*cp1;cp1++;}puts(str1);}4.从一字符串中取出部分字符串复制到另一字符串中。#include<>voidmain(){charch[128],*cp,str[128],*sp;intb,n,l=0,i;cp=ch;sp=str;gets(cp);scanf("%d%d",&b,&n);while(l++,*(ch+l)!=0);if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
while(i<10)
{scanf("%f",&x[i]);
sum=sum+1/x[i];
i=i+1;
printf("thesumof10numbersis%.2f\n",sum);
2
{intx[100],sum=0,aver,i=0;
printf("pleaseinputnumbersuntil0\n");
scanf("%d",&x[i]);
while(x[i]!
=0)
{sum=sum+x[i];
printf("thesumis%d\n",sum);
printf("theaverageis%.2f\n",float(sum)/i);
3
{inti=1,j,f;
longints=0;
while(i<=10)
{for(f=1,j=1;j<=i;j++)
f=f*j;
s=s+pow(-1,i-1)*f;
printf("s=%ld\n",s);
4
{inti=0;
floats=;
while(2*i+1<=101)
{s=s+pow(-1,i)/float(2*i+1);
printf("s=%f\n",s);
5
{inti,j,k,n=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
printf("the%d:
%d\n",++n,i*100+j*10+k);
printf("theallis%d.\n",n--);
6
{intn,i,j;
printf("pleaseinputn:
scanf("%d",&n);
for(i=0;i{for(j=0;jprintf("*");printf("\n");}}7#include""main(){chara[81];inti,j=0,k=0,m=0;printf("pleaseinputa$(length<=80)\n");for(i=0;(a[i]=getchar())!='\n';i++){if(a[i]>=65&&a[i]<=90)j++;elseif(a[i]==32)k++;elsem++;}printf("theupperletteris%d\n",j);printf("theblankis%d\n",k);printf("theotheris%d\n",m);}8#include""main(){inti,j,k,m=0;for(i=0;i<=20;i++){for(j=0;j<=50;j++)for(k=0;k<=100;k++)if(i*5+j*2+k==100)printf("the%dwagis1:%d,2:%d,5:%d\n",++m,k,j,i);}printf("thewagsis%d\n",m--);}9#include""main(){inti,j,k,m=0;for(i=0;i<=3;i++){for(j=0;j<=3;j++)for(k=0;k<=6;k++)if(i+j+k==8)printf("the%dwagiswhite:%d,red:%d,black:%d\n",++m,i,j,k);}printf("thewagsis%d\n",m--);}10#include""main(){longintn;inti,j,k;printf("pleaseinpurn:");scanf("%ld",&n);if(n%2==1||n<=1){printf("theinputiserror.\n");return(1);}for(i=2;i<=n/2;i++){for(j=2;jif(i/j*j==i)break;if(j==i){for(k=2;kif((n-i)/k*k==(n-i))break;if(k==n-i)printf("%ld=%d+%d\n",n,i,n-i);}}}11#include""main(){inti,j,k,m;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(m=0;m<=9;m++)if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))printf("thenumberis:%d\n",i*1000+j*100+k*10+m);}第4章1-5ABDCB6-10BCBCA11-13ABA14#include""main(){floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;printf("Pleaseinputthefirstnumber:");scanf("%f%f",&a1,&b1);printf("Pleaseinputthesecondnumber:");scanf("%f%f",&a2,&b2);re1=a1+a2;im1=b1+b2;printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);re2=a1-a2;im2=b1-b2;printf("(%f+j%f)-(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re2,im2);re3=a1*a2-b1*b2;im3=a1*b2+a2*b1;printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);}第5章1-5CACCD6-7DA8#include""main(){charstr[100];intnum1=0,num2=0,i=0;scanf("%s",str);while(str[i]!='\0'){if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')num1++;elseif(str[i]>='0'&&str[i]<='9')num2++;i++;}printf("num1=%d,num2=%d",num1,num2);}9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。#include""main(){inta[5]={2,4,1,3,0},i,j,temp;for(i=0;i<=4;i++)printf("%d,",a[i]);printf("\n");for(j=1;j<=4;j++)for(i=j;i<=4;i++)if(a[i]{temp=a[j-1];a[j-1]=a[i];a[i]=temp;}for(i=0;i<=4;i++)printf("%d,",a[i]);}第6章1-5AADBA6C70246810121416180246810121416188a+b=995+4+1=1010+4+2=1620+4+3=2710加密:#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun1(string,number);printf("%s",string);}fun1(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')str[i]+=4;elseif(str[i]>'V'&&str[i]<='Z')str[i]-=22;elseif(str[i]>'v'&&str[i]<='z')str[i]-=22;elseif(str[i]>'5'&&str[i]<='9')str[i]-=6;}解密#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun2(string,number);printf("%s",string);}fun2(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')str[i]-=4;elseif(str[i]>='A'&&str[i]<'E')str[i]+=22;elseif(str[i]>='a'&&str[i]<'e')str[i]+=22;elseif(str[i]>='0'&&str[i]<'4')str[i]+=6;}第8章一、下列语句是否合法语句:int*p=&x,x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x时,x变量的定义在后面。参考:intx=13,*p=&x;语句:int*p=&x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x=13时,x变量没有定义。参考:intx=13,*p;p=&x;语句:intx=13,*p=x;点评:不合法,不能把x变量的值赋给指针p。应该把变量x的地址值赋给指针p。参考:intx=13,*p;p=&x;语句:inty[5]={1,2,3,4,5},*p=y[3];点评:不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。参考:inty[5]={1,2,3,4,5},*p;p=&y[3];语句:int*p=y,y[5]={1,2,3,4,5};点评:不合法,因为数组y没有定义。参考:inty[5]={1,2,3,4,5},*p;p=y;语句:inty[5]={1,2,3,4,5},*p=&y;点评:不合法,不能把数组y的地址值赋给指针p。数组名y本身是数组y的地址常量值。参考:inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];语句:int*c=&ch,ch="HelloWorld";点评:不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。参考:char*ch="HelloWorld!";或char*ch;ch="HelloWorld";语句:charch[12]="HelloWorld",*c=ch;点评:合法。思考:charch[12]="HelloWorld!!!",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。语句:char*c=ch[12]="HelloWorld"点评:不合法,数组ch没有定义。数组ch没有第12个元素。参考:char*c,ch[12]="HelloWorld";c=ch;语句:char*c,c='X',c=&c;点评:不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。参考:char*c,ch;ch='X',c=&ch;二、综合练习题参考答案1.将一字符串复制到另一字符串中。#include<>voidmain(){charstr1[128],str2[128]={"WelcometoCLanguage"};char*cp1,*cp2;cp1=str1;cp2=str2;while(*cp1++=*cp2++);puts(str1);}2.将一字符串与另一字符串相连接。#include<>voidmain(){charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};char*cp1,*cp2;inti=0,n=0;while(n++,str1[++i]!=0);cp1=str1+n;cp2=str2;while(*cp1++=*cp2++);puts(str1);}3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。#include<>voidmain(){charstr1[128]={"WelcometoCLanguage"};char*cp1=str1;while(*cp1){if(*cp1>='A'&&*cp1<='Z')*cp1=*cp1+32;elseif(*cp1>='a'&&*cp1<='z')*cp1=*cp1-32;else*cp1=*cp1;cp1++;}puts(str1);}4.从一字符串中取出部分字符串复制到另一字符串中。#include<>voidmain(){charch[128],*cp,str[128],*sp;intb,n,l=0,i;cp=ch;sp=str;gets(cp);scanf("%d%d",&b,&n);while(l++,*(ch+l)!=0);if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
{for(j=0;jprintf("*");printf("\n");}}7#include""main(){chara[81];inti,j=0,k=0,m=0;printf("pleaseinputa$(length<=80)\n");for(i=0;(a[i]=getchar())!='\n';i++){if(a[i]>=65&&a[i]<=90)j++;elseif(a[i]==32)k++;elsem++;}printf("theupperletteris%d\n",j);printf("theblankis%d\n",k);printf("theotheris%d\n",m);}8#include""main(){inti,j,k,m=0;for(i=0;i<=20;i++){for(j=0;j<=50;j++)for(k=0;k<=100;k++)if(i*5+j*2+k==100)printf("the%dwagis1:%d,2:%d,5:%d\n",++m,k,j,i);}printf("thewagsis%d\n",m--);}9#include""main(){inti,j,k,m=0;for(i=0;i<=3;i++){for(j=0;j<=3;j++)for(k=0;k<=6;k++)if(i+j+k==8)printf("the%dwagiswhite:%d,red:%d,black:%d\n",++m,i,j,k);}printf("thewagsis%d\n",m--);}10#include""main(){longintn;inti,j,k;printf("pleaseinpurn:");scanf("%ld",&n);if(n%2==1||n<=1){printf("theinputiserror.\n");return(1);}for(i=2;i<=n/2;i++){for(j=2;jif(i/j*j==i)break;if(j==i){for(k=2;kif((n-i)/k*k==(n-i))break;if(k==n-i)printf("%ld=%d+%d\n",n,i,n-i);}}}11#include""main(){inti,j,k,m;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(m=0;m<=9;m++)if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))printf("thenumberis:%d\n",i*1000+j*100+k*10+m);}第4章1-5ABDCB6-10BCBCA11-13ABA14#include""main(){floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;printf("Pleaseinputthefirstnumber:");scanf("%f%f",&a1,&b1);printf("Pleaseinputthesecondnumber:");scanf("%f%f",&a2,&b2);re1=a1+a2;im1=b1+b2;printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);re2=a1-a2;im2=b1-b2;printf("(%f+j%f)-(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re2,im2);re3=a1*a2-b1*b2;im3=a1*b2+a2*b1;printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);}第5章1-5CACCD6-7DA8#include""main(){charstr[100];intnum1=0,num2=0,i=0;scanf("%s",str);while(str[i]!='\0'){if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')num1++;elseif(str[i]>='0'&&str[i]<='9')num2++;i++;}printf("num1=%d,num2=%d",num1,num2);}9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。#include""main(){inta[5]={2,4,1,3,0},i,j,temp;for(i=0;i<=4;i++)printf("%d,",a[i]);printf("\n");for(j=1;j<=4;j++)for(i=j;i<=4;i++)if(a[i]{temp=a[j-1];a[j-1]=a[i];a[i]=temp;}for(i=0;i<=4;i++)printf("%d,",a[i]);}第6章1-5AADBA6C70246810121416180246810121416188a+b=995+4+1=1010+4+2=1620+4+3=2710加密:#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun1(string,number);printf("%s",string);}fun1(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')str[i]+=4;elseif(str[i]>'V'&&str[i]<='Z')str[i]-=22;elseif(str[i]>'v'&&str[i]<='z')str[i]-=22;elseif(str[i]>'5'&&str[i]<='9')str[i]-=6;}解密#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun2(string,number);printf("%s",string);}fun2(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')str[i]-=4;elseif(str[i]>='A'&&str[i]<'E')str[i]+=22;elseif(str[i]>='a'&&str[i]<'e')str[i]+=22;elseif(str[i]>='0'&&str[i]<'4')str[i]+=6;}第8章一、下列语句是否合法语句:int*p=&x,x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x时,x变量的定义在后面。参考:intx=13,*p=&x;语句:int*p=&x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x=13时,x变量没有定义。参考:intx=13,*p;p=&x;语句:intx=13,*p=x;点评:不合法,不能把x变量的值赋给指针p。应该把变量x的地址值赋给指针p。参考:intx=13,*p;p=&x;语句:inty[5]={1,2,3,4,5},*p=y[3];点评:不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。参考:inty[5]={1,2,3,4,5},*p;p=&y[3];语句:int*p=y,y[5]={1,2,3,4,5};点评:不合法,因为数组y没有定义。参考:inty[5]={1,2,3,4,5},*p;p=y;语句:inty[5]={1,2,3,4,5},*p=&y;点评:不合法,不能把数组y的地址值赋给指针p。数组名y本身是数组y的地址常量值。参考:inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];语句:int*c=&ch,ch="HelloWorld";点评:不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。参考:char*ch="HelloWorld!";或char*ch;ch="HelloWorld";语句:charch[12]="HelloWorld",*c=ch;点评:合法。思考:charch[12]="HelloWorld!!!",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。语句:char*c=ch[12]="HelloWorld"点评:不合法,数组ch没有定义。数组ch没有第12个元素。参考:char*c,ch[12]="HelloWorld";c=ch;语句:char*c,c='X',c=&c;点评:不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。参考:char*c,ch;ch='X',c=&ch;二、综合练习题参考答案1.将一字符串复制到另一字符串中。#include<>voidmain(){charstr1[128],str2[128]={"WelcometoCLanguage"};char*cp1,*cp2;cp1=str1;cp2=str2;while(*cp1++=*cp2++);puts(str1);}2.将一字符串与另一字符串相连接。#include<>voidmain(){charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};char*cp1,*cp2;inti=0,n=0;while(n++,str1[++i]!=0);cp1=str1+n;cp2=str2;while(*cp1++=*cp2++);puts(str1);}3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。#include<>voidmain(){charstr1[128]={"WelcometoCLanguage"};char*cp1=str1;while(*cp1){if(*cp1>='A'&&*cp1<='Z')*cp1=*cp1+32;elseif(*cp1>='a'&&*cp1<='z')*cp1=*cp1-32;else*cp1=*cp1;cp1++;}puts(str1);}4.从一字符串中取出部分字符串复制到另一字符串中。#include<>voidmain(){charch[128],*cp,str[128],*sp;intb,n,l=0,i;cp=ch;sp=str;gets(cp);scanf("%d%d",&b,&n);while(l++,*(ch+l)!=0);if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
printf("*");
printf("\n");
7
{chara[81];
inti,j=0,k=0,m=0;
printf("pleaseinputa$(length<=80)\n");
for(i=0;(a[i]=getchar())!
='\n';i++)
{if(a[i]>=65&&a[i]<=90)
j++;
elseif(a[i]==32)
k++;
elsem++;
printf("theupperletteris%d\n",j);
printf("theblankis%d\n",k);
printf("theotheris%d\n",m);
8
{inti,j,k,m=0;
for(i=0;i<=20;i++)
{for(j=0;j<=50;j++)
for(k=0;k<=100;k++)
if(i*5+j*2+k==100)
printf("the%dwagis1:
%d,2:
%d,5:
%d\n",++m,k,j,i);
printf("thewagsis%d\n",m--);
9
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
for(k=0;k<=6;k++)
if(i+j+k==8)
printf("the%dwagiswhite:
%d,red:
%d,black:
%d\n",++m,i,j,k);
10
{longintn;
inti,j,k;
printf("pleaseinpurn:
scanf("%ld",&n);
if(n%2==1||n<=1)
{printf("theinputiserror.\n");
return
(1);
for(i=2;i<=n/2;i++)
{for(j=2;j
if(i/j*j==i)
if(j==i)
{for(k=2;kif((n-i)/k*k==(n-i))break;if(k==n-i)printf("%ld=%d+%d\n",n,i,n-i);}}}11#include""main(){inti,j,k,m;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)for(m=0;m<=9;m++)if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))printf("thenumberis:%d\n",i*1000+j*100+k*10+m);}第4章1-5ABDCB6-10BCBCA11-13ABA14#include""main(){floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;printf("Pleaseinputthefirstnumber:");scanf("%f%f",&a1,&b1);printf("Pleaseinputthesecondnumber:");scanf("%f%f",&a2,&b2);re1=a1+a2;im1=b1+b2;printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);re2=a1-a2;im2=b1-b2;printf("(%f+j%f)-(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re2,im2);re3=a1*a2-b1*b2;im3=a1*b2+a2*b1;printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);}第5章1-5CACCD6-7DA8#include""main(){charstr[100];intnum1=0,num2=0,i=0;scanf("%s",str);while(str[i]!='\0'){if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')num1++;elseif(str[i]>='0'&&str[i]<='9')num2++;i++;}printf("num1=%d,num2=%d",num1,num2);}9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。#include""main(){inta[5]={2,4,1,3,0},i,j,temp;for(i=0;i<=4;i++)printf("%d,",a[i]);printf("\n");for(j=1;j<=4;j++)for(i=j;i<=4;i++)if(a[i]{temp=a[j-1];a[j-1]=a[i];a[i]=temp;}for(i=0;i<=4;i++)printf("%d,",a[i]);}第6章1-5AADBA6C70246810121416180246810121416188a+b=995+4+1=1010+4+2=1620+4+3=2710加密:#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun1(string,number);printf("%s",string);}fun1(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')str[i]+=4;elseif(str[i]>'V'&&str[i]<='Z')str[i]-=22;elseif(str[i]>'v'&&str[i]<='z')str[i]-=22;elseif(str[i]>'5'&&str[i]<='9')str[i]-=6;}解密#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun2(string,number);printf("%s",string);}fun2(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')str[i]-=4;elseif(str[i]>='A'&&str[i]<'E')str[i]+=22;elseif(str[i]>='a'&&str[i]<'e')str[i]+=22;elseif(str[i]>='0'&&str[i]<'4')str[i]+=6;}第8章一、下列语句是否合法语句:int*p=&x,x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x时,x变量的定义在后面。参考:intx=13,*p=&x;语句:int*p=&x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x=13时,x变量没有定义。参考:intx=13,*p;p=&x;语句:intx=13,*p=x;点评:不合法,不能把x变量的值赋给指针p。应该把变量x的地址值赋给指针p。参考:intx=13,*p;p=&x;语句:inty[5]={1,2,3,4,5},*p=y[3];点评:不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。参考:inty[5]={1,2,3,4,5},*p;p=&y[3];语句:int*p=y,y[5]={1,2,3,4,5};点评:不合法,因为数组y没有定义。参考:inty[5]={1,2,3,4,5},*p;p=y;语句:inty[5]={1,2,3,4,5},*p=&y;点评:不合法,不能把数组y的地址值赋给指针p。数组名y本身是数组y的地址常量值。参考:inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];语句:int*c=&ch,ch="HelloWorld";点评:不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。参考:char*ch="HelloWorld!";或char*ch;ch="HelloWorld";语句:charch[12]="HelloWorld",*c=ch;点评:合法。思考:charch[12]="HelloWorld!!!",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。语句:char*c=ch[12]="HelloWorld"点评:不合法,数组ch没有定义。数组ch没有第12个元素。参考:char*c,ch[12]="HelloWorld";c=ch;语句:char*c,c='X',c=&c;点评:不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。参考:char*c,ch;ch='X',c=&ch;二、综合练习题参考答案1.将一字符串复制到另一字符串中。#include<>voidmain(){charstr1[128],str2[128]={"WelcometoCLanguage"};char*cp1,*cp2;cp1=str1;cp2=str2;while(*cp1++=*cp2++);puts(str1);}2.将一字符串与另一字符串相连接。#include<>voidmain(){charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};char*cp1,*cp2;inti=0,n=0;while(n++,str1[++i]!=0);cp1=str1+n;cp2=str2;while(*cp1++=*cp2++);puts(str1);}3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。#include<>voidmain(){charstr1[128]={"WelcometoCLanguage"};char*cp1=str1;while(*cp1){if(*cp1>='A'&&*cp1<='Z')*cp1=*cp1+32;elseif(*cp1>='a'&&*cp1<='z')*cp1=*cp1-32;else*cp1=*cp1;cp1++;}puts(str1);}4.从一字符串中取出部分字符串复制到另一字符串中。#include<>voidmain(){charch[128],*cp,str[128],*sp;intb,n,l=0,i;cp=ch;sp=str;gets(cp);scanf("%d%d",&b,&n);while(l++,*(ch+l)!=0);if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
if((n-i)/k*k==(n-i))
if(k==n-i)
printf("%ld=%d+%d\n",n,i,n-i);
11
{inti,j,k,m;
for(m=0;m<=9;m++)
if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))
printf("thenumberis:
%d\n",i*1000+j*100+k*10+m);
第4章
1-5ABDCB6-10BCBCA11-13ABA
14
floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;
printf("Pleaseinputthefirstnumber:
scanf("%f%f",&a1,&b1);
printf("Pleaseinputthesecondnumber:
scanf("%f%f",&a2,&b2);
re1=a1+a2;
im1=b1+b2;
printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);
re2=a1-a2;
im2=b1-b2;
printf("(%f+j%f)-(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re2,im2);
re3=a1*a2-b1*b2;
im3=a1*b2+a2*b1;
printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);
第5章
1-5CACCD6-7DA
charstr[100];
intnum1=0,num2=0,i=0;
scanf("%s",str);
while(str[i]!
='\0')
if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')
num1++;
elseif(str[i]>='0'&&str[i]<='9')
num2++;
i++;
printf("num1=%d,num2=%d",num1,num2);
9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。
inta[5]={2,4,1,3,0},i,j,temp;
for(i=0;i<=4;i++)
printf("%d,",a[i]);
for(j=1;j<=4;j++)
for(i=j;i<=4;i++)
if(a[i]{temp=a[j-1];a[j-1]=a[i];a[i]=temp;}for(i=0;i<=4;i++)printf("%d,",a[i]);}第6章1-5AADBA6C70246810121416180246810121416188a+b=995+4+1=1010+4+2=1620+4+3=2710加密:#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun1(string,number);printf("%s",string);}fun1(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')str[i]+=4;elseif(str[i]>'V'&&str[i]<='Z')str[i]-=22;elseif(str[i]>'v'&&str[i]<='z')str[i]-=22;elseif(str[i]>'5'&&str[i]<='9')str[i]-=6;}解密#include""main(){charstring[100],i=0,number=0;scanf("%s",string);while(string[i++]!='\0')number++;fun2(string,number);printf("%s",string);}fun2(charstr[],intnum){inti;for(i=0;i<=num;i++)if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')str[i]-=4;elseif(str[i]>='A'&&str[i]<'E')str[i]+=22;elseif(str[i]>='a'&&str[i]<'e')str[i]+=22;elseif(str[i]>='0'&&str[i]<'4')str[i]+=6;}第8章一、下列语句是否合法语句:int*p=&x,x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x时,x变量的定义在后面。参考:intx=13,*p=&x;语句:int*p=&x=13;点评:不合法,因为x变量没有定义。在执行int*p=&x=13时,x变量没有定义。参考:intx=13,*p;p=&x;语句:intx=13,*p=x;点评:不合法,不能把x变量的值赋给指针p。应该把变量x的地址值赋给指针p。参考:intx=13,*p;p=&x;语句:inty[5]={1,2,3,4,5},*p=y[3];点评:不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。参考:inty[5]={1,2,3,4,5},*p;p=&y[3];语句:int*p=y,y[5]={1,2,3,4,5};点评:不合法,因为数组y没有定义。参考:inty[5]={1,2,3,4,5},*p;p=y;语句:inty[5]={1,2,3,4,5},*p=&y;点评:不合法,不能把数组y的地址值赋给指针p。数组名y本身是数组y的地址常量值。参考:inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];语句:int*c=&ch,ch="HelloWorld";点评:不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。参考:char*ch="HelloWorld!";或char*ch;ch="HelloWorld";语句:charch[12]="HelloWorld",*c=ch;点评:合法。思考:charch[12]="HelloWorld!!!",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。语句:char*c=ch[12]="HelloWorld"点评:不合法,数组ch没有定义。数组ch没有第12个元素。参考:char*c,ch[12]="HelloWorld";c=ch;语句:char*c,c='X',c=&c;点评:不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。参考:char*c,ch;ch='X',c=&ch;二、综合练习题参考答案1.将一字符串复制到另一字符串中。#include<>voidmain(){charstr1[128],str2[128]={"WelcometoCLanguage"};char*cp1,*cp2;cp1=str1;cp2=str2;while(*cp1++=*cp2++);puts(str1);}2.将一字符串与另一字符串相连接。#include<>voidmain(){charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};char*cp1,*cp2;inti=0,n=0;while(n++,str1[++i]!=0);cp1=str1+n;cp2=str2;while(*cp1++=*cp2++);puts(str1);}3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。#include<>voidmain(){charstr1[128]={"WelcometoCLanguage"};char*cp1=str1;while(*cp1){if(*cp1>='A'&&*cp1<='Z')*cp1=*cp1+32;elseif(*cp1>='a'&&*cp1<='z')*cp1=*cp1-32;else*cp1=*cp1;cp1++;}puts(str1);}4.从一字符串中取出部分字符串复制到另一字符串中。#include<>voidmain(){charch[128],*cp,str[128],*sp;intb,n,l=0,i;cp=ch;sp=str;gets(cp);scanf("%d%d",&b,&n);while(l++,*(ch+l)!=0);if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
temp=a[j-1];
a[j-1]=a[i];
a[i]=temp;
第6章
1-5AADBA6C
7024681012141618
024681012141618
8a+b=9
95+4+1=10
10+4+2=16
20+4+3=27
加密:
charstring[100],i=0,number=0;
scanf("%s",string);
while(string[i++]!
number++;
fun1(string,number);
printf("%s",string);
fun1(charstr[],intnum)
inti;
for(i=0;i<=num;i++)
if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')
str[i]+=4;
elseif(str[i]>'V'&&str[i]<='Z')
str[i]-=22;
elseif(str[i]>'v'&&str[i]<='z')
elseif(str[i]>'5'&&str[i]<='9')
str[i]-=6;
解密
fun2(string,number);
fun2(charstr[],intnum)
if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')
str[i]-=4;
elseif(str[i]>='A'&&str[i]<'E')
str[i]+=22;
elseif(str[i]>='a'&&str[i]<'e')
elseif(str[i]>='0'&&str[i]<'4')
str[i]+=6;
第8章
一、下列语句是否合法
语句:
int*p=&x,x=13;
点评:
不合法,因为x变量没有定义。
在执行int*p=&x时,x变量的定义在后面。
参考:
intx=13,*p=&x;
int*p=&x=13;
在执行int*p=&x=13时,x变量没有定义。
intx=13,*p;p=&x;
intx=13,*p=x;
不合法,不能把x变量的值赋给指针p。
应该把变量x的地址值赋给指针p。
inty[5]={1,2,3,4,5},*p=y[3];
不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。
inty[5]={1,2,3,4,5},*p;p=&y[3];
int*p=y,y[5]={1,2,3,4,5};
不合法,因为数组y没有定义。
inty[5]={1,2,3,4,5},*p;p=y;
inty[5]={1,2,3,4,5},*p=&y;
不合法,不能把数组y的地址值赋给指针p。
数组名y本身是数组y的地址常量值。
inty[5]={1,2,3,4,5},*p;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];
int*c=&ch,ch="HelloWorld";
不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。
char*ch="HelloWorld!
";或char*ch;ch="HelloWorld";
charch[12]="HelloWorld",*c=ch;
合法。
思考:
charch[12]="HelloWorld!
!
",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。
char*c=ch[12]="HelloWorld"
不合法,数组ch没有定义。
数组ch没有第12个元素。
char*c,ch[12]="HelloWorld";c=ch;
char*c,c='X',c=&c;
不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。
char*c,ch;ch='X',c=&ch;
二、综合练习题参考答案
1.将一字符串复制到另一字符串中。
voidmain()
{charstr1[128],str2[128]={"WelcometoCLanguage"};
char*cp1,*cp2;
cp1=str1;
cp2=str2;
while(*cp1++=*cp2++);
puts(str1);
2.将一字符串与另一字符串相连接。
{charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};
inti=0,n=0;
while(n++,str1[++i]!
=0);
cp1=str1+n;
3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。
{charstr1[128]={"WelcometoCLanguage"};
char*cp1=str1;
while(*cp1)
{if(*cp1>='A'&&*cp1<='Z')
*cp1=*cp1+32;
elseif(*cp1>='a'&&*cp1<='z')
*cp1=*cp1-32;
*cp1=*cp1;
cp1++;
4.从一字符串中取出部分字符串复制到另一字符串中。
{charch[128],*cp,str[128],*sp;
intb,n,l=0,i;
cp=ch;
sp=str;
gets(cp);
scanf("%d%d",&b,&n);
while(l++,*(ch+l)!
if(n{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
{for(i=0;i*(sp+i)=*(cp+b+i);*(sp+i)='\0';puts(str);}elseprintf("无数据可以复制");}5.完成一整型数组的排序。#include<>#include<>voidmain(){intx[10],i,j,*p,t;p=x;for(i=0;i<10;i++)x[i]=rand();for(i=0;i<9;i++)for(j=0;j<9;j++)if(*(p+j)>*(p+j+1)){t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}for(i=0;i<10;i++)printf("%d\t",*p++);}6.将一个字符串中的字符反序排列。#include<>voidmain(){charch[128],c,*cp1,*cp2;inti,n=0;gets(ch);cp1=ch;cp2=ch;while(*cp2!=0){n++;cp2++;}cp2--;n=n/2;for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
*(sp+i)=*(cp+b+i);
*(sp+i)='\0';
puts(str);
printf("无数据可以复制");
5.完成一整型数组的排序。
{intx[10],i,j,*p,t;
p=x;
for(i=0;i<10;i++)
x[i]=rand();
for(i=0;i<9;i++)
for(j=0;j<9;j++)
if(*(p+j)>*(p+j+1))
{t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
printf("%d\t",*p++);
6.将一个字符串中的字符反序排列。
{charch[128],c,*cp1,*cp2;
inti,n=0;
gets(ch);
cp1=ch;
cp2=ch;
while(*cp2!
{n++;
cp2++;
cp2--;
n=n/2;
for(i=0;i{c=*cp1;*cp1=*cp2;*cp2=c;cp1++;cp2--;}puts(ch);}7.编函数完成将一字符串中的字符全部改为大写。#include<>voidcove(char*cp){while(*cp!=0){if(*cp>='a'&&*cp<='z')*cp=*cp-32;cp++;}}voidmain(){charch[128],*cp;cp=ch;gets(cp);cove(cp);puts(ch);}8.编函数完成从一字符串左边取若干字符复制到另一字符串中。#include<>voidlm(char*lcp,char*bcp,intn){inti;for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
{c=*cp1;
*cp1=*cp2;
*cp2=c;
puts(ch);
7.编函数完成将一字符串中的字符全部改为大写。
voidcove(char*cp)
{while(*cp!
{if(*cp>='a'&&*cp<='z')
*cp=*cp-32;
cp++;
{charch[128],*cp;
cove(cp);
8.编函数完成从一字符串左边取若干字符复制到另一字符串中。
voidlm(char*lcp,char*bcp,intn)
{inti;
for(i=0;i*(bcp+i)=*(lcp+i);*(bcp+i)='\0';}voidmain(){charch[128],*cp,str[128];intn,l=0;gets(ch);scanf("%d",&n);while(l++,*(ch+l)!=0);if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
*(bcp+i)=*(lcp+i);
*(bcp+i)='\0';
{charch[128],*cp,str[128];
intn,l=0;
if(n{cp=ch;lm(cp,str,n);puts(str);}elseprintf("无数据可以复制");}第9章1#include""structdate{intyear;intmonth;intday;};main(){structdatere;intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};inti,da
{cp=ch;
lm(cp,str,n);
第9章
structdate
{intyear;
intmonth;
intday;
};
{structdatere;
intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
inti,da
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1