谭浩强C语言程序设计第三版 课后习题答案

第十章

10.1

#include <iostream>

void main()
{
void swap(int *p,int *q);
int x,y,z;
int *p1,*p2,*p3;
printf("输入三个整数nn");
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("nn三个数由小到达输出为:%d %d%dnn",x,y,z);
}

void swap(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

10.2

#include <iostream>
#include <string>

#define N 80

void main()
{
void swap(char *p,char *q);
char str1[N],str2[N],str3[N];
printf("请输入三个字符串nn");
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("nn三个字符串由小到大排列,分别为:nn%sn%sn%sn",str1,str2,str3);
}

void swap(char *p,char *q)
{
char str[N];
strcpy(str,p);
strcpy(p,q);
strcpy(q,str);
}

10.3

#include <iostream>

#define N 10

void main()
{
void input(int num[N]);
void swap(int *p,int *q);
void exchange(int num[N]);
void output(int num[N]);
int num[N];
input(num);
exchange(num);
output(num);
}

void input(int num[N])
{
int i;
printf("输入十个整数nn");
for(i=0;i<N;i++)
{
scanf("%d",&num[i]);
}
}

10.4

#include <iostream>

#define N 10
#define M 3

void main()
{
void move(int num[N],int n,int m);
int num[N];
int i;
printf("输入%d个整数nn",N);
for(i=0;i<N;i++)
{
scanf("%d",&num[i]);
}
move(num,N,M);
printf("nn调整后的%d个整数为:nn",N);
for(i=0;i<N;i++)
{
printf("%d ",num[i]);
}
printf("nn");
}

void swap(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

void move(int num[N],int n,int m)
{
int *p,*num_end;
int temp;
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 <iostream>

#define N 8

void main()
{
void leave(int num[N]);
int num[N];
int i,*p;
p=num;
for(i=0;i<N;i++)
*(p+i)=i+1;
leave(num);
while(*p==0) p++;
printf("最后留下的是第%d个人nn",*p);
}

void leave(int num[N])
{
int *p;
int i=0,k=0,m=0;
p=num;
while(m<N-1)
{
if(*(p+i)!=0) k++;
if(k==3)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==N) i=0;
}
}

10.6

#include <iostream>

#define N 10

void main()
{
int count(char str[N]);
int i;
char str[N];
printf("输入一个字符串nn");
gets(str);
printf("nn字符串长度为:%dnn",count(str));
}

int count(char str[N])
{
char *p;
int i=0;
p=str;
while(*p!='')
{
i++;
p++;
}
return(i);
}

10.7

#include <iostream>

#define N 80
#define M 4

void main()
{
void copy(char str1[N],char str2[N]);
char str1[N],str2[N];
printf("输入字符串str1nn");
gets(str1);
printf("nn输入字符串str2nn");
gets(str2);
copy(str1,str2);
printf("nn整合之后的字符串为:nn");
puts(str1);
}

void copy(char str1[N],char str2[N])
{
char *p1,*p2;
int i;
p1=str1;
p2=str2;
for(i=0;i<strlen(str2);i++)
*(p1+M+i)=*(p2+i);
*(p1+M+i)='';
}

10.8

#include <iostream>

#define N 80

void main()
{
void count(char str[N],int *cap,int *low,int*space,int *num,int *oth);
char str[N];
int a=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("输入一个字符串nn");
gets(str);
count(str,cap,low,space,num,oth);
printf("nn大写字母个数为:%dnn小写字母个数为:%dnn空格个数位:%dnn数字个数为:%dnn其他字符个数为:%dnn",*cap,*low,*space,*num,*oth);
}

void count(char str[N],int *cap,int *low,int *space,int *num,int*oth)
{
int i;
for(i=0;str[i]!='';i++)
{
if(str[i]>='A'&&str[i]<='Z')(*cap)++;
elseif(str[i]>='a'&&str[i]<='z')(*low)++;
else if(str[i]==' ')(*space)++;
elseif(str[i]>='0'&&str[i]<='9')(*num)++;
else (*oth)++;
}
}

10.9

#include <iostream>

#define N 3

void main()
{
void move(int *p);
int a[N][N];
int *p,i,j;
printf("输入一个%d*%d的矩阵nn",N,N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
p=&a[0][0];
move(p);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d",a[i][j]);
}
printf("n");
}
}

void move(int *p)
{
int i,j,temp;
for(i=0;i<N;i++)
for(j=i;j<N;j++)
{
temp=*(p+i*N+j);
*(p+i*N+j)=*(p+j*N+i);
*(p+j*N+i)=temp;
}
}

10.10

#include <iostream>

#define N 3

void main()
{
void swap(int *p,int *q);
void sort(int *p);
int arr[N][N];
int i,j,*p;
printf("输入一个%d*%d的矩阵nn",N,N);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&arr[i][j]);
}
}
p=&arr[0][0];
sort(p);
printf("调整后的矩阵为:nn");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%d",arr[i][j]);
}
printf("n");
}
}

