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

下载本文档

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

文档简介

C程序设计(第四版)(谭浩强)第-

章课后习题答案

P10067.7的一幕塔点支辱,

^include<stdio.h>〃预编译.代码均调试成功,若有失误大多不是代码问题.自己找找.

intmain()

(

printf(,zWelcometomybbing.com\n,?);

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

)

poog1.2东两小救的命,

#include<stdio.h>

intmain()

(

inta,b,sum;

a=5;

b=4;

sum=a+b;

printf(,zThesumis%d.\n〃,sum);

return0;

)

POOg1.3碉用褊裁比较两必裁的人小,

#include<stdio.h>

intmain()

(

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

inta,b,c;

scanf(〃&l,%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三小版的人小,(敏生。表示薛后琳习题,

#include<stdio.h>

intmain()

(

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

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

printf(,zPleaseinput3numbers:\n〃);

scanfC%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计算机7-5相乘的汆,

#include<stdio.h>

intmain()

(

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

for(i=l;i<6;i++)〃这里是到6.

(

s=s*i;〃相乘

}

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

return0;

}

^include<stdio.h>〃作出要求:换成1到11间奇数相乘.

intmain()

(

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

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

(

if(i%2!=0)〃1对取模,值为非为奇数;为则为偶数.

s=s*i;

else

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

)

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

return0;

)

P01922按要求曲出充台应上的老幺信息,

暂时没法做.

和92.3判断2加-西”耳中的阀耳,畀曲风

年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,

很长时间也不会变动1秒,但是真正的一年是3652423天(目前)。所以,如果每年定义

为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰

年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。规则为:-1)如

果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才

多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤

销3个闰年。怎么撤销呢?就有了下面这个规则:-2)如果年份能被TOO整除,则不计为闰

年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加

一个规则就是:3)如果年份能被40Q整除,则计为闰年。简单说来每400年里设置了97

个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有0.08天。

#include<stdio.h>

intmain()

(

inti;

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

(

if((i%4=0&&i%100!=0)||i%400=0)〃闰年的经典判断条件.

printf(z,%disaleapyear!\n",i);

else

printf(〃%disnotaleapyear!\n〃,i);

)

)

中02。2.4^(1)-012)+(113).......+G/彻的值,

#include<stdio.h>

intmain()

(

floatsign=l,sum=0,deno,term;〃关于有小数的i卜算应该用门oal.

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

(

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

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

sign=(-l)*sign;〃换号.

)

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

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

)

P0212.5得刻一个大寸5的藏耳判断是否名素藏

ttinclude<stdio.h>

intmain()

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

printf("Pleaseinputanumber:\n");〃获取一个数值

scanf&num);

for(i=2;i<num;i++)〃在到此数值间进行循环除,如果除得尽,就不满足素数要求.

(

if(num%i==O)〃除得尽,则不是.

(

n=l;

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

}

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

}

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

(

printf("Itisdoaprimenumber!");〃如果是100-200可以加个"%d”,nmu进去.

}

else

(

printfC'ltisnotaprimenumber!");

)

return0;

2,6-N勿要忒用流程囹表示上列算依,

2.77-2,76要或用名-$画泰京上列算落

...........还要伪代码

P0360.1碉换二个参照的值,

#include<stdio.h>

intmain()

(

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

c=a;

a=b;

b二c;

printf(zzanowis%c,bnowis%c!\n〃,a,b);

return0;

)

P0360.2输入7。个裁,不输长素火的那一小撤,

#include<stdio.h>

intmain()

(

inti,a[10],s=0;

printf(,zPleaseinput10numbers:\n〃);

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

(

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

}

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

(

if(s<a[i])s=a[i];

)

printf(z,%disthebiggestnumber!\n〃,s);

return0;

}

P0360.3越大小喉格曲出一些数,

ttinclude<stdio.h>

intmain()

