C语言谭浩强第五版课后题答案第3章

第3章 顺序程序设计

1.假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比。

#include <stdio.h>
#include <math.h>

int main()
{
	float p, r, n;
	r = 0.07;
	n = 10;
	p = pow(1 + r, n);//pow为计算1+r的n次方函数
	printf("p=%f\n", p);//10年后我国国民生产总值与现在增长1.967125
}

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

(1)一次存5年期

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

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

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

.............................................................................................................................................

.............................................................................................................................................

#include <stdio.h>
#include <math.h>

int main()
{
	float r0, r1, r2, r3, r5, p, p1, p2, p3, p4, p5;//定义五年的年利率为r0...r5
	p = 1000;//题目中已经给出原本有1000元
	r0 = 0.0035;//活期
	r1 = 0.015;//1年期
	r2 = 0.021;//2年期
	r3 = 0.0275;//3年期
	r5 = 0.03;//5年期
	p1 = 1000 * pow((1 + r0 / 4), 4 * 5);//p1为活期存款本息和,由题意可知,n为5年
	p2 = 1000 * pow((1 + r1),5);//1年期存5次
	p3 = 1000 * (1 + r2 * 2)  * (1 + r3 * 3);//存2年期后再存3年期
	p4 = 1000 * (1 + r3 * 3)  * (1 + r2 * 2);//存3年期后再存2年期
	p5 = 1000 * (1 + r5 * 5);//存5年
	printf("活期本息和为:%f \n", p1);
	printf("第一年期本息和为:%f \n", p2);
	printf("第二年期本息和为:%f \n", p3);
	printf("第三年期本息和为:%f \n", p4);
	printf("第五年期本息和为:%f \n", p5);
	return 0;
}

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

#include <stdio.h>
#include <math.h>

int main()
{
	float d, p, r, m;
	d = 300000;
	p = 6000;
	r = 0.01;
	m = log10(p / (p - d * r)) / log10(1 + r);
	printf("还清月数m=%6.1f月\n", m);
	return 0;
}

若需要验证是否对第2位小数进行四舍五入处理,则将m=%6.2f输出,此时输出结果为69.66

4.分析下面的程序

#include <stdio.h>
int main()
{
	int c1, c2;
	c1 = 197;
	c2 = 198;
	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来输出c1、c2,%c是用来输入单个字符,并且通过查询ASCII码可以得知,97、98分别是小写字母a、b的ASCII码;第2个使用的%d格式输入,所以是输入两个十进制整数。

(2)如果将程序第4、5行改为c1=197,c2=198,运行时会输出什么信息,为什么?

第一行输出的结果是不可知的,char类型的有效范围为0~127,由于我使用的是VS2022版本,所以输出结果为?这个根据不同系统得到的结果也不同。

第二行的输出结果使用%d格式输出,输出c1=-59,c2=-58.这是按补码形式输出的,内存字节中第1位为1时,为负数。59+197=256,58+198=256

由此得知:使用char类型变量时,给它赋值应在0~127范围内

(3)如果将程序第3行改为 int c1,c2;会输出什么信息,为什么?

如果给c1和c2赋值是97,98,则输出结果会和(1)一样。

如果赋值是197,198,则用%c输出的也是不可知的结果。

第二行输出整数197,198,因为它们在int类型的有效变量范围内。

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

#define _CRT_SECURE_NO_WARNINGS
#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);
	printf("a=%d,b=%d,x=%f,y=%e,c1=%c,c2=%c",a,b,x,y,c1,c2);
	return 0;
}

这里代码遵循书上源代码,只添加了printf输出

按书上代码在控制台输出8.5与71.82后面接A a时不要空格,因为A是字母不是数字,系统遇到A之后就确定给y的数值已结束.

所以需要规范输入代码,有时回车键也可以是一个字符并且被输出。

6.请编程将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母'A'后面第4个字母是'E',用E代替A。因此,China应该译为Glmre。

#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("%c%c%c%c%c", c1, c2, c3, c4, c5);
	return 0;
}

7.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。

圆周长:2πr

圆面积:πr^2

圆球表面积:4πr^2

圆球体积:4/3πr^3

圆柱体积:πr^2*h

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
	float r = 1.5, h = 3, l, s, sq, vq, vz;//l:圆周长 s:圆面积 sq:圆球表面积 vq:圆球体积 vz:圆柱体积
	float PI = 3.14;
	//printf("请输入圆半径r圆柱高h:");
	//scanf("%f %f ", &r,&h);
	l = 2 * PI * r;
	s = PI * r * r;
	sq = 4 * PI * r * r;
	vq = 4 / 3 * PI * r * r * r;
	vz = PI * r * r * h;
	printf("圆周长为:%6.2f\n圆面积为:%6.2f\n圆球表面积为:%6.2f\n圆球体积为:%6.2f\n圆柱体积为:%6.2f\n",l,s,sq,vq,vz);
	return 0;
}

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

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

#include <stdio.h>
int main()
{
	int c1=97, c2=98;
	printf("字符型输出:%c %c\n", c1,c2);
	printf("ASCII码输出:%d %d", c1, c2);
	return 0;
}

这里我认为需要根据输出结果来定义它们,如果需要输出字符型数据,则定义char类型,如果需要输出整型类型,则定义为int类型。但是也需要注意int类型和char类型的数据有效范围。

(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?

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

个人认为应该用printf函数,因为putchar函数是字符输出函数

(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:

char c1,c2;  与   int c1,c2    是否无条件等价?

不是无条件等价。char类型与int类型的有效范围不同,并且打印整型和字符型的格式声明也不同,整型变量为%d,字符型变量为%c。

  • 27
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值