《C程序设计》课后练习题(3)

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

r为年增长率,n为年数,p为与现在相比的倍数。

代码:

#include<stdio.h>
#include<math.h>
int main(){
float r,n,p;
 r=0.07;
 n=10;
 p=pow(1+r,n);
 printf("p=%f",p);
return 0;
} 

结果:

分析:

注意pow函数的具体形式是pow=(x ,y)相当于x的y次方;

在使用此函数时需要在程序的开头写入【#include<math.h>】将头文件包含到本程序模块中;

为了提高代码的可利用性,可以选择在屏幕上自己输入年增长;

printf("请输入年增长率r和年数n:");
scanf("%d %d",&r,&n);

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

(1)一次存5年;

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

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

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

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

2017年的银行存款利息如下:

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

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

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

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

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

代码:

#include<stdio.h>
#include<math.h>
int main(){
float r0,r1,r2,r3,r5;
float p,p1,p2,p3,p4,p5;
p=1000;
r0=0.0035;
r1=0.015;
r2=0.021;
r3=0.0275;
r5=0.03;
p1=p*(1+5*r5);
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;
} 

结果:

分析:

代码没有什么复杂性,主要是理解题目并能写出算法,比较繁琐因此需要仔细;

采用双精度变量(double),得到的运算结果会更精确;

输出运行结果时,得到了6位小数,连带整数一共10位数字,而float型变量只能保证6位有效数字,后面几位无意义,因此可以只精确到两位小数;

printf(".2%f\n",p1)

3.购房从银行贷了一笔款d,准备准备每月还款额为p,月利率为r,计算多少月能还清。设d为300 00元,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;
    float x=p/(p-d*r);
    float y=1+r;
	m=log10(x)/log10(y);
	printf("月份:m=%.1f\n",m);
	printf("验证:m=%.2f",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)运行时会输出什么信息?为什么?

字符类型可以输出为整数型和字符型。

(2)如果将程序第4,5行改为:

   c1=197;

   c2=198;

运行时会输出什么信息?为什么?

第一行:字符的有效范围为0~127,超出此范围结果将不可预料。

第二行:按照补码形式输出,当内存字节中第一位为1时,作为负数。

(3)如果将程序第3行改为

     int c1,c2;

运行时会输出什么信息?为什么?

改(1)题目上的

改(2)题目上的

5.用下面的scanf函数输入数据,使a=3,b=3,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\n",a,b);
printf("x=%f y=%f\n",x,y);
printf("c1=%c c2=%c",c1,c2);
return 0;
} 

结果:

分析:

观察发现在输入x,y后并没有空格就直接输入字母了,由于系统在遇到字母A或空格时就确定输入y的数值已经结束,因此若输入空格或回车键,值就会被传送给c1;

6.请编程序将"China"译为密码,密码规律是:用原来字母后面第4个字母代替原来的字母。

例如,字母'A'后面第4个字母为'E',以此类推"China"译为"Glmre"。

请编一程序,用赋初值的方法使c1,c2.c3,c4,c5这5个变量的值为"China",经过运算变为"Glmre"。分别用putchar函数和printf函数输出。

代码:

#include <stdio.h>
int main(){
	char c1='C'; 
	char c2='h'; 
	char c3='i'; 
	char c4='n'; 
	char c5='a';
	c1=c1+4;
	c2=c2+4;
	c3=c3+4;
	c4=c4+4;
	c5=c5+4;
	printf("用printf函数输出:%c%c%c%c%c%c\n",c1,c2,c3,c4,c5); 
	printf("用putchar函数输出:") ;
	putchar(c1);
	putchar(c2);
	putchar(c3);
	putchar(c4);
	putchar(c5);
	return 0;
}

结果:

7.设圆的半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。

用scanf输入数据,计算输出结果,输出时有文字说明,取小数点后两位。

代码:

#include<stdio.h>
int main(){
	float r,h,pi;
	pi=3.14;
	float C,S,Vc,Vs,V;//周长,面积,表面积,体积 
	printf("请输入圆半径r和圆柱高h:");
	scanf("%f %f",&r,&h);
	C=2*pi*r;
	S=pi*r*r;
	Vc=4*S;
	Vs=3.0/4.0*pi*r*r*r;
	V=S*h;
	printf("圆周长为%.2f, 圆面积为%.2f\n",C,S);
	printf("圆表面积为%.2f,圆体积为%.2f\n",Vc,Vs); 
	printf("圆柱体积为%.2f",V);
	return 0;
}

结果:

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

getchar输入两个字符时需要连续输入,不能中间输入空格或回车键;

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

代码:

#include<stdio.h>
int main(){
	char c1,c2;
	c1=getchar();//从键盘读入一个字母,赋值给字符变量c1;
	c2=getchar();
	printf("%c%c\n",c1,c2);
	putchar(c1);
	putchar(c2);
	return 0;
}

改变变量类型:

	int c1,c2;

结果:(结果不发生改变

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

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

(3)整型变量和字符变量是否在任何情况下都可以相互代替?是否无条件等价?

字符变量在计算机内占1个字节,而整数变量占2个变量或4个字节。因此整型变量在可输出字符的范围内(0~127)是可以相互转换的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值