(

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

printf(/zPleaseinput5numbers:\n");〃此处要回车.

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

(

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

)

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

(

for(j=i+l;j<=4;j++)〃第一个循环是至nT,第二个循环是到n.

(

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

s=a[i];

a[i]=a[j];

a[j]=s;

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

printfa[i]);

return0;

)

P0360.4点7至次的总合,

#include<stdio.h>

intmain()

(

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

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

sum=sum+i;

printf(Z/Thesumofonetoonehundredis%d!\n〃,sum);

return0;

)

P0360.5判断一小破饿番同时被M和5卷除,

#include<stdio.h>

intmain()

(

intn;

printf("Pleaseinputanumber:\n〃);

scant*&n);

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

printf("Canbedevideby3and5!\n〃);

else

printf("Cannotbedevideby3and5!\n");

return0;

P0360.6榜出7勿-2"同的索菽

〃********************第一种方法.

#include<stdio.h>〃网络版本,采用调用函数和求根取素.

#include<math.h>〃下面用到sqrl,所以需要包含数据函数.sqrl是求根,属数学函数.

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

(

inti;

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

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

printf(,z%d”,i);

return0;

}

intprime_number(doublem)是形参.

(

intj,k;

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

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

(

if(m%j==0)

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

)

return1;

)

〃********************第二种方法.

#include<stdio.h>

#include<math.h>

intmain()

(

inti;

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

(

if(prime(i)==l)〃这里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==O)

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

}

return1;

)

〃********************第二种方法.

请仿照2.5来写.

7>0360,7率丈公的裁和果小公借破.

itinclude<stdio.h>〃最大公约数用累除法,除到无余数时的被除数是最大公约数.

main()

(

intm,n,c,d;

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

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

printf(z,Pleaseinputtwonumber:\n");

scanf(〃%d%d”,&m,&n);

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

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

printf(Z/TheGCDof%dand%dis:%d!\n/z,m,n,c);

printf(,zTheLCMof%dand%dis:%d!\n”,m,n,d);

return0;

)

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

(

inttemp;

while(x%y!=0)

(

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

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

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

)

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

)

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

(

inti,temp;

if(x<y)〃保证二者大的数在X上,小的数在Y上,小于号降序,大于号升序.

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

temp=x;

x=y;

y=temp;

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

(

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

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

returnx*i;

)

}

}

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

P0373.1杷华氏浸点转化,板氏表示旅,

#include<stdio.h>

floatF_to_C(floatinputfah)〃代表华转摄,inputfah是局部变量.

(

floatoutputcen;〃这里也是局部变量.

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

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

}

floatC_to_F(floatinput_cen)

(

floatoutputfah;

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

returnoutputfah;

)

intmain()

(

intchoice;

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

printf(,zF__toCpress<1>andCtoFpress<2>!\n〃);

scanf&choice);

if(choice==l)

(

printf("Pleaseinputfahrenheit:〃);

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

outputcen=FtoC(inputfah);

printf(/zThe华氏is%d,摄氏is%d.z/,(int)input_fah,(int)output_cen);

if(choice-2)

printf(/zPleaseinputcentigrade:〃);

scanf&input_cen);

output_fah=C_to_F(input_cen);

printf(zzTheCentigradeis%d,andtheFahrenheit

is%d、(int)input_cen,(int)output_fah);

)

return0;

)

如酎3.2计弄腐载利念俅孑精盛冏板,,

#include<stdio.h>

intmain()

(

floatp0=1000,rl=0.0036,r2=0.0225,r3=0.0198,pl,p2,p3;

pl=p0*(l+rl);

p2=p0*(l+r2);

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

printfC,pl=%f\np2=%f\np3=%f\nz,,pl,p2,p3);

return0;

}

P0553.3人怎转换岗小怎

#include<stdio.h>

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

(

charcl,c2;

cl='A';

c2=cl+32;

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

return0;

)

F0593.4含出三龟形边长,算出而钢,

#include<stdio.h>

#include<math.h>

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(z/areais%f\nz/,area);〃默认可以组成三角形.

return0;

)

P0653.5点一无二决等式的根,就依两个又同根.

#include<stdio.h>

#include<math.h>

intmain()

(

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

scanfC%lf%lf%lfz/,&a,&b,&c);

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

p=-b/⑵0*a);

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

xl=p+q;

x2=p-q;

printf(/zxl=%7.2f\nx2=%7.2f”,xl,x2);

return0;

}

加〃3.6用%/用/实救,旦饿得副九住小崔.

^include<stdio.h>

#include<math.h>

intmain()

(

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

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

return0;

}

々82S7”型前辗的守的彼照.

ttinclude<stdio.h>

#include<math.h>

intmain()

