谭浩强-C语言程序设计(第三版)课后习题答案_第1页
谭浩强-C语言程序设计(第三版)课后习题答案_第2页
谭浩强-C语言程序设计(第三版)课后习题答案_第3页
谭浩强-C语言程序设计(第三版)课后习题答案_第4页
谭浩强-C语言程序设计(第三版)课后习题答案_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

程序是在VC6.0下编译的,所以头文件和TC的不太一样!

4-8

#include<iostream>

#definepi3.1415

voidmain()

|

floatr,h,rl,ra,ss,sv,cv;

printf("输入圆的半径和圆柱的高\n\n");

scanf”,&r,&h);

rl=2*pi*r;

ra=pi*r*r;

ss=4*pi*r*r;

sv=4*pi*r*r*r/3;

cv=ra*h;

printf(〃圆周长为:%f\n\n圆面积为:%f\n\n圆球表面积为:%f\n\n圆球体积为:%f\n\n

圆柱体积为:%f\n\n,z,rl,ra,ss,sv,cv);

)

4-9

#include<iostream>

voidmain()

(

floatF,c;

printf(〃输入一个华氏温度\n\n〃);

scanf&F);

c=5*(F-32)/9;

printf("摄氏温度为:%.2f\n\n〃,c);

}

第五章

5-4

#include<iostream>

voidmain()

inta,b,c,max;

printf(〃输入三个整数a,b,c\n\n");

scanf(〃%d%d%d〃,&a,&b,&c);

if(a>b)max=a;

elsemax=b;

if(max<c)max=c;

printf(〃最大的数为:%d\n\n,z,max);

)

5-5

#include<iostream>

voidmain()

(

floatx,y;

printf("输入x\n\n〃);

scanf&x);

if(x<l)y=x;

elseif(x<10)y=2*xT;

elsey=3*x-l1;

printfCy=%f\n\nz,y);

}

5-6

ttinclude<iostream>

voidmain()

(

floatm;

intn;

printf(〃输入成绩\n\n〃);

scanf&n);

n=ni/10;

switch(n)

case0:

case1:

case2:

case3:

case4:

case5:printf(〃E\n\n〃);break;

case6:printf(,zD\n\n/z);break;

case7:printf(,/C\n\n/,);break;

case8:printf(/zB\n\nz/);break;

case9:

case10:printf(z,A\n\n/z);break;

)

)

5-7

#include<iostream>

#include<math.h>

voidmain()

(

inta,b,c,i,j,n;

printf(〃输入五位正整数\n\n〃);

scanf(/z%d/z,&a);

printfC\n\nz,);

c=a;

for(i=l;;i++)

(

b=c%10;

c=c/10;

printf(,z%dz,,b);

if(c=0)

(

printf(〃\n\n〃);

printf("正整数为%d位数\n\n〃,i);break;

)

)

c=a;

for(j=i-l;j>=0;j—)

n=pow(10,j);

b=c/n;

c=c%n;

printf(,z%d\n,z,b);

)

)

5-8

if语句:

#include<iostream>

voidmainO

{

intI;

floatbonus;

printf(〃输入当月利润I\n\n〃);

scanf(线d”,&,I);

if(I<=100000)bonus=I/10;

elseif(I<=200000)bonus=10000+(I-100000)*7.5/100;

elseif(I<=400000)bonus=10000+7500+(1-200000)*5/100;

elseif(I<=600000)bonus=10000+7500+10000+(1-400000)*3/100;

elseif(I<=1000000)bonus=10000+7500+10000+6000+(1-600000)*1.5/100;

elsebonus=10000+7500+10000+6000+6000+(1-1000000)*1/100;

printf(“应发奖金数为:%f\n\n,z,bonus);

)

switch语句:

#include<iostream>

voidmain()

(

intI,n;

floatbonus;

printf(〃输入当月利润I\n\n〃);

scanf&I);

if(I>1000000)n=10;

elsen=I/100000;

switch(n)

case0:bonus=I/10;break;

case1:bonus=10000+(I-100000)*7.5/100;break;

case2:

case3:bonus=l0000+7500+(1-200000)*5/100;break;

case4:

case5:bonus=10000+7500+10000+(1-400000)*3/100;break;

case6:

case7:

case8:

case9:bonus=10000+7500+10000+6000+(I-600000)*l.5/100;break;

case10:bonus=10000+7500+10000+6000+6000+(1-1000000)*1/100;break;

)

printf(“应发奖金数为:%f\n\n,z,bonus);

)

5-9

#include<iostream>

voidmain()

(

inta,b,c,d,temp,min;

printf(〃输入四个数a,b,c,d\n\n");

scanf(,z%d%d%d%d,z,&a,&b,&c,&d);

if(a>b)

{

temp=a;

a=b;

b=temp;

)

if(a>c)

(

temp=a;

a=c;

c=temp;

}

if(a>d)

{

temp=a;

a=d;

d=temp;

}

printf(〃由小到大排列为:\n\n");

printfC%da);

if(b>c)

{

temp=b;

b=c;

c=temp;

)

if(b>d)

|

temp二b;

b=d;

d二temp;

)

printfC%d",b);

if(c>d)

(

temp=c;

c=d;

d=temp;

)

printf(,z%d〃,c);

printfd);

