C语言程序设计第三版第10章答案.docx
《C语言程序设计第三版第10章答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第三版第10章答案.docx(32页珍藏版)》请在冰豆网上搜索。
C语言程序设计第三版第10章答案
【最新编排】
----------------------------------------------------------------------------------------------------------------------
第十章
10.1
#include
voidmain()
{
voidswap(int*p,int*q);
intx,y,z;
int*p1,*p2,*p3;
printf("输入三个整数\n\n");
scanf("%d%d%d",&x,&y,&z);
p1=&x;
p2=&y;
p3=&z;
if(x>y)swap(p1,p2);
if(x>z)swap(p1,p3);
if(y>z)swap(p2,p3);
printf("\n\n三个数由小到达输出为:
%d%d%d\n\n",x,y,z);
}
voidswap(int*p,int*q)
{
inttemp;
temp=*p;
*p=*q;
*q=temp;
}
10.2
#include
#include
#defineN80
voidmain()
{
voidswap(char*p,char*q);
charstr1【N】,str2【N】,str3【N】;
printf("请输入三个字符串\n\n");
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("\n\n三个字符串由小到大排列,分别为:
\n\n%s\n%s\n%s\n",str1,str2,str3);
}
voidswap(char*p,char*q)
{
charstr【N】;
strcpy(str,p);
strcpy(p,q);
strcpy(q,str);
}
10.3
#include
#defineN10
voidmain()
{
voidinput(intnum【N】);
voidswap(int*p,int*q);
voidexchange(intnum【N】);
voidoutput(intnum【N】);
intnum【N】;
input(num);
exchange(num);
output(num);
}
voidinput(intnum【N】)
{
inti;
printf("输入十个整数\n\n");
for(i=0;i{
scanf("%d",&num【i】);
}
}
10.4
#include
#defineN10
#defineM3
voidmain()
{
voidmove(intnum【N】,intn,intm);
intnum【N】;
inti;
printf("输入%d个整数\n\n",N);
for(i=0;i{
scanf("%d",&num【i】);
}
move(num,N,M);
printf("\n\n调整后地%d个整数为:
\n\n",N);
for(i=0;i{
printf("%d",num【i】);
}
printf("\n\n");
}
voidswap(int*p,int*q)
{
inttemp;
temp=*p;
*p=*q;
*q=temp;
}
voidmove(intnum【N】,intn,intm)
{
int*p,*num_end;
inttemp;
num_end=num+n;
temp=*(num_end-1);
for(p=num_end-1;p>=num;p--)
*p=*(p-1);
*num=temp;
m--;
if(m>0)move(num,n,m);
}
10.5
#include
#defineN8
voidmain()
{
voidleave(intnum【N】);
intnum【N】;
inti,*p;
p=num;
for(i=0;i*(p+i)=i+1;
leave(num);
while(*p==0)p++;
printf("最后留下地是第%d个人\n\n",*p);
}
voidleave(intnum【N】)
{
int*p;
inti=0,k=0,m=0;
p=num;
while(m{
if(*(p+i)!
=0)k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==N)i=0;
}
}
10.6
#include
#defineN10
voidmain()
{
intcount(charstr【N】);
inti;
charstr【N】;
printf("输入-个字符串\n\n");
gets(str);
printf("\n\n字符串长度为:
%d\n\n",count(str));
}
intcount(charstr【N】)
{
char*p;
inti=0;
p=str;
while(*p!
='\0')
{
i++;
p++;
}
return(i);
}
10.7
#include
#defineN80
#defineM4
voidmain()
{
voidcopy(charstr1【N】,charstr2【N】);
charstr1【N】,str2【N】;
printf("输入字符串str1\n\n");
gets(str1);
printf("\n\n输入字符串str2\n\n");
gets(str2);
copy(str1,str2);
printf("\n\n整合之后地字符串为:
\n\n");
puts(str1);
}
voidcopy(charstr1【N】,charstr2【N】)
{
char*p1,*p2;
inti;
p1=str1;
p2=str2;
for(i=0;i*(p1+M+i)=*(p2+i);
*(p1+M+i)='\0';
}
10.8
#include
#defineN80
voidmain()
{
voidcount(charstr【N】,int*cap,int*low,int*space,int*num,int*oth);
charstr【N】;
inta=0,b=0,c=0,d=0,e=0;
int*cap,*low,*space,*num,*oth;
cap=&a;
low=&b;
space=&c;
num=&d;
oth=&e;
printf("输入-个字符串\n\n");
gets(str);
count(str,cap,low,space,num,oth);
printf("\n\n大写字母个数为:
%d\n\n小写字母个数为:
%d\n\n空格个数位:
%d\n\n数字个数为:
%d\n\n其他字符个数为:
%d\n\n",*cap,*low,*space,*num,*oth);
}
voidcount(charstr【N】,int*cap,int*low,int*space,int*num,int*oth)
{
inti;
for(i=0;str【i】!
='\0';i++)
{
if(str【i】>='A'&&str【i】<='Z')(*cap)++;
elseif(str【i】>='a'&&str【i】<='z')(*low)++;
elseif(str【i】=='')(*space)++;
elseif(str【i】>='0'&&str【i】<='9')(*num)++;
else(*oth)++;
}
}
10.9
#include
#defineN3
voidmain()
{
voidmove(int*p);
inta【N】【N】;
int*p,i,j;
printf("输入-个%d*%d地矩阵\n\n",N,N);
for(i=0;ifor(j=0;jscanf("%d",&a【i】【j】);
p=&a【0】【0】;
move(p);
for(i=0;i{
for(j=0;j{
printf("%d",a【i】【j】);
}
printf("\n");
}
}
voidmove(int*p)
{
inti,j,temp;
for(i=0;ifor(j=i;j{
temp=*(p+i*N+j);
*(p+i*N+j)=*(p+j*N+i);
*(p+j*N+i)=temp;
}
}
10.10
#include
#defineN3
voidmain()
{
voidswap(int*p,int*q);
voidsort(int*p);
intarr【N】【N】;
inti,j,*p;
printf("输入-个%d*%d地矩阵\n\n",N,N);
for(i=0;i{
for(j=0;j{
scanf("%d",&arr【i】【j】);
}
}
p=&arr【0】【0】;
sort(p);
printf("调整后地矩阵为:
\n\n");
for(i=0;i{
for(j=0;j{
printf("%d",arr【i】【j】);
}
printf("\n");
}
}
voidswap(int*p,int*q)
{
inttemp;
temp=*p;
*p=*q;
*q=temp;
}
voidsort(int*p)
{
int*max,*min;
inti,j;
max=p;
min=p;
for(i=0;i{
for(j=0;j{
if(*(p+i*N+j)>*max)max=p+i*N+j;
if(*(p+i*N+j)<*min)min=p+i*N+j;
}
}
swap(max,(p+(N-1)*(N+1)/2));
swap(min,p);
min=p+1;
for(i=0;i{
for(j=0;j{
if((*(p+i*N+j)<*min)&&((p+i*N+j)!
=p))min=p+i*N+j;
}
}
swap(min,(p+N-1));
min=p+1;
for(i=0;i{
for(j=0;j{
if((*(p+i*N+j)<*min)&&((p+i*N+j)!
=p)&&((p+i*N+j)!
=(p+N-1)))min=p+i*N+j;
}
}
swap(min,(p+(N-1)*N));
min=p+1;
for(i=0;i{
for(j=0;j{
if((*(p+i*N+j)<*min)&&((p+i*N+j)!
=p)&&((p+i*N+j)!
=(p+N-1))&&((p+i*N+j)!
=(p+(N-1)*N)))min=p+i*N+j;
}
}
swap(min,(p+N*N-1));
}
10.11
#include
#defineN5
voidmain()
{
voidswap(char*p,char*q);
voidsort(char*p);
charstr【N】【N】,*p;
inti;
printf("输入%d个字符串\n\n",N);
for(i=0;iscanf("%s",str【i】);
p=&str【0】【0】;
sort(p);
printf("\n\n排序后地%d个字符串为\n\n",N);
for(i=0;iprintf("%s\n",str【i】);
}
voidswap(char*p,char*q)
{
chars【N】;
strcpy(s,p);
strcpy(p,q);
strcpy(q,s);
}
voidsort(char*p)
{
inti,j;
for(i=0;i{
for(j=i+1;j{
if(strcmp((p+i*N),(p+j*N))>0)swap((p+i*N),(p+j*N));
}
}
}
10.12
#include
#defineN5
#defineM10
voidmain()
{
voidsort(char*p【N】);
charstr【N】【M】,*p【N】;
inti;
printf("输入%d个字符串\n\n",N);
for(i=0;iscanf("%s",str【i】);
for(i=0;ip【i】=str【i】;
sort(p);
printf("\n\n排序后地%d个字符串为\n\n",N);
for(i=0;iprintf("%s\n",p【i】);
}
voidsort(char*p【N】)
{
inti,j;
char*q;
for(i=0;i{
for(j=i+1;j{
if(strcmp(p【i】,p【j】)>0)
{
q=p【i】;
p【i】=p【j】;
p【j】=q;
}
}
}
}
10.13
#include
#include
voidmain()
{
floatintegral(floata,floatb,intn,double(*fun)(double));
intn=100;
floata,b,c;
double(*fun)(double);
printf("输入积分范围:
(a,b)\n\n");
scanf("%f%f",&a,&b);
fun=sin;
c=integral(a,b,n,fun);
printf("\n\nsin积分结果为:
%f\n\n",c);
fun=cos;
c=integral(a,b,n,fun);
printf("\n\ncos积分结果为:
%f\n\n",c);
fun=exp;
c=integral(a,b,n,fun);
printf("\n\nexp积分结果为:
%f\n\n",c);
}
floatintegral(floata,floatb,intn,double(*fun)(double))
{
inti;
floatx,h,area;
h=(b-a)/n;
x=a;
area=0;
for(i=0;i{
x=x+h;
area=area+(*fun)(x)*h;
}
return(area);
}
10.14
#include
#defineN20
voidmain()
{
voidswap(int*p,int*q);
voidback(int*p,intn);
inta【N】,i,n;
printf("输入个数n\n\n");
scanf("%d",&n);
printf("\n\n输入%d个整数\n\n",n);
for(i=0;iscanf("%d",&a【i】);
back(a,n);
printf("\n\n逆序排列为:
\n\n");
for(i=0;iprintf("%d",a【i】);
printf("\n\n");
}
voidswap(int*p,int*q)
{
inttemp;
temp=*p;
*p=*q;
*q=temp;
}
voidback(int*p,intn)
{
inti;
for(i=0;i{
swap(p+i,p+n-1-i);
}
}
10.15
#include
#defineM4
#defineN5
voidmain()
{
voidaver_count1(char*cou,float*sco);
voidaver_stu(float*sco,float*ave);
voidfail2(char*cou,int*num,float*sco,float*ave);
voidgood(char*cou,int*num,float*sco,float*ave);
charcourse【N】【10】,*cou;
floatscore【M】【N】,aver【M】,*sco,*ave;
intnumber【M】,*num,i,j;
cou=course【0】;
printf("输入%d门课程名\n\n",N);
for(i=0;iscanf("%s",cou+i*10);
printf("\n\n按顺序输入%d个学生学号和%d门课程地成绩\n\n",M,N);
printf("学号");
for(i=0;iprintf("%s",cou+i*10);
num=number;
sco=&score【0】【0】;
for(i=0;i{
scanf("%d",num+i);
for(j=0;j{
scanf("%f",sco+i*N+j);
}
}
aver_count1(cou,sco);
ave=aver;
aver_stu(sco,ave);
ave=aver;
fail2(cou,num,sco,ave);
ave=aver;
good(cou,num,sco,ave);
}
voidaver_count1(char*cou,float*sco)
{
inti;
floatsum,aver;
sum=0;
for(i=0;isum+=(*(sco+i*N));
aver=sum/M;
printf("第-门课%s地平均成绩为:
%f\n\n",cou,aver);
}
voidaver_stu(float*sco,float*ave)
{
inti,j;
floatsum;
for(i=0;i{
sum=0;
for(j=0;j{
sum+=(*(sco+i*N+j));
}
*(ave+i)=sum/N;
}
}
voidfail2(char*cou,int*num,float*sco,float*ave)
{
inti,j,k,flag;
printf("============两门以上课程不及格地学生============\n\n");
printf("学号");
for(i=0;iprintf("%-8s",cou+i*10);
printf("平均成绩\n\n");
for(i=0;i{
flag=0;
for(j=0;j{
if(*(sco+i*N+j)<60)flag+=1;
}
if(flag>2)
{
printf("%-8d",*(num+i));
for(k=0;k{
printf("%-8.2f",*(sco+i*N+k));
}
printf("%-8.2f\n\n",*(ave+i));
}
}
}
voidgood(char*cou,int*num,float*sco,float*ave)
{
inti,j,k,flag;
printf("============平均成绩在90分以上或者每门课在85分以上地学生============\n\n");
printf("学号");
for(i=0;iprintf("%-8s",cou+i*10);
printf("平均成绩\n\n");
for(i=0;i{
flag=0;
for(j=0;j{
if(*(sco+i*N+j)>=85)flag+=1;
}
if(flag==5||(*(ave+i)>=90))
{
printf("%-8d",*(num+i));
for(k=0;k{
printf("%-8.2f",*(sco+i*N+k));
}
printf("%-8.2f\n\n",*(ave+i));
}
}
}