(

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

a=10000/3.0;

,,,,

printf(%f\n,a);

return0;

}

MW使用忽必斯晶裁输丸

#include<stdio.h>

#include<math.h>

intmain()

(

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

putchar(a);

putchar(b);

putchar(c);

putchar('\n');

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

putchar(66);

return0;

)

PO793.9使用约“加得副生符,

#include<stdio.h>

#include<math.h>

intmain()

(

chara,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a);

putchar(b);

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

putchar('\n,);

return0;

)

"Post3.1。刈得利女与,忽成痴t输山小宿.

#include<stdio.h>

#include<math.h>

intmain()

(

chara,b;

a=getchar0;

b=a+32;

putchar(b);

putcharC\n);

return0;

}

P0820.1电反幺产总值7。耳后的惜长信氤

^include<stdio.h>

#include<math.h>

intmainO

(

doublep,r=0.09,n=10;

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

printf(Z,Pis%lfwhen10yearslater.\n〃,p);

return0;〃结果是0.36倍.

"P0g20.2或各种存款的利息照.

#include<stdio.h>

#include<math.h>

intmain()

doublep,r,n;〃年份和当年利率均有给出.

p=1000*(1+5*0.0585);

printfC'5yearsis%lf!\n',p);〃1292.5,这是全五年期.If输出的是double型.

p=(1000*(1+2*0.0468));

p=(p*(1+3*0.0540));

printf(z,5yearsis%lf!\n〃,p);//1270.76,这是先二年,再三年的.

p=(1000*(1+3*0.0540));

p=(p*(1+2*0.0468));

printf(v5yearsis%lf!\n〃,p);〃1270.76,这是先三年,再二年的.证明,是一样的.

p=1000*pow((l+0.0414),5);

printfC,5yearsis知Lf!\n〃,p);//1224・86,这难道说是,相对的存死期越久越值钱.

p=1000*pow((l+0.072/4),4*5);

printf(*5yearsis%lf!\n〃,p);//1428.74.

return0;

P0^30.3东几个月妻应迎倏,

#include<stdio.h>

#include<math.h>

intmain()

(

doublem,r=0.01,d=300000,p=6000;

m=(loglO(p/(p-d*r)))/(loglO(1+r));

printfC%.lir,m);〃按要求只留一个小数,所以要写%.Ilf.

return0;

印岬0.6生母恭妈转换,碉用褊破融德界处理.

#include<stdio.h>

charprintcode(charf)

if(((int)f>86&&(int)f<91)||((int)f>118&&(int)f<123))

return(f-26+4);〃因为putchar会自动返回,所以改成return,因为这是在函数中,

调用需要返回值.

}

else

(

return(f+4);

)

)

intmain()

(

chara,b,c,d,e;

printf(,zPleaseinput:\n");

a=getchar();

b=getchar();

c=getchar();

d=getchar();

e=getchar();〃临界问题.

printf(,/%c%c%c%c%cz",printcode(a),printcode(b),printcode(c),printcode(d),printc

ode(e));

putchar(putcharcode(a));

putchar(putcharcode(b));

putchar(putcharcode(c));

putchar(putcharcode(d));

putchar(putcharcode(e));

return0;〃注意理解自定义函数的定义,使用,及形参实参的流向.

〃p84的是计算问题,自己看着办,最后要求小数点后两位,用的是%.21f来实现,因为没有

要求实部,所以m.n格式中m不写.

〃p84的是定义问题,第一问,两者都行,但是定义字母时,scanf要写猊来获取,而定义数值

时则要用%(1来获取.

//第二问,putchar貌似只能输出字符,所以用printf.putchar本身就是

字符输出函数啦,字符,有木有!!!字符啊!!尽管它的参数可以是putchar('\101'),效果是输出字

符A啊.

//第三问,出现〃任何〃及〃无条件〃,那么答案明显是〃否〃.可以转换,但

要在某此条件下,例如输出和读入时,枇是字母,而%(1是数值,看着办.

}

选择结构程序设计

7X)^64.1一无二次方程东根的二台其

#include<stdio.h>

tfinclude<math.h>

intmain()

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

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

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

if(disc<0)〃这是选择结构和其判断条件的示例.

printf(''Thisequationhasrftrealroots'n");

else

(

p=-b/⑵0*a);

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

xl=p+q;

x2=p-q;

printf(,zxl=%7.2f\nx2=%7.2f”,xl,x2);

)

return0;

)

W"4.2二个熬越大小输乱

#include<stdio.h>

intmainO〃此程序代表按大小顺序输出.

(

floata,b,t;

scanf(〃%f%f”,&a,&b);〃出错时•,注意检查这里是否按格式输入「比如有个逗号.

if(a>b)

(

t=a;

a=b;

b=t;

)

printf(,z%5.2f,%5.2f\n”,a,b);

return0;

)

POgg4.3三个数横大小输丸

#include<stdio.h>

intmainO〃此程序代表按大小顺序输出.

(

floata,b,c,t;

scanf(z,%f%f%r,&a,&b,&c);

if(a>b)〃此处执行后,a为小者.

(

t=a;

a=b;

b=t;

)

if(a>c)〃此处执行后,a为小者.

(

t=a;

a=c;

c=t;

)

if(b>c)〃上面已经搞定a是最小者,现在对比得出次小者,并且己经归到变量中.

(

t=b;

b=c;

c=t;

)

printf(z/%5.2f,%5.2f%5.2f\n〃,a,b,c);

return0;

)

W”4.4判断输入生符,畀景珞接小信输火,

#include<stdio.h>

intmain()

(

charch;

scanf&ch);

ch=(ch>=A'&&ch<='7:)?(ch+32):ch;〃条件运算符,真取前,假取后.

printf(z,%c\n,z,ch);

return0;

)

