C程序设计谭浩强第五版答案 第三章习题答案
1、假如我国国民生产总值的年增长率为7%, 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为p = ( 1 + r ) n p = (1+r)^np=(1+r) n ,其中r为年增长率,n为年数,p为与现在相比的倍数。
#include <stdio.h>
#include <math.h>
int main ( )
{
float p, r, n;
r = 0.07 ;
n = 10 ;
p = pow ( 1 + r, n) ;
printf ( "p=%f\n" , p) ;
return 0 ;
}
2、存款利息的计算。有1000元,想存5年,可按以下5种办法存:
#include <stdio.h>
#include <math.h>
int main ( )
{
float r5, r3, r2, r1, r0, p, p1, p2, p3, p4, p5;
p = 1000 ;
r5 = 0.0585 ;
r3 = 0.054 ;
r2 = 0.0468 ;
r1 = 0.0414 ;
r0 = 0.0072 ;
p1 = p* ( ( 1 + 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为300 000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五人处理。
#include <stdio.h>
#include <math.h>
int main ( )
{
float d = 300000 , p = 6000 , r = 0.01 , m;
m = log10 ( p / ( p - d* r) ) / log10 ( 1 + r) ;
printf ( "m = %3.1f\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 ;
}
如果将程序第4,5行改为c1 = 197;c2 = 198;会输出:
(3)如果将程序第3行改为int c1, c2;会输出:
5用下面的scanf 函数输人数据,使a=3,b=7,x=8.5,y=71. 82,cl=‘A’,c2=‘a’。在键盘上应如何输入?
#include <stdio.h>
int main ( )
{
int a, b;
float x, y;
char c1, c2;
scanf ( "a=%db=%d" , & a, & b) ;
scanf ( "%f%e" , & x, & y) ;
scanf ( "%c%c" , & c1, & c2) ;
return 0 ;
}
6、请编程序将“China"译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China"应译为“Glmre”。请编一程序,用赋初值的方法使cl,c2,c3,c4,c5这5个变量的值分别为’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 = c1 + 4 ;
c2 = c2 + 4 ;
c3 = c3 + 4 ;
c4 = c4 + 4 ;
c5 = c5 + 4 ;
printf ( "使用putchar输出: " ) ;
putchar ( c1) ;
putchar ( c2) ;
putchar ( c3) ;
putchar ( c4) ;
putchar ( c5) ;
printf ( "\n" ) ;
printf ( "使用printf输出: %c%c%c%c%c\n" , c1, c2, c3, c4, c5) ;
return 0 ;
}
7、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输人数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main ( )
{
float h, r, l, s, sq, vq, vz;
float pi = 3.141526 ;
printf ( "请输入圆半径r,圆柱高h∶" ) ;
scanf ( "%f %f" , & r, & h) ;
l = 2 * pi * r;
s = r * r * pi;
sq = 4 * pi * r * r;
vq = 3.0 / 4.0 * pi * r * r * r;
vz = pi * r * r * h;
printf ( "圆周长为: l=%6.2f\n" , l) ;
printf ( "圆面积为: s=%6.2f\n" , s) ;
printf ( "圆球表面积为: sq=%6.2f\n" , sq) ;
printf ( "圆球体积为: v=%6.2f\n" , vq) ;
printf ( "圆柱体积为: vz=%6.2f\n" , vz) ;
return 0 ;
}
8.编程序,用getchar函数读人两个字符给c1和c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:
(1) 变量cl和c2应定义为字符型、整型还是二者皆可? (2) 要求输出cl和c2值的ASCII码,应如何处理?用putchar函数还是printf函数? (3) 整型变量与字符变量是否在任何情况下都可以互相代替?如: char c1,c2;与int cl,c2;是否无条件地等价?
int main ( )
{
int 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) ;
return 0 ;
}