C程序设计4谭浩强完整版课后题附答案.docx

上传人:b****5 文档编号:4814634 上传时间:2022-12-09 格式:DOCX 页数:107 大小:55KB
下载 相关 举报
C程序设计4谭浩强完整版课后题附答案.docx_第1页
第1页 / 共107页
C程序设计4谭浩强完整版课后题附答案.docx_第2页
第2页 / 共107页
C程序设计4谭浩强完整版课后题附答案.docx_第3页
第3页 / 共107页
C程序设计4谭浩强完整版课后题附答案.docx_第4页
第4页 / 共107页
C程序设计4谭浩强完整版课后题附答案.docx_第5页
第5页 / 共107页
点击查看更多>>
下载资源
资源描述

C程序设计4谭浩强完整版课后题附答案.docx

《C程序设计4谭浩强完整版课后题附答案.docx》由会员分享,可在线阅读,更多相关《C程序设计4谭浩强完整版课后题附答案.docx(107页珍藏版)》请在冰豆网上搜索。

C程序设计4谭浩强完整版课后题附答案.docx

C程序设计4谭浩强完整版课后题附答案

C程序设计(第四版)(谭浩强)第一章课后习题答案

P0061.1向屏幕输出文字.

#include//预编译.代码均调试成功,若有失误大多不是代码问题.自已找找.

intmain()

{

printf("Welcometo\n");

return0;//与intmain对应,为了程序可移植性,建议全用intmain+return0;.

}

P0081.2求两个数的和.

#include

intmain()

{

inta,b,sum;

a=5;

b=4;

sum=a+b;

printf("Thesumis%d.\n",sum);

return0;

}

P0081.3调用函数比较两个数的大小.

#include

intmain()

{

intmax(intx,inty);//被调用函数在主函数后面,用前先声明.

inta,b,c;

scanf("%d,%d",&a,&b);//输入时要按格式来,此处的逗号,用空格会发生错误.

c=max(a,b);//a,b作为实参传入被调用函数中.

printf("Themaxis%d.\n",c);

return0;

}

intmax(intx,inty)//定义了两个形参.

{

intz;//z属于局部变量,可与主函数中相同名字.

if(x>y)

z=x;

else

z=y;

return(z);//z作为整个程序的出口值,赋给主函数中的c.

}

P0150.6三个数的大小.(数字0表示课后练习题)

#include

intmain()