5-10

#include<iostream>

#include<math.h>

voidmain()

floatx,y,a,b,c,d;

printf(〃输入点的坐标\n\n〃);

scanf”,&x,&y);

a=sqrt((2-x)*(2-x)+(2-y)*(2-y));

b=sqrt((2-x)*(2-x)+(-2-y)*(-2-y));

c=sqrt((-2-x)*(-2-x)+(-2-y)*(-2-y));

d=sqrt((-2-x)*(-2-x)+(2-y)*(2-y));

if(a<=l||b<=l||c<=l||d<=l)printf(〃该点建筑高度为:10m〃);

elseprintf(〃该点建筑高度为:0m〃);

}

弟八早:

6-1

#include<iostream>

#include<math.h>

voidmain()

{

intm,n,max,min,i,k;

printf(〃输入两个正整数\n\n〃);

scanf&m,&n);

if(m>n)k=n;

elsek=m;

for(i=l;i<=k;i++)

(

if((m%i==0)&&(n%i=:=0))max=i;

)

printf("最大公约数为:%d\n\nz,,max);

if(m>n)k=m;

elsek二n;

for(i=k;;i++)

(

if((i%m=0)&&(i%n=0))

mm=i;

break;

)

)

printf(〃最小公倍数为:%d\n\nz/,min);

6-2

#include<iostream>

voidmain()

