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

下载本文档

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

文档简介

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

章课后习题答案

P0067.7向一幕塔心女生,

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

intmain()

(

printf("Welcometomybbing.com\n");

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

)

POOS1.2求两小裁的痛.

#include<stdio.h>

intmain()

(

inta,b,sum;

a=5;

b=4;

sum=a+b;

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

return0;

)

poog1.3稠用备姒比较两小照的人小,

#include<stdio.h>

intmain()

(

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

inta,b,c;

z/,,

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);〃2作为整个程序的出口值,赋给主函数中的c.

)

P0t50.6三个熬的大小.偿1辱。表求锦后珠(盘J

ttinclude<stdio.h>

intmain()

(

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

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

printf(''Pleaseinput3numbers:\n〃);

scanf("%d%d%dz/,&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(,zThesumis%d.\n",s);

return0;

)

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

intmain()

(

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

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

(

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

s=s*i;

else

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

)

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

return0;

和q2.2按要求输心勿今以上的辱金信息,

暂时没法做.

P0192.3判新敛M-行M耳中的冏耳,不曲*,

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

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

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

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

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

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

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

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

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

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

Jiinclude<stdio.h>

intmain()

(

inti;

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

(

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

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

else

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

)

)

P0202.4^(D-(tl2)+(llS)......+G/沏-G的值,

#include<stdio.h>

intmain()

(

floatsignal,sum=0,deno,term;〃关于有小数的计算应该用float,

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

(

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

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

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

)

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

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

}

post2.5得利一个人小M的菽不判断是否名素薪

#include<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==O)〃单出口问题,虽然n=0执行多次,但仍然是n=0,这样才会只输出一次.

(

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

}

else

(

printf("Itisnotaprimenumber!");

}

return0;

)

♦6-2,7。要靠用滤抵图表④上列琼彼,

2.17-2.16拿求用%-S画索扇上列算裱,

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

P0360.1稠换二个参裁的优

#include<stdio.h>

intmain()

(

chara-a,,b二'b,,c;

c二a;

a=b;

b=c;

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

return0;

)

P0360.2榜人初小数,畀命*录大的那一小檄,

#include<stdio.h>

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<a[i])s=a[i];

)

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

return0;

)

P0360.3接大小喉本曲*一些照.

^include<stdio.h>

intmain()

(

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

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

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

(

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

}

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

(

for(j=i+l;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++)〃重新定义循环输出数组中新排列的数.

printfa[i]);

return0;

)

P0360.4忒7至的总合.

#include<stdio.h>

intmain()

(

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

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

sum=sum+i;

printf(,zThesumofonetoonehundredis%d!\n”,sum);

return0;

)

P0360.5判断一小裁傩否同时救5伞5卷除,

#include<stdio.h>

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输%同的亲微,

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

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

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

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

(

inti;

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

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

printf(/z%d",i);

return0;

)

intprime_number(doublem)〃111是形参.

(

intj,k;

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

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

(

if(m%j==O)

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

)

return1;

)

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

#include<stdio.h>

#include<math.h>

intmainO

(

inti;

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

(

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

printf("%distheprimenumber!\nz/,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来写.

P0360.7淮人公钓裁和景小公停裁,

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

main()

(

intm,n,c,d;

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

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

printfC'Pleaseinputtwonumber:\n〃);

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

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

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

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<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>

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

(

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

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

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

)

floatCtoF(floatinputcen)

(

floatoutputfah;

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

returnoutputfah;

)

intmain()

(

intchoice;

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

printf(z,F_to_Cpress<1>andC_to_Fpress<2>!\n〃);

scanf4choice);

if(choice==l)

(

printf("PleaseinputFahrenheit:;

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

output_cen=F_to_C(input_fah);

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

if(choice==2)

printfC'Pleaseinputcentigrade:〃);

scanf&.input_cen);

outputfah=CtoF(inputcen);

printf(,zTheCentigradeis%d,andtheFahrenheit

is%d.〃,(int)inputcen,(int)output_fah);

)

return0;

)

PO3g3.2计算腐款利息俅于希盘同卷J,

#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);

printf(z/pl=%f\np2=%f\np3=%f\n/z,pl,p2,p3);

return0;

)

PO553.3人与跨换区小写

#include<stdio.h>

intmainO〃小写范围是97T22,大写范围是65-90,大写加上即得小写.26个字母.

(

charcl,c2;

cl=A*;

c2=cl+32;

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

return0;

)

物”3.46也三■形边核算*面欷,

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

return0;

)

7>0653.5点一无二法蓍K的根,欣钦的心系同根.

#include<stdio.h>

#include<math.h>

intmain()

(

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

scanf(,z%lf%lf%lfz,,&a,&b,&c);

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

p=-b/(2.0*a);

q=sqrt(disc)/⑵0*a);

xl=p+q;

x2=p-q;

printfC'xl-%7.2f\nx2=%7.2f〃,xl,x2);

return0;

}

POTI36用%/输心卖出,R彼得利力彼去热,

^include<stdio.h>

#include<math.h>

intmain()

(

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

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

return0;

}

wzg37”型执据的守政饯熬,

#include<stdio.h>

#include<math.h>

intmain()

(

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

a=10000/3.0;

printf(,z%f\nz/,a);

return0;

)

•po7g3.8使用加以褊前输心,

#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;

)