P84.5按要求输出相备的当值.

#include<stdio.h>

intmain()

{

intx,y;

scanf("%d",&x);

if(x>=0)

(

if(x>0)〃这个范围要基于x>=0来判断.

(

y=l;

)

else

(

y=0;

}

)

else〃这个是x〈O的范围.

(

y=T;

)

printf("x=%d,y=%d”,x,y);

return0;

)

P1OZ4.6"4的简单或用,

#include<stdio.h>

intmain()

(

chargrade;

scanf&grade);

printf(z,Yourscore:z,);

switch(grade)

(

case'a':printf(“85700\n〃);break;〃当多分支结构过于多时,可以用switch来解决.

case*b*:printf("70-84\n〃);break;

case'c:printf(“60-69\n");break;

case'd':printf(//<60\n/,);break;

default:printf(Z/Enterdataerror!\n,z);

}

return0;

}

P1044.7接输入孤行操作,畀同系合之小名.

#include<stdio.h>

voidactionl(intx,inty)

(

printf("x+y=%d\rT,x+y);

)

voidaction2(intx,inty)

(

printf(〃x*y=%d\n〃,x*y);

)

intmain()

(

charch;

inta=15,b=23;

ch=getchar();

switch(ch)

(

case'a’:

case'A':actionl(a,b);break;〃a,A共用一个执行语句.

case*b':

case'B':action2(a,b);break;

default:putchar(J\a');〃'\a'可以控制电脑发出蜂鸣声.

)

return0;

)

P1064.g用《的台文来做同耳冏墓

#include<stdio.h>

intmain()

(

intyear,leap;

printf(''Pleaseinputtheyear:\n",);

scanf&year);

if(year%4==0)〃400年里,在100个可除尽4的年里计算,以下是在全范围内计算.

(

if(year%100==0)〃既是100个内的,又是可以除尽100的,算是且.

{

if(year%400==0)〃相当于且了两次,只余下唯一一个.

{

leap=l;

)

else//400年里只有1个除得尽,其它都不是.

{

leap=0;

}

}

else〃这里的范围是(year%4=0)&&(year%100!=0)

(

leap=l;〃在合法的100内,又不是2100,2200一类的,当然属闰年.

}

}

else

(

leap=0;

)

if(leap)

(

printf(z/%dis",year);

)

else

(

printf(绘disnot",year);

}

printf("aleapyear!");〃不管上面如何判断,最后还是会输出这一句.

return0;

}

Plow4.9一无二米等式的全计算过在,

#include<stdio.h>

#include<math.h>

intmain()

(

doublea,b,c,disc,xl,x2,realpart,imagpart;

scanfC%lf%lf&b,&c);

printf(,zTheequation〃);

if(fabs(a)<=le-6)〃fabs是绝对值,le-6,即是的负六次方,接近或是等于零.

(

printf(/zisnotaquadratic!\n〃);

printf(z,xl=x2=%lf/z,-c/b);

)

else

(

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

if(fabs(disc)<=le-6)〃指数形式,数字1.

(

printfC'hastwoequalroots:-b/(2*a));

}

else

(

if(disc>le-6)

(

xl=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%lfand%lf\n〃,xl,x2);

)

else

(

realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf(,zhascomplexroots:\n〃);

printf(,z%lf+realpart,imagpart);

printf(,z%lf+%iri\nz,,realpart,imagpart);

)

)

)

return0;

}

R184.10关于多个区同的计算,运费问题名网,

#include<stdio.h>

intmain()

(

doublep,w,s,d,f;

printf(z/p,w,s\n〃);

scanf(z/%lf%1f&p,&w,&s);

if(s<250)

d=0.0;

f=p*w*s*(l-d);

printff);

)

elseif(s<500)

(

d=0.02;

f=p*w*s*(l-d);

printff);

)

elseif(s<1000)

(

d=0.05;

f=p*w*s*(l-d);

printff);

)

elseif(s<2000)

(

d=0.08;

f=p*w*s*(l-d);

printfC%1^,f);

)

