当前位置:文档之家› C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案
C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案

Revised by Chen Zhen in 2021

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

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

int main()

{

printf("Welcome to \n");

return 0; }

#include<>

int main()

{

int a,b,sum;

a=5;

b=4;

sum=a+b;

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

return 0;

}

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

#include<>

int main()

{

int max(int x,int y); int a,b,c;

scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c);

return 0;

}

int max(int x,int y) {

int z; if (x>y)

z=x;

else

z=y;

return(z); }

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

#include<>

int main()

{

int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n");

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

d=max(a,b,c); printf("The max is :%d .\n",d); }

int max(int x , int y , int z)

{

int m;

if (x>y && x>z) m=x;

if (y>x && y>z)

m=y;

if (z>y && z>x)

m=z;

return (m); }

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

习题答案

算法——程序的灵魂

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

#include<>

int main()

{

int i,s=1; for(i=1;i<6;i++) {

s=s*i; n",s);

return 0;

}

#include<> int main()

{

int i,s=1; for(i=1;i<12;i++) 可以是i=i+2

{

if(i%2!=0) s=s*i;

else

continue; }

printf("The sum is %d .\n",s);

return 0;

}

暂时没法做.

年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是天(目前)。所以,如果每年定义为365天的话,1年就会多出天,4年就会多出天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。规则为:·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。怎么撤销呢就有了下面这个规则:·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:·3)如果年份能被400整除,则计为闰年。简单说来每400年里设置了97个闰年,也就是400里的前3个100年不设置闰年,误差被调整到400年仅有天。

#include<>

int main()

{

int i;

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

{

if((i%4==0 && i%100!=0)||i%400==0) printf("%d is a leap year !\n",i);

else

printf("%d is not a leap year !\n",i);

}

}

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

#include<>

int main()

{

float sign=1 , sum=0 , deno , term ; for (deno=1;deno<=100;deno++)

{

term=sign*(1/deno); sum=sum+term; sign=(-1)*sign; }

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

return 0; #include<>

int main()

{

int i , num ,n ; printf("Please input a number :\n"); {

if(num%i==0) {

n=1;

break; }

n=0; }

if(n==0) {

printf("It is do a prime number !"); }

else

{

printf("It is not a prime number !");

}

return 0;

}

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

…………还要伪代码

P036 调换二个参数的值.

#include<>

int main()

{

char a='a',b='b',c;

c=a;

a=b;

b=c;

printf("a now is %c , b now is %c !\n",a,b);

return 0;

}

#include<>

int main()

{

int i,a[10],s=0 ;

printf("Please input 10 numbers :\n");

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

{

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

}

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

{

if (s

}

printf("%d is the biggest number !\n",s);

return 0;

}

P036 按大小顺序输出一些数.

#include<>

int main()

{

int i , j , a[4] , s=0 ;

printf("Please input 5 numbers :\n"); for (i=0 ; i<=4 ; i++) {

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

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

for (j=i+1 ; j<=4 ; j++) {

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

return 0;

}

P036 求1至100的总合.

#include<>

int main()

{

int i , sum=0 ; for (i=0 ; i<101 ; i++)

sum=sum+i;

printf("The sum of one to one hundred is %d !\n",sum);

return 0;

}

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

#include<>

int main()

{

int n ;

printf("Please input a number :\n");

scanf("%d",&n);

if(n%3==0&&n%5==0) printf ("Can be devide by 3 and 5 !\n");

else

printf ("Can not be devide by 3 and 5 !\n");

return 0;

}

#include<> #include<>qrt是求根,属数学函数.

int main() {

int i;

for (i=100; i<=200; i++) if(prime_number(i) == 1)

printf("%d ",i);

return 0;

}

int prime_number(double m) {

int j,k;

k=(int)sqrt(m); for(j=2;j<=k;j++)

{

if(m%j==0)

return 0; }

return 1;

}

#include<>

int main()

{

int i;

for(i=100;i<=200;i++) {

if(prime(i)==1) printf ("%d is the prime number !\n",i);

}

return 0;

}

int prime(int j) {

int m, n;

m=(int)sqrt(j);

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

{

if(j%n==0)

return 0; }

return 1;

}

请仿照来写.

P036 最大公约数和最小公倍数.

#include<> main ()

{

int m, n, c, d;

int gcd(); int lcm(); printf("Please input two number :\n");

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

c=gcd(m,n); y=x%y; x=temp; }

return y; }

int lcm(int x, int y) 于号降序,大于号升序.

{ temp=x;

x=y;

y=temp;

}

for(i=1; i<=y; i++) {

if(!((x*i)%y)) { return x*i;

}

}

}

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

float F_to_C(float input_fah) {

float output_cen; output_cen=9)*(input_fah-32); return

output_cen; }

float C_to_F(float input_cen)

{

float output_fah;

output_fah=5)*input_cen+32; return output_fah;

}

int main()

{

int choice;

float input_fah,input_cen,output_fah,output_cen; printf("F_to_C press <1> and C_to_F press <2> !\n");

scanf("%d",&choice);

if(choice==1)

{

printf("Please input fahrenheit :");

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("Please input centigrade :");

scanf("%f",&input_cen);

output_fah=C_to_F(input_cen);

printf("The Centigrade is %d , and the Fahrenheit

is %d .",(int)input_cen,(int)output_fah);

}

return 0;

}

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

#include<>

int main()

{

float p0=1000,r1=,r2=,r3=,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);

return 0;

}

P055 大写转换成小写

#include<>

int main() 6个字母.

{

char c1, c2;

c1='A';

c2=c1+32;

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

return 0;

}

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

#include<>

#include<>

int main()

{

double a=, b=, c=, s, area;

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

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

printf("area is %f\n",area); return 0;

}

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

