C语言程序设计 第五版 谭浩强著 80-82课后习题以及答案

1.假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值于现在相比增长多少百分比。计算公式为 p=(1+r)^2,
r为年增长率,n为年数,p为于现在相比比的倍数。

#include<stdio.h>
#include<math.h>//pow为调用数学函数需要加math.h头文件
int main()
{
    int n;
    float p, r=0.07;
    for(n=1;n<=10;n++)
    p=pow((r+1),n);
    printf("p=%.2f",p);//%。2f保留两位小数
}   

2.存款利息的计算。有1000元,想存5年,可按以下5种办法存:

(1)一次存5年期。

(2)先存2年期,到期后将本息再存3年期。

(3)先存3年期,到期后将本息再存2年期。

(4)存1年期,到期后将本息再存1年期,连续存5次。

(5)存活期存款。活期利息每一季度结算一次。

2007年12月的银行存款利息如下:

1年期定期存款利息为4.14%;

2年期定期存款利息为4.68%;

3年期定期存款利息为5.4%;

5年期定期存款利息为5.85%;

活期存款利息为0.72%(活期存款每一季度结算一次)

1年期本息和:P=1000*(1+r);

n年期本息和:P=1000*(1+n*r);

存n次1年期的本息和:P=(1+r)^n;

活期存款本息和:P=1000*(1+r/4)^4n;
注意:1000*(1+r/4)^4n是一个季度的本息和;

#include<stdio.h>
#include<math.h>
main()
{
    float r5,r3,r2,r1,r0,p1,p2,p3,p4,p5,p;
    p = 1000;
    r0 = 0.0072;
    r1 = 0.0414 ;
    r2 = 0.0468;
    r3 = 0.054;
    r5 = 0.0585;
    p1 = p*(1+5*r5);//分别计算出5种方案的本息和
    p2 = p*(1 + 2 * r2)*(1 + 3 * r3);
    p3 = p*(1 + 3 * r3)*(1 + 2 * r2);
    p4 = p*pow(1+r1,5);
    p5 = p*pow(1 + r0/4,4*5);
    printf("p1=%f\n",p1);
    printf("p2=%f\n",p2);
    printf("p3=%f\n",p3);
    printf("p4=%f\n",p4);
    printf("p5=%f\n",p5);
    return 0;
}

3.购房从银行贷了一笔款d, 准备每月还款额为p, 月利率为r, 计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。

公式为:m=log(p/(p-d*r))/log(1+r);

#include <stdio.h>
#include <math.h>
int main()
{
    int d = 300000, p = 6000;    //定义贷款总额,每月还贷数
    double r = 0.01, m, x, y;    //定义利率,月份
    x = p / (p - d * r);
    y = 1 + r;
    m = log10(x) / log10(y);     //计算公式
    printf("m=%.2lf\n", m);
    return 0;
}

4.分析下面程序:

#include<stdio.h>
int main()
{
    char c1,c2;
    c1=97;
    c2=98;
    printf("c1=%c,c2=%c\n",c1,c2);
    printf("c1=%d,c2=%d\n",c1,c2);
    return 0;
}

(1)运行时会输出什么信息?为什么?
输出:c1=a,c2=b
c1=97,c2=98
因为第一行printf输出格式为%c 为字符输出对应ASCII码 第二行printf输出格式为%d 为10进制整型输出

(2)如果将程序第4,5行改成 c1=197;c2=198;运行时会输出什么信息?为什么?
输出:c1=(不存在ASCII码里的符号),c2=(不存在ASCII码里的符号)
c1=197,c2=198

(3)如果将程序第3行改成 int c1,c2;运行时会输出什么信息?为什么?
c1=a,c2=b
c1=97,c2=98
因为第一行printf输出格式为%c 为字符输出对应ASCII码 第二行printf输出格式为%d 为10进制整型输出
输出内容的类型由输出格式而定

5.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入?

#include<stdio.h>

int main()

{

int a, b;

float x, y;

char c1, c2;

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

scanf("%f %e",&x,&y);

scanf("%c%c", &c1, &c2);

printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n",a,b,x,y,c1, c2);

return 0;

}