elseif(s<3000)

(

d=0.1;

f=p*w*s*(l-d);

printff);

)

else

(

d=0.15;

f=p*w*s*(l-d);

printf(z,%lff);

}

return0;

P01120.4植盘榜人三个虬梅出素大看

ttinclude<stdio.h>

intmina,mida,maxa;

intmax(inta,intb,intc)

(

intm;

if(a>b)〃凡是比较中,大于号代表升序排列.

(

m=a;

a=b;

b=m;

)

if(a>c)

(

m=a;

a=c;

c=m;

)

if(b>c)

(

m=a;

a=c;

c=m;

)

return(c);〃此排序后,a,b,c由小到大.所以c是返回中最大的.

)

intmain()

(

inta,b,c;

printf(Z/Pleaseinput3numbers:〃);

scanfC%d%d%d〃,&a,&b,&c);

printf(,zThemaxis%d!\n,z,max(a,b,c));

return0;

}

427720.5一个小孑7加的裁,■判窕,条件,

#include<stdio.h>

#include<math.h>

intmain()

(

doublea,b;

printf("Pleaseinputanumber:〃);

scanf("lf",&a);

if(a<1000)

b=sqrt.(a);

)

else

(

printf(z,\az/);〃控制蜂鸣声

printf(''Pleaseinputanumberagain:〃);

scanf&a);11

b=sqrt(a);

)

printf(X01fz,,b);〃按要求,只取整数.

return0;

)

P01120.9一个系多吁5彼的教,按条件输风

^include<stdio.h>

^include<math.h>

intmain()

(

inti,a,b[4],count=0;

printf(z,Pleaseinputanumber(five-digitnumber):〃);〃意思是五位数以内.

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

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

(

b[i]=a%10;〃是%10,不是/10000,结果就是b[0]至b[4]中存着个,十,百,千,万位.

a=a/10;///10后得到的结果去掉了个数.

if(b[i]!=O)

(

count=count+l;

)

)

printf("%d位数.\n”,count);

printf(〃分别输出每一位数字,如下:〃);

for(i=4;i>=0;i—)

(

printf(/z%d”,b[i]);

)

printf(z/\nz,);

printf(〃倒序输出这一个数字,如下:〃);

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

(

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

)

printf("\n");

return0;

}

W772O.K)按要求提阀其公仆/法,,

^include<stdio.h>

intmain()

