第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。