输入方式一及结果分析:

a=3 b=7

8.5 71.82Aa

a=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a

请按任意键继续…

在输入8.5和71.82两个实数给x和y后,应紧接着输入字符A,中间不要有空格,由于字母A不是数字,系统在遇到字母A时,就确定输入给y的值已经结束,字符A就送到下一个scanf语句中的字符变量c1。

输入方式二及结果分析:

a=3 b=7

8.5 71.82 Aa

a=3,b=7,x=8.500000,y=71.820000,c1= ,c2=A

请按任意键继续…

在输入8.5和71.82两个实数后,输入的空格符就被c1读入,c2读入了字符A,故输出c1时就输出空格,输出c2的值为A。

输入方式三及结果分析:

a=3 b=7

8.5 71.82

Aa

a=3,b=7,x=8.500000,y=71.820000,c1=

,c2=A

请按任意键继续…

在输入8.5和71.82两个实数后,按回车键再输入Aa,这时“回车”被作为一个字符送到内存输入缓冲区,被c1读入,字符A被c2读取,故在输出c1时,就输出一个换行,在下一行输出逗号和c2的值A。

  1. 请编程序将”China”译成密码,译码规律是用原来字母后面的第4个字母代替原来的字母。
    例如,字母”A”后面第4个字母是”E”, “E”代替”A”。因此,”China”应译为”Glmre”。
    请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。分别用putchar和printf函数输出这5个字符。
#include<stdio.h>

int main()

{

char c1='C',c2='h',c3='i',c4='n',c5='a';

c1 += 4;

c2 += 4;

c3 += 4;

c4 += 4;

c5 += 4;

printf("用printf输出密码为:%c%c%c%c%c\n", c1, c2, c3, c4, c5);

printf("用putchar输出密码为:");

putchar(c1);

putchar(c2);

putchar(c3);

putchar(c4);

putchar(c5);

printf("\n");

return 0;

}
  1. 设圆半径r = 1.5,圆柱高h = 3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。要求:用scanf输入数据,取小数点后两位。
#include<stdio.h>
#include<math.h>
 void main()
 {
 float r,h,pi=3.141592,C,S1,S2,V1,V2;
 printf("请输入圆半径圆柱高\n");
 scanf("%f%f",&r,&h);

 C=4*pi*r;
 printf("圆周长=%2.2f\n",C);

S1=pi*r*r;
printf("圆面积=%2.2f\n",S1);

S2=4*pi*r*r;
printf("圆球表面积=%2.2f\n",S2);

V1=(4/3)*pi*pow(r,3);
printf("圆球体积=%2.2f\n",V1);

V2=S1*h;
printf("圆柱体积=%2.2f\n",V2); 
 }

8.用getchar函数读入两个字符给c1,c2,分别用putchar和printf输出这两个字符。思考以下问题:

(1)变量c1和c2定义为字符型还是整型?或二者皆可?

(2)要求输出c1和c2的ASCII码,应如何处理?

(3)整形变量和字符变量是否在任何情况下都可以互相代替?char c1, c2;和int c1, c2;是否无条件等价?

#include<stdio.h>

int main()

{

char c1, c2;

printf("请输入两个字符c1,c2:");//输入的两个字符之间没有空格,连续输入

c1 = getchar();

c2 = getchar();

printf("用putchar输出结果为:");

putchar(c1);

putchar(c2);

printf("\n");

printf("用printf输出结果为:");

printf("%c %c\n",c1,c2);

/*printf("%d,%d\n", c1, c2);*/

return 0;

}

(1)c1和c2可以定义为字符型或整型,二者皆可。

(2)用printf函数输出,使用%d格式符,即:

printf(“%d,%d\n”, c1, c2);

结果为:97,98

(3)字符变量占1个字节,整型变量占2或4个字节。故整型变量在可输出字符的范围内(ASCII码为0到127之间的字符)是可以与字符型数据互相转换的。如果整数在此范围外,不能代替。

猜你喜欢

转载自blog.csdn.net/qq_42313319/article/details/81298415