第三章 最简单的C程序设计--顺序程序设计

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

p=(1+r)^n

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


#include <stdio.h>
#include <math.h> //要用到pow函数
int main()
{
	double p,r=0.07,n=10;
	p=pow(1+r,n);
	printf("%lf",p); //输出结果
	return 0;
}

//习题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%(活期存款每一季度结算一次利息)。

如果r为年利率,n为存款年数,则计算本息和的公式如下:

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

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

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

活期存款本息和: P=1000*(1+r/4)^4*n。

说明: 1000*(1+r/4)是一个季度的本息和。


#include <stdio.h>
#include <math.h>
int main()
{
	double p1,p2,p3,p4,p5; //用于存放5种存放方法的结果
	p1=1000*(1+5*0.03); 
	p2=(1000*(1+2*0.021))*(1+3*0.0275);
	p3=(1000*(1+3*0.0275))*(1+2*0.021);
	p4=pow(1000*(1+0.015),5);
	p5=1000*pow((1+0.0035/4),(4*5));
	printf("方案1的本息和为:%f\n",p1); //输出方案1的结果
	printf("方案2的本息和为:%f\n",p2); //输出方案2的结果
	printf("方案3的本息和为:%f\n",p3); //输出方案3的结果
	printf("方案4的本息和为:%f\n",p4); //输出方案4的结果
	printf("方案5的本息和为:%f\n",p5); //输出方案5的结果
	return 0;
}

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

提示:计算还清月数m的公式如下:

第三章 最简单的C程序设计--顺序程序设计

可以将公式改写为

第三章 最简单的C程序设计--顺序程序设计

C的库函数中有求对数的函数log10,是求以10为底的对数。log§表示log^p.

#include <stdio.h>
#include <math.h>
int main()
{
	double d=300000,r=0.01,p=6000,m; //贷款300000,每月还6000,月利率为1%;
	m=log(p/(p-d*r))/log(1+r);
	printf("需要%.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;
}

(1)运行时会输出什么信息?为什么?
第三章 最简单的C程序设计--顺序程序设计

由于c1、c2是字符型,虽然给它赋值了数值,但在给c1、c2赋值时系统进行了强制类型转换为字符型,97、98转换为a、b分别赋值给c1、c2。所以第一行为c1=a,c2=b。在第二行时格式控制输出格式为%d,又把字符型转换成对应的的ASCII码值数值型,所以输出c1=97,c2=98
(2)如果将程序第4,5行改为

c1=197;

c2=198;

运行时会输出什么信息?为什么?
第三章 最简单的C程序设计--顺序程序设计
第一行是因为找不到对应的ASCII码值,因为ASCII码值的表示范围为0-127。第二行是因为在整形数据赋值给字符型数据时发生了截断,因为所占字节不同,所以只截取了低八位。又因为默认为输出时有符号整型,有符号数据在计算机中都是以补码形式存储的,显然本例中为负数,将197转换为二进制为11000101,补码为10111011,所以输出为-59,c2同上。

注意:上面的知识点牵扯到别的知识,不懂的可以先不追究,如果想了解,在我的收草里C文件夹第一条里有别的博主详细介绍,相信看完你一定会恍然大悟。

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

int c1,c2;
运行时会输出什么信息?为什么?
当c1=97,c2=98时程序运行结果同(1)
当c1=197,c2=198时运行结果为
第三章 最简单的C程序设计--顺序程序设计
因为在ASCII码的范围只在0-127所以第一行未知(与(2)相似)


//习题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=%db=%d" ,&a,&b);
scanf("%f%e",&x,&y);
scanf("%c%c",&c1,&c2);
return 0;
}

以下是输入方法和输出结果验证(原程序中没有需要自己加),a=3b=7必须原样输入,%e是科学计数法格式输入输完之后不能直接回车或空格必须连着输入Aa第三章 最简单的C程序设计--顺序程序设计


//习题6.请编程字将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母,如,字每“A”后面第4个字母是“E”,用“E”代替“A”。因此“China”应译为"Glmre”。请编一程序,用赋初值的方法使c1,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-c5赋值
	putchar(c1+4); //putchar()输出
	putchar(c2+4);
	putchar(c3+4);
	putchar(c4+4);
	putchar(c5+4);
	printf("\n");
	printf("%c",c1+4); //printf()输出
	printf("%c",c2+4);
	printf("%c",c3+4);
	printf("%c",c4+4);
	printf("%c",c5+4);
	printf("\n");
	return 0;
}

//习题7.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输人数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。
#include <stdio.h>
int main()
{
	float r,h,p=3.14;
	scanf("%f%f",&r,&h); //输入r=1.5,h=3
	float zc,mj,bmj,tj,yztj;
	zc=2*p*r; //圆周长
	mj=p*r*r; //圆面积
	bmj=4*p*r*r; //圆球表面积
	tj=4/3*p*r*r*r; //圆球体积
	yztj=p*r*r*h; //圆柱体积
	printf("圆周长为%f\n圆面积为%f\n圆球表面积为%f\n,圆球体积为%f\n圆柱体积为%f\n",zc,mj,bmj,tj,yztj);
	return 0;
}

程序结果:第三章 最简单的C程序设计--顺序程序设计


//习题8.编程序,用getchar 函数读人两个字符给cl和c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:
#include <stdio.h>
int main()
{
	int c1,c2;
	c1=getchar();
	c2=getchar();
	putchar(c1);
	putchar(c2);
	printf("c1=%cc2=%c",c1,c2);
	return 0;
}

程序结果
第三章 最简单的C程序设计--顺序程序设计

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

均可,因为字符型和数值型互相转换

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

应该用printf输出,因为putchar只能输出字符型数据

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

char c1,c2;

int c1,c2;

是否无条件地等价?

这个不一定,因为ASCII所表示的字符范围只在0-127中,超过的部分没有对应的字符,而数值型一般都会有一个值与之对应。

上一篇:终于解决STM32CubeIDE串口重定向!!!


下一篇:黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)E题题解