1. 假设我国国民生产总值的年增长率为7%,求10年后与当前相比的增长百分比。根据公式:
其中,r 表示年增长率,n 代表年数,p 是相对于当前的倍数。
#include <stdio.h>
#include <math.h> // 使用pow函数进行幂运算
int main() {
double r = 0.07; // 年增长率7%
int n = 10; // 年数
double p; // 相对于现在的倍数
// 计算公式: p = (1 + r)^n
p = pow(1 + r, n);
// 输出结果
printf("年增长率 %.1f%%, %d年后国民生产总值是现在的 %.4f 倍\n",
r * 100, n, p);
printf("即增长了 %.2f%%\n", (p - 1) * 100);
return 0;
}
2. 关于存款利息的比较分析:现有本金1000元,计划存储5年,可选择以下五种方式:
- 一次性存入5年期定期;
- 先存2年期,到期后本息转存3年期;
- 先存3年期,之后将本息再存2年期;
- 每年续存1年期,共连续操作5次;
- 选择活期存款,每季度结算一次利息。
依据2017年银行利率标准:
- 1年期定期利率:1.5%;
- 2年期定期利率:2.1%;
- 3年期定期利率:2.75%;
- 5年期定期利率:3%;
- 活期存款利率:0.35%(按季度复利计算)。
若以 r 表示年利率,n 为年数,则本息和计算方式如下:
#include <stdio.h>
#include <math.h>
int main() {
int n = 5; // 存款年限
double r1 = 0.015, r2 = 0.021, r3 = 0.0275, r5 = 0.03, r0 = 0.0035;
// 分别对应1年、2年、3年、5年及活期利率
double p1, p2, p3, p5, p0;
p1 = 1000 * (1 + 5 * r5); // 5年期一次存满
p2 = ((1 + 2 * r2) * 1000) * (1 + 3 * r3); // 2年+3年
p3 = ((1 + 3 * r3) * 1000) * (1 + 2 * r2); // 3年+2年
p5 = pow(1 + r1, 5) * 1000; // 每年续存1年期
p0 = pow(1 + r0 / 4, 20) * 1000; // 活期,每季计息共20次
printf("p1 = %.2lf\np2 = %.2lf\np3 = %.2lf\np5 = %.2lf\np0 = %.2lf\n",
p1, p2, p3, p5, p0); // 结果保留两位小数
return 0;
}
3. 购房贷款问题:从银行贷款金额为 d=300,000 元,每月还款额固定为 p=6000 元,月利率 r=1%。需要计算还清所需月数 m,并对结果保留一位小数,第二位四舍五入。
提示中给出的计算公式为:
#include <stdio.h>
#include <math.h>
int main() {
long d = 300000, p = 6000;
double r = 0.01, m;
m = log(p / (p - d * r)) / log(1 + r);
printf("m=%.1lf\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=b
c1=97, c2=98
原因:字符型变量赋值为整数时,会将其解释为ASCII码对应的字符。97对应'a',98对应'b',因此%c输出字符形式,而%d输出其原始数值。
(2)若将第4、5行修改为:
c1 = 197;
c2 = 198;
输出可能为:
c1=? , c2=??? (或显示乱码)
c1=-59, c2=-58
原因:在有符号char类型下(通常范围-128~127),197和198超出正向表示范围,发生溢出,实际存储为补码形式,即分别为-59和-58。此时%c尝试打印非标准可打印字符,可能导致乱码。
(3)若将第3行改为:
int c1, c2;
则输出变为:
c1=? , c2=??? (或乱码)
c1=197, c2=198
原因:此时变量类型为int,能完整存储197和198,无溢出。但使用%c输出时仍会尝试将其作为ASCII码解析,而197、198在某些编码体系中可能不对应可见字符,导致显示异常或乱码;%d则正常输出数值。
5. 给定以下代码段,要求输入数据使得 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语句仅读取格式为"a=数字b=数字"的数据,目前只接收两个整型变量。后续未完成输入x、y、c1、c2的部分代码缺失,但根据已有部分推断,若要使a=3、b=7,应在控制台输入:
a=3b=7
注意:中间不能有空格或其他多余字符,必须严格匹配格式字符串"a=%db=%d"。
#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("使用putchar输出: ");
putchar(c1);
putchar(c2);
putchar(c3);
putchar(c4);
putchar(c5);
putchar('\n');
printf("使用printf输出: %c%c%c%c%c\n", c1, c2, c3, c4, c5);
printf("加密后ASCII码: %d %d %d %d %d\n", c1, c2, c3, c4, c5);
return 0;
}
程序功能说明:通过将字符的ASCII值增加4,实现简单的凯撒密码加密。原始字符串“China”中的每个字母均向后移动四位,'C'变为'G','h'变为'l',依此类推,最终得到加密结果“Glmre”。程序分别使用putchar和printf两种方式输出加密后的字符,并打印其对应的ASCII码值用于验证。
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793
int main() {
double r, h;
double circumference, circle_area;
double sphere_area, sphere_volume;
double cylinder_volume;
printf("请输入圆半径 r: ");
scanf("%lf", &r);
printf("请输入圆柱高 h: ");
scanf("%lf", &h);
circumference = 2 * PI * r;
circle_area = PI * r * r;
sphere_area = 4 * PI * r * r;
sphere_volume = 4.0 / 3.0 * PI * pow(r, 3);
cylinder_volume = PI * r * r * h;
printf("\n========== 计算结果 ==========\n");
printf("圆半径: r = %.2f\n", r);
printf("圆柱高: h = %.2f\n", h);
printf("使用π值: %.10f\n", PI);
printf("--------------------------------\n");
printf("圆周长: %.2f\n", circumference);
printf("圆面积: %.2f\n", circle_area);
printf("圆球表面积: %.2f\n", sphere_area);
printf("圆球体积: %.2f\n", sphere_volume);
printf("圆柱体积: %.2f\n", cylinder_volume);
return 0;
}
本程序用于计算与圆及圆柱相关的几何量。给定用户输入的半径r和高度h,程序依次计算并输出圆的周长、面积,球体的表面积和体积,以及圆柱的体积。所有浮点数结果保留两位小数,提升可读性。使用自定义的高精度PI值以确保计算准确性。

#include <stdio.h>
int main() {
// 问题(1)解答:c1 和 c2 可使用字符型或整型,但建议用字符型
char c1, c2; // 推荐定义为字符类型
printf("请输入两个字符(中间无需空格): ");
c1 = getchar(); // 获取第一个输入字符
c2 = getchar(); // 获取第二个输入字符(可能为回车、空格或其他直接输入的字符)
// 使用 putchar 函数输出这两个字符
printf("用putchar输出字符: ");
putchar(c1);
putchar(' '); // 添加空格以分隔字符
putchar(c2);
putchar('\n'); // 换行处理
// 利用 printf 函数输出字符内容
printf("用printf输出字符: %c %c\n", c1, c2);
return 0;
}
问题解析:
(1)变量 c1 和 c2 应该定义为字符型、整型,还是两者都可以?
答:两种类型均可使用,但从语义清晰和内存效率角度考虑,推荐使用字符型(char)。
(2)若需输出 c1 和 c2 对应的 ASCII 码值,该如何实现?应选用 putchar 还是 printf 函数?
答:必须采用 printf 函数,并配合格式控制符 %d 来输出其对应的 ASCII 数值。putchar 主要用于字符输出,无法直接显示数值编码。
(3)整型变量与字符型变量是否在所有场景下都能互相替代?例如 char c1,c2; 与 int c1,c2 是否完全等价?
答:在基本的字符读取与打印操作中,char 与 int 往往可以互换使用,因为 char 在赋值时会自动提升为 int。然而,在处理 EOF 判断、数据范围限制或执行算术运算时,使用 int 类型更为安全可靠。建议初学者先掌握 char 类型的基本用法,理解底层机制后再根据实际需求选择合适的数据类型。
?
假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为:
r为年增长率,n为年数,p为与现在相比的倍数。
#include <stdio.h>
#include <math.h>? // 需要使用pow函数进行幂运算
int main() {
??? double r = 0.07;? // 年增长率7%
??? int n = 10;?????? // 年数
??? double p;???????? // 与现在相比的倍数
???
??? // 计算公式: p = (1 + r)^n
??? p = pow(1 + r, n);
???
??? // 输出结果
??? printf("年增长率 %.1f%%, %d年后国民生产总值是现在的 %.4f 倍\n",
?????????? r * 100, n, p);
??? printf("即增长了 %.2f%%\n", (p - 1) * 100);
???
??? 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为存款年数,则计算本息和的公式如下:
#include <stdio.h>
#include <math.h>
int main() {
???????? int n = 5; // 存5年
????????
???????? double r1 = 0.015, r2 = 0.021, r3 = 0.0275, r5 = 0.03, r0 = 0.0035; // r1-1年期,r2-2年期,r3-3年期,r5-5年期,r0-活期
???????? double p1, p2, p3, p5, p0;
????????
???????? p1 = 1000 * (1 + 5 * r5);
???????? p2 = ((1 + 2 * r2) * 1000) * (1 + 3 * r3);
???????? p3 = ((1 + 3 * r3) * 1000) * (1 + 2 * r2);
???????? p5 = pow(1 + r1, 5) * 1000;
???????? p0 = pow(1 + r0 / 4, 20) * 1000;
???????? printf("p1 = %.2lf\np2 = %.2lf\np3 = %.2lf\np5 = %.2lf\np0 = %.2lf\n", p1, p2, p3, p5, p0); // 保留2位小数,第3位四舍五入
???????? return 0;
}
3.购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300 000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。
提示:计算还清月数m的公式如下:
#include <stdio.h>
#include <math.h>
int main() {
???????? long d = 300000, p = 6000;
???????? double r = 0.01, m;
????????
???????? m = log(p / (p - d * r)) / log(1 + r);
????????
???????? printf("m=%.1lf\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)运行时会输出什么信息?为什么?
(2)如果将程序第4,5行改为:
??? c1 = 197;
??? c2 = 198;
运行时会输出什么信息?为什么?
(3)如果将程序第3行改为:
int c1, c2;
运行时会输出什么信息?为什么?
答案:
c1=a, c2=b
c1=97, c2=98
(2)
c1=? , c2=??? (或乱码符号)
c1=-59, c2=-58?? (常见情况)
(3)
c1=? , c2=??? (或乱码符号)
c1=197, c2=198
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 8.5 71.82Aa
或分三行输入:
a=3b=7
8.5 71.82
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','1','m','r','e'。分别用putchar函数和printf函数输出这5个字符。
#include <stdio.h>
int main() {
??? // 1. 初始化五个字符变量
??? char c1 = 'C', c2 = 'h', c3 = 'i', c4 = 'n', c5 = 'a';
???
??? // 2. 加密:每个字符后移4位(注意大小写和边界)
??? c1 = c1 + 4;? // 'C' → 'G'
??? c2 = c2 + 4;? // 'h' → 'l'
??? c3 = c3 + 4;? // 'i' → 'm'
??? c4 = c4 + 4;? // 'n' → 'r'
??? c5 = c5 + 4;? // 'a' → 'e'
???
??? // 3. 用putchar函数输出
??? printf("使用putchar输出: ");
??? putchar(c1);
??? putchar(c2);
??? putchar(c3);
??? putchar(c4);
??? putchar(c5);
??? putchar('\n');? // 换行
???
??? // 4. 用printf函数输出
??? printf("使用printf输出: %c%c%c%c%c\n", c1, c2, c3, c4, c5);
???
??? // 5. 输出ASCII码值验证
??? printf("加密后ASCII码: %d %d %d %d %d\n", c1, c2, c3, c4, c5);
???
??? return 0;
}
7.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。
#include <stdio.h>
#include <math.h>?
// 自定义π常量
#define PI 3.141592653589793
int main() {
??? double r, h;
??? double circumference, circle_area;??? // 圆周长, 圆面积
??? double sphere_area, sphere_volume;??? // 圆球表面积, 圆球体积
??? double cylinder_volume;?????????????? // 圆柱体积
???
??? // 1. 输入半径和高
??? printf("请输入圆半径 r: ");
??? scanf("%lf", &r);
??? printf("请输入圆柱高 h: ");
??? scanf("%lf", &h);
???
??? // 2. 使用自定义PI进行计算
??? circumference = 2 * PI * r;????????????????? // 圆周长 = 2πr
??? circle_area = PI * r * r;??????????????????? // 圆面积 = πr?
??? sphere_area = 4 * PI * r * r;??????????????? // 球表面积 = 4πr?
??? sphere_volume = 4.0 / 3.0 * PI * pow(r, 3);? // 球体积 = (4/3)πr?
??? cylinder_volume = PI * r * r * h;??????????? // 圆柱体积 = πr?h
???
??? // 3. 输出结果,保留两位小数
??? printf("\n========== 计算结果 ==========\n");
??? printf("圆半径:?????? r = %.2f\n", r);
??? printf("圆柱高:?????? h = %.2f\n", h);
??? printf("使用π值:????? %.10f\n", PI);? // 显示使用的π值
??? printf("--------------------------------\n");
? ??printf("圆周长:?????? %.2f\n", circumference);
??? printf("圆面积:?????? %.2f\n", circle_area);
??? printf("圆球表面积:?? %.2f\n", sphere_area);
??? printf("圆球体积:???? %.2f\n", sphere_volume);
??? printf("圆柱体积:???? %.2f\n", cylinder_volume);
??? printf("===============================\n");
???
??? return 0;
}
8.编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:
(1)变量c1和c2应定义为字符型、整型还是二者皆可?
(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?
(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:char c1,c2;与int c1,c2是否无条件等价?
答案:
#include <stdio.h>
int main() {
??? // 问题(1)的答案:字符型或整型皆可,但字符型更合适
??? char c1, c2;? // 定义为字符型(推荐)
???
??? printf("请输入两个字符(不需空格): ");
??? c1 = getchar();??? // 读取第一个字符
??? c2 = getchar();??? // 读取第二个字符(可能是回车、空格或直接输入)
???
??? // 用putchar输出字符
??? printf("用putchar输出字符: ");
??? putchar(c1);
??? putchar(' ');????? // 加空格分隔
??? putchar(c2);
??? putchar('\n');???? // 换行
???
??? // 用printf输出字符
??? printf("用printf输出字符: %c %c\n", c1, c2);
???
??? return 0;
}
(1)变量c1和c2应定义为字符型、整型还是二者皆可?
???????? 答:二者皆可,但推荐字符型(char)。
(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?
???????? 答:必须使用 printf 函数,格式符为 %d。
(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:char c1,c2;与int c1,c2是否无条件等价?
???????? 答:对于简单的字符输入输出,char 和 int 常可互换,但在涉及EOF检测、范围检查、算术运算时,使用 int 更安全。初学者推荐先用 char 学习字符操作,了解原理后再根据需求选择类型。
?

雷达卡


京公网安备 11010802022788号