#include<>

#include<>

int main()

{

double a,b,c,disc,x1,x2,p,q;

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

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

p=-b/*a);

q=sqrt(disc)/*a);

x1=p+q;

x2=p-q;

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

return 0;

}

#include<>

#include<>

int main()

{

double a=; 以是float.

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

return 0;

}

#include<>

#include<>

int main()

{

float a; 33252,float精度6位,所以第七位后不可信.

a=10000/;

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

return 0;

}

P078 使用putchar函数输出.

#include<>

#include<>

int main()

{

char a='B',b='O',c='Y';

putchar(a);

putchar(b);

putchar(c);

putchar('\n');

putchar(101); putchar(66);

return 0;

}

#include<>

#include<>

int main()

{

char a,b,c;

a=getchar();

b=getchar();

c=getchar();

putchar(a);

putchar(b);

putchar(c); putchar('\n');

return 0;

}

#include<>

#include<>

int main()

{

char a,b;

a=getchar();

b=a+32;

putchar(b);

putchar('\n');

return 0;

}

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

#include<>

#include<>

int main()

{

double p,r=,n=10;

p=pow((1+r),n); printf("P is %lf when 10 years later .\n",p);

return 0; }

P082 求各种存款的利息数.

#include<>

#include<>

int main()

{

double p,r,n; p=1000*(1+5*;

printf("5 years is %lf !\n",p); f输出的是double型.

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

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

printf("5 years is %lf !\n",p); p=(1000*(1+3*);

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

printf("5 years is %lf !\n",p); 明,是一样的.

p=1000*pow((1+,5);

printf("5 years is %lf !\n",p); p=1000*pow((1+4),4*5);

printf("5 years is %lf !\n",p); #include<>

#include<>

int main()

{

double m,r=,d=300000,p=6000;

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

printf("%.1lf",m); lf.

return 0;

}

P084 字母密码转换,调用函数及临界处理.

#include<>

char printcode(char f)

{

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

{

return(f-26+4); }

else

{

return(f+4);

}

}

int main()

{

char a,b,c,d,e;

printf("Please input :\n");

a=getchar();

b=getchar();

c=getchar();

d=getchar();

e=getchar();

printf("%c%c%c%c%c",printcode(a),printcode(b),printcode(c),printcode(d),printcode(e) );

putchar(putcharcode(a));

putchar(putcharcode(b));

putchar(putcharcode(c));

putchar(putcharcode(d));

putchar(putcharcode(e));

return 0; lf 来实现,因为没有要求实部,所以格式中m不写.

以转换,但要在某此条件下,例如输出和读入时,%c是字母,而%d是数值,看着办. }

选择结构程序设计

P086 一无二次方程求根的二分支.

#include<>

#include<>

int main()

{

double a,b,c,disc,x1,x2,p,q;

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

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

if(disc<0) printf("This equation hasn't real roots\n");

else

{

p=-b/*a);

q=sqrt(disc)/*a);

x1=p+q;

x2=p-q;

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

}

return 0;

}

P087 二个数按大小输出.

#include<>

int main() {

float a,b,t;

scanf("%f %f",&a,&b); 如有个逗号.

if(a>b)

{

t=a;

a=b;

b=t;

}

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

return 0;

}

P088 三个数按大小输出.

#include<>

int main() {

float a,b,c,t;

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

if(a>b) {

t=a;

a=b;

b=t;

}

if(a>c) {

t=a;

a=c;

c=t;

}

if(b>c) {

t=b;

b=c;

c=t;

}

printf("%,%%\n",a,b,c);

return 0;

}

P099 判断输入字符,并最终按小写输出.

#include<>

int main()

{

char ch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')(ch+32):ch; printf("%c\n",ch);

return 0;

}

P100 按要求输出相应的Y值.

#include<>

int main()

{

int x,y;

scanf("%d",&x);

if(x>=0)

{

if(x>0) {

y=1;

}

else

{

y=0;

}

}

else{

y=-1;

}

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

return 0;

}

P102 switch的简单应用.

#include<>

int main()

{

char grade;

scanf("%c",&grade);

printf("Your score:");

switch(grade)

{

case'a':printf("85-100\n");break; case'b':printf("70-84\n");break;

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

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

default:printf("Enter data error!\n");

}

return 0;

}

#include<>

void action1(int x,int y)

{

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

}

void action2(int x,int y)

{

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

}

int main()

{

char ch;

int a=15,b=23;

ch=getchar();

switch(ch)

{

case'a':

case'A':action1(a,b);break; case'b':

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

default:putchar('\a'); }

return 0;

}

P106 用if的分支来做闰年问题

#include<>

int main()

{

int year,leap;

printf("Please input the year:\n");

scanf("%d",&year);

if(year%4==0) {

if(year%100==0) {

if(year%400==0) {

leap=1;

}

else{

leap=0;

}

}

else}

}

else

{

leap=0;

}

if(leap)

{

printf("%d is ",year);

}

else

{

printf("%d is not ",year);

}

printf("a leap year !"); return 0;

}

P108 一元二次等式的全计算过程.

#include<>

#include<>

int main()

{

double a,b,c,disc,x1,x2,realpart,imagpart;

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

printf("The equation ");

if(fabs(a)<=1e-6) {

printf("is not a quadratic !\n");

printf("x1=x2=%lf",-c/b);

}

else

{

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

if(fabs(disc)<=1e-6) {

printf("has two equal roots : %lf\n",-b/(2*a));

}

else

{

if(disc>1e-6)

{

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

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

printf("has distinct real roots : %lf and %lf \n",x1,x2);

}

else

{

realpart=-b/(2*a);

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

printf("has complex roots: \n");

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

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

}

}

}

return 0;

相关主题
文本预览
相关文档 最新文档