W7夕39使用"w得利名符.

#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;

)

3.102i以《将制人与,2成w曲也小写,

#include<stdio.h>

#include<math.h>

intmain()

(

chara,b;

a=getchar();

b=a+32;

putchar(b);

putchar('\n');

return0;

)

920.1国民金产总值7。耳后的槽长停氤

ttinclude<stdio.h>

#include<math.h>

intmainO

(

doublep,r=0.09,n=10;

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

printf(,ZPis%lfwhen10yearslater.\n",p);

return0;〃结果是0.36倍.

}

P0820.2靠各存存款的利息裁,

#include<stdio.h>

#include<math.h>

intmain()

(

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

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

printf(,z5yearsis%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));

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

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

printfC5yearsis%lf!\n",p);//1224.86,这难道说是,相对的存死期越久越值钱.

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

printf(z,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));

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

return0;

)

W聒0.6生号赛鸠转换,稠用备熬A临界处理,

#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("Pleaseinput:\n");

a=getchar();

b=getchar();

c=getchar();

d=getchar();

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

printf(,z%c%c%c%c%c/z,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要写%c来获取,而定义数值

时则要用%d来获取.

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

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

符A啊.

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

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

选择结构程序设计

印的4.1一无二次方程泰雅的二个次,

#include<stdio.h>

#include<math.h>

intmain()

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

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

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

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

printf(''Thisequationhasn'trealroots\n〃);

else

(

p=-b/(2.0*a);

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

xl=p+q;

x2=p-q;

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

)

return0;

}

P0874.2二个裁按大小输*,

#include<stdio.h>

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

(

floata,b,t;

scanfC%f%f",&a,&b);〃出错时,注意检杳这里是否按格式输入了.比如有个逗号.

if(a>b)

(

t二a;

a=b;

b二t;

)

printfC%5.2f,%5.2f\n,z,a,b);

return0;

}

POgg4.3三小热趣丈小输*.

#include<stdio.h>

intmain()〃此程序代表按大小顺序输出.