void swap(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

void sort(int *p)
{
int *max,*min;
int i,j;
max=p;
min=p;
for(i=0;i<N;i++)
{
for(j=0;j<N;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<N;i++)
{
for(j=0;j<N;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<N;i++)
{
for(j=0;j<N;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<N;i++)
{
for(j=0;j<N;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 <iostream>

#define N 5

void main()
{
void swap(char *p,char *q);
void sort(char *p);
char str[N][N],*p;
int i;
printf("输入%d个字符串nn",N);
for(i=0;i<N;i++)
scanf("%s",str[i]);
p=&str[0][0];
sort(p);
printf("nn排序后的%d个字符串为nn",N);
for(i=0;i<N;i++)
printf("%sn",str[i]);
}

void swap(char *p,char *q)
{
char s[N];
strcpy(s,p);
strcpy(p,q);
strcpy(q,s);
}

void sort(char *p)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(strcmp((p+i*N),(p+j*N))>0)swap((p+i*N),(p+j*N));
}
}
}

10.12

#include <iostream>

#define N 5
#define M 10

void main()
{
void sort(char *p[N]);
char str[N][M],*p[N];
int i;
printf("输入%d个字符串nn",N);
for(i=0;i<N;i++)
scanf("%s",str[i]);
for(i=0;i<N;i++)
p[i]=str[i];
sort(p);
printf("nn排序后的%d个字符串为nn",N);
for(i=0;i<N;i++)
printf("%sn",p[i]);
}


void sort(char *p[N])
{
int i,j;
char *q;
for(i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if(strcmp(p[i],p[j])>0)
{
q=p[i];
p[i]=p[j];
p[j]=q;
}
}
}
}

10.13

#include <iostream>
#include <math.h>

void main()
{
float integral(float a,float b,int n,double(*fun)(double));
int n=100;
float a,b,c;
double (*fun)(double);
printf("输入积分范围:(a,b)nn");
scanf("%f%f",&a,&b);
fun=sin;
c=integral(a,b,n,fun);
printf("nnsin积分结果为:%fnn",c);
fun=cos;
c=integral(a,b,n,fun);
printf("nncos积分结果为:%fnn",c);
fun=exp;
c=integral(a,b,n,fun);
printf("nnexp积分结果为:%fnn",c);
}

float integral(float a,float b,int n,double(*fun)(double))
{
int i;
float x,h,area;
h=(b-a)/n;
x=a;
area=0;
for(i=0;i<n;i++)
{
x=x+h;
area=area+(*fun)(x)*h;
}
return(area);
}

10.14

#include <iostream>

#define N 20

void main()
{
void swap(int *p,int *q);
void back(int *p,int n);
int a[N],i,n;
printf("输入个数nnn");
scanf("%d",&n);
printf("nn输入%d个整数nn",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
back(a,n);
printf("nn逆序排列为:nn");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("nn");
谭浩强C语言程序设计(第三版)课后习题答案
}

void swap(int *p,int *q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}

void back(int *p,int n)
{
int i;
for(i=0;i<n/2;i++)
{
swap(p+i,p+n-1-i);
}
}

10.15

#include <iostream>

#define M 4
#define N 5

void main()
{
void aver_count1(char *cou,float *sco);
void aver_stu(float *sco,float *ave);
void fail2(char *cou,int *num,float *sco,float*ave);
void good(char *cou,int *num,float *sco,float*ave);
char course[N][10],*cou;
float score[M][N],aver[M],*sco,*ave;
int number[M],*num,i,j;
cou=course[0];
printf("输入%d门课程名nn",N);
for(i=0;i<N;i++)
scanf("%s",cou+i*10);
printf("nn按顺序输入%d个学生学号和%d门课程的成绩nn",M,N);
printf("学号 ");
for(i=0;i<N;i++)
printf("%s ",cou+i*10);
num=number;
sco=&score[0][0];
for(i=0;i<M;i++)
{
scanf("%d",num+i);
for(j=0;j<N;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);
}

void aver_count1(char *cou,float *sco)
{
int i;
float sum,aver;
sum=0;
for(i=0;i<M;i++)
sum+=(*(sco+i*N));
aver=sum/M;
printf("第一门课%s的平均成绩为:%fnn",cou,aver);
}

void aver_stu(float *sco,float *ave)
{
int i,j;
float sum;
for(i=0;i<M;i++)
{
sum=0;
for(j=0;j<N;j++)
{
sum+=(*(sco+i*N+j));
}
*(ave+i)=sum/N;
}
}

void fail2(char *cou,int *num,float *sco,float *ave)
{
int i,j,k,flag;
printf("============两门以上课程不及格的学生============nn");
printf("学号");
for(i=0;i<N;i++)
printf("%-8s",cou+i*10);
printf(" 平均成绩nn");
for(i=0;i<M;i++)
{
flag=0;
for(j=0;j<N;j++)
{
if(*(sco+i*N+j)<60)flag+=1;
}
if(flag>2)
{
printf("%-8d",*(num+i));
for(k=0;k<N;k++)
{
printf("%-8.2f",*(sco+i*N+k));
}
printf("%-8.2fnn",*(ave+i));
}
}
}

void good(char *cou,int *num,float *sco,float *ave)
{
int i,j,k,flag;
printf("============平均成绩在90分以上或者每门课在85分以上的学生============nn");
printf("学号");
for(i=0;i<N;i++)
printf("%-8s",cou+i*10);
printf(" 平均成绩nn");
for(i=0;i<M;i++)
{
flag=0;
for(j=0;j<N;j++)
{
if(*(sco+i*N+j)>=85)flag+=1;
}
if(flag==5||(*(ave+i)>=90))
{
printf("%-8d",*(num+i));
for(k=0;k<N;k++)
{
printf("%-8.2f",*(sco+i*N+k));
}
printf("%-8.2fnn",*(ave+i));
}
}
}

10.16

#include <iostream>

#define N 50

void main()
{
char str[N],*p;
int i,j,temp;
int number[N],*num;
printf("输入一个字符串nn");
gets(str);
p=str;
temp=0;
j=0;
num=number;
for(i=0;(*(p+i))!=''&&i<N;i++)
{
if((*(p+i))>='0'&&(*(p+i))<='9')
{
if((*(p+i+1))>='0'&&(*(p+i+1))<='9')
temp=temp*10+*(p+i)-48;
else
{
temp=temp*10+*(p+i)-48;
*(num+j)=temp;
temp=0;
j++;
}
}
}
printf("nn字符串中共有%d个整数,它们分别为:nn",j);
for(i=0;i<j;i++)
{
printf("%d ",*(num+i));
}
printf("nn");
}

10.17

#include <iostream>

#define N 10

void main()
{
int strcmp(char *p1,char *p2);
char str1[N],str2[N];
char *p1,*p2;
printf("输入字符串str1nn");
gets(str1);
printf("nn输入字符串str2nn");
gets(str2);
p1=str1;
p2=str2;
printf("nn%dnn",strcmp(p1,p2));
}

int strcmp(char *p1,char *p2)
{
int i,flag=0;
for(i=0;*(p1+i)!=''&&*(p2+i)!='';i++)
{
if(*(p1+i)==*(p2+i))flag=0;
else
{
flag=*(p1+i)-*(p2+i);
break;
}
}
return flag;
}

10.18

#include <iostream>

void main()
{
char*mon[]={"一月份","二月份","三月份","四月份","五月份","六月份","七月份","八月份","九月份","十月份","十一月份","十二月份"};
int n;
printf("输入一个月份号nn");
scanf("%d",&n);
if(n>=1&&n<=12)printf("nn%snn",mon[n-1]);
else printf("nn%d月份不存在nn",n);
}


10.20

#include <iostream>

#define N 5
#define MAX 100

void main()
{
void sort(char **p);
char *pstr[N],**p,str[N][MAX];
int i;
for(i=0;i<N;i++)
pstr[i]=str[i];
printf("输入%d个字符串nn",N);
for(i=0;i<N;i++)
gets(str[i]);
p=pstr;
sort(p);
printf("nn排序后的%d个字符串为:nn",N);
for(i=0;i<N;i++)
puts(*(p+i));
}

void sort(char **p)
{
int i,j;
char *temp;
for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
{
if(strcmp(*(p+i),*(p+j))>0)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}

10.21

#include <iostream>

#define N 100

void main()
{
void sort(int **p,int n);
int i,n;
int *pnum[N],num[N],**p;
printf("输入整数个数nn");
scanf("%d",&n);
for(i=0;i<n;i++)
pnum[i]=&num[i];
printf("nn输入%d个整数nn",n);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
p=pnum;
sort(p,n);
printf("nn排序后的%d个整数为:nn",n);
for(i=0;i<n;i++)
printf("%d ",**(p+i));
printf("nn");
}

void sort(int **p,int n)
{
int *temp;
int i,j;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(**(p+i)>**(p+j))
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
}
}

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/192584.html

更多阅读

声明:《谭浩强C语言程序设计第三版 课后习题答案》为网友哏颩蓅蒗分享!如侵犯到您的合法权益请联系我们删除