(

charc;

int1=0,b=0,n=0,e=0;

printf(〃输入一行字符\n\n〃);

while((c=getchar())!='\n)

{

if((c>='a'&&c〈二'z')||(c>='A'&&c<='Z'))1+=1;

elseif(c==,')b+=l;

elseif(c>=48&&c<=57)n+=l;

elsee+=l;

)

printf(〃英文字母个数为:%d\n\n空格个数为:%d\n\n数字个数为:%d\n\n其他字符个

数为:%d\n\nz,,1,b,n,e);

)

6-3

#include<iostream>

^include<math.h>

voidmain()

(

intn,k,i;

floata,s=0;

printf(〃输入n和a\n\n〃);

scanf(,,%d%fz/,&n,&a);

for(i=0;i<n;i++)

{

k=pow(10,i);

s=s+(n-i)*a*k;

)

printf(〃和s=%f\n\n,z,s);

6-4

ttinclude<iostream>

voidmain()

(

intn,s,S=0,i,j;

printf(〃输入n\n\n〃);

scanf("%d",&n);

for(i=l;j<=n;i++)

(

s=l;

for(j=l;j<=i;j++)

{

s=s*j;

)

S+=s;

)

printf(〃和S=%d\n\n",S);

6-5

ttinclude<iostream>

voidmain()

inti,m,n,t;

intsl=O,s2=0;

floats3=0,s,1;

printf(〃输入m,n,t的值\n\n〃);

scanf(//%d%d%d,/,&m,&n,&t);

for(i=l;i<=m;i++)

(

sl+=i;

)

for(i=l;i<=n;i++)

{

s2+=i*i;

)

for(i=l;i<=t;i++)

(

1=1.0/i;

s3+=l;

)

s=sl+s2+s3;

printf(〃和s=%f",s);

}

6-6

#include<iostream>

voidmain()

(

intm,n,k,i,j;

printf("水仙花数为:\n〃);

for(i=100;i<=999;i++)

(

j=i;

m=j%10;

j=j/10;

n=j%10;

k=j/10;

if(i=m*m*m+n*n*n+k*k*k)printfC%d〃,i);

}

6-7

#include<iostream>

#include<math.h>

voidmain()

{

inti,j,k,s;

for(i=l;i<=1000;i++)

(

s=0;

for(j=l;j<i;j++)

(

if(i%j=0)s+=j;

}

if(s==i)

(

printf(〃\n\n");

printf(zz%ditsfactorsare”,i);

for(j=l;j<i;j++)

(

if(i%j=O)printf(z/%d”,j);

)

)

)

}

6-8

ttinclude<iostream>

voidmain()

{

intn,i;

floatfl,f2,s,temp;

printf(〃输入n\n\n");

scanf("%d",&n);

f1=2.0;f2=3.O;s=f1;

for(i=l;i<=n-l;i++)

(

s+=f2/fl;

temp=f2;

f2=fl+f2;

fl=temp;

)

printf(〃前%d项利为%f〃,n,s);

)

6-9

#include<iostream>

#include<math.h>

voidmain()

(

inti,n,1=100;

floatm,s=0;

printf("输入n\n\n,z);

scanf("%d〃,&n);

m=l;

for(i=l;i<=n;i++)

(

s+=2*m;

m=m*0.5;

)

printfm%d次落地时经过%f米\n\n〃,n,s-1);

printf("第%d次落地后反弹%f米\n\n〃,n,m);

)

6-10

#include<iostream>

voidmain()

(

intm=l,n,i;

printf(〃输入n\n\n,z);

scanf(〃%d〃,&n);

for(i=l;i<n;i++)

|

m=(m+l)*2;

)

printf("一共摘了%d个桃子\n\n〃,m);

}

6-11

#include<iostream>

#include<math.h>

voidmain()

(

floata,xl,x2;

printf("输入a\n\n〃);

scanf&a);

xl=a/2;

1oop:x2=(x1+a/xl)/2;

if(fabs(xl-x2)>le-5)

(

xl=x2;

gotoloop;

}

elseprintf(〃\n\na的平方根为%f\n\n”,x2);

)

6-12

#include<iostream>

#include<math.h>

voidmain()

(

floatf(float);

floatxpoint(float,float);

floatroot(float,float);

floatx,xl,x2,fl,f2;

do

(

printf("输入xl,x2\n\n,z);

scanf&xl,&x2);

fl=f(xl);

f2=f(x2);

}while(fl*f2>0);

x=root(xl,x2);

printf(〃方程在1.5附近的根为:%f\n\n〃,x);

)

floatf(floatx)

(

floaty;

y=2*x*x*x-4*x*x+3*x-6;

return(y);

)

floatxpoint(floatxl,floatx2)

(

floaty;

y=(xl*f(x2)-x2*f(x1))/(f(x2)-f(x1));

return(y);

)

floatroot(floatxl,floatx2)

(

floatx,y,yl;

yl=f(xl);

do

x=xpoint(xl,x2);

y=f(x);

if(y*yl>0)

(

yl二y;

xl=x;

)

else

x2二x;

}while(fabs(y)>le-4);

return(x);

}

6-13

#include<iostream>

#include<math.h>

voidmain()

(

floatf(float);

floatroot(float,float);

floatx,xl,x2,fl,f2;

do

(

printf(〃输入xl,x2\n\n〃);

scanf&xl,&x2);

fl=f(xl);

f2=f(x2);

}while(fl*f2>0);

x=root(xl,x2);

printf("方程的根为:%f\n\n〃,x);

}

floatf(floatx)

floaty;

y=2*x*x*x-4*x*x+3*x-6;

return(y);

}

floatroot(floatxl,floatx2)

(

floatx,y;

do

(

y=f((xl+x2)/2);

if(y<-le-4)

(

xl=(xl+x2)/2;

}

elseif(y>le-4)

(

x2=(xl+x2)/2;

}

elsex=(xl+x2)/2;

}while(fabs(y)>le-4);

return(x);

}

6-14

ttinclude<iostream>

voidmain()

(

inti,j,k;

for(i=0;i<=3;i++)

(

for(j=0;j<=2-i;j++)

(

printfC");

)

for(k=0;k〈=2*i;k++)

printf("*");

)

printfC\n/Z);

)

・for(i=0;i〈=2;i++)

(

for(j=0;j<=i;j++)

printf(/z");

for(k=0;k<=4-2*i;k++)

(

printf("*");

}

printf("\n");

)

)

6-15

ttinclude<iostream>

voidmain()

(

chari,j,k;

for(i='X';i<='Z';i++)

for(j='X';j<=Z';j++)

(

if(i!=j)

for(k='X';k<='Z';k++)

(

if(i!=k&&j!=k)

(

if(i!='X'&&k!='X"&&k!='Z')

printf(v\nA-%c\nB一%c\nC一%c\n”,i,j,k);

)

}

)

第七章

7-1

tiinclude<iostream>

#include<math.h>

voidmain()

(

inti,j;

inta[101];

printf("素数为:\n\n");

for(i=l;i<=100;i++)

(

a[i]=i;

)

for(i=3;i<=100;i++)

(

for(j=2;j<=sqrt(a[i]);j++)

(

if(a[i]%j=0)

{

a[i]=0;

break;

}

)

)

for(i=2;i<=100;i++)

(

if(a[i]!=0)printf("%d",a[i]);

)

7-2

ftinelude<iostream>

voidmain()

(

inta[10],i,j,temp;

printf("输入10个整数\n\n");

for(i=0;i<10;i++)

(

scanf;

}

for(i=0;i<10;i++)

(

for(j=i+l;j<10;j++)

(

if(a[i]>a[jj)

(

temp=a[i];

a[i]=a[j];

a[j]=temp;

)

)

)

printf("排序后的输出为:\n\n〃);

for(i=0;i<10;i++)

(

printf("%d",a[i]);

}

printf("\n\n");

7-3

#include<iostream>

voidmain()

(

inta[9],i,s=0;

printf(〃输入一个3*3整型矩阵\n\n〃);

for(i=0;i<9;i++)

(

scanf&a[i]);

}

for(i=0;i<9;i+=4)

(

s+=a[i];

)

printf("对角线元素之和为:%d\n\n",s);

7-4

#include<iostream>

voidmain()

(

inta[ll]={l,2,3,4,5,6,7,8,9,10);

inti,j,n,tempi,temp2;

printf(〃输入一个数n\n\nz/);

scanf(〃%d〃,&n);

if((a[0]-a[9])>0)

(

if(n<=a[9])

(

a[10]=n;

)

else

for(i=0;i<10;i++)

if(a[i]<n)

templ=a[i];

a[i]=n;

for(j=i+l;j<ll;j++)

(

temp2=a[j];

a[j]=templ;

templ=temp2;

)

break;

}

)

}

)

if((a[9]-a[0])>0)

(

if(n>=a[9])

(

a[10]=n;

)

else

(

for(i=0;i<10;i++)

(

if(a[i]>n)

(

templ=a[i];

a[i]=n;

for(j=i+l;j<ll;j++)

(

temp2=a[j];

a[j]=templ;

templ=temp2;

)

break;

}

)

)

for(i=0;i<ll;i++)

(

printf(z,%dz,,a[i]);

)

7-5将一个数组中的值按逆序重新排列

#include<iostream>

#defineN5

voidmain()

(

inta[N];

inti,temp;

printf(〃输入5个个数\n\n〃);

for(i=0;i<N;i++)

(

scanf(,z%dzz,&a[i]);

)

for(i=0;i<=N/2;i++)

(

temp=a[i];

a[i]=a[N-i-l];

a[N-i-l]=temp;

)

for(i=0;i<N;i++)

(

printf("%d",a[i]);

)

printf(〃\n\n〃);

)

7-6输出杨辉三角形(耍求输出10行)

#include<iostream>

#include<stdio.h>

voidmain()

{

inta[10][10]={l};

inti,j;

for(i=l;i<10;i++)

(

for(j=0;j<=i;j++)

(

a[i][0]=a[i-l][0];

a[i][j]=a[i-l][j-l]+a[i-l][j];

)

)

for(i=0;i<10;i++)

(

for(j=0;j<=i;j++)

(

printf("%4d",a[i][j]);

)

printf("\n\n");

)

}

7-7输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行每•列和对角线之和均相等。

要求输出1——n的平方

#include<iostream>

#defineN7

voidmain()

inta[N][N]={0};

inti,j,k;

i=0;

j=(N-l)/2;

a[i][j]=l;

for(k=2;k<=N*N;k++)

(

i=i-l;

j=j+l;

if((i<0)&&(j>N-D)

(

i=i+2;

j=j-l;

)

else

(

if(i<0)i=N-l;

if(j>N-l)j=0;

)

if(a[i][j]=0)

(

a⑴[j]=k;

)

else

(

i=i+2;

j=j-l;

a[i][j]=k;

)

}

for(i=0;i<N;i++)

(

for(j=0;j<N;j++)

(

printf("%4d",a[i][j]);

)

printf("\n'n");

)

7-8找出一个二维数组中的鞍点,即该位置上的元素在该行上最大•在该列上最小。也可能

没有鞍点。

^include<iostream>

voidmain()

(

inta[4][4],i,j,max,min,kl,k2,flag;

printf("输入一个4*4的数组\n\n");

for(i=0;i<4;i++)

(

for(j=0;j<4;j++)

(

scanf("%d”,&a[i][j]);

)

)

printf("鞍点为:\n\n");

for(i=0;i<4;i++)

(

max=a[i][0];

for(j=0;j<4;j++)

(

if(max<=a[i][j])

(

max=a[i][j];

kl=j;

)

)

min=a[0][kl];

for(j=0;j<4;j++)

if(min>-a[j][kl])

min=a[j][kl];

k2=j;

}

)

if((max!=min))flag=O;

else

(

flag=l;

printf("%d\n",max);

break;

)

)

if(flag==O)printf("不存在\n\n");

)

7-9有15个数由大到小顺序存放在一个数组中,输入一个数吗,要求用折半查找法找出该

数十数组中第几个元素的值。如果该数不在数组中,则输出“无此数

#include<iostream>

voidmain()

{

floata[15]={100,98,65,55,34,23,23,12,11,9,7,6,4,3,2},n;

inti,low,high,mid;

printf("原数组为:\n\n");

for(i=0;i<15;i++)

(

printf("%6.2f”,a[i]);

)

printf("\n\n输入一个数n\n\n");

scanf('f",&n);

low=0;

high=14;

i=0;

while(low<=high)

{

mid=(low+high)/2;

if(a[mid]==n)

(

printf(〃该数是数组中第%d个元素\n\n〃,mid+1);

i++;

break;

)

elseif(a[mid]<n)high=mid-l;

elselow=mid+l;

)

if(i==0)printf(〃无此数!!\n\n");

)

7-10统计一篇文章中其中英文大写字母小写字母数字空格以及其他字符的个数

#include<iostream>

voidmain()

(

chara[3][80];

inti,j,upon=0,low=0,num=0,spa=0,oth=0;

for(i=0;i<3;i++)

(

printf(〃输入第%d行文字\n\n〃,i);

gets(a[i]);

for(j=0;j<80&&a[i][j]!=\0*;j++)

(

if(a[i][j]>-A,[j]<-Z')upon+=l;

elseif(a[i][j]>-a,&&a[i][j]<=,z)low+=l;

elseif(a[i][j]>=48&&a[i][j]<=57)num+=l;

elseif(a[i][j]==,')spa+=l;

elseoth+=l;

)

)

printf("英文大写字母:%d个\n\n”,upon);

printf("英文小写字母:%d个\n\n”,low);

printf("数字:%d个\11\、,num);

printf("空格:/d个\n\n”,spa);

printf("其他字符:%d个\n\n”,oth);

7-11

itinclude<iostream>

voidmain()

{

inti,j;

for(i=0;i<5;i++)

(

for(j=0;j<=i;j++)

(

printfC");

}

for(j=i;j<i+5;j++)

(

printfC*");

)

printf("\n");

7-12有一行电文,已按下面规律译成密码:

A—Za—zB—Yb—y即第一个字母变成第26个字母,第i个字母变成第(26-i

+1)个字母,非字母字符不变要求将密码译回原文,并输出密码和原文。

#include<iostream>

voidmain()

{

chara[80],b[80];

inti,j;

printf("输入密码\n\n");

gets(a);

for(i=0;i<80&&a[i]!='\0';i++)

(

if((a[i]>=,A,)&&(a[i]<=,Z'))

(

b[i]=155-a[i];

)

elseif((a[i]>=,a')&&(a[i]<='z'))

(

b[i]=219-a[i];

)

elseb[i]=a[i];

)

b[i]=\0\

printf(〃密文为:\n\n〃);

puts(a);

printf(〃原文为:\n\nz,);

puts(b);

7-13连接两个字符串,不用strcat函数

#include<iostream>

voidmain()

chara[80],b[80];

inti,j,k;

printf("输入第1个字符串\n\n");

gets(a);

printf("输入第2个字符串\n\n");

gets(b);

for(i=0;i<80;i++)

(

if(a[i]=>\0,)

(

k=i;

for(j=0;j<80&&b[j]!=>\0*;j++)

(

a[k]=b[j];

k++;

}

a[k]=\0';

break;

)

)

printf("连接后字符串为:\n");

puts(a);

7-14

#include<iostream>

voidmain()

(

chara[80],b[80];

inti,j,k;

printf(〃输入第1个字符串\n\n〃);

gets(a);

printf(〃输入第2个字符串\n\n〃);

gets(b);

for(i=0;(i<80)&&(a[i]!=\0))&&(b[i]!=\0');i++)

{

k=a[i]-b[i];

if(k>0)

(

printfC\n字符串a大于字符串b:%4d\n〃,k);

break;

)

elseif(k<0)

{

printfC\n\n字符串a小于字符串b:%4d\n\rT,k);

break;

)

elsek=0;

)

if(k==0)printf("\n\n字符串a等于字符串b:%4d\n\n〃,k);

7-15编写一个程序,将字符数组s2中的全部字符复制到字符数组si中复制时要将'\0,

也复制过去

^include<iostream>

voidmain()

(

charsi[80],s2[80];

inti,j;

printf(〃输入数组sl\n\n,z);

gets(sl);

printf(〃输入数组s2\n\n〃);

gets(s2);

for(i=0;i<80&&s2[i]!=\0';i++)

si[i]=s2[i];

)

Sl[i]=\0,;

printf("\n\n复制后的数组为:\n\n〃);

puts(sl);

)

第八章

8-1求最大公约数和最小公倍数

#include<iostream>

voidmain()

(

intmax_div(int,int);

intmin_mul(int,int);

intm,n;

printf("输入两个整数\n\n");

scanf(n%d%d'\&m,&n);

if(max_div(m,n)==O)printf(n\n\n无最大公约数为\n\rT);

elseprintf(An\n最大公倍数为:%d\n\n",max_div(m,n));

printf("\n\n最大公倍数为:%d\n\nn,min_mul(m,n));

)

intmax_div(intkl,intk2)

(

intmin(int,int);

inti,k,flag;

k=min(kl,k2);

for(i=k;i>l;i—)

(

if((kl%i==0)&&(k2%i==0))

(

return(i);

flag=l;

break;

)

elseflag=0;

)

if(flag==0)retum(O);

)

intmin_mul(intkljntk2)

(

intmax(int,int);

inti,k;

k=max(kl,k2);

for(i=k;;i++)

if((i%k1==0)&&(i%k2==0))

(

return(i);

break;

intmin(intkljntk2)

(

intmin;

min=kl;

if(kl>k2)min=k2;

return(min);

)

intmax(intkl,intk2)

(

intmax;

max=kl;

if(kl<k2)max=k2;

return(max);

}

8-2

#include<iostream>

#include<math.h>

voidmain()

(

voidroot1(float,float,float);

voidroot2(float,float,float);

voidroot3(float,float,float);

floata,b,c,k;

printf("输入a,b,c的值\n\n”);

scanf("%f%f%f”,&a,&b,&c);

k=b*b-4*a*c;

if(k>0)rootl(a,b,c);

elseif(k==O)root2(a,b,c);

elseroot3(a,b,c);

}

voidroot1(floata,floatb,floatc)

(

floatp,q;

p=-b/(2*a);

q=sqrt(b*b-4*a*c)/(2*a);

printf("\n\n方程的两个根为:xl=%6.2f,x2=%6.2f\n\nH,p+q,p-q);

voidroot2(floata,floatb,floatc)

(

floatp;

p=-b/(2*a);

printf("\n\n方程的两个根为:xl=x2=%6.2f\n\n",p);

)

voidroot3(floata,floatb,floatc)

(

floatp,q;

p=-b/(2*a);

q=sqrt(-b*b+4*a*c)/(2*a);

printf("\n\n方程的两个根为:xl=%6.2f+%6.2fi,x2=%6.2f-%6.2fi\n\nn,p,q,p,q);

}

8-3

#include<iostream>

voidmain()

(

intprime(int);

intx;

printf("输入一个正整数\n\n");

scanf("%dH,&x);

if(prime(x)==O)printf("\n\n此数为素数\n\n");

elseprintf('\n\n此数不是素数\n\n");

)

intprime(intx)

(

inti,flag;

for(i=2;i<x;i++)

(

if(x%i=0)

(

flag=l;

break;

)

elseflag=0;

)

return(flag);

)

8-4

#include<iostream>

voidmain()

voidexchange(intal3][3J);

inta[3][3],i,j;

printf("输入一个3*3的矩阵\n\n");

for(i=0;i<3;i++)

(

for(j=0;j<3;j++)

(

scanf("%d",&a[i][j]);

)

)

exchange(a);

printf("\n\n转置后的矩阵为:\n\nn);

for(i=0;i<3;i-H-)

(

for(j=0;j<3;j++)

(

printf("%d",a[i][j]);

}

printf("\n");

)

}

8-5

#include<iostream>

voidmain()

{

voidexchange(charstr[J);

charstr[8O];

printf("输入一个字符串\n\n");

gets(str);

exchange(str);

printf(n\n\n反序字符串为:\n\nn);

puts(str);

}

voidexchange(charstr[])

(

inti,j,k;

chartemp;

for(i=0;;i++)

(

if(str[i]==\O')break;

k=i/2;

for(j=0;j<=k;j++)

(

temp二str|j];

str[j]=str[M-j];

str[i-lj]=temp;

)

str[i]=,\O,;

)

8-6

#include<iostream>

voidmain()

(

voidstrcat(charstr1[],charstr2[]);

charstrl[80],str2[80];

printf("输入strl\n\nM);

gets(strl);

printf("\n\n输入str2\n\nH);

gets(str2);

strcat(strl,str2);

printf(”\n\n连接后的字符串为:\n\nn);

puts(strl);

)

voidstrcat(charstrl[],charstr2[])

(

inti,j;

for(i=0;;i++)

(

if(strl[i]==,\O,)

(

for(j=0;str2|j]!=,\0,;j++)

(

strl[i]=str2|j];

i+=l;

)

break;

)

)

strl[i]=W;

)

8-7

#include<iostream>

voidmain()

voidstrcpy(charstr1[],charstr2[]);

charstrl[80],str2[80];

printf("输入str2\n\nu);

gets(str2);

strcpy(strl,str2);

printf(”\n\n复制后的字符串为:\n\nM);

puts(strl);

)

voidstrcpy(charstrl[],charstr2[])

(

inti,j=0;

for(i=0;str2[i]!=W;i++)

(

if((str2[i|==,a,)ll(str2[i]==,e,)ll(str2[i]=='i,)ll(str2[i]=='o,)ll(str21i]==,u,))

(

strl[j]=str2[i];

j++;

)

)

strl[j]=W;

}

8-8

#include<iostream>

voidmain()

(

voidstradd(charstr[]);

charstr[8O];

printf("输入一串数字\n\n”);

gets(str);

stradd(str);

printf(u\n\n加空格后的字符串\n\n”);

puts(str);

}

voidstradd(charstr[])

(

chara[80];

inti=0,j;

for(j=0;str[j]!='\0,;j++)

a[i]=str[j];

a[i+l]=

i+=2;

a[i]='\O,;

for(i=0;a[i]!=W;i++)

(

str[i]=a[i];

)

str|i]=W;

8-9

#include<iostream>

voidmain()

(

voidnum(charstr[],inta[]);

charstr[8O];

inta[4]={0};

printf("输入一个字符串\n\n");

gets(str);

num(str,a);

printf("字母个数为:%d\n",a[0]);

printf("数字个数为:%d\n",a[l]);

printf("空格个数为:%d\n",a[2]);

printf("其它字符个数为:%d\n",a[3]);

)

voidnum(charstr[],inta|])

(

inti,word=0,num=0,span=0,oth=0;

for(i=0;str[i]!=\0';i++)

(

if((str[i]>='A'&&str[i]<='Z')ll(str[i]>='a'&&str[i]<=,z,))word+=l;

elseif(str[i]>=48&&str[i]<=57)num+=l;

elseif(str[i]==')span+=1;

elseoth+=1;

)

a[0]=word;

a[l]=num;

a[2]=span;

a[3]=oth;

8-10

#include<iostream>

voidmain()

intword(charc);

intlongest(charstr[]);

inti;

charstr[80];

printf("输入一行字符串\n\n");

gets(str);

printf(M\n\n最长的单词为:\n\nn);

for(i=longest(str);word(str[i]);i++)

printf(M%cn,str[i]);

printf(H\n");

)

intword(charc)

(

if((c>='a,&&c<=,z,)ll(c>='A,&&c<=,Z,))return1;

elsereturn0;

)

intlongest(charstr[])

(

inti,flag=l,len=0,point,max_len=0,max_point;

for(i=0;i<=strlen(str);i++)

(

if(word(str[i]))

(

if(flag==l)

(

point=i;

flag=0;

)

elselen++;

)

else

(

flag=l;

if(len>max_len)

(

max_len=len;

max_point=point;

)

len=0;

)

return(max_point);

8-11

#include<iostream>

voidmain()

charstr[80];

voidsort(charstr|]);

printf("输入一个字符串\n\n)

gets(str);

sort(str);

printf(H\n\n字符由小到大排序为:\n\n");

puts(str);

)

voidsort(charstr[])

(

inti,j;

chartemp;

for(i=0;i<strlen(str);i++)

(

for(j=0;j<strlen(str)-i-1;j++)

(

if(str[j]>str[j+l])

(

temp=str|j];

str[j]=str[j+l];

str|j+l]=temp;

)

)

8-12

#include<iostream>

#include<math.h>

voidmain()

(

inta,b,c,d;

floatroot(inta,intb,intc,intd);

printf("输入a,b,c,d\n\nH);

scanf(”%d%d%d%d”,&a,&b,&c,&d);

printf(”\n\n在1附近的根为:%f\n\nM,root(a,b,c,d));

)

floatroot(inta,intb,intc,intd)

floatx=l,xl,f,fl;

do

{

xl=x;

f=((a*x1+b)*x1+c)*x1+d;

fl=(a*xl+b)*xl+c;

x=xl-f7fl;

)while(fabs(x-x1)>=1e-5);

return(x);

)

8-13

#include<iostream>

voidmain()

(

floatp(int,float);

intn;

floatx;

printf("输入n和x\n\nu);

scanf("%d%f';&n,&x);

printf("\n\n%d阶勒德让多项式的值为:%f\n\n'\n,p(n,x));

)

floatp(intn,floatx)

(

if(n=0)return1;

elseif(n==l)returnx;

elsereturn((2*n-l)*x-p(n-l,x)-(n-l)*p(n-2,x))/n;

)

8-14

#include<iostream>

#definen12

#definen25

floata_stu(nl],a_cou[n2];

voidmain()

(

voidinput(floata[][n2]);

voidstu_aver(floata[][n2]);

voidcou_aver(floata[][n2]);

inthightest(int*s,intfloata[][n2]);

floatd(floata[][n2]);

inti,j,s=0,c=0;

floatscore[nl][n2],h;

input(score);

stu_aver(score);

cou_aver(score);

printf(H\n\n序号课程12345平均成绩\n\n");

for(i=0;i<nl;i++)

(

printf(HNO.%d

for(j=0;j<n2;j++)

(

printf(M%8.2fn,score[i][j]);

)

printf(n%8.2f\n\nn,a_stu[i]);

}

printf("课程平均)

for(i=0;i<n2;i++)

(

printf(,,%8.2f'\a_cou[i]);

)

h=hightest(&s,&c,score);

printf(”\n\n最高成绩为:%f是第%d号学生,第%d门课的成绩\n\n”,h,s,c);

printf(”平均方差为:%hn\n",d(score));

)

voidinput(floata[][n2])

(

inti,j;

for(i=0;i<nl;i++)

{

printf(n\n\n输入%d个学生的5个成绩\n\n",i+l);

for(j=0;j<n2;j++)

(

scanf("%f”,&a[i皿);

)

)

)

voidstu_aver(floata[][n2])

(

floats;

for(i=0;i<nl;i++)

{

s=0;

for(j=0;j<n2;j++)

s+=a[i][j];

)

a_stu[i]=s/n2;

)

)

voidcou_aver(floata[][n2])

(

floats;

for(i=0;i<n2;i++)

(

s=0;

for(j=0;j<nl;j++)

(

s+=a[j][i];

)

a_cou[i]=s/nl;

}

)

inthightest(int*s,int*c,floata[][n2])

(

floathightest=O;

inti,j;

for(i=0;i<nl;i++)

(

for(j=0;j<n2;j++)

(

if(a[i][j]>hightest)

(

hightest=a[i][j];

*s=i+l;

*c=j+l;

)

)

)

return(hightest);

)

floatd(floata[][n2])

(

inti;

floatx=0,y=0;

for(i=0;i<nl;i++)

x+=a_stu[i]*a_stu|i];

y+=a_stu[i];

)

return(x/nl-(y/nl)*(y/n1));

)

8-15

#include<iostream>

#defineN3

voidmain()

(

voidinput(intnum[],charname[Nl[8]);

voidsort(intnum[],charname[N][8]);

voidsearch(intnum[],charname[N][8|,intn);

intflag,n,num[N];

charc,name[N][8];

input(num,name);

sort(num,name);

for(flag=l;flag;)

(

printf("输入要查找的职工号\n\n”);

scanf("%d'\&n);

search(num,name,n);

printf("是否继续查找?Y/N?\n\n");

c=getchar();

if(c==N,llc=='n,)flag=0;

)

)

voidinput(intnum[],charname[N][8])

{

inti;

for(i=0;i<N;i++)

(

printf("输入职工号\n\n");

scanf("%d",&num[i]);

printf("输入职工姓名\n\n");

getchar();

gets(name[i]);

)

)

voidsort(inlnum[],charname[N][8])

inti,j,min,templ;

chartemp2[8];

for(i=0;i<N;i++)

(

min=i;

for(j=i;j<N;j++)

(

if(num[min]>num[j])min寸

)

tempi=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=templ;

strcpy(name[min|,temp2);

}

printf("排序结果如下:\n\nn);

for(i=0;i<N;i++)

(

printf(“职工号:%6d姓名:%10s\n\nn,num[i],name[i]);

)

)

voidsearch(intnum[],charname[NJ[8],intn)

(

intlow,high,mid,flag;

flag=O;

low=0;

high=N-l;

if((n<num[low])ll(n>num[highj))flag=-l;

while((low<=high)&&(flag==0))

(

mid=(low+high)/2;

if(n==num|mid])

(

flag=mid+l;

printf("M%4d号职工的名字为:%8s\n\nH,n,name[mid]);

break;

)

elseif(n<num[mid])high=mid-l;

elselow=mid+l;

)

if(flag==Ollflag==-l)printf("不存在该职工\n\n”);

8-16写一个函数将输入的十六进制换成十进制并输出

#include<iostream>

#defineNl1(X)0

voidmain()

(

intexchange(chara[]);

inti=0,flag=O,flag1=1;

charc,a[Nl];

primf("输入一个十六进制数\n\n”);

while(((c=getchar())!=\0,)&&(i<NI)&&flag1)

(

if(((c>='0,)&&(c<=,9,))ll((c>=,a,)&&(c<=,f))ll((c>='A')&&(c<=,F,)))

(

a[i++]=c;

flag=l;

)

elseif(flag==l)

(

a[i]=\0,;

printf("对应的十进制数为:%d\n\nu,exchange(a));

printf("是否继续?Y/N7\n\nM);

c=getchar();

if(c=='N'llc==,n,)flagl=0;

else

{

flag=0;

i=0;

printf("输入一个十六进制数\n\n");

)

)

)

)

intexchange(chara[])

(

inti,n=0;

for(i=0;a[i]!=\0';i++)

(

if((a[i]>=,0,)&&(a[i]<=,9'))n=n*16+a[i]-'O';

if((a[i]>=,a,)&&(a[i]<=f))n=n*16+a[i]-'a'+10;

if((a[i]>=,A,)&&(a[i]<='F,))n=n*16+a[i]-'A,+10;

)

return(n);

8-17用递归法将一个整数n转换字符串,n的位数不确定,

#include<iostream>

voidmain()

(

voidexchange(intn);

intn;

printf("输入一个整数\n\n");

scanf("%d”,&n);

primf("输出是:\n\n°);

if(n<0)

(

putchar(,-r);

n=-n;

)

exchange(n);

printf("\n\nu);

)

voidexchange(intn)

(

inti;

if((i=n/10)!=0)exchange(i);

putchar(n%10+*0');

)

8-18给出年月日计算该日是该年的第几天

#include<iostream>

voidmain()

(

intday_num(intyear,intmon,intday);

intyear,mon,day;

printf("输入年、月、日\n\n”);

scanf(',%d%d%d,1,&year,&mon,&day);

printf(n\n\n输入的日期是当年的第%d天\n\n",day_num(year,mon,day));

)

intdate[]={31,28,31,30,31,30,3L31,30,31,30,31);

intday_num(intyear,intmonjntday)

(

inti,days=O;

for(i=0;i<mon-l;i++)

(

days+=date[i];

)

days+=day;

if((year%4==0)&&((year%100)!=0)11(year%400==0))days+=1;

returndays;

第九章

9-1

#include<iostream>

#defineexchange(x,y)t=x;x=y;y=t

voidmain()

(

intx,y,t;

printf(〃输入x,y\n\n〃);

scanf(,,%d%dz,,&x,&y);

exchange(x,y);

printfC\n\n交换后x=%d,y=%d\n\n/z,x,y);

9-2

#include<iostream>

#defineacr(x,y)((x)%(y))

voidmain()

(

intx,y;

printf(〃输入x,y\n\n〃);

scanf(,,%d%dz/,&x,&y);

printf(,z\n\n余数为%d\n\n〃,acr(x,y));

)

9-3

#include<iostream>

#include<math.h>

#defines(a,b,c)((a+b+c)/2)

#definearea(a,b,c,s)sqrt(s*(s-a)*(s-b)*(s-c))

voidmain()

|

floata,b,c,s,area;

charm;

intflag=l;

while(flag==l)

(

printf("输入a,b,c\n\n,/);

scanfC%

温馨提示

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

评论

0/150

提交评论