{

inta,b,c,d;//d是用于存储最大值的.

intmax(intx,inty,intz);//测试可知,在VS2008中,可以不预先声明.

printf("Pleaseinput3numbers:

\n");

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

d=max(a,b,c);//调用函数中有三个形参,这里需要传入三个实参,才可运算.

printf("Themaxis:

%d.\n",d);//d可以换成max(a,b,c).

}

intmax(intx,inty,intz)

{

intm;

if(x>y&&x>z)//求三者之大的一种方法.

m=x;

if(y>x&&y>z)

m=y;

if(z>y&&z>x)

m=z;

return(m);//返回值m给主函数中的d.

}

C程序设计(第四版)(谭浩强)第2章课后习题答案

算法——程序的灵魂

P0172.1计算机1-5相乘的积.

#include

intmain()

{

inti,s=1;//在执行数值操作前一定要先有个初值.

for(i=1;i<6;i++)//这里是到6.

{

s=s*i;//相乘

}

printf("Thesumis%d.\n",s);

return0;

}

#include//作出要求:

换成1到11间奇数相乘.

intmain()

{

inti,s=1;//在执行数值操作前一定要先有个初值.

for(i=1;i<12;i++)//这里是到,但题目要求的是取单数.也可以是i=i+2

{

if(i%2!

=0)//i对取模,值为非为奇数;为则为偶数.

s=s*i;

else

continue;//跳过这个for循环的这一次,执行下一次.

}

printf("Thesumis%d.\n",s);

return0;

}

P0192.2按要求输出80分以上的学生信息.

暂时没法做.

P0192.3判断2000-2500年中的闰年,并输出.

年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。

所以,如果每年定义为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。

规则为:

·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。

怎么撤销呢?

就有了下面这个规则:

·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:

·3)如果年份能被400整除,则计为闰年。

简单说来每400年里设置了97个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有0.08天。

#include

intmain()

{

inti;

for(i=2000;i<=2200;i++)

{

if((i%4==0&&i%100!

=0)||i%400==0)//闰年的经典判断条件.

printf("%disaleapyear!

\n",i);

else

printf("%disnotaleapyear!

\n",i);

}

}

P0202.4求

(1)-(1/2)+(1/3)……+(1/99)-(1/100)的值.

#include

intmain()

{

floatsign=1,sum=0,deno,term;//关于有小数的计算应该用float.

for(deno=1;deno<=100;deno++)

{

term=sign*(1/deno);//term临时值,sing符号,deno为分母.

sum=sum+term;//第一次总全存储.

sign=(-1)*sign;//换号.

}

printf("Thesumofdeno(指定值)is%f.\n",sum);

return0;//若是到100的话,结果为0.68172

}

P0212.5得到一个大于3的数,并判断是否为素数.

#include

intmain()

{

inti,num,n;//像13,37,这样只能让和它本身除以外,没有其它除数的叫素数.

printf("Pleaseinputanumber:

\n");//获取一个数值

scanf("%d",&num);

for(i=2;i

{

if(num%i==0)//除得尽,则不是.

{

n=1;

break;//设置跳出,才不会执行多次.

}

n=0;//按程序走的话,这里会执行多次,不能用printf语句,会输出多次.

}

if(n==0)//单出口问题,虽然n=0执行多次,但仍然是n=0,这样才会只输出一次.

{

printf("Itisdoaprimenumber!

");//如果是100-200可以加个”%d”,nmu进去.

}

else

{

printf("Itisnotaprimenumber!

");

}

return0;

}

2.6-2.10要求用流程图表示上列算法.

2.11-2.16要求用N-S图表示上列算法.

…………还要伪代码

P0360.1调换二个参数的值.

#include

intmain()

{

chara='a',b='b',c;

c=a;

a=b;

b=c;

printf("anowis%c,bnowis%c!

\n",a,b);

return0;

}

P0360.2输入10个数,并输出最大的那一个数.

#include

intmain()

{

inti,a[10],s=0;

printf("Pleaseinput10numbers:

\n");

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

{

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

}

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

{

if(s

}

printf("%disthebiggestnumber!

\n",s);

return0;

}

P0360.3按大小顺序输出一些数.

#include

intmain()

{

inti,j,a[4],s=0;

printf("Pleaseinput5numbers:

\n");//此处要回车.

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

{

scanf("%d",&a[i]);//这是取多个数的代码,可以用while控制取到\n符为止.

}

for(i=0;i<=3;i++)//双重循环,先一个外循,再轮所有小循,轮完后再下一个大循.

{

for(j=i+1;j<=4;j++)//第一个循环是至n-1,第二个循环是到n.

{

if(a[i]>a[j])//如果成立,则对换,小于号表示降序排列,大于号表示升序排列.

{

s=a[i];

a[i]=a[j];

a[j]=s;

}

}

}

for(i=0;i<=4;i++)//重新定义循环输出数组中新排列的数.

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

return0;

}

P0360.4求1至100的总合.

#include

intmain()

{

inti,sum=0;//这是一个简单的程序.

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

sum=sum+i;

printf("Thesumofonetoonehundredis%d!

\n",sum);

return0;

}

P0360.5判断一个数能否同时被3和5整除.

#include

intmain()

{

intn;

printf("Pleaseinputanumber:

\n");

scanf("%d",&n);

if(n%3==0&&n%5==0)//关键句,用"并"的符号.

printf("Canbedevideby3and5!

\n");

else

printf("Cannotbedevideby3and5!

\n");

return0;

}

P0360.6输出100-200间的素数.

//********************第一种方法.

#include//网络版本,采用调用函数和求根取素.

#include//下面用到sqrt,所以需要包含数据函数.sqrt是求根,属数学函数.

intmain()//学会一个程序采用”主函数+被调用函数”的方式,会比较规范.

{

inti;

for(i=100;i<=200;i++)//为了书写规范,最好加上{},以示清范围.

if(prime_number(i)==1)//i是实参.

printf("%d",i);

return0;

}

intprime_number(doublem)//m是形参.

{

intj,k;

k=(int)sqrt(m);//求根,(int)是强制转换,求根里要是浮点型.

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

{

if(m%j==0)

return0;//此值返回给主函数中的实参.

}

return1;

}

//********************第二种方法.

#include

#include

intmain()

{

inti;

for(i=100;i<=200;i++)//指定至间.

{

if(prime(i)==1)//这里i为实参,传入形参j中进行运算,然后再由形参j带出返回.

printf("%distheprimenumber!

\n",i);

}

return0;

}

intprime(intj)//j是形参,用于接收实参i给的值.

{

intm,n;

m=(int)sqrt(j);

for(n=2;n<=m;n++)

{

if(j%n==0)

return0;//返回值,0为不是素数,1是素数.

}

return1;

}

//********************第二种方法.

请仿照2.5来写.

P0360.7最大公约数和最小公倍数.

#include//最大公约数用累除法,除到无余数时的被除数是最大公约数.

main()

{

intm,n,c,d;

intgcd();//这是最大公约数的缩写,此处调用函数,可以不写里面的实参.

intlcm();//这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.

printf("Pleaseinputtwonumber:

\n");

scanf("%d%d",&m,&n);

c=gcd(m,n);//c获取最大公约数

d=lcm(m,n);//d获取最小公倍数

printf("TheGCDof%dand%dis:

%d!

\n",m,n,c);

printf("TheLCMof%dand%dis:

%d!

\n",m,n,d);

return0;

}

intgcd(intx,inty)//最大公约数GreatestCommonDivisor

{

inttemp;

while(x%y!

=0)

{

temp=y;//y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.

y=x%y;//x,y的余数作为下一轮中的Y,由x%y来取得.

x=temp;//刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.

}

returny;//这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理.

}

intlcm(intx,inty)//最小公倍数LowestCommonMultiple

{

inti,temp;

if(x

{//以下为经典三行码,实现两个数的互换.

temp=x;

x=y;

y=temp;

}

for(i=1;i<=y;i++)//设定一个区间,从1至小的数之间的循环.

{

if(!

((x*i)%y))//除得尽为零,非零为真,则成立并返回.

{//如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.returnx*i;

}

}

}

最简单的C程序设计——顺序程序设计

P0373.1把华氏温度转化为摄氏表示法.

#include

floatF_to_C(floatinput_fah)//代表华转摄,input_fah是局部变量.

{

floatoutput_cen;//这里也是局部变量.

output_cen=(5.0/9)*(input_fah-32);//函数的功能体.

returnoutput_cen;//返回值,注意,返回值的数据类型应该和函数一致.

}

floatC_to_F(floatinput_cen)

{

floatoutput_fah;

output_fah=(9.0/5)*input_cen+32;//转换过程.

returnoutput_fah;

}

intmain()

{

intchoice;

floatinput_fah,input_cen,output_fah,output_cen;//局部变量的调用及参数传递.

printf("F_to_Cpress<1>andC_to_Fpress<2>!

\n");

scanf("%d",&choice);

if(choice==1)

{

printf("Pleaseinputfahrenheit:

");

scanf("%f",&input_fah);//这个是主函数定义的变量,虽然和调用函数同名.

output_cen=F_to_C(input_fah);

printf("The华氏is%d,摄氏is%d.",(int)input_fah,(int)output_cen);

}

if(choice==2)

{

printf("Pleaseinputcentigrade:

");

scanf("%f",&input_cen);

output_fah=C_to_F(input_cen);

printf("TheCentigradeis%d,andtheFahrenheitis%d.",(int)input_cen,(int)output_fah);

}

return0;

}

P0383.2计算存款利息(关于精度问题).

#include

intmain()

{

floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;

p1=p0*(1+r1);

p2=p0*(1+r2);

p3=p0*(1+r3/2)*(1+r3/2);

printf("p1=%f\np2=%f\np3=%f\n",p1,p2,p3);

return0;

}

P0553.3大写转换成小写

#include

intmain()//小写范围是97-122,大写范围是65-90,大写加上即得小写.26个字母.

{

charc1,c2;

c1='A';

c2=c1+32;

printf("%c%d",c2,c2);

return0;

}

P0593.4给出三角形边长,算出面积.

#include

#include

intmain()

{

doublea=3.67,b=5.43,c=6.21,s,area;

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("areais%f\n",area);//默认可以组成三角形.

return0;

}

P0653.5求一无二次等式的根,默认两个不同根.

#include

#include

intmain()

{

doublea,b,c,disc,x1,x2,p,q;

scanf("%lf%lf%lf",&a,&b,&c);

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

p=-b/(2.0*a);

q=sqrt(disc)/(2.0*a);

x1=p+q;

x2=p-q;

printf("x1=%7.2f\nx2=%7.2f",x1,x2);

return0;

}

P0713.6用%f输出实数,只能得到六位小数.

#include

#include

intmain()

{

doublea=1.0;//1是整型,1.0是浮点型,默认是double.可以是float.

printf("%.9f\n",a/3);

return0;

}

P0723.7float型数据的有效位数.

#include

#include

intmain()

{

floata;//输出的结果是.333252,float精度6位,所以第七位后不可信.

a=10000/3.0;

printf("%f\n",a);

return0;

}

P0783.8使用putchar函数输出.

#include

#include

intmain()

{

chara='B',b='O',c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('\n');

putchar(101);//101是A的ASCII代码的缩写,因为此函数只能输出字符.

putchar(66);

return0;

}

P0793.9使用getchar得到字符.

#include

#include

intmain()

{

chara,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a);

putchar(b);

putchar(c);//这也是基本回显的C程序代码.

putchar('\n');

return0;

}

P0813.10getchar得到大写,putchar输出小写.

#include

#include

intmain()

{

chara,b;

a=getchar();

b=a+32;

putchar(b);

putchar('\n');

return0;

}

P0820.1国民生产总值10年后的增长倍数.

#include

#include

intmain()

{

doublep,r=0.09,n=10;

p=pow((1+r),n);//这是数学函数,pow(x,y)计算x的y次方.

printf("Pis

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1