c程序设计第四版谭浩强第八章答案Word文档下载推荐.docx
《c程序设计第四版谭浩强第八章答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c程序设计第四版谭浩强第八章答案Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
if(strcmp(a,b)〉0)
if(strcmp(a,c)>
0)
{t=p1;
p1=p3;
if(strcmp(b,c)〉0)
printf(”sortstring:
%s%s%s\n"
p1,p2,p3);
voidinput(int*p)
inti;
enter10number:
);
for(i=0;
i〈10;
i++)
scanf("
%d"
p+i);
voidoutput(int*p)
{
inti;
new10number:
i<
10;
%-2d”,*(p+i));
voidsort(int*p,intn)
inti,t;
n—1;
{
if(*(p+i)〉*(p+i+1))
{t=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=t;
}
for(i=n—2;
i>
0;
i--)
{
if(*(p+i-1)>
*(p+i))
{t=*(p+i);
*(p+i)=*(p+i-1);
*(p+i-1)=t;
inta[10],*p=a;
input(p);
sort(p,10);
output(p);
putchar(’\n'
*/
#defineN10
voidhouyi(int*p,intm)
inti,b[N]={0};
for(i=0;
N—m;
b[i+m]=*(p+i);
for(;
i〈N;
b[i—N+m]=*(p+i);
N;
printf(”%3d”,b[i]);
inta[N],i,m,*p=a;
enternumber:
i〈N;
%d”,&a[i]);
enterm:
%d”,&
m);
newnumber:
”);
houyi(p,m);
putchar('
\n'
intcount(int*p,intn);
intn,*p,i;
scanf(”%d”,&
n);
p=(int*)calloc(n,sizeof(int));
i〈n;
*(p+i)=0;
thelastnumberis%d\n"
count(p,n)+1);
free(p);
intcount(int*p,intn)
inti,j=1,k=0;
n;
if(*(p+i)!
=3)
{
*(p+i)=j;
if(*(p+i)==3)
j=1;
//数到3时将下一个重置为1
else
j+=1;
if(i==(n-1))
i=-1;
//轮到到最后一个人报数时,将i重置为-1,执行完for语句后自动加一变为0,从头开始
k+=1;
//报完一个数后加一
}
else
{
if(i==(n-1))
i=—1;
//检查到最后一个人是3时,将i重置为—1,执行完for语句后自动加一变为0,从头开始
continue;
//检查到这个人是3时,跳过报数
if(k==3*(n—1))//报数的总个数达到3*(n—1)时,就只剩一个人了
break;
else
continue;
}
if(*(p+i)==3)
elsereturni;
#defineN20
intlength(char*p)
intn=0;
while(*p!
=0)
p++;
n+=1;
returnn;
chara[N],*p=a;
printf(”enterstring:
gets(a);
printf(”字符串长度为:
%d\n”,length(p));
#defineN10
voidcopyn(char*p,intm);
char*p=”abcdefghij”;
intm;
%s\nenterm:
,p);
scanf(”%d"
&
copyn(p,m);
voidcopyn(char*p,intm)
charb[N],i;
for(i=m—1;
*(p+i);
b[i—m+1]=*(p+i);
b[i-m+1]='
\0'
;
printf("
%s\n”,b);
#defineN50
voidcount(char*p)
intd=0,x=0,k=0,s=0,o=0;
while(*p)//不能写*(p++),否则计算出错,无法计算第一个字符
if(*p>
='
a'
&
*p<
z’)
x+=1;
elseif(*p>
A'
&&*p〈='
Z'
)
d+=1;
=’0'
&&*p〈='
9'
s+=1;
elseif(*p=='
'
elseo+=1;
p++;
printf(”大写字母:
%d\n小写字母:
%d\n空格:
%d\n数字:
%d\n其他:
%d\n"
d,x,k,s,o);
chara[N],*p=a;
enterstring:
count(p);
voidzhuangzhi(int(*p)[3])
inti,j,t;
3;
for(j=0;
j<
3;
j++)
if(i<
j)
{
t=*(*(p+i)+j);
//*(*(p+i)+j)代表a[i][j]
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=t;
}
int(*p)[3],a[3][3],i,j;
p=a;
printf(”enterarray:
\n"
for(j=0;
scanf("
%d”,&a[i][j]);
zhuangzhi(p);
printf(”newarray:
\n”);
i〈3;
printf(”%-2d”,a[i][j]);
if(j==2)
putchar(’\n’);
}*/
voidcentral(int(*p)[5])
inti,j,l=0,r=0,t;
//r代表行,l代表列
i〈5;
j〈5;
if(*(*(p+i)+j)〉*(*(p+r)+l))
r=i;
l=j;
}
t=*(*(p+2)+2);
*(*(p+2)+2)=*(*(p+r)+l);
*(*(p+r)+l)=t;
//最大元素放在中心
l=0;
r=0;
i++)//四个角放最小元素,每次从第二个元素开始对比
for(j=1;
5;
if(*(*(p+i)+j)〈*(*(p+r)+l))
r=i;
//找出最小元素
t=*(*p);
*(*p)=*(*(p+r)+l);
*(*(p+r)+l)=t;
//将最小元素与左上角元素交换,下同
l=4;
//换完重置r和l,下同
for(j=1;
5;
if(*(*(p+r)+l)〉*(*(p+i)+j))
{
t=*(*p+4);
*(*p+4)=*(*(p+r)+l);
r=4;
l=0;
for(j=1;
if(i==0&&
j==4)//遇到右上角,跳过对比
continue;
elseif(*(*(p+r)+l)〉*(*(p+i)+j))
t=*(*(p+4));
*(*(p+4))=*(*(p+r)+l);
l=4;
i〈5;
if(i==0&
&j==4||i==4&&
j==0)//遇到右上角和左下角,跳过对比
elseif(*(*(p+r)+l)>
*(*(p+i)+j))
t=*(*(p+4)+4);
*(*(p+4)+4)=*(*(p+r)+l);
*(*(p+r)+l)=t;
inta[5][5],(*p)[5]=a,i,j;
enterarray:
%d"
*(p+i)+j);
central(p);
printf(”newarray:
j〈5;
printf("
%—3d”,*(*(p+i)+j));
putchar(’\n’);
voidsort(char*p[],intn)//指针数组处理
inti,j;
char*k;
for(i=1;
n;
for(j=i;
j〈n;
if(strcmp(p[i—1],p[j])〉0)
k=p[i-1];
p[i—1]=p[j];
p[j]=k;
char*p[10]={"
gutsy"
"
glory”,”gonad”,”girth"
,"
gaudy”,”gypsy"
”gusto"
”guppy”,"
group"
grope"
};
//测试数据gutsyglorygonadgirthgaudygypsygustoguppygroupgrope
printf(”enterstrings:
printf(”%s"
p[i]);
\nnewstrings:
i〈10;
p[i]);
putchar(’\n’);
#defineN20
voidsort(char*p,intn)//指针处理
inti,j;
chark[N];
if(strcmp(p+20*(i—1),p+20*j)〉0)//不能写为p+i—1,否则出错
strcpy(k,p+20*(i—1));
strcpy(p+20*(i-1),p+20*j);
strcpy(p+20*j,k);
chara[10][N];
char*p=a[0];
//不能写为*p=a,这等价于是把行向量赋值给列向量
enterstrings:
\n”);
10;
%s”,&a[i]);
//可写为gets(a[i]),这样写的话,每次输入字符串后按enter,或写为scanf(”%s"
,&a[i]),每输一个字符后按空格即可;
newstrings:
printf(”%s"
a[i]);
#definen1000//矩形法求定积分,n为区间分割数目
doubleding(doublea,doubleb,double(*fun)(double))
doubles=0;
for(i=1;
s+=(*fun)(i*(b-a)/n);
returns*=(b-a)/n;
doublea,b,s1,s2,s3;
//定义积分下限,上限,用double精度较高
输入积分下限,上限,分割区间数目:
%lf%lf"
,&a,&
b);
s1=ding(a,b,sin);
s2=ding(a,b,cos);
s3=ding(a,b,exp);
sin(x)从%f到%f的积分为%f\n”,a,b,s1);
printf(”cos(x)从%f到%f的积分为%f\n”,a,b,s2);
printf(”exp(x)从%f到%f的积分为%f\n"
a,b,s3);
voidnixu(int*p)
inti,m=N/2,t;
m;
t=*(p+i);
*(p+i)=*(p+N—1-i);
*(p+N—1-i)=t;
inta[N],*p=a,i;
printf(”enter%dnumbers:
N);
scanf(”%d"
&a[i]);
nixu(p);
newnumbers:
printf(”%d”,a[i]);
voidaverage1(float(*p)[6],intn)
floatave=0;
i〈n;
ave+=*(*(p+i)+1)/4;
printf(”第一门课程的平均分为:
%4.2f\n"
,ave);
floataverage(float(*p)[6])
floatave=0;
i〈6;
ave+=*(*p+i)/5;
returnave;
voidout(float(*p)[6],intn)
inti,j,k,l,s=0;
printf(”两门课以上不及格的学生:
k=0;
j〈6;
if(*(*(p+i)+j)<
60)
k+=1;
elsecontinue;
}
if(k〉=2)
s=1;
%4。
0f"
*(*(p+i)));
for(l=1;
l<
6;
l++)
%4.0f”,*(*(p+i)+l));
平均分为:
%4。
2f\n”,average(p+i));
if(s==0)//没有符合条件的学生时输出“无”
无!
voidin(float(*p)[6],intn)
inti,j,l;
if(average(p+i)>
=90)
printf(”平均分在90分以上的学生:
*(*(p+i)));
for(l=1;
l〈6;
,*(*(p+i)+l));
putchar(’\n'
break;
if(*(*(p+i)+j)〉=85)
continue;
else
if(j==6)
printf(”全部课程成绩在85分以上的学生:
,*(*(p+i)));
for(l=1;
printf(”%4.0f”,*(*(p+i)+l));
putchar('
floata[4][6]={{1001,65,67,55,60,45},{1002,80,87,90,81,85},{1003,90,99,100,98,95},{1004,86,89,90,91,85}};
float(*p)[6]=a;
4;
printf(”%4。
0f"
,a[i][j]);
average1(p,4);
out(p,4);
in(p,4);
#defineN10//方法一
intnum1(char*p)//将数字字符串转为整形数字的函数
intn=strlen(p),i,a=0;
a+=(int)((*(p+i)—48)*pow(10,n—1-i));
returna;
voidnumber(char*p)
inti,num=0,j=1,k=—1,n=strlen(p);
//j用于计算数字长度,k用于计算数字个数
inta[N];
//最多容纳N个整数
=n;
if(*p<
’0'
||*p>
'
if(num==1)
*p=’\0’;
a[k]=num1(p-j);
num=0;
elseif(num==0)
num=1;
j=1;
//找到新数字时重置j
k+=1;
else
j+=1;
i〈k+1;
%d"
a[i]);
voidnumber(char*p)//方法二
inti,num=0,j=1,k=—1,n=strlen(p);
chara[N][10];
//最多容纳N个整数,每个整数最多十位数
=n;
’0’||*p>
’9’)
*p='
\0’;
strcpy(a[k],p—j);
j=1;
j+=1;
k+1;
a[i]);
chara[100],*p=a;
//最多可输入100个字符
printf(”enterstrings:
gets(p);
number(p);
#defineN20//字符串比较函数
intstr_cmp(char*p1,char*p2)
inti,n=strlen(p1);
i〈=n;
if(*(p1+i)==*(p2+i))
continue;
elseif(*(p1+i)>
*(p2+i))
return*(p1+i)-*(p2+i);
break;
return*(p1+i