ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-02-09 11:29:50  阅读:336  来源: 互联网

标签:输出 putchar -- int 顺序程序 printf 程序设计 c1 c2


//习题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的库函数中有求对数的函数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)运行时会输出什么信息?为什么?
c1=a,c2=bc1=97,c2=98

由于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;

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

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

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

int c1,c2;
运行时会输出什么信息?为什么?
当c1=97,c2=98时程序运行结果同(1)
当c1=197,c2=198时运行结果为
在这里插入图片描述
因为在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这里是引用


//习题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;
}

程序结果:在这里插入图片描述


//习题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;
}

程序结果
在这里插入图片描述

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

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

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

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

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

char c1,c2;

int c1,c2;

是否无条件地等价?

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

标签:输出,putchar,--,int,顺序程序,printf,程序设计,c1,c2
来源: https://blog.csdn.net/GSxh999/article/details/113757173

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有