(

doublea,b;

printf("Pleaseinputprofitamount

scanf("断f”,&a);

if(a<=10)〃这个是整个if的基础.

(

b=a*0.1;

)

elseif(a<=20)〃以上面为基础,这已经代表了10-20间了!!!

(

b=l+(a-10)*0.075;

)

elseif(a<=40)〃同理,这是20-40间.

(

b=l+0.75+(a-20)*0.05;

)

elseif(a<=60)

(

b=l+0.75+0.l+(a-40)*0.03;

)

elseif(a<=100)

(

b=l+0.75+0.1+0.06+(a-60)*0.15;

)

else〃这里是大于100的.

I

b=l+0.75+0.1+0.06+(a-100)*0.01;

)

printf("Therewardis%lf!\n',b);

return0;

}

P01120.10按要求提由其金“法,,

#include<stdio.h>

doubleGetProfit(doublec)

(

printf(,zPleaseinputprofitamount:〃);

scanf&c);

return(c);〃返回本身了,如果有进一步的计算结果,将值赋给其它变量,也可以返回.

)

intmain()

(

doublea;

charc;

printf("Yourchoice:\nA:0-10;\nB:10-20;\nC:20-40;\nD:40-60八nE:

60-100;\nF:100-1000;\n〃);

scanf(〃枇〃,&c);〃不同档时I应照档的规定数值进行输入,否则结果不会是正确的.

switch(c)〃前三后三用于比较调用函数.

{〃GetProfit(c)引入的实参没有意义,返回值和引入的实参没关系,反而由键盘获得.

case*A*:{printf("Therewardis%lf!\n,z,GetProfit(c)*0.1);};break;

//0-100.100

case'B':{printf(,zTherewardis%lf!\n*,1+(GetProfit(c)-10)*0.075);}break;

//10-200.075

case'C':{printf(''Therewardis%lf!\nz,,1+0.75+(GetProfit(c)-20)*0.05);}break;

//20-400.050

case'D':{printf("Pleaseinputprofitamount:z,);scanf(z,%lf/z,&a);printf(,zThe

rewardis%lf!\n〃,1+0.75+0.l+(a-40)*0.03);}break;

//40-600.030

case'E':{printf("Pleaseinputprofitamount:scanf&a);printf("The

rewardis%lf!\n〃,1+0.75+0.1+0.6+(a-60)*0.15);}break;

//60-1000.015

case'F':{printf("Pleaseinputprofitamountscanf&a);printf("The

rewardis%]f\\n\1+0.75+0.1+0.6+0.6+(a-100)*0.01);}break;

//100-10000.010

default:printf("Errordata!z,);break;〃可以有一个执行体,用。包括起来.

)

return0;

}

P01120.11软盘输入数值,就后挑再输丸

ttinclude<stdio.h>

intmain()

{

inta[10],i,j,m,n;〃变量可以在写代码过程中再回来临时添加.

printf(〃请输入数值的个数:(十个以内)”);

scanf(\d”,&m);〃到这里需要变量来承载数值的个数,设m,回头去定义变量那写上m.

printf(“请分别输入相对应个数的数值:“);

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

(

scanf&a[i]);

}

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

(

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

(

if(a[i]>a[j])〃这是选择排序法.升序.

{

n=a[i];〃这里需要一个用于临时变量的n,所以问头去写上.

a[i]=a[j];

a[j]=n;

)

}

}

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

(

printfa[i]);

}

return0;

}

c程序设计(第四版)(谭浩强)第五章课后习

题答案

循环结构程序设计

PU55.1用”&计算7至0的合,

#include<stdio.h>

intmain()

{

inti=l,sum=0;

while(i<=100)〃对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.

(

sum=sum+i;

i++;

)

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

return0;

)

P1175.2用4-枕套做7至0的合,

ttinclude<stdio.h>

intmain()

{

inti=l,sum=0;

do//do-while可以做的事,用while都可以做到.

{〃do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.

sum=sum+i;

i++;

}while(i<=100);

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

return0;

)

png5.3比簌痴修成星的爱别,

#include<stdio.h>

intmain()

(

inti,sum=0;

printf(Z/Pleaseinputanumber:〃);

scanf(〃%d〃,&i);〃输入10以内,正常,11的话,则sum仍然是0.

while(i<=10)

sum=sum+i;

i++;

}

printf(z,Thesumofl_10is%d.\n〃,sum);

return0;

)

^include<stdio.h>

intmain()

(

inti,sum=0;

printf("Pleaseinputanumber:〃);

scanf(,z%dz,,&i);〃输入10以内,结果一样.输入11的话,先做操作,所以sum=11.

do

(

sum=sum+i;

i++;

}while(i<=10);〃此重点在于理解二者的差别.

printf("Thesumof1-10is%d.\n〃,sum);

return0;

)

P1265.4M4的例3,

#include<stdio.h>

intmainO

(

inti,b=0,a,c;

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

(

printf("Pleaseinputamount:〃);

温馨提示

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

评论

0/150

提交评论