(

floata,b,c,t;

scanf("%f%f%f",&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("%5.2f,%5.2f%5.2f\n”,a,b,c);

return0;

卯”4.4利斯榜人生符,异景性按小与信*,

#include<stdio.h>

intmain()

(

charch;

scanf(/z%c,z,&ch);

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

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

return0;

)

P1OO4.5

#include<stdio.h>

intmain()

(

intx,y;

scanf(,z%d,z,&x);

if(x>=0)

(

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

(

y-1;

)

else

(

y=0;

)

)

else〃这个是x<0的范围.

(

y=-l;

)

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

return0;

P024.6姐碗的葡草成用,

#include<stdio.h>

intmain()

(

chargrade;

scanf("%c”,&grade);

printf(z,Yourscore:/z);

switch(grade)

(

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

case'b':printf(〃70-84\/');break;

case'c':printf(zz60-69\n,z);break;

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

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

return0;

)

P847部输入㈱籽猿作,界■不令人小勤

#include<stdio.h>

voidactionl(intx,inty)

(

printf("x+y=%d\n〃,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,:actionl(a,b);break;〃a,A共用一个执行语句.

case*b':

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

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

)

return0;

)

和06用力的合文来做冏耳同4

#include<stdio.h>

intmain()

(

intyear,leap;

printf(/zPleaseinputtheyear:\nz/);

scanf(〃%d”,&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(,/%dis",year);

}

else

(

printf(,7%disnot",year);

)

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

return0;

中U4.9一无二次等式的小计算过程.

#include<stdio.h>

#include<math.h>

intmain()

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

scanf(z,%lf%lf%ir,&a,&b,&c);

printf(//Theequation");

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

(

printf("isnotaquadratic!\n");

printfCxl=x2=%lf/Z,-c/b);

)

else

(

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

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

(

printfC'hastwoequalroots:机f\n〃,-b/(2*a));

)

else

(

if(disc>le-6)

(

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

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

printf(/zhasdistinctrealroots:%lfand%lf\n”,xl,x2);

)

else

(

realpart=-b/(2*a);

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

printf(,zhascomplexroots:\n〃);

printf+%lfi\nz,,realpart,imagpart);

printf(/z%lf+%lfi\n/z,realpart,imagpart);

}

)

)

return0;

P1O94.10美孑)小直同的计算,运费冏题名例,

#include<stdio.h>

intmain()

(

doublep,w,s,d,f;

printf(/zp,w,s\n/z);

scanf("%lf%lf&s);

if(s<250)

d=0.0;

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

printf("%1f”,f);

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);

printff);

}

elseif(s<3000)

d=0.1;

f=p*w*s*(bd);

printff);

else

(

d=0.15;

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

printff);

)

return0;

PO1120.4碗盘输入三小微,曲出淮人看

#include<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("Pleaseinput3numbers:

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

printf(z,Themaxis%d!\nv,max(a,b,c));

return0;

pom0.5一小小小做力的热,■判定条件,

#include<stdio.h>

#include<math.h>

intmain()

(

doublea,b;

printf("Pleaseinputanumber:〃);

scanf(“对f〃,&a);

if(a<1000)

b=sqrt(a);

)

else

(

printf(〃\a〃);//控制蜂鸣声

printf(,zPleaseinputanumberagain:〃);

scanf&a);11

b=sqrt(a);

)

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

return0;

}

PO1120.9一小系§小5低的虬按条件榜心,

ttinclude<stdio.h>

^include<math.h>

intmain()

(

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

printf(,zPleaseinputanumber(five-digitnumber)〃意思是五位数以内.

scanf(线d”,&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(〃%d",b[i]);

)

printf(〃\n〃);

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

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

(

printfb[i]);

}

printf("\n");

return0;

P01120.10按要求提氏奖金仆宿旅上

#include<stdio.h>

intmain()

(

doublea,b;

printf("Pleaseinputprofitamount:

scanf&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的.

(

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

)

printf(/zTherewardis%lf!\n/z,b);

return0;

)

POtlS0.10按要求提应奖金,“6g股,,

#include<stdio.h>

doubleGetProfit(doublec)

(

printf(,ZP1easeinputprofitamount:〃);

scanf&c);

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

)

intmain()

(

doublea;

charc;

printf(/zYourchoice:\nA:0-10;\nB:10-20;\nC:20-40;\nD:40-60;\nE:

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

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

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

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

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

//0-100.100

case'B':{printf(^Therewardis%lf!\nz/,1+(GetProfit(c)-10)*0,075);}break;

//10-200.075

case,C:{printf(,zTherewardis%lf!\n/z,1+0.75+(GetProfit(c)-20)*0.05);}break;

//20-400.050

case'D':{printf("Pleaseinputprofitamount:scanf(〃机&a);printf("The

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

//40-600.030

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

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

//60-1000.015

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

rewardis%lf!\nv,1+0.75+0.1+0.6+0.6+(a-100)*0.01);}break;

//I00-10000.010

default:printf(''Errordata!*);break;〃可以有•个执行体,用{}包括起来.

return0;

)

92a11检索输入裁值,触后擀格小丸

#include<stdio.h>

intmain()

(

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

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

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

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

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

(

scanf("%d”,&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++)

{

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

)

return0;

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

题答案

循环结构程序设计

利55.1用以计算7至7%的合,

#include<stdio.h>

intmain()

(

inti=l,sum=O;

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

(

sum=sum+i;

i++;

}

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

return0;

)

P1175.2用4-4来做7至7”的合.

#include<stdio.h>

intmain()

(

inti=l,sum=O;

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

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

sum=sum+i;

i++;

}while(i<=100);

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

return0;

}

5.3比较血易加怒的姜割,

#include<stdio.h>

intmain()

(

inti,sum=0;

printf("Pleaseinputanumber:〃);

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

while(i<=10)

sum=sum+i;

i++;

)

printf(/zThesumof1-10is%d.\n〃,sum);

return0;

}

ttinclude<stdio.h>

intmain()

(

inti,sum=0;

printf("Pleaseinputanumber:;

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

do

(

sum=sum+i;

i++;

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

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

return0;

}

P1265.4心〃的刎乳

#include<stdio.h>

intmain()

(

inti,b=0,a,c;

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

(

printf(Z/Pleaseinputamount:〃);〃循环体内套有输出语句以及跳出语句.

scanf&a);

b=b+a;

if(b>=100)

(

break;

温馨提示

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

评论

0/150

提交评论